Ravi Ramcharan Arduino PRO61 0861038 Smart leeslampje
Contents 1 Kennismaking Arduino... 3 2 Idee: Leeslamp!... 4 3 Basis oefeningen... 6 4 Blokkenschema... 9 5 Hij doet het!... 10 6 Belangrijk: Arduino Ports... 11 7 De Arduino Code uitgelegd... 12 8 Ruimte voor verbetering... 14 9 Lasersnijden!... 17 10 Flowcharts!... 19 10.1 1. Buzzer.... 19 10.2 2. LED-Lampje.... 19 10.3 3. Volledig Systeem.... 19 11 Eindproduct!... 20
1 Kennismaking Arduino Hallo! Deze week heb ik kennisgemaakt met Arduino op school. Omdat dit een vak op school is heb ik hiervoor een starterskit van Grove gekocht. Deze starterskit bestond uit meerdere componenten met een Arduino Uno en een baseshield. Ik heb eerder met een Arduino gewerkt tijdens de keuzevak 'Fablab'. Hier heb ik een alarm gemaakt, waarbij je een opdrachtje moest uitvoeren om deze alarm uit te krijgen. Zo zou men gegarandeerd wakker worden. Tijdens de kennismaking op school heb ik gewerkt aan het laten branden van een LED-lampje, een temperatuursensor en heb ik gewerkt met een buzzer. Dit waren kant en klare tutorials die te vinden waren op de modulepagina van de HRO.
2 Idee: Leeslamp! Voor de eindopdracht heb ik in de ochtend op school een korte brainstorm gedaan met klasgenoten. Ik had van te voren nog geen concrete ideeën staan waar ik graag aan wilde werken voor mij eindopdracht. Uiteindelijk ben ik gekomen op het idee om een leeslamp/kamerlamp te maken die een melding geeft en aangaat wanneer het donker wordt. Wanneer het weer lichter wordt, wordt er een melding gegeven en gaat het lampje uit. Hieronder leg ik aan de hand van een pseudocode uit hoe deze lamp werkt. 1. Het is licht en het lampje staat nog uit. 2. Zodra het donker wordt vangt de ingebouwde lichtsensor dit op en wordt er een actie uitgevoerd. 3. De piezo speaker krijgt een 'hoog' signaal binnen, waarna deze een 3-tal tonen vrijgeeft. 4. Het LED-lampje krijgt vervolgens een 'hoog' signaal en gaat branden. 5. Zodra het weer licht wordt, vangt de lichtsensor dit natuurlijk weer op en krijgen de piezo speaker en het LED-lampje een 'laag' signaal, waarna deze beiden uitgaan. PvE: - Het lampje gaat pas branden als de thresholdvalue van de lichtsensor is bereikt. - De buzzer geeft maar 3 piepjes en stopt daarna vanzelf. Door een delay te geven tussen de piepjes kan dit in de loop worden geplaatst. - Zodra de waarde onder de thresholdvalue is, gaat het lampje uit en de buzzer uit. - Het lampje blijft aan, zolang de thresholdvalue gelijk is aan de opgegeven waarde.
Could: - Het lampje fade bij verschillende lichtintensiteiten. - Er is een buzzer, waarmee je het hele systeem kunt bedienen. Inventarisatie van componenten: 1. Lichtsensor 2. Buzzer v1.1b 3. LED-Lampje Hierbij komt er ook nog een behuizing voor de lamp bijkijken.
3 Basis oefeningen Hieronder vind je een paar van de tutorials die ik met Arduino heb gedaan in mijn eerste week. Hiervoor heb ik gebruik gemaakt van de tutorials van Grove en de sketchbook/libraries die ik in Arduino heb geïmporteerd. Deze zijn te vinden op de pagina 'Bronnenlijst'. 2.LCD Dit is de tutorial van ''Hello World''. Hier heb ik geleerd de LCD aan te sluiten. Dit gebeurt op de poort I2C. De reden dat dit gebeurt op deze poort is omdat het anders op 6 pinnen moet worden aangesloten en dit is niet mogelijk de de baseshield van Grove, vandaar de I2C. De tekst kan worden aangepast, eveneens als de RGB kleur van de LCD. 2. Temperatuur sensor De temperatuur sensor is aangesloten op de analoge poort, vanwege de input. Deze is variabel en ligt aan de temperatuur die wordt opgemeten. Ik heb serial monitor opgestart om de temperatuur te weergeven.
Faded LED Dit zou ik eventueel kunnen gebruiken in mijn Smart leeslampje. Ik zou de intensiteit van het LED-Lampje kunnen varieren bij verschillende thresholdvalues. Het faden komt doordat er een delay tussen ''0'' en ''1'' zit. Buzzer De buzzer ben ik van plan te gebruiken in mijn eindopdracht. Hier wil ik de buzzer 3 keer laten overgaan wanneer de thresholdvalue van 400 wordt bereikt. Er zou gebruik kunnen worden gemaakt van verschillende frequenties, delays en poorten. Tijdens deze tutorial heb ik gewerkt om verschillende deuntjes te maken. Sound sensor met LED
Zodra de thresholdvalue van 75 wordt bereikt gaat het LED lampje aan. Dit zou ik kunnen gebruiken voor mijn eindopdracht. Het LED lampje reageert in dit geval alleen niet op geluid, maar op licht. Dus ik zal er een lichtsensor tussen moeten plaatsen.
4 Blokkenschema Vandaag heb ik een blokkenschema gemaakt om mijn idee van het leeslampje duidelijk op papier te krijgen. Zo krijg ik voor mijzelf ook een beter beeld wat er moet m.b.t. de Arduino Uno. Het resultaat is hieronder te zien. Dit schema heb ik gemaakt op draw.io
5 Hij doet het! http://www.youtube.com/watch?v=ds0-8x9i7hk
6 Belangrijk: Arduino Ports De digitale poorten, D2 tot D8, zijn poorten die een actuator ''Hoog" of "Laag"kunnen weergeven. Tussen deze poorten zitten ook PWM's. Dit zijn bijvoorbeeld de poorten 3,5 en 6. Deze poorten worden gebruikt voor een analoge output. Dat wil zeggen bij het het faden van een LED-lampje of bij een servo. De I2C poorten, worden gebruikt voor bijvoorbeeld een LCD scherm. Voor deze poort worden meestal 6 uitgangen gebruikt. Dankzij SDA en SCL is één normale I2C poort voldoende. De analoge poorten, A0 tot A3, worden gebruikt voor zoals het al zegt analoge uitgangen. Dit zijn meestal sensoren zoals een lichtsensor of geluidssensor. Deze informatie heb ik gewonnen van Grove en Arduino.
7 De Arduino Code uitgelegd Hieronder leg ik de code die ik gebruik voor mijn smart leeslampje uit. Aan de hand van mijn blokkenschema heb ik voor mijzelf duidelijk gekregen wat mijn Arduino moest doen. const int pinlight = A0; const int pinled = 7; int buzzer = 3; int teller = 0; int thresholdvalue = 400; //the threshold to turn on or off the LED void beep(unsigned char delayms) digitalwrite(buzzer, HIGH); delay(delayms); // wait for a delayms ms digitalwrite(buzzer, LOW); delay(delayms); // wait for a delayms ms In het gedeelte hierboven heb ik mijn componenten gedefinieerd. Hier heb ik elk component een aansluiting toegewezen. De threshold value geeft aan bij welke waarde er een actie moet worden ondernomen. De teller begint in dit geval op 0 voor de buzzer, welke uiteindelijk 3 tellen nodig heeft. De ''void beep'' geeft aan hoe de sound wordt gedefinieerd. void setup() pinmode(pinled, OUTPUT); //set the LED on Digital 12 as an OUTPUT pinmode(buzzer, OUTPUT); //beep(500); In de setup heb ik de LED als output weergegeven, evenals de buzzzer. void loop() int sensorvalue = analogread(pinlight); //the light sensor is attached to analog 0
if (sensorvalue < thresholdvalue) while (teller < 3) // tone( 3, 1000, 400); digitalwrite(pinled, HIGH); delay(500); teller++; else digitalwrite(pinled, LOW); teller = 0; In de loop heb ik de vergelijking gemaakt dat het analoge signaal van de lichtsensor gelijkstaat aan de sensor value. Deze wordt telkens vergeleken met de tresholdvalue. Zodra deze onder de treshold zit, wordt er een actie ondernomen. De teller gaat 3 keer buzzeren en het LED-lampje gaat aan, met een delay van 500 ms. Indien er niet wordt voldaan aan de ''if'' van de tresholdvalue, blijft het LED-lampje uit en de teller op 0. Ik heb hierbij hulp gehad van Damir, die mij heeft geholpen om de buzzer maar 3 buzzertjes te laten geven in de loop. Hier hebben we gebruik gemaakt van het documentje dat staat op de Arduino website. De functies die ik hier heb toegepast hadden vooral te maken met de flow control. Ik ben hier aan de slag gegaan met de functies ''if'', ''for'', ''while'' en ''do...while''.
8 Ruimte voor verbetering Ik heb nu een sensor en een twee actuatoren in combinatie met elkaar gebruikt die tevens ook afhankelijk van elkaar zijn (thresholdvalue). Wanneer het donker wordt, gaat de buzzer aan en geeft het LED-lampje licht. Een aantal verbeteringen voor deze smart-lampje zouden kunnen zijn: Een button, waar je het systeem aan en uit mee kunt zetten. Bij verschillende thresholdvalues werken met een andere intensiteit van het LEDlampje. Dus wanneer het op zijn donkerst is, brandt het lampje het felst. Ik heb gewerkt aan de verschillende thresholdvalues, maar door tijdgebrek heb ik besloten om hier nu niet mee verder te gaan. Hier heb ik met Damir aan gewerkt. Ik heb voor deze code, gekeken naar de code van J. Ketting. Hier heb ik naar gekeken omdat hij zijn LED'jes met verschillende fades had staan in zijn code. Voor deze fades, heeft hij PWM poorten gebruikt. Deze poorten laten het toe om bijvoorbeeld LED-jes te laten faden. De code volgt hieronder: const int pinlight = A0; const int pinled = 5; int buzzer = 3; int teller = 0; int thresholdvalue = 400; //the threshold to turn on or off the LED void setup() pinmode(pinled, OUTPUT); //set the LED on Digital 12 as an OUTPUT pinmode(buzzer, OUTPUT); Serial.begin(9600); //beep(500); void loop() int sensorvalue = analogread(pinlight); //the light sensor is attached to analog 0 Serial.write(analogRead(pinLight)); if (sensorvalue < 83)
sound(); Serial.write("TEST!"); for (int i = 0; i < 256; i++) analogwrite(pinled, i); //delay(1); for (int i = 254; i >= 0; i-- ) analogwrite(pinled, i); delay(1); else if (sensorvalue < 166) for (int i = 0; i < 256; i++) analogwrite(pinled, i); //delay(1); for (int i = 254; i >= 0; i-- ) analogwrite(pinled, i); delay(1000); sound(); else digitalwrite(pinled, LOW);
teller = 0; void sound() while (teller < 3) tone( buzzer, 1000, 400); delay(500); teller++; void beep(unsigned char delayms) digitalwrite(buzzer, HIGH); delay(delayms); // wait for a delayms ms digitalwrite(buzzer, LOW); delay(delayms); // wait for a delayms ms
9 Lasersnijden! Voor de behuizing van mijn smart lampje heb ik gekozen om te gaan lasersnijden. Hier wil ik een behuizing maken voor mijn Arduino en alle componenten die ik gebruik. De lichtsensor moet naar buiten gericht zijn, omdat hij het licht moet meten. Het LED-lampje krijgt een eigen statief, ook gemaakt met lasersnijden. Voor het lasersnijden heb ik gebruik gemaakt van makercase.com. Hier is het mogelijk om de maten van het doosje op te geven. Er moet wel rekening worden gehouden met de materiaaldikte, omdat anders de edge joints andere maten krijgen. Ik heb gekozen voor de optie Finger. Voor het stadslab zijn een aantal voorwaarden gebonden aan het lasersnijden. Namelijk dat de lijndiktes die worden gebruikt 0,01 mm zijn, en dat er de RGB kleur 255,0,0 wordt gebruikt. Het bestand van Makercase had een extensie van.svg. Dit moet worden geïmporteerd in Illustrator om deze vervolgens in Trotec, de lasersnijdsoftware te laden.
Zoals je kan zien heb ik het LED-lampje gesoldeerd, om deze langer te maken. Het statief van het LED-lampje wordt bovenin gemonteerd.
10 Flowcharts! 10.1 1. Buzzer. 10.2 2. LED-Lampje. 10.3 3. Volledig Systeem.
11 Eindproduct! Op bovenstaande afbeelding kan je zien hoe het smart leeslampje eruitziet wanneer deze volledig in elkaar is gezet. De volledige code is uitgelegd in het kopje 'Arduino code uitgelegd'. Hier zie je tevens ook commentaar op de code en wordt het uitgelegd. Het systeem bevat een sensor en 2 actuatoren die op elkaar inspelen. Dit zijn allen componenten van de Grove starterskit. Ik ben op dit idee gekomen door te brainstormen in week 2 met Maud Pijnenburg. Voor de code heb ik op sommige momenten de hulp ingeschakeld van Damir Cuturic. Ik heb ruimte voor verbeteringen aangegeven, waar ik nog een button/fade in het led lampje in zou kunnen toepassen. Dit zou dan op een PWM poort moeten gebeuren. Het voordeel hiervan is dat je hiermee analoge waardes kunt toekennen. Het nadeel van het aansluiten op een niet PWM poort is dat dit een waarde heeft, en je hier dus niks aan kunt veranderen. http://www.youtube.com/watch?v=csgmj5ijpee