Předmět Jméno Ročník BROB Základy robotiky Pavel Svoboda, Luboš Tlustoš Datum 2. 6.5.2012 Kontroloval Hodnocení Dne Úloha 9. Robot pro Robotický den 2012 Zadání: Sestavte tým, jehož úkolem bude zúčastnit se Robotického dne 2012 ve vybrané soutěži. Soutěž se koná 28.4.2012 v Praze. Nastudujte pravidla soutěže a navrhněte a postavte robota do soutěže. Robot může být realizován např. za pomoci stavebnice LEGO Mindstorms.
Pravidla: Line Follower (Sledovač čáry) Úkolem robota v soutěži Line Follower je sledovat černou čáru a projet po ní trať v co nejkratším čase. 1. Průběh soutěže Robot po odstartování projede trať vyznačenou černou čarou. Výsledné pořadí robotů je dáno časem, který robot pro jízdu spotřeboval. Čas se měří od signálu rozhodčího ke startu do okamžiku, kdy přední část robota překročí cílovou čáru. Pokud by doba přesahovala 3 minuty, rozhodčí jízdu ukončí. Při startu musí být robot plně za startovní čárou. Robot, který ztratí sledovanou čáru, musí obnovit kontakt v bodě, kde ho ztratil nebo v některém místě blíže ke startu. Organizátoři mohou povolit další soutěžní kola / jízdy, pro určení pořadí v první části soutěže se použije nejlepší výsledek ze všech jízd robota. Ve druhé části soutěže jsou vedeny jízdy vyřazovacím způsobem. V případě rovnosti časů mohou organizátoři vyzvat příslušné soutěžící k další jízdě. 2. Robot Robot nesmí být nebezpečný nebo nadmíru obtěžující. Robot je autonomní (samostatný) a při závodě včetně startu není povoleno žádné jeho spojení s externími0020zařízeními. Od okamžiku, kdy soutěžící robota odstartuje, se jej nikdo nesmí dotýkat ani jakkoli zasahovat do jeho činnosti a to až do té doby, kdy to rozhodčí opět povolí. Maximální rozměry robota jsou 32(š)x32(v) cm, délka není stanovena. 3. Hřiště Plocha hřiště je bílá. Čára je černá o šířce cca 1,5 cm. Čára neprotíná sama sebe (nemá křižovatky). Startovní a cílová čára jsou vyznačeny dvěma kolmými značkami ve vzdálenosti 5 cm od čáry. Minimální vzdálenost čáry od okraje hřiště je 15 cm, minimální poloměr zatáčky je 10 cm. Robot, který překročí okraj hřiště, bude diskvalifikován. Za překročení okraje se považuje situace, kdy kterékoliv kolo, pás nebo noha robota zasahuje celá mimo hřiště. 4. Pravomoc rozhodčího a organizátorů, odpovědnost Pokud soutěžící či robot poruší pravidla, může rozhodčí jeho jízdu ukončit. Může také soutěžící či robota diskvalifikovat i pro další zápasy. Námitky vůči rozhodnutím rozhodčího nebo organizátorů nejsou přípustné. Organizátoři mohou kdykoli změnit pravidla soutěže například podle počtu účastníků nebo místních podmínek.
Řešení: Princip snímání čáry My jsem použili na snímání čáry pět infračervených diod a čtyři fototranzistory. Tyto prvky jsou v jedné řadě, čímž získáváme rozlišení o osmy bodech. Princip tohoto snímání je velice jednoduchý, využívá se vlastností černé a bílé barvy kdy černá barva světlo pohlcuje a bílá jej odráží. Pět IR diod je střídavě rozsvěcováno, jejich světlo dopadá na podložku a je odraženo v intenzitě podle barvy, toto světlo zachycují sousední fototranzistory právě rozsvícené IR diody. Napětí na děliči odpor-fototranzistor je snímáno 10bitovým AD převodníkem, který je součástí mikroprocesoru. Srdce robota Srdcem robota je mikroprocesor firmy Atmel ATmega8 ke kterému jsou přivedeny jednotlivá napětí z fototranzistorů. Mikroprocesor tyto napětí převádí pomocí AD převodníku na digitální signál, který dále vyhodnocuje a řídí podle něj jednotlivé motůrky. Řízení motůrků Na řízení motůrků jsme použili vnitřní moduly pulzní šířkové modulace PWM. Signál který generuje tento modul je pomocí tranzistorů zesílen a jsou jím řízeny otáčky jednotlivým motůrků. Napájení Jako napájení jsme použili baterie typu Ni-MH o celkovém napětí 4,8V a kapacitě 80mAh. Tyto baterie jsou v packu po dvou a jsou osazeny na plošný spoj, nabíjení těchto baterií probíhá přes programovací konektor napětím 5V. Zdrojový kód /* * ROBOT.c * * Created: 20.3.2012 20:28:16 * Author: Kubrt * *vývody: *PD0 D3 PB0 - PC0 D1 *PD1 TXD PB1 motorl PC1 D2 *PD2 IR PB2 motorr PC2 T1 *PD3 D4 PB3 (MOSI) PC3 T2 *PD4 D5 PB4 (MISO) PC4 T3 *PD5 - PB5 (CSK) PC5 T4 *PD6 - PB6 - PC6 (!RESET) *PD7 - PB7 - */ #ifndef F_CPU #define F_CPU 1000000 #endif #include <avr/io.h>
#include <util/delay.h> #include <avr/interrupt.h> #include "../../../../../Program Files (x86)/atmel/avr Studio 5.0/AVR ToolChain/avr/include/avr/iom8.h" volatile unsigned char stav_diod;//průbeh snímání volatile unsigned char hodnoty[8];//změřené hodnoty inline void cti_dalsi(void) switch(stav_diod) case 0: ADMUX = (1<<ADLAR) (1<<REFS0) (1<<MUX1); case 2: ADMUX++; case 4: ADMUX++; case 6: ADMUX++; ADCSRA = (1<<ADSC);//zahájení převodu inline void init_prom(void) stav_diod = 7; inline void init_timer (void)//inicializace časovače pro interval měření a spínání diod TCCR2 = (1<<CS22) (1<<WGM21);//WGM21 = počítání do OCR2,CS2 = osc/64 TIMSK = (1<<OCIE2);//povoleno přerušení při shodě s OCR2 OCR2 = 10;//hodnota na počítání 0,064*OCR2 [ms] 32 inline void init_porty(void) DDRD = 0b11111011; DDRB = 0b11111111; DDRC = 0b00000011;
PORTD = 0b100; return; inline void init_adc(void) ADCSRA = (1<<ADEN) (1<<ADIE);//ADEN = povolení převodníku, ADIE = povolení přerušení při dokončení převodu ADMUX = (1<<ADLAR) (0<<REFS0);//ADLAR = zarovnání vlevo, refs0 = volba zdroje inline void init_motory(void) TCCR1A = (1<<COM1A1) (1<<COM1B1) (1<<WGM10)/* (1<<WGM11)*/; TCCR1B = (1<<WGM12) (1<<CS10); OCR1A = 80;//127 OCR1B = 95; ISR (TIMER2_COMP_vect)// přerušení pro spouštění diod a vyhodnocení A/D převodníku cti_dalsi(); ISR (ADC_vect) //přerušení při dokončení A/D převodu hodnoty[stav_diod] = ADCH; stav_diod++; switch (stav_diod) case 8: PORTD &= ~0b10000; PORTC =0b1; stav_diod = 0; case 1: PORTC &= ~0b1; PORTC = 0b10; case 3: PORTC &= ~0b10; PORTD = 0b1; case 5: PORTD &= ~0b1; PORTD = 0b1000;
case 7: PORTD &= ~0b1000; PORTD = 0b10000; int main (void) volatile unsigned char nej; unsigned char i = 0; unsigned char neji = 0; init_prom(); init_porty(); init_timer(); init_adc(); init_motory(); sei(); while(1) nej = 0; for(i=0;i<8;i++) if (nej < hodnoty[i]) nej = hodnoty[i]; neji = i; if (neji > 3)//kraj OCR1A = 0; OCR1B = 90; else//kraj OCR1A = 85; OCR1B = 0;
Návrh DPS Osazení DPS Mechanické provedení Zvolili jsme samonosnou konstrukci, jak je vidět na fotografiích. Jde o plošný spoj na kterém je osazen mikroprocesor, baterie, motůrky i snímací čidla.
Závěr: Sestavili jsme robota sledujícího čáru, ale nezúčastnili jsme se robotického dne, protože v termínu konání soutěže jsme se ještě potýkali s technickými problémy, špatně jsme na dimenzovali pohon, který jsem částečně vyřešili přidáním převodů, ale stále je to málo. Do budoucnosti by bylo vhodné, realizovat pokročilejší řídící algoritmus, který by zastával funkci PD regulátoru čím se zamezí velkým překmitům.