Obligatorisk oppgave nr. 2

Hva som skal leveres

Fysisk demonstrasjon for din gruppel?rer av f?lgende:

1) Arduino som styrer lysstyrken i en ekstern LED med seriemotstand. Lysstyrken bestemmes av analog spenningsverdi ut fra en sensor med analog utgangsspenning koblet opp som spenningsdeler. Sensor kan v?re potensiometer, trykksensor, temperatursensor eller annen analog sensor.?

2) M?ling av spenning over ekstern LED og sensor med multimeter.?

3) M?ling av str?m gjennom ekstern LED med multimeter.?

4) Vise hvordan LEDen flimrer n?r man kobler fra sensor og ber?rer den frie inngangsledningen med fingrene (statisk st?y).?

All kode m? lastes opp p? Devilry. Det kan bli etterspurt muntlig forklaring av koden.

Frivillig - nyttig og l?rerikt

Regler for gjennomf?ring av obligatoriske oppgaver

Leveringsfrist

Sikkerhet, regler og ressurser

L?ringsm?l og metode


Oppgave 1

I denne oppgaven kobler vi utgangen av sensoren, her vist for potensiometer, se figur under, til analog inngangspinne A0 p? Arduino. Utgangen er den pinnen som st?r alene p? sin side av potensiometeret. S? kobler vi opp en av de andre pinnene p? potensiometeret til Arduinos 5V pinne, og kobler s? den siste pinnen p? potensiometeret til en av Arduinos GND pinner (alle GND pinnene er koblet sammen p? kretskortet). P? denne m?ten f?r vi en variabel spenningsdeler (potensiometeret) som deler ned 5V spenningen til en analog spenningsverdi som blir inngangsignalet til Arduino.

Potensiometer

S? kobler vi en LED i serie med en motstand mellom pinne nr ~6 p? Arduino og GND (jord/0V). Motstanden er viktig ? bruke da den begrenser str?mmen gjennom LEDen. Du finner riktig verdi p? motstanden ved ? tenke at spenningen over LEDen er 1V n?r det g?r str?m. LEDen er ikke bidireksjonal, og m? kobles med rett pinne mot GND.

S? skriver du kode som f?r LEDen til ? lyse med en (analog) lysstyrke som du kan justere med ? vri p? potensiometeret. Bruk analogWrite() for ? lage en analog verdi ut fra Arduino. NB: ikke alle pinnene p? Arduino fungerer med analogWrite(). De pinnene som fungerer er merket med ~ forran pinnenummeret, og har det vi kaller PWM modus. Pinne ~6 er, for eksempel, grei ? bruke med analogWrite().

Dynamisk omr?de. Merk at maks og min verdier fra analogRead() er forskjellig fra analogWrite(). Tenk over hvordan du kan h?ndtere dette.

Oppgave 2

I denne oppgaven bruker du multimeteret til ? m?le den analoge spenningen over LEDen og potensiometeret, mens du skrur p? potensiometeret (se veiledning).

Oppgave 3

I denne oppgaven bruker du multimeteret til ? m?le str?mmen gjennom LEDen mens du skrur p? potensiometeret.

Oppgave 4

Her skal du koble fra potensiometeret. Ber?r s? den frie inngangsledningen med fingrene og se om det p?virker lyset i LEDen. En inngangspinne som ikke er koblet til noe, kan bli p?virket av statisk elektrisitet og st?y siden Arduinos inngangsimpedans er veldig h?y (mer om dette i analogdelen av kurset).


Frivillig

Visualisere PWM

Arduinos analogWrite() lager ikke et ekte analogt signal, men et h?yfrekvent puls-bredde (PWM) kodet signal som kun er 0V eller 5V. Den gjennomsnittlige spenningsverdien varierer med lengden p? 5V pulsene, se illustrert i figuren under. Pulsene er i virkeligheten s? korte (typisk milli/mikro-sekunder) at man ikke vil oppfatte noe blinking i LEDen, slik at det blir det samme som om man satte p? en ekte analog spenning som kan variene slik som illustrert i figuren.

Bildet kan inneholde: azure, plott, skr?ningen, parallell, font.

N?r man m?ler den "analoge" spenningen med et multimeter, vil ikke multimeteret rekke ? reagere p? pulsene, viser derfor gjennomsnittsverdien. Vi skal n? bruke et oscilloskop til ? se p? disse pulsene. Et oscilloskop er raskt nok til ? f? med seg det som skjer, og vi kan se pulsene p? en skjem. P? labben har vi et frittst?ende oscilloskop som vist under. Hvordan man bruker oscilloskopet er beskrevet i labveiledningen og her kan ogs? gruppel?rer eller foreleser hjelpe til.

Bildet kan inneholde: medisinsk utstyr, duppeditt, elektronikkteknikk, engineering, medisinsk.

I denne oppgaven tar dere bort LEDen og seriemotstanden. S? kobler dere et oscilloskop til den utgangspinnen p? Arduiono som dere kj?rer analogWrite() til. Klypen p? m?leproben m? kobles til GND og kloen lar man ber?re en ledning fra utgangspinnen. N?r dere ser firkantpulsene til PWM signalet kan dere justere analog spenning ut av Arduino med ? skru p? potensiometeret og se hvordan lengden p? pulsene varier. Dette gir da en varierende gjennomsnittsverdi som vi refererer til som en "analog verdi".

For de spesielt interesserte:

Hvis dere vil lage et ekte analogt signal fra PWM signalet, kan dere slik som dere har l?rt i analogdelen av kurset, bruke et lavpass (LP) filter basert p? en seriekobling av en motstand og en kondensator. Hvis dere da m?ler spenningen over kondensatoren med oscilloskopet vil dere se at det firkantede PWM signalet har blitt filtrert til et ekte analogt signal med verdi gitt av gjennomsnittsverdien til PWM signalet. NB: det er vanskelig ? f? oscilloskopet til ? trigge p? et analogt signal som er konstant eller sakte varierende, h?r med gruppel?rer eller foreleser. I figuren under der det vist en simulering av et PWM signal der man ?ker den analoge verdien line?rt. ?verst ser vi PWM signalet, under ser vi signalet etter filterering med et RC filterBildet kan inneholde: rektangel, skr?ningen, font, parallell, diagram.

Bildet kan inneholde: rektangel, font, skr?ningen, plott, parallell.

RGB LED stripe

LED-stripen er veldig enkel ? bruke. Den har 3 tilkoblingsledninger: GND, 5V power, og signal direkte fra Arduino. Stripen har mange LEDs og vil derfor kunne trekken mye mer str?m enn det Arduino er i stand til ? levere. Den er derfor koblet til en separat spenningskilde (er ferdigkoblet). Det eneste dere derfor fysisk trenger ? gj?re er ?:

1) koble GND (sort ledning i figuren) fra stripen til GND p? Arduino,

2) koble signalledningen (gul ledning i figuren) fra stripen til en digital utgangspinne p? Arduino, for eksemplel pinne 6.

P? hver stang er det 2 separate LED-striper med felles forsyningsspenning. I figuren under er det vist hvordan stripene er koblet opp. Merk at 5V power er allerede ferdig koblet til, og det eneste dere skal gj?re er ? koble bl? GND og GUL signal-ledning til Arduino. Dere velger ett av parene for ? styre en av stripene.

N?r dere har koblet til alt, kan dere sp?rre om hvordan man programmerer en slik LED stripe. Stikkord er NeoPixel, evt. WS2812B. Start med ? be om ? f? et enklest mulig eksempel der man bare setter en LED til en fast verdi. Man kan ogs? be om ? ikke f? C++ syntaks slik som :: . N?r dette virker og om dere forst?r koden, kan dere be om ? f? et nytt eksempel der alle LEDene p? stripen blir oppdatert med nye verdier hvert 0.1 sekund med en for-l?kke.

Dere kan installere et bibliotek som heter Adafruit NeoPixel i Arduino Library Manager. Tror ogs? biblioteket FastLED kan brukes, og er i s?fall litt mer avansert (bedre ytelse?). Dere m? s? telle hvor mange leds dere ?nsker ? bruke p? stripen og s? legge det inn i Arduino-programmet. I C bruker man ofte makroer av typen #define slik som vist i eksempelkoden, dette er for ? f? bedre oversikt. ?Husk p? ? legge inn en delay() etter at alle LEDene er frisket opp med kommandoen FastLED.show().

N? er det bare opp til fantasien hva dere kan f? LED stripen til ? vise.

Ved k?: Vi har bare noen f?r LED striper p? deling slik at hvis mange velger denne deloppgaven kan det bli k?. Derfor har jeg laget en simulator som dere kan bruke til ? utvikle lysm?nsteret p? forh?nd. N?r dere er forn?yd kan dere overf?re koden fra Python til Arduino C for ? kj?re m?nsteret p? virkelige LED stripen.

Trykksensor

Trykksensoren fungerer som en variabel motstand der motstanden er en funksjon av hvor hardt vi trykker p? den. Vil man bruke trykksensoren m? den seriekobles med en fast motstand med ca samme verdi som motstanden til trykksensoren n?r den ikke er trykket ned (m?les med multimeter). Dette vil p? samme m?te som et potensiometer, gi en variabel spenningsdeler n?r dette kobles mellom 5V og GND. Her kan man la LED-stripen vise trykket man presser med, eller la trykket p?virke og generere lysm?nstre. Man bruker analogRead() til ? lese trykket.?

Temperatursensor

Temperatursensoren kan sees p? som en variabel motstand med vedi 100Ohm ved romtemperatur. Denne kan kobles opp som en del av en spenningsdeler og produsere en spenning ut som varierer med temperatur. Her kan man la LED-stripen direkte vise temperaturen.

Mikrofon

Mikrofon med innebygd forsterker. Denne gir ut en analog spenning som er proposjonal med lydstyrken i rommet, og kan leses av direkte med analogWrite(). Her kan man la LED-stripen direkte vise lydniv?et i rommet. Er man plaget med mye h?yfrekvent st?y, kan man ta gjennomsnittsm?linger med analogRead()

?

?