Arduino的互动产品平台创新设计

发布者:温暖拥抱最新更新时间:2012-04-12 来源: 单片机与嵌入式系统应用关键字:Arduino  AVR单片机  PWM输出 手机看文章 扫描二维码
随时随地手机看文章

引言

Arduino是一系列基于单片机的人机互动产品开发平台,由于其具有高度的模块化特点,有时也叫它“电子积木”。它的硬件平台是开放的,任何人都可以在Arduino官方网站上下载最新的PCB设计进行复制。Arduino的硬件平台包括基于AVR单片机的主控制电路板,以及大量的各式输入/输出电子模块。输入/输出模块包括开关输入模块、温度压力传感器输入模块、超声测距传感器输入模块、各类显示输出模块、电机控制模块等,甚至还有以太网接入模块。由于Arduino具有丰富易用的模块,已经在各类机电创新设计比赛中得到广泛应用。在软件方面,Arduino有一个属于自己的基于Eclipse的IDE软件开发环境,开发语言采用类C++语言的高级语言,容易被使用者掌握。有大量的库文件可以通过互联网下载免费获得,大大简化了程序开发工作。由于Arduino丰富的外围模块、容易掌握的开发语言和环境,大量的库支持,使得基于Arduino的电子互动产品设计越来越多。从Arduino诞生的2005年到2011年,已有超过15万块的Arduino模板售出[1]。本文介绍了Arduino的硬件、软件,并给出了采用Arduino开发互动产品的实例,使初学者对它有一个基本的认识。

1 Arduino硬件

1.1 Arduino主控板

Arduino的主控板采用AVR单片机,最新的版本是UNO,与之前的版本不同,它不再使用FTDI USB串行驱动芯片,而是把Atmega8U2编程为一个USB设备。相对于它的前几代,这带来了许多好处。首先是价格降低了,更重要的是这使得Arduino在PC端可以显示为一个USB设备,就像是一个鼠标或游戏操作手柄,这开辟了Arduino的新用途[1]。总之,Arduino的主控板就是一个单片机控制板,在这一点上与其他单片机控制板并无本质的区别,但是由于其拥有丰富的系列产品、大量的开源软件,让Arduino得到了更为广泛的应用和支持。

1.2 Arduino输出模块

市场上已经出现了围绕Arduino Duemilanove开发的很多输出模块:有视觉输出的,如LED灯控制、LCD控制、触摸屏控制等;有声音输出的,如蜂鸣器和扬声器模块;还有物理系统的控制模块,如各类直流小马达、步进电机、机器人舵机等。另外,还可以利用AVR单片机的PWM输出口进行D/A转换。这些模块大大拓展了Arduino作为一个单片机平台的用途。其中基于LN298设计的直流马达控制模块在各类机器人项目中采用得很多,这种模块能够同时控制两路直流马达,与ArduinoDuemilanove之间的连接也十分简便。输出单元的模块化使搭建基于Arduino系统的应用项目很方便。

1.3 Arduino输入模块

最一般的输入如各类按钮、位置行程开关等都有相应的模块可以购买。其他诸如超声测距、压力传感器、温度传感器、倾角传感器等也有相应的模块可以直接应用。还有记录数据和通信用的模块、如SD卡模块,以太网接入模块等,这让Arduino不仅仅作为一个控制终端使用,还可以进行数据的存储和简单处理,以及与外界系统通信等,可见其输入模块资源丰富。从输入的信号来看,可以分为数字量的信号输入(如以上的开关模块等),模拟量的信号输入(如温度、压力传感器模块),通过总线网络方式的数据输入(如采用各类通信协议的传感器模块等)。

2 Arduino软件

2.1 Arduino编程语言

Arduino编程语言是建立在C/C++语言基础上的。Arduino语言把AVR单片机(微控制器)相关的一些参数设置都参数化了,不用开发者去了解其底层,对AVR单片机了解不多的用户也可以容易地开发基于AVR的项目。需要注意的是,Arduino的语言与C语言运行机制还是有一些区别的,特别是在项目程序中必须包括setup和loop两个函数。setup函数在系统上电或复位后运行一次,因此一般用户在其中做一些初始化工作,如设定串口通信的波特率等,一些一次性的工作也可以放在这个函数中运行,如下文中的写SD卡文件的例子程序。Loop函数是Arduino软件项目的主体,系统上电并且运行完成setup函数后,就进入loop函数,并且该函数是一个无限循环的过程,这一点需要开发者特别注意,这与C语言的void main(){}是有很大区别的。loop函数相当于下面这样一个无限循环过程:

while(1){

用户程序

}

在系统setup执行之后,总是进入这个函数,开发者需要把自己的程序放在这个函数内运行。[page]

2.2 Arduino开发环境

Arduino的开发环境很简洁,用户可以在其官方网站上免费下载使用,IDE如图1所示。可以看到,在一个简单的菜单和工具条下,就是IDE的编程窗口和一个串行通信监视窗口。其中工具条包含了保存打开文件、向Arduino板下载程序等主要功能,与一般的Windows软件并无不同。在编程窗口下是一个串口监视器窗口。因为Arduino开发板没有专门的显示平台,在许多程序的调试过程中需要Arduino传输给上位机一些信息以便于开发者判断程序的运行状况,或者得到程序的运行结果。这些结果可以通过串口监视器显示,开发者也可以通过该窗口向Arduino板发送一些信息,极大地方便了项目的开发。

图1 Arduino的IDE

3 Arduino平台开发实例

3.1 用Arduino读写SD卡

SD卡体积小,价格便宜,因此在许多工业数据记录和家用电子产品中有越来越多的应用。Arduino可以通过SPI接口与之通信,进行诸如建立文件、删除文件、向文件中添加内容、修改文件等操作,这样采用Arduino配合SD卡可以开发数据记录设备。

Arduino与SD卡的简单连接,只需要6只电阻和1张SD卡,通过软件模拟的方式实现SPI接口,Arduino与SD卡连接电路如图2所示。

图2 Arduino与SD卡连接电路[page]

由于SD卡的操作电压为3.3 V,而Arduino的逻辑电压为5 V,因此需要用起分压作用的电阻(本文采用了Josh Adams书中的验证性电路),在实际的应用中最好采用分压模块以保证卡和Arduino板的安全。之后在网址http://code.google.com/p/sdfatlib/下载Bill Greiman开发的SdFat.h和SdFatUtil.h头文件和库文件,并安装到Arduino安装目录中的库文件夹中就可以使用了。简化程序如下:

#include

#include

Sd2Card card;

SdVolume volume;

SdFile root,file;

void writeString(SdFile& f,char * str){

Uint8_t n;

for(n=0;,str[n];n++)

F.write((uint8_t*) str,n)

}

void setup(){

card.init(SPI_HALF_SPEED);

root.openRoot(&volume);

File.open(&root,"testfile.txt",0_CREAT|0_EXCL|0_WRITE);

File.timestamp(2,2011,11,11,25.12.34.56);

writeString(file,"something you want ");

File.cose();

}

void loop(){

}

将该程序下载到Arduino主控板内即可向SD卡内建立一个新的文件,并写入"something you want "字符,当然也可以根据需要写入想要记录的信息。

程序的开头包含了两个头文件:SdFat.h和SdFatUtil.h。这两个头文件定义了一些操作SD卡必需的类。之后建立4个有关操作SD卡的对象。然后自定义了一个向SD卡内写一个字符串的函数,这个函数需要一个文件的引用和一个字符串作为参数。setup函数是Arduino软件项目中必须有的,做一些运行的初始化工作。这个实例程序由于只是完成简单的写文件操作,因此对文件的写操作在这个函数中完成。函数依次完成了设定SD卡的通信模式为SPI模式、打开卡的根目录、建立文件名为testfile.txt的文本文件、给文件添加时间信息、向文件内写入文件内容、关闭文件。从以上的过程中看,采用Arduino操作SD卡上的文件与采用C语言操作PC上的文件十分相似,这也是Arduino易用性的体现,再一次验证了采用Arduino开发电子互动产品的方便性。

结语

Arduino是一个开放的单片机开发人机互动产品的软硬件平台,由于它有丰富的软硬件资源而且易于使用,得到了广泛的应用,特别是在电子竞赛、电子艺术品开发等方面。因此,有必要研究它的应用,拓展其应用范围。

参考文献

[1] Josh Adams.Beginning Arduino[M].[S.l.]:Apress,2010.

[2] Massimo Banzi.Getting Started with Arduino[M]. [S.l.]:Make, 2008.

杨继志(高级工程师),主要研究领域为工业自动化控制。

关键字:Arduino  AVR单片机  PWM输出 引用地址:Arduino的互动产品平台创新设计

上一篇:基于射频RF技术的鱼塘溶解氧无线监控系统的探讨
下一篇:基于AVR单片机的LED显示屏应用设计

推荐阅读最新更新时间:2024-03-16 12:57

STM32如何实现可调频率、占空比的PWM波形,且可指定输出脉冲个数?
读者朋友“*imYan*”问: pwm实现频率可调和占空比可调后怎么来实现输出10个脉冲呢?我这边看有门控或者单脉冲加重复计数,黄老师平时用的什么方法? 我的回答: 使用两个TIM定时器:一个输出可调频率、占空比的PWM,一个对输出PWM脉冲计数(计时)。 1.门控方式能实现,但需要复杂的配置和计算,不推荐。 2.脉冲计数是比较实际,也是比较简单的方式; 对输出PWM脉冲计数(计时)方法有多种: 1.IO中断计数,或同步定时中断计数:用另外一个定时器,按照相同频率中断计数(类似IO中断); 2.由PWM频率和脉冲个数,计算输出全部所需的时间,使用定时中断,关闭输出PWM; 3.利用定时器外部脉冲
[单片机]
一文填千坑--Arduino Nano(atmega328p)对ESP8266的烧写
现在物联网平台很多,类似Yeelink,乐为物联,Bylnk(为microduino量身打造,更易上手),借助它们提供的APP和接口可以快速地实现在手机端接收远程硬件信息。但别人的框架总是固定的,接口也是有限的,在样式和功能上有一定局限性,没法做到完全满足需求的定制. 想搭建自己的独立平台,实现远程控制硬件,类似智能家居的设计,来,看这篇基于Arduino的ESP8266模块的玩法: 关于该项目 ESP8266无线收发模块,可串口远距离传输,可用于扩展Arduino的无线连接能力,本文主要是展示如何使得Arduino 的Nano-atmega32p芯片与Esp8266进行烧写、通讯、调试的过程,以及中间过程所遇到的各种问
[单片机]
一文填千坑--<font color='red'>Arduino</font> Nano(atmega328p)对ESP8266的烧写
AVR单片机学习异步串行口UART
一、串行通讯技术概述 串行通讯的通俗定义: 一位发送一位(相对与并行,)当然通过 位同步 帧同步 串行通讯的分类 同步串行通讯 时钟线、数据线、通过时钟保持数据同步 SPI,IIC 属于同步串口通讯 异步串口通信 只有一根数据线,通过波特率保证数据同步(顾名思义没有时钟线只有数据线) UART 无线通信一般均为异步串行通信(相对于无形之中只能有一根天线) 波特率 每秒发送码元时间宽度为(1/9600)S 大概是在100个微妙左右 发送方按照波特率发出数据 接收方按照波特率确定码元时间宽度对数据进行采样 帧格式 8位数据格式 idle 空闲时候保持高电平
[单片机]
<font color='red'>AVR单片机</font>学习异步串行口UART
如何让你的AVR单片机功耗超低
四年多前整过一次低功耗的,当时调试也是OK的,程序基本上是移植过来了。 这次重新改动一下,做了,本以为捣腾一天差不多了,结果又捣腾了两天。 硬件平台是使用9V的电池,系统稳压到5V,普通的稳压IC肯定不行的,必须是LDO型的IC。LDO选的是国产的BL8061,INPUT VOLTAGE是2-16V,OUTPUT CURRENT:250mA,典型的消耗是2uA,BL8060输入电压是1.5-14V,最大电流时200mA,功耗是1uA。稳压前后的电解电容1uF。因为板子做的是贴片的,贴片的手头现成的只有10V/22uF,偶加在稳压后,因为9V电池空载电压就接近10V了,稳压前偶弄了个普通的杂牌铝电解,结果第一晚就被这颗害死了。
[单片机]
如何让你的<font color='red'>AVR单片机</font>功耗超低
AVR单片机硬件I2C接口驱动程序
今天上午写了atmega16的I2C硬件接口程序,程序不难,只是给初学的朋友一个思路,不过通过和51的软件模拟I2C程序比较发现,AVR的I2C硬件接口使程序更简单了, 程序功能:先由atmega16向EEPROM中某地址写数字71,然后再从EEPROM里读出来显示到数码管上; #include iom16v.h #include avrdef.h unsigned char const duacode ={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,
[单片机]
<font color='red'>AVR单片机</font>硬件I2C接口驱动程序
stm32F407的TIM定时器输出PWM
今天测试了stm32F407的TIM定时器输出PWM波,了解了其配置过程。要点如下: 1.使能GPIO的复用功能,指的是1)GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_TIM2);和2)GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF。这两条缺一不可,在F4里没有了开始复用时钟(RCC)功能。 2.分频和周期计算公式: Prescaler = (TIMxCLK / TIMx counter clock) - 1; Period = (TIMx counter clock / TIM3 output clock) - 1 TIMx c
[单片机]
Arduino发布面向Android设备的Mega ADK控制板
      Arduino宣布他们将推出一款名叫Mega ADK的微电路控制板,这款产品主要面向基于Android的设备开发,它的尺寸极为小巧,内置大量的传感器和应用模块,与控制板相匹配的套件包括一个霍尔传感器,按钮模块,热敏电阻,加速度计,LDR,电位器,触摸传感器,操纵杆传感器和MOSFET模块,电路版售价83美元,而带有各种传感器的套装售价352美元一个。
[手机便携]
AVR单片机学习(二)硬件电路的设计教程
1、ATmega 16简介 高速(16MHZ) 、RISC AVR 内核 1KB SRAM,16KB Flash ROM 512字节EEPROM ,方便数据存储 4个8位并行IO口,驱动能力强 具有Jtag 仿真接口与ISP下载接口 低功耗、宽电压(2.7V~5.5V) 丰富的片上外设:3个外部中断,3个定时器,USART,SPI ,IIC,ADC 片内上电复位电路 片内RC振荡器,可以省去外部晶振 由片内RC振荡器如果始终要求不是很高可以省掉一个晶振。片内有上电复位电路省了复位电路,如需要手动复位还是必须设计外部的手动复位电路。 2、构建ATmega16最小系统 电源
[单片机]
<font color='red'>AVR单片机</font>学习(二)硬件电路的设计教程
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved