历史上的今天
今天是:2024年08月25日(星期日)
2020年08月25日 | 利用单片机+超声波控制舵机转向的制作
2020-08-25 来源:51hei
通过超声波感应,使舵机转向,(在此本人有个想法,可以通过舵机控制自来水开关。即间接的做成了一个小的智能设备)
材料:
51单片机开发板
杜邦线
舵机+超声波
3.7V电池两个
束缚带
胶水
冰淇淋棒
程序为大家献上!
让大家在学习单片机时可以拥有一种成就感!
制作出来的实物图如下:
单片机源程序如下:
#include #include #include #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; }
下一篇:单片机按键的三种方法
史海拾趣
|
貌似有不少资料有说过这个接法~ 反正记得咋接的就行了 整体的打概连接图,数码管显示返回值 程序跟仿真图 [ 本帖最后由 虚V界 于 2010-3-28 16:03 编辑 ]… 查看全部问答> |
|
欲购买一块射频的评估板,主要功能就是下变频,其射频频段能涵盖2G,最好还带有LNA,小弟我找到的都是美信的板子,不过美信的板子不单卖,我也在看TI和freescale的板子,找不到合适的型号,望网上各位大侠提供意见,不胜感激~… 查看全部问答> |
|
我载入修改好的uboot.bin到flash。其中,start.s文件中我加入了亮LED的程序,在start_armboot的头部也加入了亮LED的程序,可是为什么程序运行后却只亮了前一个,感觉程序没进入start_armboot。不过我用ADX调试的时候,程序却已经进入atart_armboot ...… 查看全部问答> |
|
我看到介绍的驱动例程有两种形式的映射 一种是利用MmMapIoSpace,另外一种是用VirtualAlloc 如:ELECTROMOTOR_GPACON=(ULONG)MmMapIoSpace(GPACON,4,FALSE); v_pIOPregs = (volatile S3C2410X_IOPORT_REG *)VirtualAlloc(0, sizeof(S3C2410X_IOPO ...… 查看全部问答> |
|
本人初学wince编程,想用Platform Builder搭建一个平台,于是照着一篇文章的介绍一步一步的做下来,到最后仿真器终端出现了,可是却没有图形界面,窗口上方有Emulator和Help的菜单,下来就是一片黑屏了。请高手指教一下问题可能出现再哪? … 查看全部问答> |
|
您好,版主! 我想请教下stm32的抗静电等级与潮敏各是多少呢? 静电等级:J8000 J5000 J2000 J1000 J500 J200 是那个级别的 是j2000吗? 潮敏:C1 C2 C3 C4 C5是那个级别的呢?… 查看全部问答> |
|
PCF8594的datasheet里有这么一句话 Pin 7 (PTC) must be connected to either VDD or left open-circuit. 翻译是:7脚(PTC)必须接到VDD或者防止开路。 但是,实际上我们使用的时候就是 7脚(PTC)要么接VDD 要么上拉5-10K电阻… 查看全部问答> |
|
关于这次DIY我的方案是这样的: 1、电梯的升降一个电机通过PWM来控制,轿厢门的开关也是通过PWM控制的电机实现。 2、对于轿厢内部,需要10个按键加一个数码管(或者显示屏),1-7层的选择按键和开门,关门,紧急按键。 3、每层楼需要2个按键来选 ...… 查看全部问答> |




