Voor het opslaan van de Kp, Ti en Td kunnen we gebruik maken van de volgende libary. Deze persoon heeft ervoor gezorgd dat we niet enkel bytes maar ook floats en doubles etc. kunnen opslaan in het EEPROM geheugen.
We hebben het apart een getest, en dit gaf een positief resultaat. Deze kunnen we dan volledig implementeren in het hoofdproramma van de Line-follower.
Om de afwijking ten opzichte van de zwarte lijn te meten, maken we gebruik van een parabolische interpolatie. Dit doen we softwarematig en gaat als volgt:
De sensoren worden uitgelezen en de waarden worden in een array geplaatst. Dan zoeken we de hoogste waarde van onze array, alsook de index van de sensor met de hoogste waarde. Als we weten welke sensor de hoogste waarde heeft, en dus het meest zwart is, kunnen we beginnen aan de interpolatie.
Een parabool heeft volgende functie: y = ax² + bx + c.
De sensor met de hoogste waarde heeft x-waarde 0. De sensor links daarvan heeft als x-waarde -1 en de sensor rechts daarvan heeft als x-waarde +1. De y-waarden zijn de uitgelezen waarden van de sensoren.
Dit geeft ons 3 vergelijkingen:
Y1 = ax² - bx + c (linkse sensor)
Y2 = c (middenste sensor)
Y3 = ax² + bx + c (rechtse sensor)
Nu kunnen we op zoek gaan naar a, b en c.
Uit de eerste vergelijking halen we: b = Y1
a Y2.
Vullen we dat in de derde vergelijking in, krijgen we: a = (Y3 - 2*Y2 + Y1) / 2.
Nu we alle waarden van de vergelijking kennen, kunnen we de top van de parabool berekenen. Dit doen we door de afgeleide van de functie gelijk te stellen aan 0.
Afgeleide: y' = 2ax + b.
Hieruit halen we de x-waarde als y' = 0 => x = -b / (2*a).
Dit is onze top zonder rekening te houden met de index van de sensor. Daarom moeten we 2.5 bijtellen bij onze top en de maximale sensorindex aftrekken van de top. (Omdat we 6 sensoren hebben en dus een index van 0 tot 5, gemiddeld 2.5) Zo zal onze top 0 zijn als de sensoren met index 2 en 3 gelijk zijn.
Dit wil zeggen dat als we bij het begin staan van een bocht we aan elke kant
18.75mm ruimte hebben om een bocht op te merken. Onze sensor arrey is 37.5mm breed (6 sensoren die elk 7.5mm
van elkaar staan). De bochten zelf hebben een staal van 100mm en onze maximale snelheid is 522mm/s
Met elementaire goniometrie weten we dat als onze line follower de bocht niet dedecteert en dus rechtdoor rijd hij na 58,296mm uit de bocht vliegt.
100-18,75 = 81.25
cos^-1(81.25/100) = 35,659°
sin(35,659°) = 58,296mm
Dus voor dat dit gebeurt moeten we minstens al 1 meting gedaan hebben. We hebben 112ms de tijd.
58,296/522 = 0.112s
In een ouder bericht op deze blog hebben we al de cyclus tijd geschat op1600µs. Dus we zullen ongeveer 70 metingen kunnen doen voor we uit de bocht vliegen.
De PCB van de microcontroller is wat aangepast, aangezien er geen LED was aangesloten op pin 13 en we hebben de print ook wat gebruiksvriendelijker gemaakt door de pinnen naar buiten te halen die nodig zijn voor de bootloader met arduino te kunnen branden op de atmega32u4. Alsook zijn er diodes in de ketens geschakeld, zodat bij verkeerde handelingen er geen schade zal ontstaan aan de controller.
De atmega32u4 heeft standaard al een bootloader. Dus als we onze printplaat verbinden met de PC, zal de PC hem onmiddelijk herkennen. Omdat we met de standaard bootloader niet kunnen programmeren met Arduino, moeten we hem veranderen.
Daarvoor hebben we een Arduino Duemilanove nodig. Eerst moet je het programma ArduinoISP uploaden op de Duemilanove. (Dat programma zit standaard bij Arduino)
Dan moet je volgende pinnen verbinden:
- Pin 10 Duemilanove met de reset van de Atmega.
- Pin 11 Duemilanove met pin 10 (MOSI) van de Atmega.
- Pin 12 Duemilanove met pin 11 (MISO) van de Atmega.
- Pin 13 Duemilanove met pin 9 (SCK of SCLK) van de Atmega.
Om na te gaan of er geen errors zijn, kan je volgende LED's nog aansluiten:
- Een LED met voorschakelweerstand aan pin 7 Duemilanove om te zien of er communicatie is met de Atmega.
- Een LED aan pin 8 Duemilanove die brandt als er een error is.
- Een LED aan pin 9 Duemilanove die pinkt als het programma runt.
Nu moet je alleen nog de 5v en Ground doorverbinden van de Duemilanove naar de Atmega zodat de Atmega ook gevoed wordt.
Als alles verbonden is, maak je USB-connectie met de Duemilanove en zet je de volgende opties in Arduino:
Extra => Board => Arduino Leonardo
Extra => Programmer => Arduino as ISP
Daarna druk je op 'Burn Bootloader' en na een minuutje zal de bootloader van de Atmega overschreven zijn.
Maak alle connecties los en maak verbindin tussen de Atmega en de PC. Normaal gezien zal je PC de Atmega nu moeten zien als een Arduino Leonardo.
In onderstaande link vindt u de uitleg voor de bootloader via arduino.
De site is wel in het Spaans, u kunt via 'google translater' het vertalen naar het Engels.
Als je de PCB's wilt testen zorg er dan voor dat je een USB-kabeltje hebt waarvan je zeker bent dat hij ook werkt, want dit was een probleem bij ons. Als je hem voor de eerste keer aansluit aan de computer zal hij herkend worden, maar er zal geen driver voor gevonden worden op je computer. Om verder te gaan en te kunnen programmeren moet je de link goed volgen, of volg de volgende berichten op deze blog.
Voor de 5de projectvergadering plaats ik hier van materieel dat we tot nu toe hebben.
Microcontroller Atmega 32u4 x3 Alle kleine componenten hebben we minstens 2x 7x optische IR transistor sensoren een bluetooth module Motoren met de wielen Ball caster
Dit is ongeveer alles wat we nodig hebben om de line follower te maken.
Alsook zijn de PCB's na een kleine check-up van de leerkracht zo goed als af.
We opteren voor de through-hole versie van de sensor omdat:
Omdat deze sensor groter is, schijnt de infrarode led verder en kan de fototransistor op grotere afstand de lijn toch nog detecteren (<--> SMD max 1mm)
We hebben deze versie van de sensor ook gebruikt tijdens het testen, we weten dus zeker dat ze werken
Eenvoudiger om afscherming te maken
Eenvoudiger te solderen
Robuuster
Aantal sensoren in sensor array
Onze sensor array zal bestaan uit 6 sensoren met een tussenafstand van ongeveer 7,5 mm.
Hierdoor staan er steeds 2 sensoren boven de zwarte lijn en hebben we voldoende tijd om de motoren op de juiste manier aan te sturen.
Als bijlage kan je de datasheet vinden van de gekozen sensor.
IrDA staat voor Infrared Direct Access en maakt gebruik van infrarode lichtpulsen om een zender en een ontvangen met elkaar te laten communiceren. Deze technologie wordt onder meer toegepast in afstandsbedieningen.
De voordelen van een draadloze communicatie door middel van infrarood LED's zijn:
Goedkoop (< 1 euro)
Geen ingewikkelde firmware of andere software nodig
Communicatiesnelheid van 9600 bps tot 4 Mbps (meer dan voldoende voor onze toepassing)
De nadelen van deze techniek zijn:
De maximale afstand voor deze communicatie bedraagt 2 meter
Zender en ontvanger moeten naar elkaar gericht zijn (maximale hoek van 30°)
Zowel aan de kant van de zender als aan de kant van de ontvanger moet er een microcontroller aanwezig zijn om de infrarode signalen te interpreteren
Bluetooth
Bluetooth maakt gebruik van radiogolven om twee toestellen met elkaar te laten communiceren. deze technologie wordt onder andere gebruikt in draadloze headsets, GSM's en computers.
De voordelen zijn:
Eenvoudig protocol
Kan door muren en andere objecten heen communiceren
Apparaten in de buurt worden automatisch geïdentificeerd
Communicatiesnelheid tot 1 Mbps (meer dan voldoende voor onze toepassing)
De nadelen zijn:
Duurder dan infrarood (ongeveer 6 euro)
Het vinden van de geschikte firmware voor de verschillende bluetooth modules is niet altijd evident
Beslissing
Na het afwegen van de voor- en nadelen van beide technologieën hebben we met onze groep gekozen voor draadloze communicatie door middel van bluetooth. We houden rekening met de mogelijk complicaties die kunnen optreden bij het vinden en installeren van de juiste firmware. De hogere kostprijs wordt ruimschoots goedgemaakt door het grote gebruiksgemak. (De bluetooth module die wij gaan gebruiken: http://dx.com/p/jy-mcu-arduino-bluetooth-wireless-serial-port-module-104299)
Als keuze van de aansturing van de motoren kiezen we Mosfets ipv een H-brug.
Dit omdat de motoren eigenlijk niet hoeven omgekeerd worden. Het wagentje is 90 mm maximum breed en kan dus perfect een bocht nemen van een straal met 100mm. En hoeft het niet dat de motoren moeten omgekeerd worden om de lijn deftig te kunnen volgen. Alsook zal het wagentje iets meer vloeiende bewegingen kunnen maken met die Mosfets.
Fn = T/d <=> 0,0945/(0,031/2) = 6,1N (d is de straal van het wiel)
t = m* v/F = 0,5kg* 0,522m/s / 6,1N = 0,043s (karretje weegt ongeveer 0,5kg)
De optrek snelheid is wel puur theoretisch en kan toch wat afwijken, maar dit is toch wel zeer snel.
De wieltjes zijn klein zodat het koppel toch groot blijft. En de keuze voor de reductie 38,2 is omdat het koppel nu wat hoger is dan zonder de reductie.
Doordat de motoren slechts in Amerika te verkrijgen zijn is er nog een tweede keuze.
Het probleem hierbij is dat deze motoren 15,90 euro kosten per stuk! Maar zijn wel binnen de week geleverd vanuit Holland.
Dit is nu de blog van groep 8, 3de jaar professionele bachelor in de elektromechanica, keuze automatisering.
Laat ik even iedereen voorstellen:
Wouter Bauwens
Kasper Garsbeke
Joren Kestens
Nick Temmerman
Het project voor dit jaar is een snelle linefollowing robot. Het is dus een robotje die automatisch een donkere lijn volgt op een wit blad papier. Het dient draadloos gevisualiseerd te worden op een pc met bijhorende software.
Enkele voorbeelden hoe het eindproduct moet uitzien en wat het precies moet doen:
Ik
citeer: Dus de verwerkingsnelheid moet zeker onder de 4,08ms
liggen als de auto aan 2m/s rijdt.
Onze
wagen zal maar 1 m/s rijden, dus mag de verwerkingsnelheid 8 ms zijn.
Dit zal zeker niet het geval zijn, dus onze microcontroller is
geschikt.
We
hebben de microcontroller gekozen omdat hij een kloksnelheid heeft
van 16 MHz, hetzelfde als een Arduino Uno. Hij heeft genoeg analoge
ingangen voor onze sensoren, namelijk 12 en je kan hem programmeren
via USB. Dat laatste is zeer handig.