熱門: 51單片機(jī) | 24小時必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時間: 2020-3-12 18:21
正文摘要:通過超聲波感應(yīng),使舵機(jī)轉(zhuǎn)向,(在此本人有個想法,可以通過舵機(jī)控制自來水開關(guān)。即間接的做成了一個小的智能設(shè)備) 材料: 51單片機(jī)開發(fā)板 杜邦線 舵機(jī)+超聲波 3.7V電池兩個 束縛帶 膠水 冰淇淋棒 程序?yàn)?... |
| 樓主有接線圖么 |
| 為啥我的舵機(jī)到位置后要抖動一下 |
17875610146 發(fā)表于 2020-3-12 18:23 這是完整的源程序嗎? 單片機(jī)源程序如下: #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; //舵機(jī)的控制引腳 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){ //延遲函數(shù) 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; } //中斷程序 初始化賦值 重新計(jì)數(shù) 超聲波模塊用 計(jì)算時間 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); //計(jì)算路程 單位為cm TH0=0; TL0=0; if(distance<30) //如果距離小于30cm 蜂鳴器響 { control=15; //使舵機(jī)向正擺動 servorTime=0; TR1=1; delay(200); delay(200); TR1=0; } else { control=5; //使舵機(jī)向右擺動 servorTime=0; TR1=1; delay(200); delay(200); TR1=0; delay(200); delay(200); } } } void T1_int(void) interrupt 3{ //產(chǎn)生舵機(jī)所需要的脈沖 TH1=0xff; TL1= 0x9c; servorTime++; if(servorTime<=control) servorControl=1; else servorControl=0; if(servorTime>=200) servorTime=0; } |
| 這是完整的源程序嗎 |
17875610146 發(fā)表于 2020-3-12 18:23 單片機(jī)源程序如下: #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; //舵機(jī)的控制引腳 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){ //延遲函數(shù) 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; } //中斷程序 初始化賦值 重新計(jì)數(shù) 超聲波模塊用 計(jì)算時間 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); //計(jì)算路程 單位為cm TH0=0; TL0=0; if(distance<30) //如果距離小于30cm 蜂鳴器響 { control=15; //使舵機(jī)向正擺動 servorTime=0; TR1=1; delay(200); delay(200); TR1=0; } else { control=5; //使舵機(jī)向右擺動 servorTime=0; TR1=1; delay(200); delay(200); TR1=0; delay(200); delay(200); } } } void T1_int(void) interrupt 3{ //產(chǎn)生舵機(jī)所需要的脈沖 TH1=0xff; TL1= 0x9c; servorTime++; if(servorTime<=control) servorControl=1; else servorControl=0; if(servorTime>=200) servorTime=0; } |
17875610146 發(fā)表于 2020-3-12 18:23 想咨詢 |
| 沒有原理圖嗎,親愛的樓主 |
|
樓主有紅外控制舵機(jī)轉(zhuǎn)向的嗎 |
| 能不能讓舵機(jī)返回原點(diǎn)前停頓3S呀??? |
| 請教下這個舵機(jī)是什么型號的? |
| thanks for sharing |
|
高啊,感謝分享啊 |
| 感謝樓主的分享 |
| arduino程序我也有大家需要我也可以放出來 |
Powered by 單片機(jī)教程網(wǎng)