“(RB-13K024)基于Arduino电子积木套件”的版本间的差异

来自ALSROBOT WiKi
跳转至: 导航搜索
 
(未显示1个用户的3个中间版本)
第5行: 第5行:
 
:Arduino 可以使用开发完成的电子元件例如 Switch 或 sensors 或其他控制器、LED、步进马达或其他输出装置。Arduino 也可以独立运作成为一个可以跟软件沟的接口,例如说:flash processing  Max/MSP  VVVV  或其他互动软件。Arduino 开发 IDE 接口基于开放源代码,可以让您免费下载使用开发出更多令人惊艳的互动作品。  
 
:Arduino 可以使用开发完成的电子元件例如 Switch 或 sensors 或其他控制器、LED、步进马达或其他输出装置。Arduino 也可以独立运作成为一个可以跟软件沟的接口,例如说:flash processing  Max/MSP  VVVV  或其他互动软件。Arduino 开发 IDE 接口基于开放源代码,可以让您免费下载使用开发出更多令人惊艳的互动作品。  
  
==Arduino 基 本技 术参数==
+
==Arduino技术参数==
 
#  微控制器核心:AVRmega168-20PU(处理速度可达 20MIPS)  
 
#  微控制器核心:AVRmega168-20PU(处理速度可达 20MIPS)  
 
#  工作电压:+5V  
 
#  工作电压:+5V  
第21行: 第21行:
 
#  支持插针  
 
#  支持插针  
  
==Arduino 下 载软 件及开发 环境 ==
+
==Arduino下载软件及开发环境 ==
 
# 软件下载  
 
# 软件下载  
 
   官方软件下载地址:http://arduino.cc/en/Main/Software
 
   官方软件下载地址:http://arduino.cc/en/Main/Software
第71行: 第71行:
 
(9)Serial.print (数据,数据的进制)——从串行端口输出数据。Serial.print(数据)默认为十进制等于 Serial.print(数据,DEC)。  
 
(9)Serial.print (数据,数据的进制)——从串行端口输出数据。Serial.print(数据)默认为十进制等于 Serial.print(数据,DEC)。  
 
(10)S erial.println(数据,数据的进制)——从串行端口输出数据,跟随一个回车和一个换行符。这个函数所取得的值与  Serial.print()一样。
 
(10)S erial.println(数据,数据的进制)——从串行端口输出数据,跟随一个回车和一个换行符。这个函数所取得的值与  Serial.print()一样。
==Arduino 应 用基 础 篇==
+
==Arduino应用基础篇==
 
:一般传感器为三线制即 VCC、GND、信号(+、-、S),Arduino Sensor Shield V5.0传感器扩展板将 Arduino  Duemilanove  2009 控制器的全部数字与模拟接口以舵机线序形式扩展出来,还特设 IIC 接口、32 路舵机控制器接口、蓝牙模块通信接口、SD 卡模块通信接口、APC220 无线射频模块通信接口、RB URF v1.1 超声波传感器接口、12864液晶串行与并行接口。  
 
:一般传感器为三线制即 VCC、GND、信号(+、-、S),Arduino Sensor Shield V5.0传感器扩展板将 Arduino  Duemilanove  2009 控制器的全部数字与模拟接口以舵机线序形式扩展出来,还特设 IIC 接口、32 路舵机控制器接口、蓝牙模块通信接口、SD 卡模块通信接口、APC220 无线射频模块通信接口、RB URF v1.1 超声波传感器接口、12864液晶串行与并行接口。  
 
[[文件:ert11.jpg|500px|有框|居中]]
 
[[文件:ert11.jpg|500px|有框|居中]]
第216行: 第216行:
 
取模拟值并在 PC 机上显示。蜂鸣器发声模块接数字 7 接口,火焰传感器接模拟 1 接口。
 
取模拟值并在 PC 机上显示。蜂鸣器发声模块接数字 7 接口,火焰传感器接模拟 1 接口。
 
[[文件:ert29.jpg|500px|有框|居中]]
 
[[文件:ert29.jpg|500px|有框|居中]]
<pre style='color:blue'>例程源代码:
+
<pre style='color:blue'>int f lame=0;//定义火焰接口为模拟 0  接口  
int f lame=0;//定义火焰接口为模拟 0  接口  
+
 
int Beep=7;//定义蜂鸣器接口为数字 7  接口  
 
int Beep=7;//定义蜂鸣器接口为数字 7  接口  
 
int val=0;//定义数字变量 val  
 
int val=0;//定义数字变量 val  
第228行: 第227行:
 
void loop()  
 
void loop()  
 
{  
 
{  
</pre>
+
 
<pre style='color:blue'>
+
 
val=analogRead(flame);//读取火焰传感器的模拟值  
 
val=analogRead(flame);//读取火焰传感器的模拟值  
 
Serial.pr int ln(val);/ /输出模拟值,并将其打印出来  
 
Serial.pr int ln(val);/ /输出模拟值,并将其打印出来  
第240行: 第238行:
 
digitalWrite(Beep,HIGH);   
 
digitalWrite(Beep,HIGH);   
 
}  
 
}  
}  
+
}</pre>
 
+
 
:演示视频地址请点击:http://v.youku.com/v_show/id_XMTk4NjU5MDcy.html  
 
:演示视频地址请点击:http://v.youku.com/v_show/id_XMTk4NjU5MDcy.html  
 
:例程二:压力大小测试仪的制作,使用压力感测电阻控制 LED 亮灭程度,并将反
 
:例程二:压力大小测试仪的制作,使用压力感测电阻控制 LED 亮灭程度,并将反
第253行: 第250行:
 
这样通过 LED 的亮度我们就可以看出读出模拟值和压力值的大小了。
 
这样通过 LED 的亮度我们就可以看出读出模拟值和压力值的大小了。
 
[[文件:ert32.jpg|500px|有框|居中]]
 
[[文件:ert32.jpg|500px|有框|居中]]
 +
 
例程源代码:
 
例程源代码:
 
<pre style='color:blue'>int led=11;//定义 LED 接口为数字 11 接口  
 
<pre style='color:blue'>int led=11;//定义 LED 接口为数字 11 接口  

2015年6月12日 (五) 17:14的最后版本


Ert1.jpg

目录

概述

Arduino 是一块基于开放源代码的 USB 接口 Simp le I/O 接口板(包括 12 通道数字GPIO,4 通道 PWM 输出,6-8 通道 10bit ADC 输入通道),并且具有使用类似 Java,C语言的 IDE 集成开发环境。让您可以快速使用 Arduino 语言与 F lash 或 Processing 等软件,作出互动作品。 Arduino 可以使用开发完成的电子元件例如 Switch 或 sensors 或其他控制器、LED、步进马达或其他输出装置。Arduino 也可以独立运作成为一个可以跟软件沟的接口,例如说:flash processing Max/MSP VVVV 或其他互动软件。Arduino 开发 IDE 接口基于开放源代码,可以让您免费下载使用开发出更多令人惊艳的互动作品。
Arduino 可以使用开发完成的电子元件例如 Switch 或 sensors 或其他控制器、LED、步进马达或其他输出装置。Arduino 也可以独立运作成为一个可以跟软件沟的接口,例如说:flash processing Max/MSP VVVV 或其他互动软件。Arduino 开发 IDE 接口基于开放源代码,可以让您免费下载使用开发出更多令人惊艳的互动作品。

Arduino技术参数

  1. 微控制器核心:AVRmega168-20PU(处理速度可达 20MIPS)
  2. 工作电压:+5V
  3. . 外部输入电压:+7V~+12V(建议)
  4. . 外部输入电压(极值):+6V≤Vin≤+20V
  5. 数字信号 I/O 接口 0~13:共 14 个,其中 6 个 PWM 输出接口(P in11、Pin10、Pin9、P in6、Pin5、Pin3)
  6. 模拟信号输入接口 0~5:共 6 个
  7. DC I/O 接口电流:40 mA
  8. Flash 容量:16 KB (其他 2K 用于 bootloader)
  9. SRAM 静态存储容量:1KB
  10. EEPROM 存储容量:512 bytes
  11. 时钟频率:16MHz、支持 USB 接口协议
  12. 支持 USB 供电与外部供电
  13. 支持 ISP 下载功能
  14. 支持插针

Arduino下载软件及开发环境

  1. 软件下载
 官方软件下载地址:http://arduino.cc/en/Main/Software
  1. 软件及硬件驱动安装
 软件是绿色版本,软件解压缩后即可使用。 
Ert2.jpg
  1. 软件解压完成后,接下来要安装 Arduino 硬件驱动。
  2. 现将 Arduino 上的方头 USB 连接好之后,另外一端的 USB 连接好计算机任意一个US B 接口。


Ert3.jpg

接下来就会出现 F 232R US B UART 的驱动程序安装画面。

Ert4.jpg

按照安装提示选择从列表或指定位置安装,点击下一步。

Ert5.jpg
点击浏览,找到 Arduino 软件所在位置的 drivers

文件夹,再次点击下一步,就可 以进行安装驱动程序了,显示完成即硬件驱动安装完成。

  1. Arduino 编译下载软件使用说明

打开软件只需执行 arduino.exe 执行文件,就可以看到如下程序编译窗口。

Ert6.jpg
在输入程序前需要先选择板号和 COM 口,COM 口号可以在我的电脑右键管理里设备管理器里看到,实例中 COM 口为 COM13。
Ert7.jpg
板号的选择就需要您根据您自己Arduino的型号选择,实例中使用的为Arduino Duemilanove 168,需选择 Arduino Diecimila,Duemilanove,or Nano w/ATmega 168,若硬件为 Arduino Mega 1280 即需选择 Arduino Mega。
Ert8.jpg
基本设置完毕就可以编写程序了。
Ert9.jpg
Ert10.jpg

Arduino 基 本语 言概述

Arduino 使用起来要比其他微处理器更易懂,与 Basic S tamp 有些相似,Arduino 的编程语言更为简单和人性化,Arduino编程语言基于C语言,但其实用性要远高于C语言,主要由于它将一些常用语句组合函数化,例如:延时函数 delay( 1000)即为一秒。
  1. Arduino 程序基本架构

(1)声明变量及接口名称(int val; int ledPin=13;)。 (2)setup()——函数在程序开始时使用,可以初始化变量、接口模式、启用库等 (例如:pinMode(ledPin,OUTUPT);)。 (3)loop()——在 setup()函数之后,即初始化之后,loop() 让你的程序循环地被执行,使用它来运转 Arduino。

  1. Arduino 常用编程语言

(1)pinMode(接口名称,OUTPUT 或 INP UT)将——接口定义为输入或输出接口, 用在 setup()函数里。 (2)digitalWrite(接口名称,HIGH 或 LOW)——将数字接口值至高或低。 (3)digitalRead(接口名称)——读出数字接口的值。 (4)analogWrit e(接口名称, 数值)——给一个接口写入模拟值(PWM 波)。对于 ATmega168 芯片的 Arduino(包括 Mini 或 BT),该函数可以工作于 3,5,6,9,10和 11 号接口。老版的 ATmega8 芯片的 US B 和 serial Arduino 仅仅支持 9,10 和 11 号接口。 (5)analogRead(接口名称)——从指定的模拟接口读取值,Arduino 对该模拟值进行 10-bit 的数字转换,这个方法将输入的 0-5 电压值转换为 0 到 1023 间的整数值。 (6)delay()——延时一段时间,delay(1000)为一秒。 (7)Serial.begin(波特率)——设置串行每秒传输数据的速率(波特率)。在同计算机通讯时,使用下面这些值:300,1200,2400,4800,9600,14400,19200,28800,38400,57600 或 115200。你也可以在任何时候使用其它的值,比如,与 0 号或 1 号插口通信就要求特殊的波特率。用在 setup()函数里 (8)Serial.read()——读取持续输入的数据。 (9)Serial.print (数据,数据的进制)——从串行端口输出数据。Serial.print(数据)默认为十进制等于 Serial.print(数据,DEC)。 (10)S erial.println(数据,数据的进制)——从串行端口输出数据,跟随一个回车和一个换行符。这个函数所取得的值与 Serial.print()一样。

Arduino应用基础篇

一般传感器为三线制即 VCC、GND、信号(+、-、S),Arduino Sensor Shield V5.0传感器扩展板将 Arduino Duemilanove 2009 控制器的全部数字与模拟接口以舵机线序形式扩展出来,还特设 IIC 接口、32 路舵机控制器接口、蓝牙模块通信接口、SD 卡模块通信接口、APC220 无线射频模块通信接口、RB URF v1.1 超声波传感器接口、12864液晶串行与并行接口。
Ert11.jpg

接口示意图如下:

Ert12.jpg
  1. 常用数字电子积木

按压式大按钮模块

Ert13.jpg
按压式大按钮模块是 Arduino 学习入门必备数字开关量输入模块,通过编程可以实

现发光灯控制,发声器控制,按键选择功能等。 电磁式蜂鸣器发声模块

Ert14.jpg
蜂鸣器是一种一体化结构的电子讯响器,采用直流电源供电,广泛应用于计算机、

打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中 作发声器件。若想获得有关蜂鸣器资讯请点击:蜂鸣器的结构原理及制作。 单向倾角传感器模块

Ert15.jpg
基于钢球开关的数字模块,利用钢球的特性,通过重力作用使钢球向低处滚动,

从而使开关闭合或断开,国内的滚珠开关大都是水银开关,易破损、氧化、漏气、寿 命短、污染环境等弊端,钢球滚珠开关摒弃以上缺点,更环保易用,比使用水银开关 更加安全,可作为单向倾角传感器使用。 震动传感器模块

Ert16.jpg
震动式开关数字输出模块,当模块所处环境发生震动时,模块信号将产生高低电

平变化,左边传感器内有钢珠适合检测较小幅度的震动,右侧传感器内有弹簧适合测 量较大震动幅度的震动。 磁感应传感器模块

Ert17.jpg
磁感应传感器的主要构成的材料来自于干簧管。干簧管是一种磁敏的特殊开关。

它通常由两个或三个既导磁又导电材料做成的簧片触点,被封装在充有惰性气体(如氮、氦等)或真空的玻璃管里,玻璃管内平行封装的簧片端部重叠,并留有一定间隙或相互接触以构成开关的常开或常闭接点。若想获得有关磁感应传感器详细资料请点击: 磁感应传感器的知识。 Mini 寻线传感器模块

Ert18.jpg
Mini

红外寻线传感器是根据反射式光电传感器原理开发的专用机器人产品,可以帮助你的机器人进行白线或黑线跟踪,可以检测白底中的黑线,也可以检测黑底中的 白线。寻线反馈信号可以提供稳定的 TTL 电平输出(开关量),使寻线更准确更稳定。其可用于光电测速、程控小车寻线,是轮式机器人的必备传感器。若想获得有关红外传感器详细资料请点击:寻线传感器原理简介与应用。 Mini 避障传感器模块

Ert19.jpg
Mini IR Dectector是一款距离可调式避障传感器。此传感器对环境光线适应能力强、精度高,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,此时指示灯亮起,经过电路处理后,信号输出接口输出数字信号,可通过电位器旋钮调节检测距离,有效距离 2~40cm,工作电压为 3.3V-5V,由于工作电压范围宽泛,在电源电压波动比较大的情况下仍能稳定工作,适合多种单片机、Arduino 控制器、BS2 控制器使用,安装到机器人上即可感测周围环境的变化。若想获得有关红外传感器详细资料请点击: 红外遥控的发射和接收原理简介与应用。

数字继电器模块

Ert20.jpg
Arduino Relay Shield 数字继电器模块提供一路输入输出功能,模块集成动态指示灯,可显示继电器开合状态,设有续流二极管起保护作用,最高可以接 250V/3A 的交流或 30V/3A 直流设备,因此可以通过 Roboboard 控制器、Arduino 控制器来控制,将弱电控制转换成强电控制。在使用 Arduino 设计互动作品时,很多大电流或者高电压的设备(如电风扇等)通常无法直接用 Arduino 或其他单片机的数字 I/O 接口进行控制,这时就可以用这款数字继电器模块通过 3P 传感器连接线直接插到 Arduino S ensor Shield V5.0 传感器扩展板或 Arduino MEGA Sensor Shield V1.0 专用传感器扩展板上,这将会帮您解决这个问题,真可谓制作互动作品的必备之选。若想获得更多关于继电器方面的知识请点击:关于继电器的一些知识。

人体红外热释电传感器

Ert21.jpg
人体红外热释电传感器是一款基于热释电效应的人体热释运动传感器,能检测到

人体或动物身上发出的红外线,配合菲涅尔透镜能使传感器探测范围更远更广。可在Arduino 控制器上编程应用,通过 3P 传感器连接线插接到 Arduino 专用传感器扩展板上使用,可以轻松实现人体或动物检测的相关的互动效果。若想获得更多关于热释电传感器方面的知识请点击:热释电红外传感器。 综合应用实例

例程一:用按压式大按钮模块和蜂鸣器发声模块搭建简单电路,实现按键发声提示

功能。

Ert22.jpg
蜂鸣器发声模块接数字接口7,大按钮模块接数字接口11,当大按钮按下蜂鸣器鸣响,这里大按钮模块为输入设备,蜂鸣器模块为输出设备。
例程源代码: 
int Beep=7;//定义蜂鸣器接口 
int But ton=11;//定义大按钮接口 
int val;//定义数字变量 val 
void setup() 
{ 
pinMode(Beep,OUTPUT);//定义蜂鸣器为输出接口 
pinMode(But ton,INPUT);// 定义大按钮为输出接口 
} 
void loop() 
{ 
val=digit alRead(Button);// 将数字接口 11  的值读取赋给 val 
if(val==LOW)//若按键被按下蜂鸣器鸣响 
{ 
digit alWr ite(Beep,LOW); 
} 
else 
{
digit alWr ite(Beep,HIGH);  
} 
} 
例程二:震动模块和数字 13 接口自带 LED 搭建简单电路,制作震动闪光器。
Ert23.jpg
利用数字 13 接口自带的 LED,将震动传感器接入数字 7 接口,当震动传感器感测

到有震动信号时,LED 闪烁发光。

例程源代码: 
int Led=13;//定义 LED  接口 
int S hock=7;//定义震动传感器接口 
int val;//定义数字变量 val 
void setup() 
{ 
pinMode(Led,OUTPUT);//定义 LED  为输出接口 
pinMode(S hock,INPUT);//定义震动传感器为输出接口 
} 
void loop() 
{ 
val=digit alRead(Shock);//将数字接口 7  的值读取赋给 val 
if(val==HIGH)//当震动传感器检测有信号时,LED  闪烁 
{ 
digitalWrite(Led,LOW); 
} 
else 
{ 
digitalWrite(Led,HIGH); 
} 
} 


例程三:将红外热释电传感器信号接口通过连接线插到数字7接口上,搭建简单电路,检测到人体或动物身上发出的红外线时,控制器自带数字 13 接口 LED 灯点亮。
Ert24.jpg
例程源代码: 
int Led=13;//定义 LED  接口 
int S ensor=7;//定义红外热释电传感器接口
int val;//定义数字变量 val 
void setup() 
{ 
pinMode(Led,OUTPUT);//定义 LED  为输出接口 
pinMode(S ensor,INP UT); 
//定义红外热释电传感器为输出接口 
} 
void loop() 
{ 
val=digit alRead(Sensor);//将数字接口 7  的值读取赋给 val 
if(val==LOW) 
//当红外热释电传感器检测有信号时,LED  亮起 
{ 
digitalWrite(Led,LOW); 
} 
else 
{ 
digit alWr ite(Led,HIGH);  
} 
} 
综上所述,数字传感器模块使用方法比较简单,一般都是输出高低电平数字量信

号,通过以上三个实例的介绍,大家可以举一反三,学习使用其他类型的数字传感器模块,完成自己的互动佳作。

  1. 常用模拟传感器

旋转角度传感器模块

Ert25.jpg
Arduino 旋转角度传感器是基于可调电位计工作原理所设计,其不仅可以做为可调电阻控制电机转速,还可以在其旋转头部安装单摆轮,测量倾角,旋转角度从 0 到 300度,可使用 3P 传感器连接线与 Arduino Sensor Shield V5.0 传感器扩展板接插,通过编程在 Arduino Mega168 控制器上可以轻松实现与旋转位置相关的互动作品。
  1. 光线传感器模块
Ert26.jpg
Arduino Light S ensor 是基于半导体的光电效应原理所开发的光线传感器,其可用来对周围环境光的强度进行检测,结合各种单片机控制器或者 Arduino 控制器可实现光的测量、光的控制和光电转换等功能,可通过 3P 传感器连接线与 Arduino 专用传感器扩展板结合使用,可以制作光感相关的互动作品。若想获得更多关于光线传感器方面的知识请点击:光敏电阻的原理及应用。

火焰传感器模块

Ert27.jpg
远红外火焰传感器可以用来探测火源或其它一些波长在 760 纳米~1100 纳米范围内的热源,探测角度达 60 度,其中红外光波长在 940 纳米附近时,其灵敏度达到最大。此火焰传感器在灭火机器人比赛或者搜救机器人比赛中起着非常重要的作用,它可以 当做机器人的眼睛来寻找火源或光源足球,结合 Arduino 控制器与传感器扩展板,可利用它制作灭火机器人、足球机器人等。

F SR 压力传感器

Ert28.jpg
Force Sensing Resistor 压力感应电阻是著名 Interlink Electronics 公司生产的一款重量轻,体积小,感测精度高,超薄型压力传感器。当压力感测电阻器感应面的压力增加时,其阻抗就会减少,从而取得压力数据。其可用于机械手末端夹持器感测夹持物品有无,仿生机器人足下行走地面感测,哺乳类动物咬力测试生物实验,应用范围及其广泛。若想获得更多关于压力传感器方面的知识请点击:关于压力传感器的知识。

综合应用实例

例程一:使用火焰传感器和蜂鸣器模块搭建一个简单电路,制作火焰报警器,读

取模拟值并在 PC 机上显示。蜂鸣器发声模块接数字 7 接口,火焰传感器接模拟 1 接口。

Ert29.jpg
int f lame=0;//定义火焰接口为模拟 0  接口 
int Beep=7;//定义蜂鸣器接口为数字 7  接口 
int val=0;//定义数字变量 val 
void setup() 
{ 
pinMode(Beep,OUTP UT);// 定义 LED  为输出接口 
pinMode(flame,INPUT);//定义蜂鸣器为输入接口 
S erial.begin(9600);//设定波特率为 9600 
} 
void loop() 
{ 

val=analogRead(flame);//读取火焰传感器的模拟值 
Serial.pr int ln(val);/ /输出模拟值,并将其打印出来 
if(val>=600)//当模拟值大于 600  时蜂鸣器鸣响 
{ 
digitalWrite(Beep,LOW); 
} 
else 
{ 
digitalWrite(Beep,HIGH);  
} 
}
演示视频地址请点击:http://v.youku.com/v_show/id_XMTk4NjU5MDcy.html
例程二:压力大小测试仪的制作,使用压力感测电阻控制 LED 亮灭程度,并将反

馈模拟值在 PC 屏幕上显示。

压力感应电阻是弯曲压力传感器的一种,简称 FSR。FSR 是一种随着有效表面上

压力增大而输出阻值减小的高分子薄膜,FSR 并不是测压元件或形变测量仪,尽管他们有着相似的性能。而且这类压力感测电阻不适用于精密测量,但是 FSR 却是一款灵敏度较高的传感器。

Ert30.jpg

首先看一下 Force Sensing Resistor 压力感应电阻的使用方法

Ert31.jpg
按照上图搭建电路,数字 11 接口连接绿色 LED,将 FSR 读出的模拟值赋给 LED,

这样通过 LED 的亮度我们就可以看出读出模拟值和压力值的大小了。

Ert32.jpg

例程源代码:

int led=11;//定义 LED 接口为数字 11 接口 
int F SR=0;//定义压力传感器接口为模拟 0 接口 
int val;//定义数字变量 val 
int i;//定义数字变量 i 
void setup() 
{ 
pinMode(led,OUTP UT);// 定义 LED 为输出接口 
pinMode(F SR,INP UT);// 定义压力传感器为输入接口 
Serial.begin(9600);//设定波特率为 9600
} 
void loop() 
{ 
val=analogRead(FSR);//度取压力传感器的模拟值并将其赋给变量 val 
analogWrit e(led,val);//将 val 的值赋给 LED 接口 
Serial.pr intln(val);打印 val 的模拟值 
}

Arduino 应 用高 级 篇

  1. RB URF v1.1 超声波传感器
Ert33.jpg
RB URF v1.1 超声波传感器是机器人领域最常用的测距避障模块。其可用来检测对方机器人的有无和距离。侦测距离可达 3cm 到 340cm,传感器在有效探测范围内自动标定,无需任何人工调整就可以获得障碍物准确的距离。令你的机器人像蝙蝠一样通过声纳来感知周围的环境,你只需要在单片机、BS2 微控制器或Arduino 微控制器中编写一小段程序,就可以根据障碍物的距离精确的控制机器人的电机运行,从而使你的机器人轻松地避开障碍物。
超声波的工作原理就像声纳一样,通过发送器发出超声波信号,遇到物体反射回

来传到接收器,然后计算反射回来所用的时间,即可计算距障碍物的距离。

Ert34.jpg
Arduino 与超声波传感器搭建电路进行测距实验。Arduino Sensor Shield V5.0 传感器扩展板设有超声波接口可直接接插使用,对应发射和接收接口分别为模拟 0和模拟1,即数字 14 和数字 15 接口(模拟接口 0-5 可代替数字接口使用接口号对应数字 14-19)。
编一个简单的测距程序,在 13 接口接一个小灯,使其当测得距离大于 50 厘米时亮起。
例程源代码:
int  inputP in=4;    //  定义超声波信号接收接口 
int outputP in=5; //  定义超声波信号发出接口 
int ledpin=13;  
void setup() 
{ 
Serial.begin(9600); 
pinMode(ledpin,OUTPUT); 
pinMode(inputP in, INPUT);  
pinMode(outputP in, OUTPUT);  
}
void loop() 
{ 
digitalWrite(outputPin, LOW);
//  使发出发出超声波信号接口低电平 2μs 
delayMicroseconds(2); 
digitalWrite(outputPin, HIGH);
//  使发出发出超声波信号接口高电平 10μs,这里是至少 10μs 
delayMicroseconds(10);  
digitalWrite(outputPin, LOW);  
//  保持发出超声波信号接口低电平 
int distance = pulseIn( inputP in, HIGH);
//  读出脉冲时间 
distance= distance/58;
//  将脉冲时间转化为距离(单位:厘米) 
Serial.pr intln(distance);     //输出距离值
delay(50);
if (distance >=50)//如果距离大于 50 厘米小灯亮起 
{   digitalWrite(ledpin,HIGH);}  
else//如果距离小于 50 厘米小灯熄灭 
{
digit alWr ite(ledpin,LOW);  
} 
} 

若想获得更多关于超声波传感器方面的知识请点击:超声波测距原理及应用实例

  1. Arduino 控制舵机
Ert35.jpg
舵机是一种位置伺服的驱动器,主要是由外壳、电路板、无核心马达、齿轮与位

置检测器所构成。其工作原理是由接收机或者单片机发出信号给舵机,其内部有一个基准电路,产生周期为 20ms,宽度为 1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。经由电路板上的 IC 判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到达定位。适用于那些需要角度不断变化并可以保持的控制系统。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为 0,电机停止转动,一般舵机旋转的角度范围是 0°到 180°。

舵机有很多规格,但所有的舵机都有外接三根线,分别用棕、红、橙三种颜色进

行区分,由于舵机品牌不同,颜色也会有所差异,棕色为接地线,红色为电源正极线,橙色为信号线。

Ert36.jpg
舵机的转动的角度是通过调节 PWM(脉冲宽度调制)信号,就是占空比来实现的,标准 PWM(脉冲宽度调制)信号的周期为 20ms(50Hz),理论上脉宽分布应在 1ms到 2ms 之间,但是事实上脉宽可由 0.5ms 到 2.5ms 之间,脉宽和舵机的转角 0°~180°相对应。有一点值得注意的地方,由于舵机牌子不同,对于同一信号,不同品牌的舵机旋转的角度也会有所不同。
Ert37.jpg
用 Arduino 控制舵机的方法有两种,一种是通过 Arduino 的普通数字传感器接口产生占空比不同的方波,模拟产生 PWM 信号进行舵机定位,第二种是直接利用 Arduino自带的 S ervo 函数进行舵机的控制,这种控制方法的优点在于程序编写简单,缺点是只能控制 2 路舵机,因为 Arduino 自带函数只提供了数字 9、 10 接口的控制。Arduino的 US B 接口供电功率有限,所以当需要控制多个舵机时需要外接电源,Arduino S ensor Shield V5.0 传感器扩展板已将外接电源接口留出方便用户使用。

控制方法一 将 RB-421 舵机接在 V5.0 传感器扩展板的数字 7 接口上

Ert38.jpg
编写一个程序让舵机转动到用户输入数字所对应的角度数的位置,并将角度值显

示到 PC 屏幕上。

例程源程序 
int servopin=7;//定义舵机接口数字接口 7 
int myangle;/ /定义角度变量 
int pulsewidth;//定义脉宽变量 
int val; 
void servopulse(int servopin, int  myangle) 
//定义一个脉冲函数 
{ 
pulsewidth=(myangle*11)+500;  
//将角度转化为 500-2480 的脉宽值 
digitalWrite(servopin,HIGH);  
//将舵机接口电平至高 
delayMicroseconds(pulsewidth);  
//延时脉宽值的微秒数 
digitalWrite(servopin,LOW);  
//将舵机接口电平至低 
delay(20-pulsewidt h/1000);  
} 
void setup() 
{ 
pinMode(servopin,OUTPUT);//设定舵机接口为输出接口 
Serial.begin(9600);//连接到串行端口,波特率为 9600 
Serial.pr intln("servu=o_seral_simp le ready" ) ; 
} 
void loop() 
//将 0 到 9 的数转化为 0 到 180 角度,并让 LED 闪烁相应数的次数
{ 
val=Ser ial.read();//读取串行端口的值 
if(val>'0'&&val<='9') 
{ 
val=val-'0';//将特征量转化为数值变量 
val=val*(180/9); //将数字转化为角度 
Serial.print(" moving servo to "); 
Serial.print( val,DEC);  
Serial.println(); 
for(int  i=0;i<=50; i++)  
//给予舵机足够的时间让它转到指定角度
} 
servopulse(servopin,val);//引用脉冲函数
{ 
} 
} 
 
控制方法二

先具体分析一下 Arduino 自带的 Servo 函数及其语句,来介绍一下舵机函数的几个 常用语句吧。

  1. attach(接口)——设定舵机的接口,只有数字9或10接口可利用。
  2. wr ite(角度)——用于设定舵机旋转角度的语句,可设定的角度范围是0°到180°。
  3. read()——用于读取舵机角度的语句,可理解为读取最后一条 write()命令中的值。
  4. attached()——判断舵机参数是否已发送到舵机所在接口。
  5. detach()——使舵机与其接口分离,该接口(数字9或10接口)可继续被用作 PWM

接口。 注:以上语句的书写格式均为“舵机变量名.具体语句()”例如:myservo.attach(9)。 将 RB-421 舵机接在传感器扩展板 V5.0 的数字 9 接口上。

Ert39.jpg

例程源代码:

  1. include <Servo.h>

// 定 义 头 文件 , 这 里 有一 点 要 注意 , 可 以 直接 在

Arduino

软 件菜 单 栏 单击

Sketch>Importlibrary>S ervo, 调用 Servo 函数,也可以直接输入#include <Servo.h>,但是在 输入时要注意在#include 与<Servo.h>之间要有空格,否则编译时会报错。 Servo myservo;//定义舵机变量名 void setup() { myservo.attach(9);//定义舵机接口,9或10 } void loop() { myservo.write(90);//设置舵机旋转的角度 }

我们在做一个小实验,便于巩固刚才所学的知识,利用旋转电位器传感器模块控

制 RB-421二自由度云台运动姿态。

这里我们采用上述介绍的控制方法二,相比之下在不多于两个舵机的情况下方法

二还是不错的选择。我们将 RB-421二自由度云台接到 Arduino 的数字9和10接口。将外接电源接到传感器扩展板 V5.0的红色端子处,在模拟3和4号接口接入两个旋转电位器传感器模块。

Ert40.jpg

例程源程序:

#include <Servo.h> 
S ervo myservo; 
S ervo myservo1; 
int analogP in = 3; 
int analogP in1 = 4;  
int val,val1; 
void setup() 
{ 
myservo.attach(9) ; // 9 号引脚输出电机控制信号 
myservo1.attach(10);  
S erial.begin(9600); //仅能使用 9、10 号引脚 
} 
void loop() 
{ 
S erial.print("servo:");  
S erial.println(val);  
delay(15);  
S erial.print("servo1:");  
Serial.pr int ln(val1);  
val = analogRead(analogPin);  
val1 = analogRead(analogPin1);  
//  读取来自可变电阻的模拟值(0 到 1023 之间) 
val = map(val, 0, 1023, 0, 179);  
//  利用“map”函数缩放该值,得到伺服电机需要的角度(0 到 180 之间) 
val1 = map(val1, 0, 1023, 0, 179);  
myservo.write(val);//  设定伺服电机的位置 
myservo1.write(val1);  
delay(15); //  等待电机旋转到目标角度 
} 
  1. MMA7260 三轴加速度计
Ert41.jpg
此款三轴加速度传感器采用

Freescale(飞思卡尔)公司生产性价比高微型电容式加速度传感器 MMA7260 芯片。其采用了信号调理、单级低通滤波器和温度补偿技术,并且提供了 4 个灵敏度量程选择的接口和休眠模式接口,该产品带有低通滤波并已作零 g 补偿,化金工艺加工,用料上乘,可靠保证,体积小、重量轻,标识符清晰简明,接线容易,防止接线错误造成硬件损坏,可通过 7 彩跳线连接,插于 Mini 面包板上,通过 Arduino 控制器编程,是制作倾角、运动、姿态检测互动作品的理想之选。

Ert42.jpg
编写一段程序采集三轴加速度计 X、Y、Z 轴的输出模拟值,通过 Arduino 控制器串口回传到 PC 屏幕上显示。

例程源代码:

int xpin=3; 
int ypin=4; 
int zpin=5;  
int n; 
int m; 
int  i; 
void setup() 
{ 
Serial.begin(9600);  
} 
void loop() 
{ 
n=analogRead(xpin);  
m=analogRead(ypin);  
i=analogRead(zpin);  
S erial.print("x=");  
S erial.println(n);  
S erial.print("y=");  
S erial.println(m);  
S erial.print("z="); 
S erial.println(i);  
} 

更详尽的使用方法和应用实例,请参见 MMA7260 三轴加速度计使用手册。

  1. LCD 1602 Keypad Shield v2.0
Ert43.jpg
Arduino LCD1602 字符液晶扩展板 v2.0 主板采用全新优质 2 行 16 个字符液晶,不仅具有对比度调节旋钮、背光灯选择开关,还具 4 个方向按键、1 个选择按键和一个复位按键;4 个传感器模拟接口、RB URF v1.1 超声波传感器接口、蓝牙模块接口、APC220无线数传模块通信接口、独立扩出更加易用方便。对Arduino 初学者来说,不必为繁琐复杂液晶驱动电路连线而头疼了,这款 1602 液晶扩展板真正意义上的将电路简化,直接将此板插到 Arduino Duemilanove 控制器上即可,传感器也仅需一根通用 3P 传感器连接线连接,可轻松实现传感器数据的记录显示。
Ert44.jpg

英文字符显示清晰

Ert45.jpg

可制作无线蓝牙超声波测距仪

下面我们做个按键选择显示功能的实验,需要用到的设备有 Arduino 控制器、

LCD1602 液晶扩展板和 USB 数据线,测试例程源代码:

#include <LCD4Bit_mod.h>
LCD4Bit_mod lcd = LCD4Bit_mod(2);
char msgs[5][15] = {"Right Key OK ",
"Up Key OK      ",
"Down Key OK   ",
"Left Key OK   ",
"Select Key OK" }; 
int    adc_key_val[5] ={30, 150, 360, 535, 760 };  
int NUM_KEYS = 5; 
int adc_key_in; 
int key=-1;  
int oldkey=-1;  
void setup() {
pinMode(13, OUTPUT);
lcd.init(); 
lcd.clear(); 
lcd.printIn("KEYPAD testing... pressing");
} 
void loop() { 
adc_key_in = analogRead(0);
digitalWrite(13, HIGH);
key = get_key(adc_key_in);  
if (key != oldkey)
{ 
delay(50);  
adc_key_in = analogRead(0);
key = get_key(adc_key_in);
if (key != oldkey) 
{
oldkey = key;  
if (key >=0){ 
lcd.cursorTo(2, 0);
lcd.printIn(msgs[key]);  
} 
} 
}
digitalWrite(13, LOW); 


int get_key(unsigned int input)  
{ 
int k;  
for (k = 0; k < NUM_KEYS; k++) 
{ 
if (input < adc_key_val[k])  
{
return k; 
} 
} 
if (k >= NUM_KEYS) 
k = -1;
return k; 
} 

Arduino 驱动控制 1602 液晶屏操作视频请点击: http:/ /v.youku.com/v_show/id_XMTc3ODY3Mzg0.html