使用微控制器ATmega328的无线手势控制机器人

电子说

1.2w人已加入

描述

步骤1:电路组件

半导体

IC1-7805,5V稳压器

IC2-ATmega328微控制器

IC3- LM1117-33,3.3电压调节器

IC4-HT12E,2 12串联编码器

IC5-HT12D,2 12串联解码器

IC6-L293D,双H桥式电动机驱动器

LED1和4-5mm LED

电阻器(全部1/4瓦,碳含量为5%):

R1-1兆欧

R2-10千欧

R3-750千欧

R4-R7-220欧姆

R8-47千欧

电容器:

C1,C2-22pF陶瓷盘

C3-0.1μF陶瓷盘

C4-0.33μF陶瓷盘

C5-10μF,16V电解

其他:

CON1,CON3-2针连接器

CON2-6针连接器

X TAL 1-16MHz晶体

TX1-433MHz发射器模块

RX1-433MHz接收器模块

M1,M2 -直流减速电机,100rpm

S1,S2-开/关开关

电池1-9V PP3电池

电池2-4.5V, 1.5Ah铅酸电池

ANT.1,ANT.2-17厘米长的单股线天线

-ADXL335 3轴加速度计

第2步:这是什么?

ATmega328

ATmega328是Atmel的单芯片微控制器,属于mega AVR系列。基于Atmel 8位AVR RISC的微控制器结合了具有读写功能的32kB ISP闪存,1kB EEPROM,2kB SRAM,23个通用I/O线,32个通用工作寄存器,三个灵活的定时器/计数器,以及比较模式,内部和外部中断,串行可编程USART,面向字节的2线串行接口,SPI串行端口,10位A/D转换器,带有内部振荡器的可编程看门狗定时器和5个软件可选的电源-节能模式。设备工作在1.8至5.5伏之间它实现了接近每MHz 1 MIPS的吞吐量。 ATmega328p可以替代ATmega328p。

ADXL335

这是一个完整的三轴加速度测量系统。 ADXL335的最小测量范围为±3g。它包含一个多晶硅表面微机械传感器和信号调理电路,以实现开环加速度测量架构。输出信号是与加速度成比例的模拟电压。加速度计可以测量倾斜感应应用中的静态重力加速度,以及由于运动,冲击或振动而产生的动态加速度。

该传感器是一个多晶硅表面微加工结构,位于顶部硅晶片。多晶硅弹簧将结构悬挂在晶片表面上方,并提供抵抗加速力的能力。使用由独立的固定板和连接到运动物体上的板组成的差分电容器来测量结构的挠度。固定板由180°异相方波驱动。加速度会使移动的质量偏转并使差动电容器不平衡,从而导致传感器输出的幅度与加速度成比例。然后使用相位敏感的解调技术确定加速度的大小和方向。

L293D

这是一个16引脚DIP封装电机驱动器IC(IC6),具有四个输入引脚和四个输出引脚。全部四个输入引脚连接到解码器IC(IC5)的输出引脚,四个输出引脚连接到机器人的直流电动机。启用引脚用于启用IC6两侧的输入/输出引脚。

编码器(HT12E)和解码器(HT12D)IC

212编码器是用于远程控制系统应用的一系列CMOS LSI。它们能够编码由N个地址位和12 N个数据位组成的信息。每个地址/数据输入可以设置为两个逻辑状态之一。接收到触发信号后,已编程的地址/数据将与标头位一起通过RF或红外传输介质进行传输。选择HT12E上的TE触发或HT12D解码器上的数据(DIN)触发的能力进一步增强了212系列编码器的应用灵活性。 HT12D还为红外系统提供38kHz的载波。

发射器

发送器由ATmega328微控制器(IC2),ADXL335加速度计,HT12E编码器(IC4)和433MHz RF发送器模块(TX1)组成。在该电路中,来自ADXL335引脚(x,y)的两个模拟输出与微控制器的输入引脚(23,24)连接。模拟信号通过微控制器转换为数字信号。来自微控制器的引脚16、17、18和19的数字输出直接发送到编码器IC4的引脚13、12、11和10。此数据通过RF模块TX1进行编码和传输。

接收器

接收器部分由433MHz射频接收器模块(RX1),HT12D解码器(IC5)和L293D电机驱动器(IC6)组成,用于运行电机。此处,接收器模块RX1接收发送的信号,该信号由解码器IC解码以获得相同的数字输出。 IC6的四个输出驱动两个电动机。机器人按照发射器中加速度计的倾斜方向移动。

步骤3:方框图

机器人

步骤4:发射器和接收器电路

机器人

机器人

步骤5:收发器电路的PCB布局

机器人

机器人

机器人

机器人

前两个图像是接收器电路的布局,其他两个图像是发射器电路的布局。/p》

步骤6:软件程序

该软件程序是用Arduino编程语言编写的。我借助Arduino IDE 1.0.5和Arduino Uno板编写了一个新的ATmega328微控制器。

首先,您必须将引导加载程序代码加载到微控制器中。为此,通过选择文件→示例→Arduino ISP,我将Arduino Uno用于IDE中给出的系统内编程(ISP)。将引导程序上传到微控制器后,即可上载该项目的pose.ino代码。

步骤7:源代码

const int ap1 = A0;

const int ap2 = A1;

int sv1 = 0;

int ov1 = 0;

int sv2 = 0;

int ov2 = 0;

void setup()

{//以9600 bps初始化串行通信:

Serial.begin(9600);

pinMode(13,OUTPUT);

pinMode(12,OUTPUT);

pinMode(11,OUTPUT);

pinMode(10,OUTPUT);

}

void loop()

{AnalogReference(EXTERNAL);//将3.3v连接到AREF

//读取模拟值:

sv1 = AnalogRead(ap1);

ov1 = map(sv1,0,1023,0,255);

delay(2);

sv2 = AnalogRead(ap2);

ov2 = map(sv2,0,1023,0,255);

延迟(2);

Serial.print(“ Xsensor1 =”);

Serial.print(SV1);

Serial.print(“ \ t output1 =”);

Serial.println(OV1);

Serial.print(“ Ysensor2 =”);

Serial.print(sv2);

Serial.print(“ \ t output2 =”);

Serial.println(OV2);

if(analogRead(ap1)《514 && analogRead(ap2)《463)//用于向后移动

{

digitalWrite(13,HIGH);

digitalWrite(12,LOW);

digitalWrite(11,HIGH);

digitalWrite(10,LOW);

}

else

{

if(analogRead(ap1)《486 && analogRead(ap2)》 508)//左打开

{

digitalWrite(13,LOW);

digitalWrite(12,HIGH);

digitalWrite(11,HIGH);

digitalWrite(10,LOW);

}

其他

{

if(analogRead(ap1)》 512 && analogRead(ap2)》 560)//用于转发

{

digitalWrite(13,LOW);

digitalWrite(12,HIGH);

digitalWrite(11,LOW);

digitalWrite(10,HIGH);

}

else

{

if(analogRead(ap1)》 550 && analogRead(ap2)》 512)//右打开

{

digitalWrite(13,HIGH);

digitalWrite(12,LOW);

digitalWrite(11,LOW);

digitalWrite(10,HIGH);

}

否则

{

digitalWrite(13,HIGH);

digitalWrite(12,HIGH);

digitalWrite(11,HIGH);

digitalWrite(10,HIGH);

}

}

}

}

}

步骤8:测试

机器人

机器人

安装此处所示PCB上的所有组件,以最大程度地减少组装错误。将接收器PCB和4.5V电池固定在机器人的机箱上。在机器人的后侧固定两个电机以及车轮,在前侧固定一个脚轮。将主代码上传到微控制器后,将其从Arduino Uno板上移除,然后将其插入到组装好的发送器PCB中。

现在,打开发送器和接收器电路中的电源。将变送器电路连接到您的手(或手套)上,然后向前,向后和侧向移动您的手。机器人的运动方向在表I中给出。如果您保持手掌水平并平行于地球表面,则机器人将停止运转。

为进行故障排除,请首先验证各个测试点的电压是否符合表1所述。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分