Mundarija:

Robo-belxopni qanday qilish kerak: 3 qadam
Robo-belxopni qanday qilish kerak: 3 qadam

Video: Robo-belxopni qanday qilish kerak: 3 qadam

Video: Robo-belxopni qanday qilish kerak: 3 qadam
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, Noyabr
Anonim

JeffreyfFollow tomonidan Muallifning yana:

IRobot Create Scholarship mini-tanloviga qanday kirish mumkin
IRobot Create Scholarship mini-tanloviga qanday kirish mumkin
IRobot Create Scholarship mini-tanloviga qanday kirish mumkin
IRobot Create Scholarship mini-tanloviga qanday kirish mumkin
Qanday qilib LOLCats, Meme mushuklari, Mushuk makrolari yoki mushuk rasmlarini kulgili taglavhalar bilan yasash mumkin
Qanday qilib LOLCats, Meme mushuklari, Mushuk makrolari yoki mushuk rasmlarini kulgili taglavhalar bilan yasash mumkin
Qanday qilib LOLCats, Meme mushuklari, Mushuk makrolari yoki mushuk rasmlarini kulgili taglavhalar bilan yasash mumkin
Qanday qilib LOLCats, Meme mushuklari, Mushuk makrolari yoki mushuk rasmlarini kulgili taglavhalar bilan yasash mumkin

Haqida: Men narsalarni ajratishni va ularning qanday ishlashini tushunishni yaxshi ko'raman. Umuman bundan keyin menda qiziqish yo'qoladi. Jeffreyf haqida ko'proq ma'lumot »

Bu ko'rsatma harakatlanuvchi qo'ng'iroq qilish uchun iRobot Create -dan qanday foydalanishni ko'rsatadi. Bu karol raqqosning ko'rsatmasiga binoan butunlay olib tashlandi va men uni tanlovimizga namuna sifatida qo'ydim. Robo-BellHop sizning shaxsiy yukxalta, oziq-ovqat, kir yuvish va hokazolarni olib yurishga yordamchi bo'lishi mumkin. ga. Basic Create-ning tepasida axlat qutisi bor va uning IR-translyatorini kuzatib borish uchun ikkita bortli IR detektoridan foydalaniladi. C dasturiy kodi bilan foydalanuvchi Robo -BellHop -ga og'ir oziq -ovqat, katta miqdordagi kir yoki yukxalta qo'yib, robotni ko'chada, savdo markazida, koridorda yoki aeroport orqali kuzatib borishiga ruxsat berishi mumkin. - Foydalanuvchi qayerga borishi kerak bo'lsa, asosiy ish 1) buyruq modulini yoqish uchun Reset tugmasini bosing va sensorlar ishlayotganligini tekshiring a robot juda yaqin masofada joylashgan 2) Robo-BellHop tartibini bajarish uchun qora yumshoq tugmani bosing 3) IQ uzatgichini to'pig'iga ulang va uning yoqilganligiga ishonch hosil qiling. Keyin savatni yuklang va keting! 4) Robo-BellHop mantig'i quyidagicha: 4a) Siz aylanib yurganingizda, agar IQ signali aniqlansa, robot maksimal tezlikda harakat qiladi4b) Agar IQ signali o'chsa masofa (juda uzoq yoki juda o'tkir burchak bilan), agar signal yana qabul qilinsa, robot qisqa tezlikda sekin tezlikda o'tadi4c) Agar IQ signali aniqlanmasa, robot chap va o'ngga buriladi. signalni qayta topishga urinish4d) Agar IQ signali aniqlansa, lekin robot to'siqqa urilsa, robot to'siqni aylanib o'tishga harakat qiladi4e) Agar robot IQ signaliga juda yaqin kelsa, robot to'xtamaydi. egasining to'pig'iHardware1 iRobot virtual devor birligi - RadioShack -dan $ 301 IQ detektori - Radio Shack -dan $ 31 DB -9 erkak ulagichi - $ 44 Home Depotdan 6-32 vint - $ 2.502 3V batareyalar, men D1 kir yuvish savatini ishlatdim - $ 51 qo'shimcha g'ildirak. Robot yaratish orqasida Elektr tasmasi, sim va lehim

1 -qadam: IQ sensorini yopish

Yaratish robotining old qismidagi IQ sensori kichik bo'lagidan boshqa hamma narsani yopish uchun elektr tasmasini mahkamlang. Virtual devor blokini demontaj qiling va qurilmaning old qismidagi kichik platani chiqarib oling. Bu juda qiyin, chunki juda ko'p yashirin vintlardek va plastmassa mahkamlagichlar mavjud. IQ uzatuvchi elektron platada joylashgan. Infraqizil nurlanishining oldini olish uchun IQ uzatgichini qog'ozli qog'oz bilan yoping. Elektron kartani bilagingizni o'rab oladigan tasma yoki elastik tasma bilan mahkamlang. Batareyalarni qulay joyga qo'yishingiz uchun batareyalarni elektron kartaga ulang (men batareyalarni cho'ntagimga qo'yishim uchun qildim).

Ikkinchi IR detektorini DB-9 ulagichiga ulang va Cargo Bay ePort pin 3 (signal) va pin 5 (tuproq) ga ulang. 2 -IR infektori aniqlagichni yaratishda mavjud bo'lgan IQ sensorining yuqori qismiga ulang va 2 -IR detektori emitentni siz yaratmoqchi bo'lmaydigan masofada ko'rmaguncha, uni ikki qatlamli qog'ozli qog'oz bilan yoping. sizni urishdan. Siz buni "Qayta tiklash" tugmachasini bosgandan so'ng sinab ko'rishingiz mumkin va to'xtash masofasida turganingizda "LED" yonib turishini ko'rishingiz mumkin.

2 -qadam: savatni joylashtiring

Savatni 6-32 vint yordamida mahkamlang. Men shunchaki savatni Create robotining yuqori qismiga o'rnatdim. Orqa g'ildirakda ham siljiting, shunda siz Create robotining orqa tomoniga og'irlik qo'yasiz.

Izohlar: - Robot juda ko'p yukni ko'tarishi mumkin, kamida 30 funt. - Kichik o'lcham har qanday yukni olib ketishning eng qiyin qismi bo'lib tuyuldi - IR juda temperamentli. Ehtimol, tasvirni ishlatish yaxshiroq, lekin bu ancha qimmat

3 -qadam: Manba kodini yuklab oling

Manba kodini yuklab oling
Manba kodini yuklab oling

Manba kodi quyidagicha va matnli faylga biriktirilgan:

/*********************************************** ******************** follow.c ** -------- ** buyruq modulini yaratish ** da ishlaydi, lekin old tomondan kichik ochilishdan boshqa hamma narsani qamrab oladi. IQ sensori ** yaratish virtual devorni (yoki kuch-maydon signalini yuboradigan har qanday IR) kuzatib boradi va umid qilamanki, jarayondagi to'siqlardan qochadi ***************** ************************************************ **/#interrupt.h> #include io.h>#include#o'z ichiga "oi.h" ni belgilang#HAQIQATI 1ni aniqlang#YO'Qni aniqlang#FullSpeedni aniqlang 0x7FFF#Sekin Tezlikni aniqlang 0x0100#SearchSpeedni aniqlang 0x0100#ExtraAngle 10 ni aniqlang SearchLeftAngle 125#SearchRightAngle -ni aniqlang (SearchLeftAngle - 1000)#CoastDistance -ni aniqlang 150#TraceDistance -ni aniqlang 250#TraceAngle -ni aniqlang 30#BackDistance -ni aniqlang 25#IRDetected (~ PINB & 0x01) // holatlarni belgilang Tayyorni 0 -ni belgilang 1 -ni ta'riflang 1#WasFollowing 2 #SearchingLeft 3 ni belgilang#SearchingRightni belgilang 4#TracingLeftni aniqlang 5#TracingRightni belgilang 6#BackingTraceLeftni aniqlang 7#BackingTraceRight 8ni belgilang // Global o'zgaruvchilarv olatile uint16_t timer_cnt = 0; uchuvchi uint8_t timer_on = 0; uchuvchi uint8_t sensorlar_flag = 0; uchuvchi uint8_t sensorlar_index = 0; uchuvchi uint8_t sensorlar_in [Sen6Size]; uchuvchi uint8_t inRange = 0; // Vazifalarvoid byteTx (uint8_t qiymati); void delayMs (uint16_t time_ms); void delayAndCheckIR (uint16_t time_ms); void delayAndUpdateSensors (unsigned int time_ms); void voidoid (void) baud (uint8_t baud_code); bo'sh disk (int16_t tezlik, int16_t radiusi); uint16_t tasodifiy burchak (void); void defineSongs (void); int main (void) {// hol o'zgaruvchisi 0; // Create va moduleinitialize (); LEDBothOff; powerOnRobot (); byteTx (CmdStart); baud (Baud28800); byteTx (CmdControl); byteTx (CmdFull); // ikkinchi IR sensori uchun kirish/chiqish sozlamalariDDRB & = ~ 0x01; // yuk bo'lagi ePort pin 3 ni kirishPORTB qilib belgilang | = 0x01; // yuklarni ePort pin3 -ni tortib olishni yoqing // dasturni aylantiring (TRUE) {// ehtiyot chorasi sifatida to'xtating (0, RadStraight); // LEDsbyteTx (CmdLeds); byteTx (((sensorlar [SenVWall])? LEDPlay: 0x00) | (inRange? LEDAdvance: 0x00)); byteTx (sensorlar [SenCharge1]); byteTx (64); IRDetected? LED2On: LED2Off; inRange? LED1On: LED1Off; // foydalanuvchi tugmachasini qidirmoqdamiz, oftendelayAndUpdateAndors (10); (10); if (UserButtonPressed) {delayAndUpdateSensors (1000); // faol davrda (! (UserButtonPressed) && (! Sensorlar [SenCliffL]) && (! Sensorlar [SenCliffFL]) && (! Sensorlar [SenCliffFR]) && (! sensorlar [SenCliffR])) {byteTx (CmdLeds); byteTx (((sensorlar [SenVWall])? LEDPlay: 0x00) | (inRange? LEDAdvance: 0x00)); byteTx (sensorlar [SenCharge1]); baytTx (255); IRDetected LED2On: LED2Off; inRange? drivedrive (SlowSpeed, RadStraight); hol = kuzatiladi;}} boshqa {// beamangle = 0 qidirish; masofa = 0; kutish_tashkilchisi = 0; topildi = FALSE; haydovchi (SearchSpeed, RadCCW); hol = SearchingLeft;} uzilish; holat Quyidagi: agar (sensorlar [SenBumpDrop] & BumpRight) {masofa = 0; burchak = 0; haydovchi (-SlowSpeed, RadStraight); state = BackingTraceLeft;} if if (sensorlar [SenBumpDrop] & BumpLeft) {masofa = 0; burchak = 0; haydovchi (-SlowSpeed, RadStraight); davlat = BackingTraceRight;} boshqa if (sensorlar [SenVWall]) {// tekshiring Leader (inRange) ga yaqinlik {drive (0, RadStraight); state = Ready;} else {// drive straightdrive (FullSpeed, RadStraight); state = Follow;}} boshqa {// signalni yo'qotib qo'ydik, asta sekin davom eting cycledistance = 0; haydovchi (SlowSpeed, RadStraight); hol = WasFollowing;} tanaffus; case WasFollowing: if (sensorlar [SenBumpDrop] & BumpRight) {masofa = 0; burchak = 0; haydovchi (-SlowSpeed, RadStraight); holat = BackingTraceLeft;} agar boshqa (sensorlar [SenBumpDrop] & BumpLeft) {masofa = 0; burchak = 0; haydovchi (-SlowSpeed, RadStraight); hol = BackingTraceRight;} boshqa bo'lsa (sensorlar [SenVWall]) {// liderga yaqinligini tekshiring (inRange) {haydovchi (0, RadStraight); holat = R eady;} boshqa {// drivedrive (FullSpeed, RadStraight); hol = kuzatiladi;}} if if (masofa> = CoastDistance) {haydovchi (0, RadStraight); hol = Tayyor;} boshqa {haydovchi (SlowSpeed, RadStraight);} break; case SearchingLeft: agar (topilgan bo'lsa) {if (burchak> = ExtraAngle) {haydovchi (SlowSpeed, RadStraight); hol = Kuzatiladi;} boshqa {haydovchi (SearchSpeed, RadCCW);}} boshqa bo'lsa (sensorlar [SenVWall]) {topilgan = TRUE; burchak = 0; agar (inRange) {haydovchi (0, RadStraight); holat = Tayyor;} boshqa {haydovchi (SearchSpeed, RadCCW);}} boshqa if (burchak> = SearchLeftAngle) {haydovchi (SearchSpeed, RadCW); wait_counter = 0; state = SearchingRight;} boshqa {drive (SearchSpeed, RadCCW);} break; case SearchingRight: if (found) {if (-angle> = ExtraAngle) {drive (SlowSpeed, RadStraight); holati = Kuzatiladi;} boshqa {haydovchi (SearchSpeed, RadCW);}} boshqa if (sensorlar [SenVWall]) {topilgan = TRUE; burchak = 0; agar (inRange) {haydovchi (0, RadStraight); holat = Tayyor;} boshqa {drive (SearchSpeed, RadCCW);}} if if (wait_counter> 0) {wait_counter -= 20; drive (0, RadStraight);} if if (burchak = Qidiruv RightAngle) {haydovchi (0, RadStraight); wait_counter = 5000; burchak = 0;} boshqa {haydovchi (SearchSpeed, RadCW);} uzilish; case TracingLeft: if (sensorlar [SenBumpDrop] & BumpRight) {masofa = 0; burchak = 0; haydovchi (-SlowSpeed, RadStraight); davlat = BackingTraceLeft;} boshqa if (sensorlar [SenBumpDrop] & BumpLeft) {haydovchi (0, RadStraight); holat = Tayyor;} boshqa bo'lsa (sensorlar [SenVWall]) {// tekshiring Leader (inRange) ga yaqinlik uchun {drive (0, RadStraight); state = Ready;} else {// drivedrive (SlowSpeed, RadStraight); state = Follow;}} else if (! (masofa> = TraceDistance)) { drive (SlowSpeed, RadStraight);} if if (! (-burchak> = TraceAngle)) {haydovchi (SearchSpeed, RadCW);} boshqa {masofa = 0; burchak = 0; haydovchi (SlowSpeed, RadStraight); holat = Tayyor; } break; case TracingRight: if (sensorlar [SenBumpDrop] & BumpRight) {drive (0, RadStraight); state = Ready;} if if (sensorlar [SenBumpDrop] & BumpLeft) {masofa = 0; burchak = 0; haydovchi (- SlowSpeed, RadStraight); state = BackingTraceRight;} if if (sensorlar [SenVWall]) {// Leader (inRang) ga yaqinligini tekshiring e) {haydovchi (0, RadStraight); holat = Tayyor;} boshqa {// to'g'ridan -to'g'ri haydovchi (SlowSpeed, RadStraight); holat = Quyida;}} boshqa if (! (masofa> = TraceDistance)) {haydovchi (SlowSpeed, RadStraight);} boshqa if (! (burchak> = TraceAngle)) {haydovchi (SearchSpeed, RadCCW);} boshqa {masofa = 0; burchak = 0; haydovchi (Sekin tezlik, RadStraight); holat = Tayyor;} tanaffus; Case BackingTraceLeft: if (sensorlar [SenVWall] && inRange) {haydovchi (0, RadStraight); holat = Tayyor;} boshqa if (burchak> = TraceAngle) {masofa = 0; burchak = 0; haydovchi (SlowSpeed, RadStraight); holat = TracingLeft; } if if (-distance> = BackDistance) {drive (SearchSpeed, RadCCW);} else {drive (-SlowSpeed, RadStraight);} break; case BackingTraceRight: if (sensorlar [SenVWall] && inRange) {haydovchi (0, RadStraight); holat = Tayyor;} boshqa if (-angle> = TraceAngle) {masofa = 0; burchak = 0; haydovchi (Sekin tezlik, RadStraight); holat = TracingRight;} boshqa bo'lsa (-distance> = BackDistance) {haydovchi (SearchSpeed), RadCW);} boshqa {drive (-SlowSpeed, RadStraight);} break; default: // stopdrive (0, RadStraight); state = Re ady; break;} delayAndCheckIR (10); delayAndUpdateSensors (10);} // jarlik yoki foydalanuvchi tugmasi aniqlandi, haydovchining holatini barqarorlashtirishga ruxsat bering (masalan, tugmani qo'yib yuboring) (0, RadStraight); delayAndUpdateSensors (2000);}}} // Sensor qiymatlarini saqlash uchun ketma -ket qabul qilish signallari msSIGNAL (SIG_OUTPUT_COMPARE1A) vaqtidagi kechikishlar uchun {if (timer_cnt) timer_cnt-; elsetimer_on = 0;} // baytni ketma-ket portvoid byteTx (uint8_t qiymati) orqali uzatish {while (! (UCSR0A & _BV) (UDRE0) UDR0 = qiymat;} // Sensor qiymatlarini yangilamasdan, ms da belgilangan vaqtni kechiktirish kechiktirmaslikMs (uint16_t time_ms) {timer_on = 1; timer_cnt = time_ms; while (timer_on);} // Belgilangan vaqtni msda kechiktiring va soniyani tekshiring. IR detektorining kechiktirilishiAndCheckIR (uint16_t time_ms) {uint8_t timer_val = 0; inRange = 0; timer_on = 1; timer_cnt = time_ms; while (timer_on) {if (! (Timer_val == timer_cnt)) {inRange + = IRDetected; timer_val = timer_cnt;}} inRange = (inRange> = (time_ms >> 1));} // Belgilangan vaqtni msda kechiktirish va sensori qiymatlarini kechiktirishAndUpdateSensors (uint16_t time_ms) {uint8_t temp; timer_on = 1; timer_cnt = time_ms; while (timer_on) {if (! sensors_flag) {for (temp = 0; harorat Sen6Size; temp ++) sensorlar [temp] = sensorlar_tashqi]; // Ishlayotgan masofa va burchak masofalarini jamlang += (int) ((sensorlar [SenDist1] 8) | sensorlar [SenDist0]); burchak += (int) ((sensorlar) [SenAng1] 8) | sensorlar [SenAng0]); byteTx (CmdSensors); byteTx (6); sensors_index = 0; sensors_flag = 1;}}}} // Mind Control -ni ishga tushiring // I/U pinlarini o'rnatingDDRB = 0x10; PORTB = 0xCF; DDRC = 0x00; PORTC = 0xFF; DDRD = 0xE6; PORTD = 0x7D; (WGM12) | _BV (CS12)); OCR1A = 71; TIMSK1 = _BV (OCIE1A); // ketma -ket portni rx interruptUBRR0 = 19 bilan sozlash; UCSR0B = (_BV (RXCIE0) | _BV (TXEN0) | _BV (RXEN0))); UCSR0C = (_BV (UCSZ00) | _BV (UCSZ01)); // interruptssei ();} void powerOnRobot (void) {// ni yoqish ! RobotIsOn) {RobotPwrToggleLow; delayMs (500); // Bu holatda kechikishRobotPwrToggleHigh; // PowerdelayMs -ni almashtirish uchun pastdan yuqorigacha o'tish (100); // Bu holatda kechikishRobotPwrToggleLow;} delayMs (3500); // Ishga tushishni kechiktirish}} // Yaratish tezligi va modulevoidli (uint8_t baud_code) {agar (baud_code = 11) {byteTx (CmdBaud); UCSR0A | = _BV (TXC0); byteTx (baud_code); / Uzatish tugaguncha kuting (! (UCSR0A & _BV (TXC0))))); cli (); // Baud tezligi registrini o'zgartiring (baud_code == Baud115200) UBRR0 = Ubrr115200; aks holda (baud_code == Baud57600) UBRR0 = Ubr; if if (baud_code == Baud38400) UBRR0 = Ubrr38400; if if (baud_code == Baud28800) UBRR0 = Ubrr28800; else if (baud_code == Baud19200) UBRR0 = Ubrr19200; else if (baudRR44 == Baud_c00 if (baud_code == Baud9600) UBRR0 = Ubrr9600; if if (baud_code == Baud4800) UBRR0 = Ubrr4800; if if (baud_code == Baud2400) UBRR0 = Ubrr2400; else if (baud_code = UR baud_code == Baud600) UBRR0 = Ubrr600; aks holda (baud_code == Baud300) UBRR0 = Ubrr300; sei (); delayMs (100);}}} yuborish Tezlik va radiusli disk (int16_t tezlik, int16_t) bo'yicha haydovchi buyruqlarini yaratish. radius) {byteTx (CmdDrive); byteTx ((uint BaytTx ((uint8_t) (tezlik va 0x00FF)); byteTx ((uint8_t) ((radius >> 8) va 0x00FF)); byteTx ((uint8_t) (radius) & 0x00FF));}

Tavsiya: