控制板是由较简单的单片机系统加直流电机构成的控制电路。如果需要完成某些“任务”还要增加传感器控制单元。
在家庭环境下可以用一台玩具小车的底盘改装,如果条件允许,可以参考图4简便的结构自制。材料采用3mm厚的有机玻璃。
A.减速直流小电机是用舵机去掉控制电路,并切去输出轴的限位杆。
B.车轮用6mm厚的有机玻璃,切割成直径60mm的圆形,外框橡胶圈用录音机的传动皮带套上,并用双面胶纸粘好。
C.底盘支架采用20mm长度的六角铜柱。
D.转向辅助小轮用录音机上的压带轮。
传感器是个独立的元件,其种类繁多。这里向大家介绍一款价格便宜,容易找到的“红外线接收模块”,也就是我们电视机、空调上的遥控接收组件。
|
|
|
|
#include<mega8515.h>
unsigned char i:
unsigned char speed_R=255,
speed_L=255;//小车速度0-255
bit key;
bit key_l:
bit key_2;
bit key_s;
//38kHz红外线载波脉冲
interrupt【TIMO_OVF】void timerO_oVf_isr
(void)
{
//TCNTO=OXA8是38kHz,的红外线载波
//并通过PA.7口输出方波
TCNTO=OxA8;
PORTA.7=((!PORTA.7)&key);
)
//红外线调制脉冲
interrupt[TIMl_OVF】void timerl_oVf_isr
(void) ·
(
TCNTl H=OxFF;
TCNT lL=Ox00; //大约产生2MS的脉冲
1++:
if(i<20)key=!key: //产生脉冲间隔
else{key=0;if(i>50)i=O;}
}
void main(void)
{
unsigned int j,n:
unsigned char s_L,s_R,k:
PORTA=0x00;DDRA=Obl0000000;
PORTB=0x00;DDRB=Ox00;
PORTC=0x00;DDRC=Obl0100011:
PORTD=0x00;DDRD=Obl1110000;
//CLOCk source:System Clock
//Clock value:8000.000 kHz
TCCR0=0x01: TCNTO=Ox00:
TCCRlA=0x00;TCCRl B=Ox03;
TCNTlH=0x00;TCNTlL=0x00;
OCRlAH=0x00;OCRlAL=0x00;
OCRlBH=0x00;OCRlBL=0x00;
TlMSK=0x82;
ACSR=Ox80;
#asm(“sei“)
PORTD.5=1:PORTD 7=1://打开两台电机的使能端
PORTC.0=0:PORTD.4=1://电动机1,正方向
PORTC 1=0:PORTD.6=1://电动机2,正方向
while(1)
{
s_L++:
s_R++:
while(!PINDl2)j++:
if((0x0520<j)&(j<0×0590))
k++://匹配脉宽
if(i>20)
{if(k>=9)
(n=O:PORTC.7=1;}//打开LED
else
n++:k=O:}
if(n>3500)PORTC 7=O://关闭
LED
j=0:
if(PORTC.7)
{ key_l=1:key_2=O;
if(key_s)speed_R=30;else
speed_L=30;
}
else {key_2=l:speed_R=255;
speed_L=255;}
if(key_l&key_2){key_s=!key_s;
key_l=O:key_2=0;}
//软件产生电机PWM
if(s_L<speed_L)PORTD.5=1:else
PORTD.5=O:
if(s_R<speed_R)PORTD.7=1;else
PORTD_7=0:
l:
}
以上程序是让单片机产生38kHz的调制脉冲。在PA.7口通过红外线发射二极管发射出去。当前面有阻挡物体时信号被反射回来,让红外线接收模块接收后输出到12脚检测,并让小车做出相应躲避动作。
大家可以研究一下,用上面的线路修改程序,是否可以让控制板成为一台“万能学习遥控器”?
提示:用红外线接收组件接收家庭遥控器发射出来的按键脉冲信号,并存储起来,而后再用控制板上的红外线发射二极管把记录下来的脉冲格式重新发射出去。使其可以代替家庭遥控器来完成相同的功能。