Op deze pagina leggen we uit hoe je stap voor stap een linefollower bouwt.
We leggen enkel de grote lijnen uit want elk wagentje heeft zijn eigen 'problemen'. Je kan zo goed je best doen om dezelfde na te maken maar toch zullen er onderdelen veranderen waardoor de details anders zullen zijn en zo onze gespecificeerde nutteloos zal zijn.
Op het einde van dit bericht hebben we een onderdeel met moeilijkheden die we ondervonden hebben tijdens het project. Als je zelf een probleem hebt kan je daar hetzelfde probleem zoeken en misschien een oplossing vinden.
1) Keuze onderdelen
Eerst moet je de onderdelen kiezen die je gaat gebruiken tijdens je project. Aangezien alles zo goed ogelijk met elkaar moet communiceren is het belangrijk dat je alles met elkaar vergelijkt. Daarom is het gemakkelijk om een blokschema te maken met daarop de verschillende onderdelen dat je nodig hebt. Je noteer welke eigenschappen ze zeker wel of niet moeten hebben. Eenmaal je dat gedaan hebt kan je aan de hand van deze eigenschappen componenten beginnen te zoeken. (dit is ons blokschema en onze componenten).
2) Schema en PCB tekenen
Eenmaal de keuze van de componenten vast staat moet het schema getekend worden. Dit doen we met het Eagle programma. Hier geven we neit veel uitleg over want dit staat uitgelegd op een aparte pagina. (schema en pcb).
Controleer goed of je schema juist is want eenmaal geëtst kan er niets meer veranderd worden aan de print.
3) Solderen van componenten
Het solderen is een van de belangrijkste taken van het project. Alles moet juist en goed gesoldeerd zijn. Alles moet een goede verbinding hebben en er mogen geen 2 punten aan elkaar hangen die niet mogen.
Alles wordt uitgelegd op een aparte pagina omdat dit ook een zeer delicaat werkje is.
4) Bootloader branden
Als stap 3 goed is uitgevoerd en de pc herkent de microcontroller kunnen we nu beginnen met programmeren. Eerst en vooral moet er een bootloader op de Atmega gebrand worden zodat de de code van de controller en de pc dezelfde zijn. Standaard is deze een code van Atmega maar wij gebruiken deze van Arduino die gratis te verkrijgen is op de website.
Voor de bootloader te branden heb je een arduino (Uno of Duemilanove) nodig. Er moeten 4 draden gesoldeerd worden aan de Miso, Mosi, GND, SCK end e Reset pin. Daarna kan je via dit stappenplan te werk gaan, stappenplan. Dit moet zorgvuldig na geleefd worden want als er één iets niet klopt zal het niet lukken. Aangezien het sofware is kan je eigelijk niets kapot maken dus hiervoor moet je geen schrik hebben.
Als dit goed gelukt is zie je nu in de apparaatbeheer van je pc de arduino leonardo staan.
5) Chassis maken
Aangezien we de motoren aan de printplaat moeten verbinden is het gemakkelijk als we direct een chassis hebben om de motoren en de print aan te bevestigen. Wij hebben eerst gewerkt met een houten plankje voor te testen en zijn dan over gestapt op een 3D geprint chassis die beter de sensoren scheidt van elkaar waardoor de uitgelezen waarden beter zullen zijn. Het chassis mag uit gelijk welke grondstof gemaakt zijn als het maar niet te zwaar is zodat de motoren het aan kunnen.
6) Programma schrijven
Nu het hardware deel van het project grotendeels is afgewerkt kunnen we met de software beginnen
Het programma bestaat uit verschillende delen. Het eerste deel is de EEPROM, dit is het vaste geheugen van de Atmega. Dit wil zeggen als de spanning wordt uit- en ingeschakeld dat de instellingen van de regelaar niet vergeten worden. Dit wordt best eerst geschreven, dit leggen we niet stap voor stap uit aangezien je dit best zelf zoekt zodat je precies weet hoe het programma werkt. Zo kan je telkens je een probleem hebt dit makkelijker oplossen.
Als dat deel geschreven is kunnen we het beginnen met het uitlezen van de sensoren.
Eerst moeten we onze sensoren kalibreren. Dit wil zeggen dat we leren aan ons wagentje wat zwart is en wat wit is. Dit doen we door het gemiddelde te nemen (per sensor) van 100 keer de sensor uit te lezen op witte en zwarte ondergrond.
Dit is het stuk code voor het kalibreren van de witte ondergrond. Deze is bijna identiek voor de zwarte ondergrond en kan je terug vinden in ons programma die onderaan dit bericht staat. Ook kan je zien dat de waarden naar het EEPROM geheugen worden geschreven zodat ze de volgende keer ook gebruikt kunnen worden.
Eenmaal we onze gekalibreerde waarden hebben kunnen we beginnen van normaliseren van onze waarden die we zullen hebben tijdens het rijden. We zullen onze maximum en onze minimum waarde normaliseren met behulp van onze kalibratie waarden.
We doen dit voor elke sensor. We werken met een for loop zodat we niet alles moeten uittypen en ons programma niet te lang wordt en overzichtelijk blijft.
Nu kunnen we deze waarden gebruiken om onze motoren bij te sturen zodat ze de lijn volgen. Je kan werken volgens verschillende principe's om je motoren te sturen. Wij werken met het gewogen gemiddelde, dit werkt als volgt:
We hebben 6 sensoren waarvan de middelste 2 het midden van het wagentje is. Dit wil zeggen als deze zwart zien dat de baan niet of weinig aangepast moet worden, als de buitenste sensoren zwart zien moet dit wel sterk bij gestuurd worden zodat de lijn terug naar het midden gaan. Dus de waarde van de buitenste sensoren is belangrijker dan de waarde van de middelste, deze wegen dan ook meer door. We bereken het gemiddelde van de waarden en zo weten we onze positie van onze sensoren. Hieronder kan je de code zien.
Zoals je kan zien wegen de buitenste normalized waarden (5 en 0) meer door in het gemiddelde dan de middelste (2 en 3).
Nu we het gewogen gemiddelde hebben kunnen we via onze PID een signaal naar onze H-brug sturen. De PID wordt hier zeer goed uitgelegd, ons programma is aan de hand van deze blog opgebouwd waardoor je via deze blog jouw programma kan maken.
6) Regelwaarden zoeken
Nu alles in orde is kun je beginnen testen en de waarden van je PID regelaar zoeken. Wij hebben deze gevonden door zeer veel te testen, een berekening hebben we er niet voor.
Als je deze stappen volgt zal het project tot een goed einde lopen.
Veel succes.
Downloads:
bestanden
Geen opmerkingen:
Een reactie posten