Orodha ya maudhui:

Jinsi ya Kufanya Robo-Bellhop: Hatua 3
Jinsi ya Kufanya Robo-Bellhop: Hatua 3

Video: Jinsi ya Kufanya Robo-Bellhop: Hatua 3

Video: Jinsi ya Kufanya Robo-Bellhop: Hatua 3
Video: VIDEO;MREMBO AKIFANYA NA CHUPA YA FANTA 2024, Novemba
Anonim

Fuata Zaidi na mwandishi:

Jinsi ya kuingia kwenye iRobot Unda mashindano ya mini-Scholarship
Jinsi ya kuingia kwenye iRobot Unda mashindano ya mini-Scholarship
Jinsi ya kuingia kwenye iRobot Unda mashindano ya mini-Scholarship
Jinsi ya kuingia kwenye iRobot Unda mashindano ya mini-Scholarship
Jinsi ya kutengeneza LOLCats, paka za Meme, macros ya paka, au picha za paka na manukuu ya kuchekesha
Jinsi ya kutengeneza LOLCats, paka za Meme, macros ya paka, au picha za paka na manukuu ya kuchekesha
Jinsi ya kutengeneza LOLCats, paka za Meme, macros ya paka, au picha za paka na manukuu ya kuchekesha
Jinsi ya kutengeneza LOLCats, paka za Meme, macros ya paka, au picha za paka na manukuu ya kuchekesha
Jinsi ya kuingia kwenye Etsy na Maagizo ya Kushona Mashindano muhimu
Jinsi ya kuingia kwenye Etsy na Maagizo ya Kushona Mashindano muhimu
Jinsi ya kuingia kwenye Etsy na Maagizo ya Kushona Mashindano muhimu
Jinsi ya kuingia kwenye Etsy na Maagizo ya Kushona Mashindano muhimu

Kuhusu: Ninapenda kuchukua vitu na kugundua jinsi zinavyofanya kazi. Mimi kwa ujumla huru maslahi baada ya hapo. Zaidi Kuhusu jeffreyf »

Maagizo haya yanaonyesha jinsi ya kutumia iRobot Unda kufanya bellhop ya kusonga. Hii iliinuliwa kabisa kwa ruhusa kutoka kwa maagizo ya carolDancer, na niliiweka kama kiingilio cha mfano cha mashindano yetu. Robo-BellHop anaweza kuwa msaidizi wako binafsi kubeba mifuko yako, mboga, kufulia, nk, kwa hivyo huna kwa. Uundaji wa kimsingi una pipa iliyoshikwa juu na hutumia vichunguzi viwili vya IR kwenye bodi kufuata mpitishaji wa IR ya mmiliki wake. Ukiwa na nambari ya msingi ya programu C, mtumiaji anaweza kupata vyakula vizito, mzigo mkubwa wa kufulia, au begi lako la usiku mmoja kwenye Robo-BellHop na roboti ikufuate barabarani, kupitia maduka, chini ya ukumbi au kupitia uwanja wa ndege - - popote mtumiaji anahitaji kwenda. Operesheni ya Msingi 1) Piga kitufe cha Rudisha kuwasha moduli ya amri na sensorer zinaangalia1a) Play LED inapaswa kuendelea wakati inapoona mtoaji wa IR kukufuata1b) Mwangaza wa LED unapaswa kuendelea wakati roboti iko karibu kabisa Kisha pakia kikapu na uende! 4) Mantiki ya Robo-BellHop ni kama ifuatavyo: 4a) Unapotembea, ikiwa ishara ya IR inagunduliwa, roboti itaendesha kwa kasi kubwa 4b) Ikiwa ishara ya IR itatoka masafa (kwa kuwa mbali sana au pembe kali sana), roboti itapita umbali mfupi kwa kasi ndogo ikiwa ishara itachukuliwa tena4c) Ikiwa ishara ya IR haipatikani, roboti itageuka kushoto na kulia ndani jaribu kupata ishara tena vifundoni vya mmiliki Hardware1 iRobot kitengo cha ukuta halisi - $ 301 IR detector kutoka RadioShack - $ 31 DB-9 kiunganishi kiume kutoka Radio Shack - $ 44 6-32 screws kutoka Home Depot - $ 2.502 3V betri, nilitumia D1 kikapu cha kufulia kutoka Target - $ 51 gurudumu la ziada kuingia kwenye nyuma ya Tengeneza mkanda wa umeme, waya na solder

Hatua ya 1: Kufunika Sensorer ya IR

Ambatisha mkanda wa umeme kufunika yote isipokuwa kipande kidogo cha sensorer IR mbele ya Reli ya Unda. Ondoa kitengo cha ukuta halisi na toa bodi ndogo ya mzunguko mbele ya kitengo. Hii ni ngumu sana kwa sababu kuna screw nyingi zilizofichwa na milima ya plastiki. Transmitter ya IR iko kwenye bodi ya mzunguko. Funika transmita ya IR na kipande cha karatasi ya tishu ili kuepuka tafakari za IR. Ambatisha bodi ya mzunguko kwa kamba au bendi ya elastic ambayo inaweza kufunika kifundo cha mguu wako. Waya waya kwenye bodi ya mzunguko ili uweze kuwa na betri mahali pazuri (niliifanya ili niweze kuweka betri mfukoni mwangu).

Waya waya 2 detector ya IR kwenye kontakt ya DB-9 na ingiza kwenye Cargo Bay ePort pin 3 (signal) na pin 5 (ardhi). Ambatisha kitambuzi cha 2 cha IR juu ya sensa ya IR iliyopo kwenye Unda na uifunika kwa matabaka kadhaa ya karatasi hadi kitambuzi cha 2 cha IR kisione mtoaji kwa mbali ambayo unataka Utengeneza roboti isimame ili iweke kutoka kukupiga. Unaweza kujaribu hii baada ya kugonga kitufe cha Rudisha na kutazama mapema ya LED ili kuendelea wakati uko kwenye umbali wa kusimama.

Hatua ya 2: Ambatisha Kikapu

Ambatisha kikapu kwa kutumia screws 6-32. Niliweka kikapu juu ya Roti ya Unda. Pia teleza kwenye gurudumu la nyuma ili uweke uzito nyuma ya Roboti ya Unda.

Vidokezo: - Roboti inaweza kubeba mzigo kidogo, angalau lbs 30. - Ukubwa mdogo ulionekana kuwa sehemu ngumu zaidi juu ya kuipata kubeba mzigo wowote - IR ni kali sana. Labda kutumia picha ni bora lakini ni ghali zaidi

Hatua ya 3: Pakua Msimbo wa Chanzo

Pakua Nambari ya Chanzo
Pakua Nambari ya Chanzo

Nambari ya chanzo hufuata, na imeambatanishwa kwenye faili ya maandishi:

/ ************************************************* " ya sensorer ya IR ** Unda itafuata ukuta halisi (au IR yoyote ikituma ishara ya uwanja wa nguvu) na kwa matumaini tutaepuka vizuizi katika mchakato huu ***************** ************************************************** ** / # ni pamoja na kukatiza TafutaLeftAngle 125 # define SearchRightAngle (SearchLeftAngle - 1000) #fafanua CoastDistance 150 # define TraceDistance 250 # define TraceAngle 30 # define BackDistance 25 # define IRDetected (~ PINB & 0x01) // states # define Ready 0 # define Kufuatia 1 # fafanua WasFollowing 2 #fafanua Utaftaji kushoto 3 # fafanua Utafutaji wa kulia 4 # fafanua Ufuatiliaji kushoto 5 # fafanua UfuatiliajiRight 6 # fafanua BackingTraceLeft 7 # define BackingTraceRight 8 // Global variablesv oatile uint16_t timer_cnt = 0; tete uint8_t timer_on = 0; tete uint8_t sensors_flag = 0; tete uint8_t sensorer_index = 0; uint8_t sensors_in [Sen6Size]; uint8_t sensorer [Sen6Size]; tete 0 016; // Kazi zinazopunguzwa byteTx (uint8_t thamani); kuchelewesha utupuMs (uint16_t time_ms); utupu wa kucheleweshaAndCheckIR (uint16_t time_ms); baud (uint8_t baud_code); gari batili (int16_t kasi, int16_t radius); uint16_t randomAngle (batili); utupu defineSongs (batili); 0; // Sanidi Unda na moduli anzisha (); LEDBothOff; PowerOnRobot (); byteTx (CmdStart); baud (Baud28800); byteTx (CmdControl); ~ 0x01; // weka shehena ya mizigo ePort pin 3 kuwa pembejeoPORTB | = 0x01; // weka shehena ePort pin3 pullup iliyowezeshwa // mpango wakati huo huo (KWELI) {// Simama kama dereva wa tahadhari (0, RadStraight); // weka LEDsbyteTx (CmdLeds); byteTx (((sensorer [SenVWall])? byteTx (sensorer [SenCharge1]); byteTx (64); IRDetected? LED2On: LED2Off; inRange? LED1On: LED1Off; // kutafuta kitufe cha mtumiaji, angalia oftendelayAndUpdateSensors (10); (10); kama (UserButtonPressed) {delayAndUpdateSensors (1000); sensorer [SenCliffR])) byteTx (CmdLeds); byteTx (((sensorer [SenVWall])? ? LED2On: LED2Off; inRange? LED1On: LED1Off; switch (state) {case Ready: if (sensorer [SenVWall]) {// angalia ukaribu na leaderif (inRange) {drive (0, RadStraight);} mwingine {// endesha gari moja kwa moja (SlowSpeed, RadStraight); hali = Ifuatayo;}} mwingine {// tafuta boriti = 0; umbali = 0; subiri_kuhesabu = 0; kupatikana = UONGO; gari (SearchSpeed, RadCCW); hali = KutafutaLeft;} kuvunja; kesi Kufuatia: ikiwa (sensorer [SenBumpDrop] & BumpRight) {umbali = 0; angle = 0; gari (-SlowSpeed, RadStraight); state = BackingTraceLeft;} vingine ikiwa (sensorer [SenBumpDrop] & BumpLeft) {umbali = 0; angle = 0; gari (-SlowSpeed, RadStraight); state = BackingTraceRight;} mwingine ikiwa (sensorer [SenVWall]) {// angalia ukaribu na leaderif (inRange) {drive (0, RadStraight); state = Ready;} mwingine {// drive straightdrive (FullSpeed, RadStraight); state = Following;}} mwingine {// amepoteza tu ishara, endelea polepole moja baiskeli = 0; kuendesha (SlowSpeed, RadStraight); hali = WasFollowing;} kuvunja; kesi WasFollowing: ikiwa (sensorer [SenBumpDrop] & BumpRight) {umbali = 0; angle = 0; gari (-SlowSpeed, RadStraight); state = BackingTraceLeft;} mwingine ikiwa (sensorer [SenBumpDrop] & BumpLeft) {umbali = 0; angle = 0; gari (-SlowSpeed, RadStraight); hali = BackingTraceRight;} vinginevyo ikiwa (sensorer [SenVWall]) {// angalia ukaribu wa kiongozi (inRange) {gari (0, RadStraight); hali = R eady;} mwingine {// drive straightdrive (FullSpeed, RadStraight); state = Kufuata;}} mwingine ikiwa (umbali> = CoastDistance) {drive (0, RadStraight); state = Ready;} mwingine {drive (SlowSpeed, RadStraight);} kuvunja; kesi SearchingLeft: ikiwa (imepatikana) {if (angle> = ExtraAngle) {drive (SlowSpeed, RadStraight); state = Kufuata;} mwingine {drive (SearchSpeed, RadCCW);}} mwingine ikiwa (sensorer [SenVWall] {} kupatikana [KWELI];, RadCW); sub_counter = 0; state = SearchRight;} mwingine {drive (SearchSpeed, RadCCW);} break; kesi SearchingRight: ikiwa (imepatikana) {if (-angle> = ExtraAngle) {drive (SlowSpeed, RadStraight); state = Ifuatayo; {drive (SearchSpeed, RadCCW);}} mwingine ikiwa (wait_counter> 0) {wait_counter - = 20; drive (0, RadStraight);} mwingine ikiwa (angle = Search KuliaAngle) {drive (0, RadStraight); Gari; -SlowSpeed, RadStraight); hali = BackingTraceLeft; kwa ukaribu na kiongozi gari (SlowSpeed, RadStraight);} mwingine ikiwa (! (- angle> = TraceAngle)) {drive (SearchSpeed, RadCW);}} mwingine {umbali = 0; angle = 0; gari (SlowSpeed, RadStraight); hali = Tayari; } kuvunja; kesi TracingRight: ikiwa (sensorer [SenBumpDrop] & BumpRight) {drive (0, RadStraight); state = Ready;} mwingine ikiwa (sensorer [SenBumpDrop] & BumpLeft) {umbali = 0; angle = 0; gari (- State = BackingTraceRight;} mwingine ikiwa (sensorer [SenVWall]) {// angalia ukaribu na kiongozi (inRang e) {drive (0, RadStraight); state = Ready;} mwingine {// drive straightdrive (SlowSpeed, RadStraight); state = Kufuata;}} mwingine ikiwa (! (umbali> = TraceDistance)) {drive (SlowSpeed, RadStraight };} vingine ikiwa (! (angle> = TraceAngle)) {drive (SearchSpeed, RadCCW);} mwingine {umbali = 0; angle = 0; gari (SlowSpeed, RadStraight); state = Ready;} break; kesi BackingTraceLeft: ikiwa (sensorer [SenVWall] && inRange) {drive (0, RadStraight); state = Ready;} vingine ikiwa (angle> = TraceAngle) {umbali = 0; angle = 0; gari (SlowSpeed, RadStraight); state = TracingLeft; } mwingine ikiwa (-distance> = BackDistance) {drive (SearchSpeed, RadCCW);} mwingine {drive (-SlowSpeed, RadStraight);} kuvunja; kesi BackingTraceRight: ikiwa (sensorer [SenVWall] && inRange) {drive (0, RadStraight } hali = Tayari;, RadCW);} mwingine {drive (-SlowSpeed, RadStraight);} kuvunja; default: // stopdrive (0, RadStraight); state = Re ady; kuvunja;} kucheleweshaAndCheckIR (10); kucheleweshaUpdateSensors (10);} // mwamba au kitufe cha mtumiaji kimegunduliwa, kuruhusu hali ya utulivu (kwa mfano, kitufe kitakachotolewa) gari (0, RadStraight); delayAndUpdateSensors (2000);}}}} // Sura ya kupokea usumbufu ili kuhifadhi maadili ya sensaSIGNAL (SIG_USART_RECV) {uint8_t temp; temp = UDR0; if (sensors_flag) {sensors_in [sensors_index ++] = temp; if (sensors_index> = Sen6Size) sensors_flag = 0;}} // Timer 1 interrupt kucheleweshwa kwa muda kwa msSIGNAL (SIG_OUTPUT_COMPARE1A) {if (timer_cnt) timer_cnt -; UDR0 = Thamani; Kuchelewa kwa detector ya IRAndCheckIR (uint16_t time_ms) {uint8_t timer_val = 0; inRange = 0; timer_on = 1; timer_cnt = time_ms; wakati (timer_on) {if (! (Timer_val == timer_cnt)) {inRange + = IRDetected; timer_val = timer_cnt;}} inRange = (inRange> = (time_ms >> 1))}} // Kuchelewa kwa muda uliowekwa katika ms na kusasisha maadili ya sensa kukosa kuchelewaAndUpdateSensors (uint16_t time_ms) {uint8_t temp; timer_on = 1; timer_cnt = time_ms; wakati (timer_on) {if (! sensors_flag) {for (temp = 0; temp Sen6Size; sensorer za temp ++ [temp] = sensors_in [temp]; // Sasisha jumla ya umbali na angledistance + = (int) ((sensorer [SenDist1] 8) | sensorer [SenDist0]); [SenAng1] 8) | sensorer [SenAng0]); byteTx (CmdSensors); // Weka pini za I / ODDRB = 0x10; PORTB = 0xCF; DDRC = 0x00; PORTC = 0xFF; DDRD = 0xE6; PORTD = 0x7D; (WGM12) | _BV (CS12)); OCR1A = 71; TIMSK1 = _BV (OCIE1A); // Sanidi bandari ya serial na rx interruptUBRR0 = 19; UCSR0C = (_BV (UCSZ00) | _BV (UCSZ01)); // Washa vipingamizi (); ! RobotIsOn) {RobotPwrToggleLow; kucheleweshaMs (500); // Kuchelewa katika hali hiiRobotPwrToggleHigh; // Chini hadi mpito wa juu kubadilisha nguvu za umeme (100); // Kuchelewa kwa hali hiiRobotPwrToggleLow;} kucheleweshaMs (3500); // Kuchelewa kwa kuanza}} // Kubadilisha kiwango cha baud kwenye wote Unda na moduli ya baud (uint8_t baud_code) {if (baud_code = 11) {byteTx (CmdBaud); UCSR0A | = _BV (TXC0); byteTx (baud_code); / / Subiri hadi usambazaji ukamilike wakati (! (UCSR0A & _BV (TXC0))); ehl ();; ikiwa mwingine (baud_code == Baud38400) UBRR0 = Ubrr38400; vingine ikiwa (baud_code == Baud28800) UBRR0 = Ubrr28800; vinginevyo ikiwa (baud_code == Baud19200) UBRR0 = Ubrr19200; vinginevyo ikiwa (baud_code == Baud14400) ikiwa (baud_code == Baud9600) UBRR0 = Ubrr9600; vingine ikiwa (baud_code == Baud4800) UBRR0 = Ubrr4800; vingine ikiwa (baud_code == Baud2400) UBRR0 = Ubrr2400; vinginevyo ikiwa (baud_code == Baud1200) UBRR0 = if baud_code == Baud600) UBRR0 = Ubrr600; vingine ikiwa (baud_code == Baud300) UBRR0 = Ubrr300; radius) {byteTx (CmdDrive); byteTx ((uint ByteTx ((uint8_t) (kasi & 0x00FF)); byteTx ((uint8_t) ((radius >> 8) & 0x00FF)); byteTx ((uint8_t) (radius & 0x00FF));}

Ilipendekeza: