Arduino eind concept Uitleg over werking en concept Andrew Lau 0836622
Analyseren Arduino Tijdens de eerste les maakte we een beetje kennis met de arduino. Op internet zag ik snel dat er oneindige mogelijkheden zijn. Maar komt omdat de arduino gewoon een mini computer is. Net als iedere computer moet het een processor hebben geheugen. Een microcontroller is een processor met een ingebouwde RAM,ROM. Dus alle rekenwerk word gewoon gedaan met 1 onderdeel. De specs van de arduino uno heb ik kunnen vinden op http://www.seeedstudio.com/wiki/arduino_uno Features ATmega328 microcontroller Input voltage - 7-12V 14 Digital I/O Pins (6 PWM outputs) 6 Analog Inputs 32k Flash Memory 16Mhz Clock Speed De microcontroller is eigenlijk alleen dit blokje. Al het andere zijn de output/input poorten. (vergelijkbaar met het brein)
Baseshield V2 Alle informatie wat ik nodig had over de baseshield stond op de website van seedstudio.com/wiki. De baseshield is een extensie voor de arduino om de poorten makkelijker te laten bevestigen aan de microcontroller zonder te hoeven solderen. Hierdoor heb ik de poorten leren onderscheiden en weet ik waar ik wat waar kan inpluggen. Analoge ports zijn bedoelt voor analoge metingen zoals, een thermo meter. Iets wat niet alleen bestaat uit aan of uit maar meerdere waardes heeft. Digital ports zijn voor digitale signalen. Meestal staat dit voor iets aan of uit zetten. Een aan/uit schakelaar plug je daar dus in. I2C ports zijn bedoelt voor het aansturen van andere aparaten. (bijvoorbeeld: het koppelen aan anderen arduino systemen wanneer je niet genoeg poorten over hebt.) Je hebt hier altijd te maken met een Master en een Slave. De Master zend zijn signalen uit aan de slave, Slave vangt het op en reageert erop. Uart port is voor het communiceren met anderen apparaten. Je kan hier denken aan een andere soort computer. Je USB poort is ook een soort UART. UART is een afkorting van universal asynchronous receiver/transmitter Specification Name Qty Analog port A0,A1,A2,A3 4 Digital port D2,D3,D4,D5,D6,D7,D8 7 UART port UART 1 I2C port I2C 4
Grove starters kit plus In dit pakketje zijn er verschillende sensoren en actuatoren die aan de baseshield gekoppelt kan worden met een simpel pluggetje. De positionering van de onderdelen in op het baseshield is te bepalen als je weet wat je precies wilt hebben. Hiervoor heb ik uitgelegd wat het verschil was in de poorten van arduino. De starterskit bestond uit: - Rotary angle sensor - Buzzer - Led socket Kit - Sound Sensor - Light Sensor - Touch (schakelaar) - Temperature sensor - Relay - Grove-LCD RGB Backlight V2.0 - Baseshield V2 - Wat kabeltjes
Tutorials In de grove starterskit is er een blaadje met uitleg over ieder onderdeel. Ook staan er links in met al geprogrammeerde codes zodat je je sensor/actuator kan uittesten.
Tutorial Lampje laten branden Mijn eerste tutorial die ik volgde was het laten branden van een lampje wat al op de arduino zit. Hiervoor heb ik een tutorial gekeken op youtube van Jeremy Blum. Ik heb zijn instructies gevolgd en het lukte mij om het lampje te laten branden.
Ontwerpen Het concept was eigenlijk in een middag tijd bedacht. We moesten tijdens de les vertellen waaraan we gingen werken. In zo een korte tijd is altijd erg moeilijk om een goed product idee te krijgen. Maar ik was er van overtuigd dat dit niet het belangrijkste was in dit project. Concept: Een indicatiemiddel waardoor kinderen die niet kunnen klokkijken toch weten dat de bedoeling is dat ze in bed moeten blijven liggen in de ochtend. Mijn idee was dus om een bewegend poppetje te gebruiken wat aangedreven wordt door de servo. Een klok wordt laten zien op de LCD schermpje zodat ze meteen klok leren kijken.
Schematisch tekening
Programmeren vanuit flowchart Er zijn verschillende dingen die in het model moeten gebeuren. LCDKlok Servo Knopje - Klok moet door blijven tikken - LCD moet tijd laten zien - Klok moet instelbaar zijn via knopje - Servo moet bewegen op bepaalde tijdstip - Servor moet bewegen op bepaalde hoek - Klok moet instelbaar zijn via knopje Voordat ik hier aan de slag kan gaan om het uiteindelijke principe te programmeren moet ik eerst de tutorials langsgaan van elk onderdeel die ik wil U Bij het maken van mijn flowchart had ik eerst subfuncties (plaatje boven) opgeschreven en later is het samengevoegd tot een complete flowchart(plaatje beneden)
Experiment knopje met LCD (http://www.instructables.com/id/grove-lucky-dumpling/) Code voor deze tutorial http://www.instructables.com/files/orig/fhh/f89y/hsl29fqg/fhhf89yhsl29fqg.ino) Hierbij heb ik weer code laten importeren van de website. Ik kwam hier wel wat problemen tegen en heb hierbij wat hulp gekregen van klasgenoten. Ze hebben wat aan mijn code verandert,omdat er wat fouten in zaten. Tijdens het controleren ben ik achtergekomen wat bepaalde symbolen in het programeren betekende. Uiteindelijk kwam er geen error tijdens het verifieren. Maar liet mijn LCD niks zien. Telkens als ik op mijn knopje drukte kreeg ik alleen een kleur op mijn scherm i.p.v. wat tekst. Na een uur lang prutsen en denken was het uiteindelijk gelukt. Mijn arduinobord stond niet op 5 volt ingesteld en had dus niet genoeg spanning om het tekste te laten zien. Door alleen aan de schakelaar op 5 volt te zetten was het opgelost.
Experiment Servo (http://arduino.cc/en/reference/servowrite) Op de Arduinowebsite kon ik de write code van de servo opzoeken. Dit is een basis code om te laten zien hoe je de servo op een bepaalde hoek kan zetten van 0 tot 179 graden. #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); myservo.write(90); // set servo to mid-point } void loop() {}
Definitief Concept vanuit de flowchart Onderdelen Code - Arduino met baseshield - LCD RGB Backlight V2.0 I2C port - Servo D4 port - Button D2 port #include <Servo.h> Servo myservo; rgb_lcd lcd; const int colorr = 0; //kleur van scherm word hier bepaald, je kan hier vrij mee spelen const int colorg = 0; const int colorb = 255; const int buttonpin = 2;//Port van button int Hours = 0; //in dit gehele deel kan je de uren minuten en sec bepalen zodra je de code importeert int Minutes = 0; int MinVar = 0; int OpenHours = 0; int OpenMinutes = 0; int PBCounter = 0;
int ButtonState = 0; int LastButtonState = 0; void setup() { lcd.begin(16, 2); } lcd.setrgb(colorr, colorg, colorb); pinmode(buttonpin, INPUT); Serial.begin(9600); myservo.attach(4); //Port van servo myservo.write(1);//start positie van servo void loop() { ButtonState = digitalread(buttonpin);//hieronder zie je hoe de buttonwerkt if (ButtonState!= LastButtonState) { if (ButtonState == HIGH) { PBCounter++; }} delay(100);
int Seconds = (millis()/1000-(60*minvar));//de teller wat de klok maakt if(seconds >= 60) { Minutes++; MinVar++; } int MinutesTotal = (Minutes + PBCounter); if(minutestotal >= 60) { Hours++; Minutes = 0; PBCounter = 0; } if(hours >= 24) { Hours = 0; } lcd.setcursor(0, 0); //Dit gehele part is ervoor te zorgen dat de tekst op de LCD scherm op komt) lcd.print("time: "); if (Hours <= 9) { lcd.print("0"); } lcd.print(hours); lcd.print(":"); if(minutestotal <=9) { lcd.print("0"); } lcd.print(minutestotal);
lcd.print(" : "); if(seconds <= 9) { lcd.print("0"); } lcd.print(seconds); if (Seconds <=30) {myservo.write (179);} //Hier kan ik invullen op welke tijden de servo moet flippen if (Seconds >30) {myservo.write (1);}// Hier staat de tijdstip op wanneer de servo terug moet flippen } Eindresultaat Code is zo geschreven dat de servo om de 30 secondes gaat flippen. Om te laten zien dat mijn code werkt en dat er dan op mijn concept gaat om andere tijden. Maar in mijn model zitten nog mankementen. Mijn klok reset heel de tijd en dit ligt aan mijn arduino wat een beetje kapot is. Want code doet het fijn bij anderen. Ook zijn er problemen met de servo. Mijn servo heeft eent tijdje gewerkt en werd heel erg warm, totdat hij niks meer deed. Zelf weet ik de oorzaak niet van mijn arduino wat heel de tijd reset, ook weet ik niet hoe mijn servo oververhit kan raken.
Regie -Ontwerpen testen Zo n proces heb ik vaker moeten doorlopen. Al zijn er geen echte waarnemingen van,omdat ik bij een foutmelding niet opkomt om een foto te maken. Op dat moment zit er alleen nog in mijn hoofd om het op te lossen. Maar de problemen die ik vaak had was dat ik bepaalde symbolen zijn vergeten in de codes. Bijvoorbeeld de {} of dat bepaalde dingen zijn meegenomen in de commentaar //. In het begin kwam ik ook problemen tegen,omdat ik mijn library niet in orde had. Mijn lcd experiment werkte daardoor niet. Ik miste mijn rgb_lcd.h bestand. Uiteindelijk kwam ik daar achter via het blad van de starterskit(hiermee ook anderen geholpen). Ik kreeg geen foutmelding, maar ik kreeg niks op mijn schermpje. Ik had toen hulp gekregen van verschillende klasgenoten, maar het lukte ze ook niet om mijn scherm goed te krijgen. Uiteindelijk is het goed gekomen en lag het probleem niet in de programmeercode. Het lag aan de voltage van het bord wat niet ingesteld was op vijf volt. Tijdens het werken aan mijn eindconcept kwam ik weer in de problemen. Ik moest een klok programmeren maar ik wilde het doen zonder een extra onderdeel te kopen. Je hebt namelijk klokonderdeeltjes. Maar omdat, de arduino werkt met een microcontroller moet het ook kunnen tellen. Dennis had mij daarbij geholpen met de code van de klok.