找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

利用单片机+超声波控制舵机转向的制作 附源程序

查看数: 6921 | 评论数: 14 | 收藏 7
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-3-12 18:21

正文摘要:

通过超声波感应,使舵机转向,(在此本人有个想法,可以通过舵机控制自来水开关。即间接的做成了一个小的智能设备) 材料: 51单片机开发板 杜邦线 舵机+超声波 3.7V电池两个 束缚带 胶水 冰淇淋棒 程序为 ...

回复

ID:947589 发表于 2021-6-30 23:16
楼主有接线图么
ID:836542 发表于 2021-3-29 15:31
为啥我的舵机到位置后要抖动一下
ID:885324 发表于 2021-2-21 16:11
17875610146 发表于 2020-3-12 18:23
arduino程序我也有大家需要我也可以放出来

这是完整的源程序吗?
单片机源程序如下:
#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;
}
ID:885324 发表于 2021-2-21 16:07
这是完整的源程序吗
ID:885324 发表于 2021-2-21 16:06
17875610146 发表于 2020-3-12 18:23
arduino程序我也有大家需要我也可以放出来

单片机源程序如下:
#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;
}
ID:885324 发表于 2021-2-21 16:01
17875610146 发表于 2020-3-12 18:23
arduino程序我也有大家需要我也可以放出来

想咨询
ID:760058 发表于 2020-8-26 22:38
没有原理图吗,亲爱的楼主
ID:638921 发表于 2020-8-24 20:20
楼主有红外控制舵机转向的吗
ID:461901 发表于 2020-4-2 09:44
能不能让舵机返回原点前停顿3S呀???
ID:711252 发表于 2020-3-24 19:00
请教下这个舵机是什么型号的?
ID:89286 发表于 2020-3-15 22:46
thanks for sharing
ID:709089 发表于 2020-3-15 21:39
高啊,感谢分享啊
ID:648072 发表于 2020-3-13 17:48
感谢楼主的分享
ID:557065 发表于 2020-3-12 18:23
arduino程序我也有大家需要我也可以放出来

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表