arduino简单介绍

什么是arduino?

Arduino,是一个开放源代码单芯片微控制器,它使用了Atmel AVR单片机,采用了开放源代码的软硬件平台,建构于简易输出/输入(simple I/O)界面板,并且具有使用类似JavaC语言的Processing/Wiring开发环境。

以上是维基百科的解释,我觉得这个解释虽然很到位,但不好,在于它忽略了解释的对象,如果我是一个IT小白,那真不明白在说的什么。
那到底如何告诉别人什么是arduino?可以去看arduino中文论坛的初识arduino。我介绍不来,不多说了,这篇文章主要针对熟悉电子电路的IT从业者以及工作交差。
很多电子从业者的朋友或许会鄙视arduino,不就是一块低性能的AVR单片机开发板吗?搭积木一样的傻瓜式编程的东西,给外行人玩的东西,有什么了不起。诚然,arduino表现出来的是一块单片机开发板,但仔细摸索你会发现,在GitHub里面有Arduino for STM32的源码,各类的IOT芯片也支持arduino,如wifi soc ESP8266等,各类芯片都把自己开发封装成arduino,你还觉得他是只是一块逼格比较高的AVR得开发板吗?所以说按我的理解,arduino是一个准标准的软硬件开发平台,类似VC开发Windows软件一样的平台,集成各类库文件,可以这样类比,电脑硬件对于arduino的硬件板,它的IDE类似VC,它集成各类嵌入式软件开发的库文件,比如delay(),Serial.read()等单片机开发常用函数,以及一些像I2C、SPI接口库或者传感器库,与单片机开发不同之处在于不需要对寄存器进行操作,直接调用函数,简单快捷。有人又说了,STM32、PIC、芯唐什么的单片机也有库函数,也可不直接操作寄存器。可是那些库函数只是简化写寄存器的方式,要使用对应的功能,还是要熟悉对应的寄存器操作,arduino的库函数是完全不用知道那些底层的寄存器的,不同的arduino板直接可以使用相同的函数,像不同单片机跑UCOS一样,移植后开发都一样。所以别说arduino是淘汰AVR的破板了,也别乱鄙视,电脑虽然强大,但8位单片机的出货量是电脑的几何倍,每个东西都有存在的空间,不是越强大越好,只有哪个场所合适用哪个的问题,况且让编程越来越简单是大势所趋,重复造轮子的事很没必要,arduino虽然不算完美方案,但是个指明出路的地方,Windows跟Ubuntu对比起来也丑,但第一系统是Windows,除了它出的早外,有个很大的原因就是基于VC的开发平台真是谁用谁知道,微软量身定做一大堆标准库,简简单单就上手的IDE平台,让多少程序员投入Windows怀抱,才有了现在Windows的生态。所以也很希望在嵌入式开发领域也有个类似的平台,可能arduino不是最终出路,但一定是那个出路的一个台阶。

arduino的优点

 跨平台
Arduino IDE可以在Windows、Macintosh OSX、Linux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。
 简单清晰的开发
Arduino IDE基于processing IDE开发。对于初学者来说,极易掌握,同时有着足够的灵活性。Arduino语言基于wiring语言开发,是对 AVRGCC库的二次封装,不需要太多的单片机基础、编程基础,简单学习后,你也可以快速的进行开发。
 开放性
Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。
 社区与第三方支持
Arduino有着众多的开发者和用户,你可以找到他们提供的众多开源的示例代码、硬件设计。例如,可以在Github.com、Arduino.cc、Openjumper.com等网站找到Arduino第三方硬件、外设、类库等支持,更快更简单的扩展你的Arduino项目。
 硬件开发的趋势
Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。

以上摘自《Arduino程序设计基础》

使用arduino的注意事项

每个东西都有其适用性的地方,其实对于熟悉某个单片机开发的人来说,使用arduino是不合适的,它虽然开发非常简单,对于简单项目,只要关注自己的业务逻辑,直接上手就行了。然而,就是因为他的简单,导致使用不灵活,片上资源也少,有些时候真的会掉进坑里,所以使用时三思,以下是我自己测试后,有些要注意的地方,可能不对,帮忙提醒下。

  • 处理速度慢,实时性不高,基本的arduino版本都是ATmage做主控芯片,它时钟频路16M,跟增强型51差不多,而且代码又做了第二次封装,所以对处理性能要要求的应用自己酌情使用。别说Arduino for STM32,不是官方的,谁知道有什么坑。
  • 多任务、多线程编程有点麻烦,虽然GitHub里可以找到多任务切换的源码,但使用时需要注意每个任务的时间片格,相对于UCOS、RT-Thread之类实时操作系统,各种优先级、抢占机制、线程通讯。用arduino累啊。
  • 中断2个,计数器无,时钟频率设置麻烦,比如IO口的时钟频率基本不能设置,I2C、SPI口也是少的可怜,好多东西都要外扩,没有片上集成。
  • PWM输出、模拟输入口到挺多的,但PWM的频率最大是500Hz,对于一些控制是不符合要求的,比如有些电机及配套的驱动,用这个频率控制会导致电机振动厉害,另外占空比设置只能0-255,对于一些性能要求比较严格的控制也是比较麻烦的。模拟输入的采样精度是10位,采用间隔是100us,这些都是比较低的值,虽然能满足大部分传感器的值,选用开发时还是需要注意的。
  • 串口缓存最大的数是128,而且不能中断接收,对于一些通讯协议定义起来需要注意了。

举例介绍下arduino的开发过程

说了这些,其实要是没自己上手下不会有概念的,那么我取个例子来说明下arduino的开发过程,就举个避障小车开发的例子。小车的系统结构大致如图。


采用带编码器的直流电机,PWM方式控制电机转速度,各类传感器先举红外传感器,其他待定,arduino控制电机以及各类传感器,于上层主控制器一起构成一个智能小车。
由于编码器需要采集电机脉冲信号,为了方便无误采用arduino的两个中断计数,串口通信和各类传感器采用遍询式判断,为了简化编程,采用任务调度器实现编程。
那么现在开始这个arduino的开发吧!
默认你准备了硬件,那么先Arduino IDE下载安装吧,驱动安装不上看各版本驱动安装方法。安装好后打开软件如下图。


配置好后就可以上手了,这里推荐你看Arduino.Cookbook.Michael.Margolis这本书,上面有具体常用函数用法,有些不明白的可以查阅arduino IDE自带的例程,我觉得这样上手比较快,最后具体项目可以Google。比如我需要用到一个任务调度器,找到一个大神弄好的任务调度器,先自己测试下这个调度器的性能,代码如下:

#include "TaskScheduler.h"  //下载源码放到项目目录下,引用
const int ledPin=13;//led引脚IO号
int ledState=0;//led状态标志
void setup() 
{
  // put your setup code here, to run once:
  pinMode(ledPin,OUTPUT); //led引脚的IO设置成输出模式
  Sch.init(); //初始化调度器
  Sch.addTask(ledtest,20,1000,1);  //从第 20 毫秒开始闪烁 LED,每隔 1s, LED 状态改变一次
  Sch.addTask(serialtest,0,1,0);  //串口测试程序
  Serial.begin(9600); //开始串口通信
  Sch.start() ;//启动调度器
}

void loop() 
{
  // put your main code here, to run repeatedly:
 Sch.dispatchTasks();  // 执行被调度的任务,用调度器时放上这一句即可
  
}
void ledtest()
{
  if(ledState==0) digitalWrite(ledPin,HIGH);  //输出为高电平
  else digitalWrite(ledPin,LOW);   //输出为低电平
  ledState=~ledState; //取反
}
void serialtest() 
{
  if(Serial.available())  //判断串口缓存是否有数据
  {
    Serial.print((char)Serial.read());  //将读到的数据发送回去
    Serial.flush(); //清空串口缓存
  }
}

测试下,除了需要注意每个任务的调用时间片,其他都OK,就用这个做小车的软件框架。
未完待续……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容