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)