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閱讀 229,565評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,285評論 2 376

推薦閱讀更多精彩內容