Áåñïëàòíàÿ òåõíè÷åñêàÿ áèáëèîòåêà ÝÍÖÈÊËÎÏÅÄÈß ÐÀÄÈÎÝËÅÊÒÐÎÍÈÊÈ È ÝËÅÊÒÐÎÒÅÕÍÈÊÈ Ïðîñòîé ðîáîò. Ýíöèêëîïåäèÿ ðàäèîýëåêòðîíèêè è ýëåêòðîòåõíèêè Ýíöèêëîïåäèÿ ðàäèîýëåêòðîíèêè è ýëåêòðîòåõíèêè / Àïïàðàòóðà ðàäèîóïðàâëåíèÿ  ýòîé ñòàòüå ïðåäñòàâëåíà ñõåìà ïðîñòîãî "ðîáîòà". Îí åçäèò íà ñâåò, à åñëè íåò èñòî÷íèêà ñâåòà, òîãäà âêëþ÷àåòñÿ ðåæèì "Ñâîáîäíûé ïîèñê" ò.å. ðîáîò áóäåò åçäèòü, à ïðè ñòîëêíîâåíèè îòúåçæàòü è ðàçâîðà÷èâàòüñÿ. Ñåðäöåì ðîáîòà ÿâëÿåòñÿ ìèêðîêîíòðîëëåð ôèðìû ATMEL: AT90S2313, íî ìîæíî è ëþáîé äðóãîé ýòîé ôèðìû, ó ýòîãî ìèêðîêîíòðîëëåðà 2êá ïàìÿòè äëÿ ïðîãðàììû, 15 ïîðòîâ ââîäà/âûâîäà, äîñòóïíîå ïèòàíèå - 4-6Â. Äâèãàòåëÿìè áóäåò óïðàâëÿòü "äðàéâåð äâèãàòåëÿ" - ìèêðîñõåìà L293D (îòå÷åñòâåííûé àíàëîã - ÊÐ1128ÊÒ4À).  êà÷åñòâå äàò÷èêà áûëî ðåøåíî âçÿòü ôîòîðåçèñòîðû ÑÔ3-1. Ðîáîò ñîñòîèò èç äâóõ ìîòîðîâ. Âîò êàê îíè áóäóò ðàáîòàòü ïðè îïðåäåëåííûõ äåéñòâèÿõ:
Èñïîëüçóåìûå ðàäèîýëåìåíòû â ñõåìå: Ìèêðîêîíòðîëëåð AT90S2313 Ìèêðîñõåìà L293D (îòå÷åñòâåííûé àíàëîã - ÊÐ1128ÊÒ4À) 2 ôîòîðåçèñòîð ÑÔ3-1 Êâàðö íà 4ÌÃö Êîíäåíñàòîðû 22-24 ïÔ Ñòàáèëèçàòîð 7805 (èëè ÊÐÅÍ5À) Ðåçèñòîð 100 Îì (Îïöèîíàëüíî) Äâà ìîòîðà Ïèòàíèå Vbat - 4áàòàðåéêè ïàëü÷èêîâûå, èëè 1 êðîíà (9Â) Ïèòàíèå Vm - 1êðîíà (9Â) Ïîñëå ñáîðêè ñõåìû, íåîáõîäèìî çàãðóçèòü ïðîãðàììó â ìèêðîêîíòðîëëåð è ðîáîò ãîòîâ: /**************************************************** Chip type : AT90S2313 Clock frequency : 4,000000 MHz Memory model : Tiny External SRAM size : 0 Data Stack size : 32 ****************************************************/#include <90s2313.h> #include <stdlib.h> #include <delay.h> // íàçíà÷åíèå îïðåäåëåíèé äëÿ óäîáñòâà ðàáîòû ñ ïåðèôåðèåé #define OUT PORTB #define MOTOR_F 7 #define MOTOR_B 6 #define TURN_R 5 #define TURN_L 4 #define IN PIND #define LIGHT_R 0 #define LIGHT_L 1 #define BUMPER_F 2 #define BUMPER_B 3 // Âîçìîæíûå ðåæèìû äâèæåíèÿ enum {STOP, F, FR, FL, B, BR, BL}; //------------------------------------------------------------------------------ // Çàäåðæêà t õ 10ms //------------------------------------------------------------------------------ void Delay_10ms(unsigned char t) {char i; for(i=0;i<t;i++) delay_ms(10);} // òàáëèöà âåðîÿòíîñòåé äëÿ âûáîðà íàïðàâëåíèÿ äâèæåíèÿ // èñõîäÿ èç òåêóùåãî íàïðàâëåíèÿ äâèæåíèÿ unsigned char p[7][7] = {14, 43, 57, 71, 86, 93, 100, 7, 43, 71, 100, 100, 100, 100, 7, 50, 93, 100, 100, 100, 100, 7, 50, 57, 100, 100, 100, 100, 29, 29, 29, 29, 57, 79, 100, 36, 36, 36, 36, 71, 93, 100, 36, 36, 36, 36, 71, 79, 100}; // òåêóùåå íàïðàâëåíèå äâèæåíèÿ unsigned char this_move; //------------------------------------------------------------------------------ // Âêëþ÷åíèå êîìáèíàöèè ìîòîðîâ äëÿ äâèæåíèÿ â çàäàííîì íàïðàâëåíèè //------------------------------------------------------------------------------ void go(unsigned char direction){ switch (direction) { case STOP: OUT.MOTOR_F=0; OUT.MOTOR_B=0; OUT.TURN_R=0; OUT.TURN_L=0; break; case F: OUT.MOTOR_F=1; OUT.MOTOR_B=0; OUT.TURN_R=0; OUT.TURN_L=0; break; case FR: OUT.MOTOR_F=1; OUT.MOTOR_B=0; OUT.TURN_R=1; OUT.TURN_L=0; break; case FL: OUT.MOTOR_F=1; OUT.MOTOR_B=0; OUT.TURN_R=0; OUT.TURN_L=1; break; case B: OUT.MOTOR_F=0; OUT.MOTOR_B=1; OUT.TURN_R=0; OUT.TURN_L=0; break; case BR: OUT.MOTOR_F=0; OUT.MOTOR_B=1; OUT.TURN_R=1; OUT.TURN_L=0; break; case BL: OUT.MOTOR_F=0; OUT.MOTOR_B=1; OUT.TURN_R=0; OUT.TURN_L=1; break; } } //------------------------------------------------------------------------------ // Âûáîð íàïðàâëåíèÿ äâèæåíèÿ â ñëåäóþùåì øàãå ïî òàáëèöå âåðîÿòíîñòåé //------------------------------------------------------------------------------ unsigned char next_move(void){ unsigned char pp, i; pp = rand()/327; // ïîëó÷àåì ñëó÷àéíîå ÷èñëî 0..99 for (i=0;i<7;i++){ // èùåì ñîîòâåòñòâèå â òàáëèöå âåðîÿòíîñòåé if (p[this_move][i] > pp) break; } this_move = i; // çàïèñûâàåì íîâîå ïîëó÷åííîå íàïðàâëåíèå êàê òåêóùåå return(i); } //------------------------------------------------------------------------------ // Îáðàáîòêà ïðåðûâàíèÿ îò ïåðåäíåãî áàìïåðà (INT0 = PD2) //------------------------------------------------------------------------------ interrupt [EXT_INT0] void ext_int0_isr(void) { if(this_move==FR) go(BL); if(this_move==FL) go(BR); else go(B); Delay_10ms(250); // îòúåçä â òå÷åíèå 2.5 õ 2 ñåê Delay_10ms(250); this_move=B; } //------------------------------------------------------------------------------ // Îáðàáîòêà ïðåðûâàíèÿ îò çàäíåãî áàìïåðà (INT1 = PD3) //------------------------------------------------------------------------------ interrupt [EXT_INT1] void ext_int1_isr(void) { if(this_move==BR) go(FL); if(this_move==BL) go(FR); else go(F); Delay_10ms(250); // îòúåçä â òå÷åíèå 2.5 õ 2 ñåê Delay_10ms(250); this_move=F; } //------------------------------------------------------------------------------ // "Ñëó÷àéíîå áëóæäàíèå" //------------------------------------------------------------------------------ unsigned char walk(void){ // ýòîò öèêë îðãàíèçóåò "ñâîáîäíîå áëóæäàíèå" ïîêà // íåò ñèãíàëà íè îò îäíîãî èç äàò÷èêîâ îñâåùåííîñòè while((IN.LIGHT_R) && (IN.LIGHT_L)){ go(next_move()); // ïîëó÷àåì ñëåäóþùåå íàïðàâëåíèå äâèæåíèÿ è Delay_10ms(250); // äâèæåìñÿ â ýòîì íàïðàâëåíèè 2.5 ñåê } // ýòîò öèêë îðãàíèçóåò äâèæåíèå íà ñâåò, ïîêà // åñòü ñèãíàë õîòÿ áû îò îäíîãî èç äàò÷èêîâ îñâåùåííîñòè while((IN.LIGHT_R==0) || (IN.LIGHT_L==0)){ if((IN.LIGHT_R==0) && (IN.LIGHT_L==0)) go(F); else if(IN.LIGHT_R==0) go(FR); else if(IN.LIGHT_L==0) go(FL); } return(0); } //------------------------------------------------------------------------------ // Ãëàâíàÿ ïðîãðàììà //------------------------------------------------------------------------------ void main(void) { DDRB = 0xff; // íàçíà÷àåì âñå ëèíèè ïîðòà B íà âûõîä PORTB = 0x00; // è óñòàíàâëèâàåì íà íèõ íèçêèé óðîâåíü DDRD = 0x00; // íàçíà÷àåì âñå ëèíèè ïîðòà D íà âõîä PORTD = 0xff; // ïîäêëþ÷àåì âíóòðåííèå íàãðóçî÷íûå ðåçèñòîðû // External Interrupt(s) initialization // INT0: On // INT0 Mode: Falling Edge // INT1: On // INT1 Mode: Falling Edge GIMSK=0xC0; MCUCR=0x0A; GIFR=0xC0; // ðàçðåøàåì ïðåðûâàíèÿ #asm("sei") // çàïóñêàåì ãëàâíûé öèêë while(1) walk(); } Ñêà÷àòü ïðîãðàììó, ôàéë ïðîøèâêè è ñõåìó ðîáîòà â ôîðìàòå sPlan Ïóáëèêàöèÿ: cxem.net Ñìîòðèòå äðóãèå ñòàòüè ðàçäåëà Àïïàðàòóðà ðàäèîóïðàâëåíèÿ. ×èòàéòå è ïèøèòå ïîëåçíûå êîììåíòàðèè ê ýòîé ñòàòüå. Ïîñëåäíèå íîâîñòè íàóêè è òåõíèêè, íîâèíêè ýëåêòðîíèêè: Èñêóññòâåííàÿ êîæà äëÿ ýìóëÿöèè ïðèêîñíîâåíèé
15.04.2024 Êîøà÷èé óíèòàç Petgugu Global
15.04.2024 Ïðèâëåêàòåëüíîñòü çàáîòëèâûõ ìóæ÷èí
14.04.2024
Äðóãèå èíòåðåñíûå íîâîñòè: ▪ Ïîáîðîòü àëêîãîëèçì è èãîðìàíèþ ▪ Panasonic ãîòîâèò ê âûïóñêó IP-ìîáèëüíèê ▪ Íîñòàëüãèÿ ñíèæàåò ôèçè÷åñêóþ áîëü ▪ Intel ïîñòðîèò â Îãàéî ôàáðèêó ïî ïðîèçâîäñòâó ìèêðîñõåì Ëåíòà íîâîñòåé íàóêè è òåõíèêè, íîâèíîê ýëåêòðîíèêè
Èíòåðåñíûå ìàòåðèàëû Áåñïëàòíîé òåõíè÷åñêîé áèáëèîòåêè: ▪ ðàçäåë ñàéòà Àíòåííû. Ïîäáîðêà ñòàòåé ▪ ñòàòüÿ Åñëè áûòü, òî áûòü ïåðâûì. Êðûëàòîå âûðàæåíèå ▪ ñòàòüÿ Ó êàêîãî ðàñòåíèÿ öâåòêè ñòàíîâÿòñÿ ïðîçðà÷íûìè ïîñëå äîæäÿ? Ïîäðîáíûé îòâåò ▪ ñòàòüÿ Âèäåîèíæåíåð ýôèðíîé ñëóæáû. Äîëæíîñòíàÿ èíñòðóêöèÿ ▪ ñòàòüÿ Ñòàêàí âîäû èç êàðìàíà. Ñåêðåò ôîêóñà
Îñòàâüòå ñâîé êîììåíòàðèé ê ýòîé ñòàòüå: All languages of this page Ãëàâíàÿ ñòðàíèöà | Áèáëèîòåêà | Ñòàòüè | Êàðòà ñàéòà | Îòçûâû î ñàéòå www.diagram.com.ua |