Lijnvolgrobot met supercondensatoren
Ron wilde een lijnvolgrobot maken met een Arduino en kwam op het idee om deze te voeden met supercondensatoren. Deze supercondensatoren hebben een zeer hoge capaciteit en werken op een lage spanning (100 farad, 3V). De capaciteit van deze supercondensatoren is vele malen lager dan een accu. Dit betekent dat deze lijnvolger niet lang kan rijden op één lading en snel weer op zal moeten laden.
Naast de supercondensatoren wilde ik graag meerdere lijnsensoren gebruiken die analoog ingelezen worden. Ook wilde ik motoren met encoder hebben zodat ik eventueel snelheid kan regelen. Uiteindelijk rijdt de robot ook prima zonder de encoders gebruikt te hebben.
initial charge start 0:03
initial charge end 1:29
drive start 1:33
drive end 4:19
charge start 4:19
charge end 4:49
Blokschema
Zie hieronder het voornamelijk elektrische blokschema.
Onderdelen
Onderdeel | Type | Link |
---|---|---|
Microcontroller 1 | Arduino Pro Micro | |
Microcontroller 2 | Arduino Pro Micro | |
Lijnsensor | 8x IR Line Tracking Module | TinyTronics |
Supercondensatoren | 3V 50F VINATECH WEC3R0 506QG | Reichelt |
Motoren + encoder + wiel | DC 6V Encoder Motor Gear N20 | Aliexpress |
LED strip | COB Pixel LED Strip 5V 332LEDs/M | Aliexpress |
Motor driver | DRV8833 | TinyTronics |
Gelijkrichter | DB107 - 1A 1000V | TinyTronics |
DC-DC oplader | XL4015 DC-DC buck CV CC | Aliexpress |
DC-DC boost 5V | Mini DC-DC 5V Step-up Boost Converter 480mA | TinyTronics |
Afstandssensor | VL6180 Time-of-Flight | TinyTronics |
Knoppen | ||
Plaatmateriaal | Vederplex 4mm | Bauhaus |
Potentiometer | 10kΩ Cermet Potentiometer - Type 3386P | TinyTronics |
Software
2 microcontrollers (master en slave) werken samen.
Automatisch opladen
Lijnvolgen met 8 analoge lijnsensoren
Zie hieronder het stukje code waarmee de positie van de lijn wordt berekend. Hierbij worden 8 analoge waarden van 0 tot 255 ingeladen, en daarmee wordt de gemiddelde lijnpositie berekend.
Bron:http://theultimatelinefollower.blogspot.com/2015/12/interpolation.html?m=1
int calcLinePos(){ //Source: http://theultimatelinefollower.blogspot.com/2015/12/interpolation.html?m=1 byte values[8]; for(byte i=0;i<8;i++){ values[i]=sensorValues[i]; } int num = -27*(values[0]-values[7])*2+ -19*(values[1]-values[6])*2+ -11*(values[2]-values[4])*2+ -4*(values[3]-values[3])*2; int denom = (values[0]+values[1]+values[2]+values[3]+values[4]+values[5]+values[6]+values[7])/2; if(denom==0){ return 0; }else{ return num/denom; } }
Het nemen van scherpe bochten
De lijnvolger heeft 8 lijnsensoren waarvan hij de buitenste sensoren gebruikt om te onthouden aan welke kant het laatst een lijn is gezien. Links of rechts.
Bijvoorbeeld bij een scherpe bocht naar rechts, zal hij aan de rechterkant het laatst een lijn hebben gezien. Als hij daarna de lijn kwijtraakt zal hij naar rechts draaien. Als hij dan de lijn weer vindt, gaat hij verder met lijnvolgen.
- Scherpe bochten worden zeer betroubaar genomen
- De robot maakt herhalend scherpe bochten gedurende 4 minuten zonder fouten
Code voor detectie van scherpe en haakse bochten
enum directions{LEFT,RIGHT}; enum directions cornerDir = LEFT; unsigned long cornerDetectTold=0; byte cornerDetectTreshold = 180; void cornerDetect(byte sensorValues[]){ static byte old = 0; byte now = 0; //Convert 8 analog values to an 8 bits for(byte i=0; i<8; i++){ if(sensorValues[i]>cornerDetectTreshold){ bitSet(now,7-i); //Load and mirror bits } } //Sharp corner detection: RIGHT if(((now & B00000011) == B00000011) && ((old & B00000011) == B00000001)){ cornerDir=RIGHT; cornerDetectTold=millis(); } //Sharp corner detection: LEFT if(((now & B11000000) == B11000000) && ((old & B11000000) == B10000000)){ cornerDir=LEFT; cornerDetectTold=millis(); } //Square corner and small radius corner detection: RIGHT if((now & B00011111) == B00011111 && millis()-cornerDetectTold>750){ cornerDir=RIGHT; cornerDetectTold=millis(); } //Square corner and small radius corner detection: LEFT if((now & B11111000) == B11111000 && millis()-cornerDetectTold>750){ cornerDir=LEFT; cornerDetectTold=millis(); } old = now; }
Communicatie tussen master en slave
Firmware
State diagram
Video's
21-09-2022
- Lijnvolg regeling nog niet optimaal afgesteld
- Scherpe bochten worden niet betrouwbaar genomen
- 1:00 De robot detecteert het oplaadpunt en stopt
Backlinks: