unsigned int i;
while(1) {
for(i=0;i<200;i++)//喇叭发声的时间循环,改变大小可以改变发声时间长短 {
delay(80);//参数决定发声的频率,估算值 SPK=!SPK; }
SPK=1; //喇叭停止工作,间歇的时间,可更改 delay(20000); }
}
1.4 电机与驱动模块的工作原理与接口 电机驱动原理图
电机驱动接口图 1.4.1电机驱动模块
采用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的 H型桥式电路。用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的 PWM调速技术。
这种调速方式有调速特性优良、调整平滑、调速范围广、过载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。因此决定采用使用功率三极管作为功率放大器的输出控制直流电机。
1.5循迹模块的工作原理与接口
1.6 避障模块的工作原理与接口
2 功能方案及软件设计 2.1 功能设计
本次功能设计为智能小车循迹加避障,循迹指寻黑线走,避障指遇到障碍物小车会自动避开,寻找无障碍路线走下去;以及小车快速前进走直线后慢速后退走直线功能。
2.2 软件设计
2.2.1程序设计要求
赛道一:小车循迹黑线,在桌子上用黑线画出一个椭圆赛道,小车将沿着黑线做循迹运动;中间会设置障碍物,看小车能否自动避障。
2.2.4 程序代码
#include //包含51单片机头文件,内部有各种寄存器定义
#include
#ifndef _LED_H_ #define _LED_H_
//定义小车驱动模块输入IO口 sbit IN1=P1^2; sbit IN2=P1^3; sbit IN3=P1^6; sbit IN4=P1^7; sbit EN1=P1^4; sbit EN2=P1^5;
/***蜂鸣器接线定义*****/ sbit BUZZ=P2^3;
#define Left_1_led P3_3 //左传感器(循迹) #define Right_1_led P3_2 //右传感器(循迹)
#define Left_2_led P3_5 //左传感器(避障)
#define Right_2_led P3_4 //右传感器(避障)
#define Left_moto_pwm P1_5 //PWM信号端
#define Right_moto_pwm P1_4 //PWM信号端
#define Left_moto_go {P1_2=0,P1_3=1;} //左电机向前走 #define Left_moto_back {P1_2=1,P1_3=0;} //左边电机向后转
#define Left_moto_Stop {P1_5=0;} //左边电机停转 #define Right_moto_go {P1_6=1,P1_7=0;} //右边电机向前走 #define Right_moto_back {P1_6=0,P1_7=1;} //右边电机向后走 #define Right_moto_Stop {P1_4=0;} //右边电机停转
unsigned char pwm_val_left =0;//变量定义
unsigned char push_val_left =0;// 左电机占空比N/20 unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右电机占空比N/20 bit Right_moto_stop=1; bit Left_moto_stop =1; unsigned int time=0;
/************************************************************************/ //延时函数
void delay(unsigned int k) {
unsigned int x,y; for(x=0;x for(y=0;y<2000;y++); } /************************************************************************/ //前速前进 void run(void) { push_val_left=6; //速度调节变量 0-20。。。0最小,20最大 push_val_right=6; Left_moto_go ; //左电机往前走 Right_moto_go ; //右电机往前走 } //后退函数 如果看不明白,请看慧净电子51智能小车视频教程 void backrun(void) { push_val_left=6; //速度调节变量 0-20。。。0最小,20最大 push_val_right=6;