標(biāo)題: Arduino的入門與精深 [打印本頁(yè)]

作者: sans    時(shí)間: 2015-4-7 01:33
標(biāo)題: Arduino的入門與精深
一Arduino的應(yīng)用市場(chǎng)
二如何開始使用你的Arduino kit
三Arduino的入門與精深

一Arduino的應(yīng)用市場(chǎng)
便宜——和其他平臺(tái)相比。arduino板是相當(dāng)便宜。最便宜的arduino課可以自己動(dòng)手制作,即使組裝好的成品,也不會(huì)超過(guò)200元。
跨平臺(tái)——arduino軟件在window,Macintosh OSX和Linux平臺(tái)上均可以操作,大部分其他的單片機(jī)只能運(yùn)行在window操作系統(tǒng)下。
簡(jiǎn)易的操作環(huán)境——初學(xué)者很容易就能學(xué)會(huì)arduino的編程環(huán)境,同時(shí)它還能為高級(jí)用戶提供高級(jí)運(yùn)用。對(duì)于老師們來(lái)講,一般都很容易運(yùn)用processing編程環(huán)境,如果學(xué)生使用processing編程環(huán)境的話,也很容易熟悉。
軟件開源并可拓展——arduino軟件是開源的,對(duì)于有經(jīng)驗(yàn)的程序員是可以拓展的。arduino編程語(yǔ)言可以通過(guò)c++庫(kù)進(jìn)行拓展。如果有人想要去了解技術(shù)上的細(xì)節(jié),可以通過(guò)arduino語(yǔ)言直接使用AVR  c語(yǔ)言(因?yàn)閍rduino語(yǔ)言是機(jī)基于AVR c語(yǔ)言的)。類似,如果你有需要的話,也可以再arduino中寫入AVR c語(yǔ)言。
硬件開源并可拓展——arduino板是基于ateml 的atmelga8和atmelga128/328的單片機(jī)。arduino是基于creative Commons許可協(xié)議。所以有經(jīng)驗(yàn)的設(shè)計(jì)師根據(jù)需求設(shè)計(jì)自己的模塊,可以對(duì)其進(jìn)行拓展和改造。甚至對(duì)于一些相對(duì)沒(méi)有經(jīng)驗(yàn)的用戶,也可以通過(guò)制作實(shí)驗(yàn)板來(lái)理解arduino是如何工作的,省錢又省事。
arduino的起源
Massimo Banzi之前是意大利Ivrea一家高科技設(shè)計(jì)學(xué)校的老師。他的學(xué)生們經(jīng)常抱怨找不到便宜好用的微控制器。 2005年冬天, Massimo Banzi跟David Cuartielles討論了這個(gè)問(wèn)題。 David Cuartielles是一個(gè)西班牙籍晶片工程師,當(dāng)時(shí)在這所學(xué)校做訪問(wèn)學(xué)者。兩人決定設(shè)計(jì)自己的電路板,并引入了Banzi的學(xué)生David Mellis為電路板設(shè)計(jì)編程語(yǔ)言。兩天以后,David Mellis就寫出了程式碼。又過(guò)了三天,電路板就完工了。這塊電路板被命名為Arduino。



各種arduino型號(hào)
Arduino Uno

Arduino Nano                                Arduino GSM Shield Front                 Arduino Ethernet Shield


二如何開始使用你的Arduino kit
arduino的配置:
arduino是基于AVR平臺(tái),對(duì)AVR庫(kù)進(jìn)行二次封裝編譯,把端口都打包好了。神馬寄存器呀,地址指針呀,都不用寫。大大降低軟件開發(fā)難度,適合非專業(yè)愛(ài)好者使用。優(yōu)點(diǎn)和缺點(diǎn)并存,因?yàn)槭嵌伍_發(fā),所以代碼執(zhí)行不如AVR代碼精練,代碼執(zhí)行效率和代碼體積都弱于AVR直接編譯。
基本性能配置:
ditital i/o 數(shù)字輸入/輸出端口0-13.
anglog i/o 模擬輸入/輸出端口0-5.
支持ICP下載,支持tx/rx.
輸入電壓:支持3.3v/5v輸出。
處理器:支持atmel atmegal168/328處理器,因?yàn)橹С终弑姸,已有公司開發(fā)出32位的mcu支持arduino。
arduino的開發(fā)環(huán)境介紹

Arduino能通過(guò)各種各樣的傳感器來(lái)感知環(huán)境,通過(guò)控制燈光、馬達(dá)和其他的裝置來(lái)反饋、影響環(huán)境。板子上的微控制器可以通過(guò)Arduino的編程語(yǔ)言來(lái)編寫程序,編譯成二進(jìn)制文件,燒錄進(jìn)微控制器。對(duì)Arduino的編程是利用 Arduino編程語(yǔ)言 (基于 Wiring)和Arduino開發(fā)環(huán)境(基于 Processing)來(lái)實(shí)現(xiàn)的;贏rduino的項(xiàng)目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上運(yùn)行的軟件,他們之間進(jìn)行通信 (比如 Flash, Processing, MaxMSP)來(lái)實(shí)現(xiàn)。
Arduino是一個(gè)基于開放原始碼的軟硬件平臺(tái),構(gòu)建于開放原始碼simple I/O介面版,并且具有使用類似Java、C語(yǔ)y言Processing/Wiring開發(fā)環(huán)境。
可以快速使用Arduino與Adobe Flash, Processing, Max/MSP, Pure Data, SuperCollider等軟件結(jié)合,作出互動(dòng)作品。 Arduino可以使用現(xiàn)有的電子元件例如開關(guān)或者傳感器或者其他控制器件、LED、步進(jìn)馬達(dá)或其他輸出裝置。 Arduino也可以獨(dú)立運(yùn)行,并與軟件進(jìn)行交互,例如: Macromedia Flash, Processing, Max/MSP, Pure Data, VVVV或其他互動(dòng)軟件…。 Arduino的IDE界面基于開放源代碼,可以免費(fèi)下載使用,開發(fā)出更多令人驚艷的互動(dòng)作品。

三Arduino的入門與精深
開始運(yùn)行你的你的Arduino kit

一個(gè)簡(jiǎn)單的程序讓讀取模擬端口ao的值并用串口發(fā)送
void setup() {
  Serial.begin(9600);//串口波特率9.6kb//d0-tx//d1-rx
}
void loop()
{
  int sensorValue = analogRead(A0);//讀取a0值(0-1023)
  Serial.println(sensorValue);//串口發(fā)送數(shù)據(jù)
  delay(1);    //延時(shí)
}
注:arduino由初始化函數(shù)setup()
       與循環(huán)函數(shù)loop組成。


串口控制輸出
void setup() {
  Serial.begin(9600);
      for (int thisPin = 2; thisPin < 7; thisPin++)
{
        pinMode(thisPin, OUTPUT);//將d2-d7設(shè)置為輸出模式
      }
}
void loop()
{
if (Serial.available() > 0) {   //如果串口收到信息
    int inByte = Serial.read();
    switch (inByte) {
    case 'a':                        //接受a,將d2置高
     digitalWrite(2, HIGH);
      break;
    case 'b':   
      digitalWrite(3, HIGH);   //接受b,將d3置高
      break;

case 'c':        
  digitalWrite(4, HIGH);    //接受c,將d4置高
     break;
    case 'd':   
      digitalWrite(5, HIGH);    //接受d,將d5置高
      break;
    case 'e':   
   digitalWrite(6, HIGH);    //接受e,將d6置高
      break;
    default:
      // turn all the LEDs off:
      for (int thisPin = 2; thisPin < 7; thisPin++)
{
        digitalWrite(thisPin, LOW);  
     //其他情況就將d2-d7均置低
      }  
    }
   }
}

局域網(wǎng)控制LED燈
核心代碼:void loop () {
  word pos =ether.packetLoop(ether.packetReceive());
    if(pos)
    {
     if(strstr((char *)Ethernet::buffer + pos, "GET /led_off.png") != 0)  
       send_png_image(led_off, sizeof(led_off));
     else if(strstr((char *)Ethernet::buffer + pos, "GET /led_on.png") != 0)
       send_png_image(led_on, sizeof(led_on));
     else
    {         
      if(strstr((char *)Ethernet::buffer + pos, "GET /?LED1") != 0)
      {          led1Status = !led1Status;
         digitalWrite(LED1PIN, led1Status);   
       }         
    if(strstr((char *)Ethernet::buffer + pos, "GET /?LED2") != 0) {                                                         網(wǎng)頁(yè)中LED圖標(biāo)
         led2Status = !led2Status;
         digitalWrite(LED2PIN, led2Status);           
       }
       BufferFiller bfill = ether.tcpOffset();
       bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
         "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
         "<html><head><title>WebLeds</title></head><body>"
     "Toggle leds: "));         
       if(led1Status) bfill.emit_p(PSTR("<a href=\"/?LED1\"><img src=\"led_on.png\"></a>"));
       else bfill.emit_p(PSTR("<a href=\"/?LED1\"><img src=\"led_off.png\"></a>"));
       if(led2Status) bfill.emit_p(PSTR("<a href=\"/?LED2\"><img src=\"led_on.png\"></a>"));
    else bfill.emit_p(PSTR("<a href=\"/?LED2\"><img src=\"led_off.png\"></a>"));      
       bfill.emit_p(PSTR("</body></html>"));
       ether.httpServerReply(bfill.position());
   }
   }
}

讓你的arduino連入物聯(lián)網(wǎng)





小節(jié):
通過(guò)一周對(duì)arduino的學(xué)習(xí),我們意識(shí)到雖然arduino的開源軟硬件都很多,在消費(fèi)類電子市場(chǎng)占有很大比例,但 對(duì)于資深工程師來(lái)說(shuō),arduino只是AVR的入門硬件,在精密電子儀器,中高端設(shè)備中有明顯的不足。對(duì)學(xué)習(xí)嵌入式,物聯(lián)網(wǎng)方面有一定的輔助作用。
  




作者: 棒棒哥    時(shí)間: 2015-8-26 15:29
贊    希望更多源碼
作者: sglf0201    時(shí)間: 2015-11-24 15:28
很棒,謝謝分享。。。
作者: 51hei電控2112311    時(shí)間: 2016-5-1 17:23
哈哈,我又看見(jiàn)了呀。
作者: danlinxue    時(shí)間: 2016-5-24 09:56
不錯(cuò),學(xué)習(xí)了
作者: taichungboy    時(shí)間: 2016-5-26 20:47
謝謝大大分享GOOD




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1