CARduino - Werkplan

Werkplan

Voor ons profielwerkstuk hadden we allereerst een microcontroller nodig. Bij ons is dit de Arduino Uno Rev 3 geworden. Je hebt om de Arduino Uno met de computer te verbinden een USB A to B kabel nodig.

Daarnaast hadden we een starter kit besteld met hierin een aantal weerstanden, lampjes, draden, een schakelbord, een servo en verschillende knoppen. Deze waren heel handig voor het tutorial over het programmeren die we gevolgd hebben, maar voor de robot hebben wij de helft niet echt gebruikt.

We hebben een multimeter gekocht om voltages, ampères en weerstanden te kunnen meten. Zo’n multimeter werd aangeraden op het internet, maar we hebben hem uiteindelijk nauwelijks gebruikt.

Bedrading gemonteerd op CarDuino

Als onderstel hebben wij een radiografisch bestuurbaar autootje gebruikt dat verkrijgbaar is bij de Intertoys, omdat dat een goedkopere en uitdagendere variant is op de voorgefabriceerde karretjes die je op het internet kan bestellen.

Verder hebben we een SRF04 ultrasone sensor gebruikt voor het detecteren van obstakels.

Voor stroomtoevoer aan de computer kan men gewoon de USB kabel gebruiken, maar omdat we hem ook los van de computer wilden zien rijden hebben we een universele adapter gekocht en een 9V batterij snap, die ervoor zorgt dat we de Arduino met een batterij van spanning kunnen voorzien.

Ook hebben we wat hout gebruikt als standaard om de sensor op te monteren en deze standaard vervolgens aan de servo te verbinden.

Als laatste hebben we soldeer, tape, schroeven, spijkers en ijzerdraad gebruikt om dingen vast te zetten.

Wat gereedschap betreft hebben we een soldeerbout, een schroevendraaier, een tang, een kniptang, een hamer en een zaag gebruikt.

 

Hieronder een schematische tekening van onze elektrische opstelling:

 

Om een robot gestuurde auto te maken die zelf door een kamer kon rijden en objecten kon ontwijken hadden we eerst een cursus programmeren nodig, want wij zouden deze code zelf gaan schrijven en waren allebei nog beginners op het gebied van programmeren. Dus besloten we als eerst een cursus te doen op het internet om de basis onder de knie te krijgen.

De eerste les ging over de “Blink” (een simpele opstelling waar je de Arduino periodiek een lampje laat aan en uitzetten). Daarna kwamen de velen begrippen die wij bij de theoretische achtergrond hebben uitgelegd. De derde les ging over het maken van schakelingen met het schakelbord en weerstanden. In les vier leerden we alles wat je met ‘Serial’ commando’s (zie theoretische achtergrond) kan doen. Ook schreven we in deze les onze eerste code: “Hello World!”. Deze code doet niets anders dan herhaaldelijk de Arduino op te dragen de woorden “Hello World” naar de computer te sturen. Verder leer je in deze les om van je Arduino een rekenmachine te maken en kun je de Arduino de stelling van Pythagoras laten gebruiken. 

Hierna, nog steeds in dezelfde les, ga je rekenen met geheugen, oftewel met kilobytes, megabytes, gigabytes en gewoon bytes (zie bijlage). 

De laatste les ben je bezig met schakelaars en knopjes. 

 

Hierna leerden we met het if statement werken en gingen hier diep op in, omdat het if statement een van je belangrijkste commando’s is bij het programmeren. Hierna was de cursus voorbij en hadden we voldoende kennis van het programmeren om zelf onze robot van code te kunnen voorzien. 

 

Toen begon de ideeënfase voor het bouwen. De servo was er al dus eerst leerden we met deze te werken. Daarnaast waren we bezig met ideeën voor het onderstel. Een onderstel kopen was te duur dus toen kwam het op onze doe het zelf vaardigheden aan. Later kwamen we erachter dat het slimmer was om gewoon een radiografisch bestuurbare auto om te bouwen, dus vonden we een oud exemplaar dat niet meer zo goed werkte en gingen hiermee experimenteren. We schroefden het autootje uit elkaar en met een zelfgemaakte accu gingen we spanning op verschillende plaatsen van de printplaat zetten, op zoek naar de knopjes die voor de besturing zorgen.  

Printplaat 'knopjes'

 Nadat we hier bezig mee waren geweest, gingen we aan de slag met een nog wel werkende auto. Hier maakten we echter de fout om de printplaat eruit te halen en daar kwam nog bovenop dat hij niet goed stuurde.

 

Gekozen RF auto

We moesten dus op zoek naar een ander onderstel. We besloten meer onderzoek te doen en toen vonden we de site matsimitsu.com (volledige link staat in de bronnen) waar een bepaald type radiografisch bestuurbare auto werd aangeraden. Uiteindelijk hebben we inderdaad zo’n autootje gebruikt.

 

Hierna hadden we geregeld dat we bij het bedrijf Voltium mochten werken aan een van hun werkbanken en gebruik mochten maken van hun gereedschap en kennis. De eerste dag dat we hier waren hebben we vooral gesoldeerd aan de printplaat van de auto en hebben we de auto aangepast door er stukken vanaf te schroeven en weg te zagen.

 

De tweede keer dat we er kwamen was het om kapotte draden te repareren en hebben we de auto weer in elkaar gezet met de printplaat in een andere positie en deze goed vastgezet met tape. Ook hebben we toen het schakelbord achterop vastgezet. Bij Voltium hebben we ook advies gekregen over de keuze van een sensor. Ze zeiden dat het aan te raden was een ultrasone sensor of een infrarood sensor te nemen. Uiteindelijk hebben we gekozen voor de ultrasone sensor omdat deze makkelijker verkrijgbaar was en we aantal modellen wisten die zeker zouden werken met de Arduino. We hebben uiteindelijk een SRF04 sensor besteld.

 

Toen hebben we een thuisklusdag ingelast. We hebben allerlei houders gezaagd voor de sensor en verschillende stellages om de houder met de servo te verbinden. Het uiteindelijke resultaat is redelijk simpel maar wel effectief en sterk. Ook hebben we toen de servo op de auto gemonteerd en bepaalde stukken van de auto opnieuw vastgezet. 

 Sensormontage op autoSensorhouderSensor vooraanzicht

Hierna zijn we nog een laatste keer bij Voltium geweest om twee zelfgemaakte accu’s van 6V te maken. Ook hebben we hier nog een laatste reparatie gedaan omdat een draadje van de printplaat was afgebroken. Dit was echter makkelijk te verhelpen.

Later ’s avonds braken nog 2 draden af, maar in plaats van een ramp bleek dit eerder een redding, we hadden namelijk de eerste keer een draad op een verkeerde knop van de printplaat gesoldeerd. Voltium was helaas al dicht dus hebben we thuis ’s avonds het nog even gesoldeerd met eigen soldeerbout. 

 

De dag hierna was de grote programmeerdag. Op internet hadden we een library gevonden voor de sensor en nadat we de sensor getest hadden, moesten we code gaan samenvoegen. Eerst schreven we in aparte programma’s losse stukken en testten deze, daarna voegden we ze toe aan de grote code. Dus eerst programmeerden we de sensor los, daarna voegde we deze code samen met servo code. Daarna voegde we dit weer aan iets groters toe en zo door totdat de code af was.

 

Het schrijven van de code die dient voor de besturing van de wielen was niet zo moeilijk: dat is bijna geheel te doen met digitalWrite, waarmee we 5 Volt op het corresponderende knopje zetten. Het moeilijkste is alles op elkaar laten inspelen. 

 

Aan het eind van de dag was de code af, maar hij werkte niet. Hoe hard we die avond ook zochten, de fout konden we niet ontdekken. Ook de volgende ochtend lukte het ons niet direct de fout op te sporen. Net voordat we hulp wilden gaan vragen op een forum, bleek dat we vergeten waren ergens dubbele haken achter te zetten. Dit soort fouten horen door een correctie programma gemarkeerd te worden, maar door onbekende redenen bleef ook deze fout verborgen voor de ‘compiler’. Nadat we deze haken hadden toegevoegd hebben we het nog een keer getest, en toen bleek de code te werken. 

 

Toen hebben we de Arduino vast gezet met ijzerdraad, er een 9V batterij aan gekoppeld en laten rijden. De rest van de dag zijn we bezig geweest met testen en finetunen op het gebied van afstandsdetectie en remtijd. Dit hebben we gedaan aan de hand van ‘trial and error’. We lieten de Arduino door de kamer rijden en als een probleem zich voordeed (klemrijden e.d.), losten we dit op door de code aan te passen.  Ook het patroon voor de bocht nemen is meerdere malen aangepast en uiteindelijk reed de Arduino feilloos door de kamer.

Uiteindelijke programmacodeUiteindelijke programmacodeUiteindelijke programmacode