Orodha ya maudhui:
Video: Jinsi ya Kufanya Robo-Bellhop: Hatua 3
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:54
Fuata Zaidi na mwandishi:
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
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:
Jinsi ya Kufanya Windows 10 Kufanya Kazi kwenye Raspberry Pi: 3 Hatua
Jinsi ya Kufanya Windows 10 Kufanya kazi kwenye Pi ya Raspberry: Kufanya windows 10 kufanya kazi kwenye pi ya raspberry inaweza kukatisha tamaa lakini mwongozo huu utatatua shida zako zote zinazohusiana na Raspberry Pi Windows 10
Kufanya Meneja wa Faili Kufanya kazi katika Webmin: Hatua 5
Kufanya Meneja wa Faili Kufanya kazi katika Webmin: Meneja wa Faili ya Webmin ni zana muhimu sana. Kwa sababu ya Oracle (sanduku la sabuni) imekuwa ngumu sana kutumia Programu za Java kwenye kivinjari. Kwa bahati mbaya, Kidhibiti faili ni Programu ya Java. Ina nguvu sana na inafaa juhudi kuifanya iwe mbaya
Jinsi ya Kufanya Roboti ya Mfuatiliaji Ndogo Kidogo Duniani (robo Rizeh): Hatua 7 (na Picha)
Jinsi ya Kufanya Roboti ya Mfuatiliaji Ndogo Ndogo Duniani (robo Rizeh): Jinsi ya kutengeneza laini ndogo zaidi ya wafuasi (vibrobot) " roboRizeh " uzito: 5gr saizi: 19x16x10 mm na: Naghi Sotoudeh Neno " Rizeh " ni neno la Kiajemi linalomaanisha " ndogo ". Rizeh ni mtetemeko kulingana na ro ndogo sana
Jinsi ya Kufanya Servo Motor Yako Kufanya Mzunguko Kamili: Hatua 5
Jinsi ya Kufanya Servo Motor yako Kufanya Mzunguko Kamili: Je! Servo Motor ni nini? Servo motor ni kifaa cha umeme ambacho kinaweza kusukuma au kuzungusha kitu kwa usahihi mkubwa. Ikiwa unataka kuzunguka na kupinga kitu kwa pembe maalum au umbali, basi unatumia servo motor. Imeundwa tu na motor rahisi w
Jinsi ya Kufanya Mpokeaji Redio rahisi wa FM 100% Kufanya Kazi Iliyohakikishiwa: Hatua 4
Jinsi ya Kufanya Mpokeaji Rahisi wa Redio ya 100 Kufanya Kazi Iliyohakikishiwa 100%: Soma: Jinsi ya kutengeneza skana ya redio ya FM kwa maelezo zaidi miundombinu ya BK1079 IC Zaidi ya mzunguko wa redio ya FM ambayo nimeona kwenye YouTube na Google kawaida hujumuisha ngumu sana. vifaa vinavyohitaji uwezo maalum wa kutofautisha