带手指连杆机器人-arduino学习-中文教程_第1页
带手指连杆机器人-arduino学习-中文教程_第2页
带手指连杆机器人-arduino学习-中文教程_第3页
带手指连杆机器人-arduino学习-中文教程_第4页
带手指连杆机器人-arduino学习-中文教程_第5页
免费预览已结束,剩余46页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Arduino是一块基与开放原始代码的Simplei/o平台,並且具有使用类似java,C语言的开发环境。可以快速Arduino语言FlashProcessing…等软件,作出互动作品。Arduino可以使用开发完成的电子元件例Switch台,例如说:flashprocessingMax/MSPVVVV或其他互动软件…Arduino开发IDE界面基于开放原始码原则,可以免费使用开发出令人惊奇的互动作品。Roboduino?DFRduinoArduino完全兼容,只是在原来的基础上作了些改进。ArduinoIO使用的孔座,做互动作品需要面DFRduinoIO使用针座,使用我们的杜邦线就可以直接把各种传感器连接到DFRduino上特色描DFRduino可使用ISP线,自我將新的IC程序烧入「bootloader」可依据电路图,简化DFRduino模组,完成独立云作的微处理控制器 光敏电阻伺服电机支援多样的互动程式如:Flash,Max/Msp,VVVV Prcessig使用低价格的微处理控制器(AMEG168V-10P 接口不需外接源另外有提供9DC 用方面利用FRuino,突破以往只能使用滑鼠,键盘,CCD成单性能描DigitalI/O出端0~13ogI/O出端0~5支持USB接口协议及供电(不需外接电源支持ISP功能TX/RX支持AREF子支持六組端子(Pin11,Pin10,Pin9,Pin6,Pin5,Pin3)USB5V~9VDC采用AtmelAtmega168V-10PIArduino语ArduinoC/C++基础上的C语言,ArduinoAVR单片机(微控制器)相关的一些寄存器参数设置等都函数化了,不用我们去了解他的底层,让不太了解AVR单片机(微控制器)的朋友那么这里就简单的注释一下Arduino语言/*************基础C语言关键字switchdo...语法符号;/*运算符 -*/% <>! - -数据类型 charbyte字节类 整数类unsignedintlongnsi 实数类数据类型转换常量HIGH| 表示数字IO口的电平,HIGH表示高电平(1),LOW表示低电平(0)INPUT|OUTPUT表示数字IO口的方向,INPUT表示输入(高阻态),OUTPUT表示输出(AVR5V电压40mA电流true| 以上为基础c语言的关键字和符号,有c语言基础的都应该了解其含义,这里也不结voidsetup()voidloop()功IPIPTOpinMode(pin,mode) 数字IO口输入输出模式定义函数pin表示为013 alu) O口输出电平定义函数pin0~13,value表示为HIGHLOW。比如定义HIGH可驱动LED。tdgitRed(pin) 模拟intogRead(pinIO口读函数,pin0~5(ArduinoDiecimila0~5,Arduinonano0~7)。比如可以读模拟传感器(10AD,0~5V表示为0~1023)。 ogWrite(pin,value)- 数字IO口输出函数,Arduino数字IO口标注了的IO口可使用该函数,pin表示3,5,6,9,10,11,value表示为0~255。比如可用于电机调速或音乐。扩展shiftOut(dataPinclockPin,bitOrder,value)SPIIOSPI接口的74HC5958个IO扩展,dataPin为数据口,clockPin为时钟口,bitOrder为数据传输方向(MSBFIRST,LSBFIRST低位),value表示所要传送的数据(0~255),另外还需要一个IO口做74HC595的使能控制。unsignedlongpulseIn(pin,value)脉冲长度记录函数,返回时间参数(us),pin表示为0~13,valueHIGHLOW。比如valueHIGH,那么当pin输入为高电平时,开始计pin输入为低电平时,停止计时间函unsignedlongmillis()返回时间函数(单位ms),该函数是指,当程序运行就开始计时并返回记录的参数,该参数溢出大概需要50天时间。 min(x,y)max(x,y)abs(x)constrain(x,a,b)约束函数,下限ab,xab之间才能返回map(value,fromLow,fromHigh,toLow,toHigh) 约束函数,value必须在fromLowtoLowfromHigh与toHigh之间。pow(base,exponent)开方函数,baseexponent次方 平sqrt(x)r eed(seed)随机数端口定义函数,seed表示读模拟 ogRead(pin)函数longrandom(max)0,小maxlongrandom(min,max)随机数函数,返回数据大于等于min,小于max。attachInterrupt(interrupt,,mode) 外部中断只能用到数字IO23,interrupt表示中断口初始01,表示一个功能函数,mode:LOW低电平中断,CHANGE有变化就中断,RISING上升沿中断,FALLING 中断开关,interrupt=1开,interrupt=0关。interrupts()noInterrupts()中断Arduino使 http://q-robot .co 6intSerial.available()判断缓冲器状态intSerialread()读串口并返回收到参数Serial Serial.print(data)Serial.println(data) 语言库文件库文 EEPROM-EEPROMEthernet-以太网控制器程序LiquidCrystal-LCDServo-SoftwareSerial-任何数字IOStepper-步进电机控制程序Wire-TWI/I2C总线程序Matrix-LED矩阵控制程序Sprite-LED 第二课Arduino的数字、模拟端引导串口发过来的程序顺利写入flash区中,flash可以重复烧写,因此想更新软件就是这么的方便。下面我来简单的介绍一下驱动的安装和编译环境的使用。首先连接程序用的线。首先将数据线的圆口一端插在Arduino328板子上·将数据线的扁口一端插在电脑的USB接口上,如下图所示 ·driversFTDIUSBDrivers件夹,如图 框Arduino0018开发编译环境很简洁,各个功能键功能描述接下来点Tools->Board选择开发板型号这里我们使用的是ArduinoDuemilanove328,Tools->SerislPort选择串口,即USBArduino语言是以setup()开头,loop()作为主体的一个程序构架。是这样描述setup()的:用来初始化变行,功能类似c语言中的“main();”。DigitalOutput数字输出实intledPin void{ }void{digitalWrite(ledPin,HIGH);//设定PIN13脚为HIGH=4V //设定延时时间,1000=1秒digitalWrite(ledPin,LOW); //设定PIN13脚为LOW=0V }intledPinintledPin=intval;voidsetup(){pMe(LED数字IOUTP}void{ {ogWrite(ledPin,val);//输 } {ogWrite(ledPin,val);}}DigitalInput数字输入实功能:闭合开关SW,PIN13脚上的LED亮,断开开关SW,PIN13脚上的LEDintledPin intintswitchPin=intval=0;void{IO (ldPinOT pinMode(switchPin IO,INPUT}void{val=digitalRead(switchPin); //读数字IO口上的状态if(HIGH==val) digitalWrite(ledPin,LOW); //如果开关断开,LED灭 //如果开关闭合,LED}ogInput模拟输入Arduino使 http://robot.taoba 功能:调节电位器RPot,使输入模拟量的变化来改变LED闪烁的intledPin intRPotPin 定模拟输入IOintval=0; voidsetup(){ //设定数字I口的模式,OUP 输}void{ nagRdP IO口上diitalWrite(ledPin,HIGH); //设定PIN13脚为HIGH=4V //延时时间为模拟输入的值digitalWrite(ledPin,LOW); //设定PIN13脚为LOW //延时时间为模拟输入的值}第三课Arduino的串口通Arduino不但有14个数字接口和6个模拟接口外,还有1个更为常用的串口接口。在实际应用中串口以只需要少串行接口按标准被分为RS-232、RS-422、RS-485。RS-232是在1962年发布的,也是目前PC机与通信工业中应用最广泛的一种串行接口,RS-232采取不平衡传输方式,即所谓单端通讯。典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5~+15V,负电平在-5~-15V电平。我们的单片机使用的是TTL电平的串行协议,因此单片机与pc通讯时需要进行RS-232电平和TTL电平的转换,最常用的电平转换是MAX232,单片机与单片机通USB版本的Arduino则是通过USB转成TTL串 程序的,数字口PIN0和PIN1就是TTL串口RX和TXArduino使 http//q- 串口通讯中最重要的一点就的通讯协议,一般串口通讯协议都会有波特率、数据位、停止位、校验位等参数。大家不会设置也不用怕,Arduino语言中Serial.begin()函数就能使大家轻松完成设置,我们只需要改变该函数的参数即可,例如Serial.begin(9600),则表示波特率9600bit/s(每秒比特数bps),其余参数默认即可。口发送及Serial.println()带换行符串口发送四个函数。下面我们用一段代码来演示这些函数的用途。实验无须电路,只需要将的USB线连接即可charword;voidsetup(){ }void{ifSerial.available0)判断串口缓冲器是否有数据装{word= //串口{Serial.print("Robot"); Serial.println("isNO.1");//从串口发送字符串并换行}}}}编 Arduino使 http://q-robot .co 选择串口监视器的波特率为9600bps,在发送框里填上字母a,点send发送,下面的显示框里就会显示返回的数第四课ArduinoI2C/TWI通什么的I2C呢?I2C即Inter-IntegratedCircuit串行总线的缩写,是PHILIPS公司推出的间串行传输总线。它以1根串行数据线(SDA)和1根串行时钟线(SCL)实现了双工的同步数据传输。具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C线器件同时接到I2C上,通过地址来识幸运的是,Arduino供了I2C(Wire.h),这样我们就可以很轻松的玩IIC通讯了这里使用ArduinoDiecimila2ArduinoNano(不一定非要nanoArduinoDiecimila、Mini甚至其他IIC器件都可以。如果IIC总线上挂了多个从机,那么就要在总线上加上拉电阻。),ArduinoNano是Arduino中的新成员,估计大家还不太熟悉吧,这里我就简单介绍一下。Arduino使 换功能,12版的编译环境支持nano硬件。成为主器件,这就是总线竞争。在竞争过程中数据不会被破坏成为主器件,这就是总线竞争。在竞争过程中数据不会被破坏下面我们就做个简单的I2C通讯实验,通过编译环境的串口监视器向主机发送指令,主机收到后,再通过I2C总线发送给地址匹配的从机,然后从LED亮。代码分主从部分,主机部分写ArduinoDiecimila,从机部分写入ArduinoNano。在上代码之前,我们先了解一下IIC的库函数Wire.h里面的常用函数 //初始化Wire设置IIC requestFrom(address,count)//在启动IIC总线后,可以继 另一个地址,和次 IIC byte //用于判断数据是否有效有效才始接byte nReiv(hnd nRueshnd 主机代码:(从编译器串口监视器发送数字1,2,3,4来控制从机的LED亮与灭#include<Wire.h>voidsetup(){ //启动I2C总线,地址缺省表示为主机 //启动串口,设置波特率为9600Serial.println("Ready");//发送字符}void{intif(Serial.available(0)//判断串口缓冲器是否有数据装{ {Wire.beginTransmission(44通 //发送数字1开LED //停止发送Serial.println("49 49OK,49数字1ASCII }else{Wire.beginTransmission(4);//与地址4的从机连接通讯 //发送数字0关LED //停止发送Serial.println("50OK"); //串口上显示50OK表示完成}else{}else{We.bgiTnsissin(5Wre.snd0)//发送数字0Wire.beginTransmission(5);//与}else{We.bgiTnsissin(5Wre.snd0)//发送数字0 //停止发送Serial.println("52OK"); //串口上显示52OK表示完成}else}}从机A代码:(接收到主机发送的1点亮LED,接收到0关掉#include<Wire.h>intLED=2;voidsetup(){ //设置从机地址为4 IO模Arduino使 http//q- void{}voidreceiveEvent(int {intc {digitalWrite(LED,HIGH果为1开}else{digitalWrite(LED,LOW);//如果为0关}}从机B代码:(接收到主机发送的1点亮LED,接收到0关掉#includeintintLED=void{Wirebgin址为 ReeivereeiEvent);pi}void{}voidreceiveEvent(int{intc=Wire.receive();{}else{}Arduino使 第五课Arduino1602字符液晶1602是最常用的一种,很具有代表性,1602晶分482(关但使用Arduino板驱动1602液晶,还真有点费劲,因为他只能位操作。根据提供的例程,很容易看出他们intDI=12;intRW=intDB{3456,78910};//使用数组来定义总线需要的管脚intEnable=2; mandWrite(intvalue)//pollallthe{inti=fori=DB[0iDI; {digitalWrite(i,value&value>>=} i(EnalLdelMroecons//sendapulseto/puse1msgod//pause1msaccordingto}voidLcdDataWrite(intvalue)//pollallthe{inti=0;digitalWrite(RW,LOW);for(i=DB[0];i<=DB[7];i++)digitalWrite(i,value&value>>=} //sendapulsetoenable //pause1msaccordingto}Arduino使 htp:/ bt.a voidsetup{inti=for(i=Enable;i<=DI;{} //initiatizelcdafterashortpause neededbytheLCDscontrollermandWrite(0x38);//set: //8-bitinterface,1displaylines,5x7fontmandWrite(0x06);//entrymodeset: //incrementautomatically,nodisplayshiftmandWrite(0x0E);//displaycontrol://turndisplayon,cursoron,noblinkingmandWrite(0x01);//cleardisplay,setcursorpositiontozeromandWrite(0x80);//displaycontrol://turndisplayon,cursoron,noblinking}voidloop(void)mandWrite(0x02);//setcursorpositionto//Writee taWrte(' Wrte('LcdDataWrite('');}Arduino使 http://robot.taoba 行调,本实验使用的是灰膜液晶,VEE直接接到地即可。它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置指令2:光标复位,光标返回到地址指令3I/D:光标移动方向,高电平右S:屏幕上所有文字是否左移或者右移。高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁指令5:光标或显示移 指令6DL4位总线,低电平8N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x75x10的点阵字符指令7:字符发生器RAM地址设置指令8:DDRAM地址设置指令11ArduinoDM的数字端口只有14个,那么LCD1602就占用了10个,浪费了不少资源,对我们以后的电路扩展带来了极大的不便。于是我就可以使用该液晶的4总线驱动方式,可以节省3个数字端口出来作其他扩展。本人编写的工intLCD1602_RS=12;intLCD1602_RW=11;intintDB[]6,7,8, charstr1[]=" eto"; charstr2[]=" mand_Write(intcommand) {intdigitalWrite(LCD1602_RS,LOW);digitalWrite(LCD1602_RW,LOW);digitalWrite(mand&for(i=DB[0];i<=for(i=DB[0];i<=9;{digitalWrite(i,temp&080)tp<=1;}for(i=DB[0];i<=10;{digitalWrite(i,temp&0x80);temp<<=1;}digitalWrite(LCD1602_EN,HIGH);digitalWrite(LCD1602_EN,LOW);}voidLCD_Data_Write(intdat) {intdigitalWrite(LCD1602_RS,HIGH);digitalWrite(LCD1602_RW,LOW);digitalWrite(LCD1602_EN,LOW);temp=dat&0xf0;for(i=DB[0];i<=9;{digitalWrite(i,temp&0x80);temp<<=1;}digitalWrite(LCD1602_EN,HIGH);digitalWrite(LCD1602_EN,LOW);temp=(dat&0x0f)<<4;for(i=DB[0];i<=10;{digitalWrite(i,temp&0x80);temp<<=1;}digitalWrite(}**digitalWrite(}**********voidLCD_SET_XY(intx,inty {intif(y==0) address=0x80+x; address=0xC0+x;}voidLCD_Write_Char(intx,inty,intdat) {LCD_SET_XY(x,y}voidLCD_Write_String(intX,intY,char*s)//写字符Arduino使 htp:/q-robottaobo {LCD_SET_XY(X,Y //设while {s++;}}voidsetup(void){inti=for(i=6;i<=12;{}mand_Write(0x28);//425x7del(0)del(0) mad_Wrte0}voidloop(void){ }编译后,进Arduino,显示如图 #incudeLCD4Bitlcd lcd.cursorTo(2, //line=2,lcd.leftScroll(20,50); 注意:若使用LCD4Bit.h的话,RW需要接地.第六课Arduino驱动直流电驱动模块DF-MDV1.2,电路连接非常简单。注 拟不压值,从而控制加到电机两端的电压高低来实现调速。intEN1=9; intIN1=8;intIN2=intEN2 intIN3=5;intIN4intIN3=5;intIN4=4;void{deIN1OUPU}void{intfor(value=0;value<=255;{ //改变电平方向,电机反转 ogWrite(EN1,value);//调速ogWrite(EN2,value);//调速}}Arduino使 http//q- 第七课Arduino读红外测距传感器Arduino读红外测距传感器GP2D12实例,大家参考器材:Arduino开发板,GP2D12,1602字符液晶,连接线若干是 是标准电流消耗:33-50从曲线图中我们可以看出,输出电压并非是线性的所以这个测距也只能个大概如果要精度高的话就需要做非线性校正,这里我们就不讨论这个题了。实验原理GP1根据离的远近输出相应电压,经Arduino开发板0号模拟口输入,转换成数字量,根据公 intledpin=intledpin=intLCD1602_RS=12;intLCD1602_RW=11;intLCD1602EN=1intB[]=6,78char charstr2[]="Renge:00cm";charstr3[]="Rengevoidsetup(void){inti=for(i=6;i<=13;{}}voidloop(void){floattemp;intval;{val= //改变被除数,可以减小点误差 //由G2D12成反比所以要用一个常量相减改变这常,可以减小点误差。va{ //超出范围显示Renge}{}}}Arduino使 htp://q- 第八课Arduino控制舵舵机,又称伺服马达,是一种具有闭环控制系统的机电结构。舵机主要是由外壳、电路板、无马达、齿轮与位置检测器所构成。其工作原理是由控制器发出(脉冲宽度调制信号给舵机,经电路板上的IC处理后计算出转动方向,再驱动无马达转动,透过齿轮将动力传至摆臂,同时由位置检测器(电位器)返回位置信号,判断是否已经到达设定位置,一般舵机只能旋转180度。舵机有3根线,棕色为地,红色为电源正,橙色为信号线,但不同牌子的舵机,线的颜色可能不同,请机的机的转动位置是靠控制 (脉冲宽度调制信号的占空比来实现的,标准(脉冲宽度调制信号的周期固定为0ms,占空比0.5~2.5ms的正脉冲宽度和舵机的转角-90°~90对注于牌同控解 ArduinoArduino使梦工 实验需要扩展板一个,舵机实验需要扩展板一个,舵机3只。由于只是做演示用,舵机5v电源就暂时使用Arduino用,因为多个舵机转动时电流比较大,Arduino上的电源可能会因过热而保护甚至损坏,电源选择跳线需要接到外部供电,不可使用USB供电。Arduino给我们提供了一个很好的舵机调用函数库(舵机函数库地址),可以让Arduino任意IO口控制舵机,下列代码使用Arduino的编译环境中的串口监视器发送数据来控制舵机旋转角度。#includeServoservo1;//定义舵机1Servoservo2;//定义舵机2Servoservo3;//定义舵机3voidsetup(){ servo1.setumPulse(2200);//定义旋转的时间 }void{staticstaticintv=if({ Ser d口数h({case'0'...'9vv*10ch0';//字符换算成10casea,则表示是servo1的数据,比如串口发送v=caseb,则表示是servo2的数据,比如串口发送v=casec,则表示是servo3的数据,比如串口发送v=}}}第九课Arduino通过无线数传通讯实通讯。下面先介绍一下APC220的特性和参数配置。(1)。APC220工作频率15Mzo(1)。APC220工作频率15Mzo455Hz460Hzto4MH(1KHz调制频率间隔空中传输速率1200接口速率1200接口效验方式接口缓冲空间工作湿度10%~90%(无冷凝工作温度20℃电源3.35.5V50mV发射电流接收电流休眠电流尺寸39mmx19mmx。APC220的上位机软。USB转接器的使用PC错位,请看下图的红色标记,避免连接错误。USB器插到电脑上需要安装驱动程序驱动大家应该比较熟练了吧,这里就不多讲了,驱动地址。PCUSBAPC伴侣选选择PCSeri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论