本文概述
- 工作中
- 所需硬件
- 所需软件
- 加速度传感器
- 变送器框图
- 接收器框图
- 施工
工作中 为了设计基于加速度计的手势控制机器人, 使用了AVR ATmega16微控制器。在此, 我们将手势用作输入信号, 以在各种方向上驱动机器人, 并且机器人的运动方向显示在16X2字母数字LCD上。
根据手势, ATmega16微控制器将向机器人的直流电动机驱动器(L293D)发送所需的信号, 以沿所需方向驱动机器人。
机器人的控制手势为向右倾斜, 向左倾斜, 向前倾斜, 向后倾斜和无倾斜, 以分别沿向右, 向左, 向前, 向后方向驱动机器人并使其停止。现在, 向各个方向倾斜你的手, 并根据需要驱动机器人。
机器人方向 | 控制手势 |
---|---|
Forward | 前倾 |
Left | Left Tilt |
Right | Right Tilt |
Backward | 向后倾斜 |
Stop | no Tilt |
- 12V, 1A DC适配器1件
- 三轴加速度传感器1个
- AVR微控制器板1件
- 直流电动机驱动器1件
- AVR USB Programmer-1件
- 16X2字母数字LCD-1件
- 1对1连接器-15件
- 10至10 FRC母连接器3件
- 机器人1件
- BASCOM-AVR集成开发环境(IDE)
- AVRDUDE-GUI
- WinAVR-2010
- USBasp驱动程序
【手势控制机器人设计实例】影响加速度计的两种力是:
- 静力-这是任何两个对象之间的摩擦力。通过测量该重力, 我们可以确定机器人倾斜了多少。此测量对于平衡机器人或确定机器人是在平坦表面还是在上坡行驶非常有用。
- 动态力-它是移动物体所需的加速度。使用加速度计测量动态力可以说明机器人移动的速度/速度。
- 灵敏度
- 带宽
- 输出类型:模拟或数字
- 轴数:1, 2或3
文章图片
在加速度传感器中, 集成电路(IC)有6针可用:
- X:在此引脚上, 我们将接收用于x方向移动的模拟数据。
- Y:在此引脚上, 我们将接收用于y方向运动的模拟数据。
- Z:在此引脚上, 我们将接收z方向运动的模拟数据。
- VDD:在该引脚上施加+ 5V。
- GND:在该引脚上接地。
- ST:使用此引脚将加速度计的灵敏度设置为1.5g / 2g / 3g / 4g。
文章图片
变送器框图 考虑发射机电路的框图:
文章图片
接收器框图 考虑接收器电路的框图:
文章图片
施工
文章图片
源代码:
$regfile = "m16def.dat".
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Portb.2 , E = Portb.3 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Start Timer1
Dim X As Integer , Y As Integer
Do
Cls
X = Getadc(0)
Y = Getadc(1)
Lcd X
Lowerline
Lcd Y
Wait 1
Cls
If Y >
350 Then
Lcd "fwd"
Pwm1a = 200
Portd.6 = 0
Pwm1b = 200
Portd.3 = 0
Elseif Y <
300 Then
Lcd "backward"
Pwm1a = 55
Portd.6 = 1
Pwm1b = 55
Portd.3 = 1
End If
If X >
350 Then
Lcd "right"
Pwm1a = 0
Portd.6 = 0
Pwm1b = 200
Portd.3 = 0
Elseif X <
300 Then
Lcd "left"
Pwm1a = 100
Portd.6 = 0
Pwm1b = 0
Portd.3 = 0
End If
Loop
End
下图显示了使用BASCOM-AVR集成开发环境(IDE)的手势控制机器人中使用的源代码的屏幕截图:
文章图片
推荐阅读
- 机器人历史介绍
- 机器人运动原理详解
- Eagle避障机器人设计实例
- 直线跟随机器人设计实例
- 基于DTMF的移动控制机器人设计实例
- 机器人的组成介绍
- 人工智能研究领域介绍
- 机器人和人工智能概念介绍
- 'Specifying a namespace in include() without providing an app_name '