![]() |
發布時間: 2020-3-12 18:21
正文摘要:通過超聲波感應,使舵機轉向,(在此本人有個想法,可以通過舵機控制自來水開關。即間接的做成了一個小的智能設備) 材料: 51單片機開發板 杜邦線 舵機+超聲波 3.7V電池兩個 束縛帶 膠水 冰淇淋棒 程序為 ... |
樓主有接線圖么 |
為啥我的舵機到位置后要抖動一下 |
17875610146 發表于 2020-3-12 18:23 這是完整的源程序嗎? 單片機源程序如下: #include<reg52.h> #include<stdio.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit Trig=P3^4; //控制端 sbit Echo=P3^5; //接收端 sbit led=P1^3; sbit servorControl =P1^3; //舵機的控制引腳 uchar flag=0; uchar control=5; uchar servorTime=0; unsigned char T0RH=0; unsigned char T0RL=0; void time_init() { EA=1; TMOD=0x11; TH0 = 0; TL0 = 0; } /////////////////////////////////////// void delay(uchar time){ //延遲函數 uchar i; for(;time>0;time--){ for(i=0;i<255;i++); } } //初始化定時器 void Delay_us(unsigned char t) { while(--t); } //大約延時t*2+5us 超聲波模塊用 ////////////////////////////////////// void timer0()interrupt 1 { TH0 = 0; TL0 = 0; } //中斷程序 初始化賦值 重新計數 超聲波模塊用 計算時間 void main() { unsigned int time,distance; EA=1; ET0=1; ET1=1; TMOD=0x11; TH1=0xff; TL1=0x9c; servorTime=0; Trig=0; Echo=0; time_init(); while(1) { Trig=1; Delay_us(5); Trig=0; while(Echo==0); TR0=1; while(Echo); TR0=0; time=TH0*256+TL0; distance=(int)(time*0.017); //計算路程 單位為cm TH0=0; TL0=0; if(distance<30) //如果距離小于30cm 蜂鳴器響 { control=15; //使舵機向正擺動 servorTime=0; TR1=1; delay(200); delay(200); TR1=0; } else { control=5; //使舵機向右擺動 servorTime=0; TR1=1; delay(200); delay(200); TR1=0; delay(200); delay(200); } } } void T1_int(void) interrupt 3{ //產生舵機所需要的脈沖 TH1=0xff; TL1= 0x9c; servorTime++; if(servorTime<=control) servorControl=1; else servorControl=0; if(servorTime>=200) servorTime=0; } |
這是完整的源程序嗎 |
17875610146 發表于 2020-3-12 18:23 單片機源程序如下: #include<reg52.h> #include<stdio.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit Trig=P3^4; //控制端 sbit Echo=P3^5; //接收端 sbit led=P1^3; sbit servorControl =P1^3; //舵機的控制引腳 uchar flag=0; uchar control=5; uchar servorTime=0; unsigned char T0RH=0; unsigned char T0RL=0; void time_init() { EA=1; TMOD=0x11; TH0 = 0; TL0 = 0; } /////////////////////////////////////// void delay(uchar time){ //延遲函數 uchar i; for(;time>0;time--){ for(i=0;i<255;i++); } } //初始化定時器 void Delay_us(unsigned char t) { while(--t); } //大約延時t*2+5us 超聲波模塊用 ////////////////////////////////////// void timer0()interrupt 1 { TH0 = 0; TL0 = 0; } //中斷程序 初始化賦值 重新計數 超聲波模塊用 計算時間 void main() { unsigned int time,distance; EA=1; ET0=1; ET1=1; TMOD=0x11; TH1=0xff; TL1=0x9c; servorTime=0; Trig=0; Echo=0; time_init(); while(1) { Trig=1; Delay_us(5); Trig=0; while(Echo==0); TR0=1; while(Echo); TR0=0; time=TH0*256+TL0; distance=(int)(time*0.017); //計算路程 單位為cm TH0=0; TL0=0; if(distance<30) //如果距離小于30cm 蜂鳴器響 { control=15; //使舵機向正擺動 servorTime=0; TR1=1; delay(200); delay(200); TR1=0; } else { control=5; //使舵機向右擺動 servorTime=0; TR1=1; delay(200); delay(200); TR1=0; delay(200); delay(200); } } } void T1_int(void) interrupt 3{ //產生舵機所需要的脈沖 TH1=0xff; TL1= 0x9c; servorTime++; if(servorTime<=control) servorControl=1; else servorControl=0; if(servorTime>=200) servorTime=0; } |
17875610146 發表于 2020-3-12 18:23 想咨詢 |
沒有原理圖嗎,親愛的樓主 |
樓主有紅外控制舵機轉向的嗎 |
能不能讓舵機返回原點前停頓3S呀??? |
請教下這個舵機是什么型號的? |
thanks for sharing |
高啊,感謝分享啊 |
感謝樓主的分享 |
arduino程序我也有大家需要我也可以放出來 |