Obligatorisk oppgave nr.5
DEL I - Servo-motor
Oppgave 1
I denne oppgaven skal dere lage et enkelt instrument som viser lysstyrke. Instrumentet bruker input fra en phototransistor for ? m?le lysstyrken og en servo som indikerer lysstyrken for brukeren. M?let med oppgaven er at dere skal ha pr?vd og styre en servo ved hjelp av innebygde biblioteker, som en forberedelse p? oblig 6 hvor dere skal bygge en egen servo.
Dere skal bruke f?lgende komponenter:
Komponent | Benevnelse |
---|---|
Servo | S1 |
Phototransistor | Q1 |
Kondensator 100uF | C1 |
Motstand 10kOhm | R1 |
- Koble opp servoen etter koblingskjemaet.
- Skriv en enkel kode som styrer servoen etter phototransistoren.
Biblioteket
<Servo.h>
har det du trenger for ? kontrollere servoen.
Hint: analogRead()
tar inn verdier fra 0 til
1023, men servoen har virkeomr?de fra \(0^\circ\) til \(180^\circ\).
Ta bilde av oppsettet med postitlapp eller lignende, med dato og
brukernavn. Lim inn bildet i oblig5_<brukernavn>.pdf
.
Koden leveres i egen fil som
oblig5_1_<brukernavn>.ino
.
DEL II - I2C bus kommunikasjon mellom tre arduinoer
Oppgave 2
Merk: denne oppgaven krever at dere jobber sammen i en gruppe p? tre. Om det blir vanskelig ? finne partner, ta kontakt med gruppel?rer. Skriv inn brukernavnet p? medstudentene du har jobbet sammen med i oppgaveteksten. Legg ogs? til f?lgende i arduinoprogrammet:
/**
* Oblig 5 oppgave 2
* Samarbeid mellom: <brukernavn1> <brukernavn2> <brukernavn3>
*/
Erstatt <brukernavnN>
med egne brukernavn.
Komponent | Benevnelse |
---|---|
Analog Discovery 2 | OSC1 |
Koble opp de tre arduinoene ved ? koble A5
til
A5
, A4
og A4
, og gnd
til gnd
mellom hverandre. A5
og
A4
tilsvarer scl
og sda
av I2C
bussen for en Arduino UNO R3 som vist her. Det anbefales ? bruke br?dbrettet
slik at det er lettere ? koble kretsen til oscilloskopet. Merk at hver
arduino skal drives av en separat USB-kabel. Legg ogs? merke til at
pull-up-motstander for SCL- og SDA-linjene er innebygd i ATmega328P.
Ta bilde av oppsettet med postitlapp eller lignende, med dato og
brukernavn. Lim inn bildet i
oblig5_<brukernavn>.pdf
.
For ? skrive til og lese av registerne p? arduinoer bruker vi det
innebygd biblioteket Wire.h
. Dette inneholder noen
funksjoner som skriver og leser av registerene. Se mer i Arduinos
dokumentasjon.
Bruk Arduino-programmet du lagde i oblig 1 oppgave 3 for ? sende museklikk-inndata fra Processing-programmet som et heltall til to spesifiserte registerene med I2C ved ? bruke
Wire.h
-biblioteket (i stedet for ? blinke en LED). Heltallet skal sendes til hvert register p? en vekslende m?te. For eksempel, hvis registeradressene var 1 og 2, skal det f?rste museklikket sende heltallet til adresse 1, det andre klikket til adresse 2, det tredje klikket til adresse 1, og s? videre. Arduinoen som dette programmet kj?res p? blir referert til som masteren.Bruk Arduino-programmet du lagde i oblig 1 oppgave 3 for ? lese heltallet fra en av de spesifiserte registerene for ? bytte tilstanden til den innebygde LED-en. Arduinoene som dette programmet kj?res p? blir referert til som slavene. (Hint: Bruk av
Wire.onReceive(handler)
-funksjonen vil sikre athandler
-funksjonen kalles n?r overf?ringen mottas.)Gjenta det siste trinnet for den gjenv?rende Arduinoen ved ? bruke det andre spesifiserte registeret. Merk at siden hver slave Arduino leser fra et annet register, b?r de to programmene som kj?res p? hver slave Arduino v?re identiske bortsett fra linjen der registeret er spesifisert.
Oppsummering:
- Last opp det f?rste programmet til masteren
- Last opp det andre paret med programmer til slavene
- Koble USB-kabelene til alle Arduinoene, og kj?r Processing-koden gitt i oblig 1 oppgave 3
Den resulterende oppf?rselen b?r v?re som f?lger:
f?rste klikk: LED for Slave 1 sl?s p?
andre klikk: LED for Slave 2 sl?s p?
tredje klikk: LED for Slave 1 sl?s av
fjerde klikk: LED for Slave 2 sl?s av
...
Merk at noen ganger kan adferden se annerledes ut. Det kan skyldes at behandlingskoden registrerer to museklikk i stedet for ett, og kan identifiseres ved ? analysere signalene, som forklart nedenfor:
- Bruk jumper kabler og koble hver av de to I2C-linjene til en digital IO-pinne p?
oscilloskopet, samt
gnd
av Arduinoen tilgnd
av oscilloskopet. - Naviger til Protocol
Analyzer, klikk p? I2C-fanen, still inn de tilsvarende digitale
IO-pinnene, og les de innkommende dataene mens du f?r LED-ene til ?
blinke ved ? klikke p?
Receive
.
Ta et skjermbilde av dataen (noen f? linjer er nok) og lim inn i besvarelsen.
Innlevering:
- Arduinokodene for oppgave 1 skal leveres i egen fil som
oblig5_1_<brukernavn>.ino
. - Arduinokodene for oppgave 2 skal leveres som tre filer p? formen
oblig5_i2cmaster_<brukernavn>.ino
,oblig5_i2cslave1_<brukernavn>.ino
ogoblig5_i2cslave2_<brukernavn>.ino
. - Besvarelse for oppgave 1 og 2 skal leveres som en PDF format med
formen
oblig5_<brukernavn>.pdf
.
Generelle krav til innlevering
- Sett dere inn i sikkerhetsrutiner for lab.
- IFIs retningslinjer for obligatoriske oppgaver finner dere her.
- Oppgavene skal l?ses individuelt med mindre annet er oppgitt i oppgaveteksten.
- Besvarelsene leveres i f?lgende format i Canvas:
- Tekstlig besvarelse skal leveres PDF format p?
formen
oblig<nummer>_<brukernavn>.pdf
. (Se v?r LaTeX-mal) - Arduinokode skal leveres p? formen
<filnavn>.ino
. - Processingkode skal leveres p? formen
<filnavn>.pde
. - Matlabkode skal leveres p? formen
<filnavn>.m
. - Pythonkode skal leveres p? formen
<filnavn>.py
.
- Tekstlig besvarelse skal leveres PDF format p?
formen
- Plott m? inkludere tittel og benevnelser p? aksene. Man m? ogs? oppgi m?leenhet i parentes hvis man plotter en fysisk st?rrelse (se eksempel i malene: Plotting i Python og Plotting i Matlab)
- Plotter dere flere kurver i samme plott m? dere spesifisere kurvene med “legend” (se eksempel i malene)