Arduino開發實戰指南

內容介紹

本書主要通過了解,學習,使用Arduino開源模組,讓讀者在實戰過程中學習並掌握基於AVR8位單片機的項目開發技巧。
在2011年舉行的Google I/O開發者大會上,Google發布了基於Arduino的Android Open Accessory標準和ADK工具,這使得大家對Arduino的前景十分看好。Phillip Torrone大膽地預測Google將用Android+Arduino的形式掀起自己的“Kinect模式”浪潮。目前,國內關注Arduino的人越來越多,但介紹Arduino的書籍卻很少。筆者由於工作的關係,接觸Arduino較早,所以希望通過自己的努力讓更多的人了解Arduino,在近一年的時間裡,通過不斷學習、查閱Arduino相關知識,終於完成了書稿的撰寫工作。但在書稿完成之後,心中卻一直忐忑不安,Arduino是一個介於軟體與硬體之間的產品,系統性不是很強,加上筆者水平有限,拙著中一定存在不少的缺點與漏洞,為此,筆者先為書中的不足之處致以真誠的歉意,同時誠摯地歡迎廣大讀者提出寶貴的意見並不吝賜教。
本書的內容及面向的讀者
Arduino是一個注重實際動手操作的產品,所以本書以實際套用為紐帶將各個章節聯繫起來。本書共9章,首先介紹Arduino的一些基礎知識,接著針對具體套用介紹了一些擴展板以及Arduino擴展庫,最後套用之前的內容完成了具有視頻監控功能的履帶車、遙控機械臂以及雙足機器人的製作。
因為Arduino本身具有簡單易用的特點,所以本書面向的讀者是所有有興趣使用Arduino進行項目開發的人。
當然,根據讀者的情況不同,本書的閱讀方式也不同。
如果讀者是一個之前沒有進行過單片機開發也沒有進行過軟體開發的人,現在想使用Arduino來實現自己的一些想法,那么首先要閱讀本書的前兩章,了解一些簡單的編程思想以及程式結構,接下來閱讀第3章的目錄,了解Arduino都有什麼基本函式,具體內容可以先不用看,當你之後使用這些函式遇到問題時再回過頭來看一看相應的函式說明。然後將Arduino接到你的電腦上,翻開第4章,根據書中的內容,邊學習邊實踐,4.5節可以跳過不看。第5~7章介紹了Arduino周邊的資源,以便幫助你儘快地實現想法,這3章的內容也可以採用跳躍式的閱讀方式。第8、9章會告訴你前3章的內容是如何結合起來的,建議按照書中的內容至少動手完成一個項目的製作。
如果讀者之前進行過AVR單片機的開發,想了解Arduino一些底層的知識,那么第2章的知識就可以跳過了,在簡單地翻閱第3章的內容後,直接進入第4章,把Arduino連到電腦上實踐一下,再回過頭閱讀第3章中關於Arduino的基本函式,結合自身已有的AVR單片機的知識了解Arduino底層的工作機制。需要說明的是,這裡需要讀者自己花一些精力,可能還需要學習一些C++方面的知識。第5章對Arduino硬體原理進行了詳細介紹,若讀者之前學習過,這一章可以選擇性學習。第6章介紹的是Arduino的擴展庫,如果讀者也想開發一些Arduino擴展板,並以庫的形式提供擴展板的軟體資源,那么建議先學習最後一節,再從6.1節開始學習,深入地了解這些擴展庫是如何與Arduino結合在一起的。至於剩下幾章的內容,如果用開發單片機的思路來完成也是不難的,所以閱讀的重點是看看如何用Arduino的思路進行項目的製作。
如果讀者之前是做純電腦軟體開發工作的,即使用C++非常熟練,那么在閱讀完第1章後,可以直接跳到第4章,感受一下Arduino給純軟體開發人員帶來的那種完成硬體製作的感覺,然後仔細閱讀第5章,看看目前都有哪些擴展板可以為自己所用,控制電機、控制液晶之類的,硬體知識哪怕我們不用,也還是要了解一些的。接下來,對於第6章,可以仔細閱讀一下與硬體關係不太大的擴展庫以及如何創建自己的庫,在今後底層硬體庫不斷豐富完善的情況下,開發一些注重套用、與底層關係不是太緊密的庫時,這就是我們的用武之地。第7~9章的內容會告訴我們前面的知識是如何結合起來的—用純軟體的思路,同樣建議按照書中的內容至少動手完成一個項目的製作,做純軟體開發工作的人開發硬體也是很容易的。
致謝
首先要感謝本書的策劃張國強先生,是他對Arduino的關注促成了本書的出版,同時在筆者撰寫書稿時他也對本書提出了寶貴的寫作建議,並對書稿進行了仔細審閱。
其次要感謝讓我了解Arduino的莊明波先生,他不但在技術上給予了我很多的指導,同時也無私地提供了大量的Arduino擴展板的資料以及實物,供我在Arduino的程式調試中使用,同時與我共同探討技術上遇到的問題。
最後要感謝現在正捧著這本書的您,感謝您肯花費時間和精力閱讀本書,由於時間有限,書中難免存在疏漏與錯誤,誠懇地希望您批評指正,您的意見和建議將是我巨大的財富。希望在Arduino的領域結識更多的朋友。

作者介紹

程 晨 國內較早接觸Arduino的硬體工程師,在Arduino的套用方面擁有豐富的實戰經驗。對Arduino的底層代碼進行了長達一年的學習與研究,同時使用過大量的Arduino類庫,對於Arduino的架構和實現原理有著非常深入的理解和認識。同時在PC端、手機端的應用程式開發方面也有一定的經驗,套用Arduino進行過多款互動式產品製作。

作品目錄

前言
第一篇  基礎篇
第1章  初識Arduino 2
1.1  Arduino的歷史 2
1.2  Arduino的家族 3
1.3  Arduino的資源 6
1.4  Arduino的開發環境 9
1.5  添加新硬體及設定開發環境 9
1.6  Arduino開發環境的套用 14
第2章  編寫Arduino程式 16
2.1  繪製流程圖 16
2.1.1  流程圖基本符號 16
2.1.2  流程圖的三種基本結構 17
2.2  C語言的標識符與關鍵字 18
2.2.1  標識符 18
2.2.2  關鍵字 18
2.2.3  運算符 19
2.2.4  分隔設定 21
2.2.5  常量 21
2.2.6  注釋符 21
2.3  控制語句 21
2.3.1  if語句 21
2.3.2  switch語句 22
2.3.3  while語句 23
2.3.4  do-while語句 24
2.3.5  for語句 25
2.3.6  break語句 26
2.3.7  continue語句 26
2.3.8  goto語句 26
2.4  程式結構 27
第3章  Arduino的基本函式 29
3.1  數字I/O 30
3.1.1  pinMode(pin,mode) 30
3.1.2  digitalWrite(pin,value) 31
3.1.3  digitalRead(pin) 32
3.2  模擬I/O 33
3.2.1  analogReference(type) 33
3.2.2  analogRead(pin) 33
3.2.3  analogWrite(pin, value) 34
3.3  高級I/O 37
3.3.1  shiftOut(dataPin,clockPin, bitOrder,val) 37
3.3.2  pulseIn(pin,state,timeout) 38
3.4  時間函式 39
3.4.1  millis( ) 39
3.4.2  delay(ms) 40
3.4.3  delayMicroseconds(us) 40
3.5  數學庫 41
3.5.1  min(x,y) 41
3.5.2  max(x,y) 41
3.5.3  abs(x) 41
3.5.4  constrain(amt,low,high) 41
3.5.5  map(x,in_min,in_max,out_min, out_max) 41
3.5.6  三角函式 42
3.6  隨機數 42
3.6.1  randomSeed(seed) 42
3.6.2  random(howsmall,howbig) 42
3.7 位操作 43
3.8 中斷函式 43
3.8.1 interrupts( )和noInterrupts( ) 43
3.8.2 attachInterrupt(interrupt,function,mode) 43
3.9  串口通信 45
3.10  SPI接口 48
3.10.1  SPI接口概述 48
3.10.2  SPI接口數據傳輸 48
3.10.3  SPI類及其成員函式 49
第4章  Arduino硬體平台 52
4.1  Arduino的原理圖 52
4.2  串列通信口的使用 55
4.2.1  實例功能 56
4.2.2  硬體電路 56
4.2.3  程式設計 56
4.3  數字I/O口的使用 58
4.3.1  實例功能 59
4.3.2  硬體電路 59
4.3.3  程式設計 59
4.4  模擬I/O口的使用 61
4.4.1  實例功能 61
4.4.2  硬體電路 61
4.4.3  程式設計 62
4.5  燒寫引導程式 62
4.5.1  下載器AVRISP 63
4.5.2  AVR Studio 64
4.5.3  燒寫引導程式 65
第二篇  模組篇
第5章  Arduino基本擴展模組 68
5.1  L293 Motor Shield 68
5.1.1  直流電機的工作原理 68
5.1.2  H橋驅動電路 70
5.1.3  線性放大調速原理 71
5.1.4  PWM調速原理 72
5.1.5  L293 Motor Shield的原理 72
5.1.6  L293 Motor Shield的套用 74
5.1.7  程式設計 75
5.1.8  程式分析 76
5.1.9  程式的精練 77
5.2  Input Shield 78
5.2.1  Input Shield原理圖 79
5.2.2  Input Shield的實例 79
5.2.3  程式設計 80
5.2.4  程式分析 81
5.2.5  使用搖桿控制直流電機轉速 81
5.3  LCD Keypad Shield 83
5.3.1  液晶顯示原理 83
5.3.2  標準1602液晶模組 83
5.3.3  1602液晶模組控制方式 84
5.3.4  LCD Keypad Shield原理圖 87
5.3.5  LCD Keypad Shield套用實例 89
5.3.6  程式設計 89
5.3.7  程式分析 92
5.3.8  Arduino的液晶控制方式 93
5.3.9  “hello Arduino!” 94
5.4  Ethernet Shield 97
5.4.1  Ethernet Shield原理圖 97
5.4.2  W5100晶片介紹 97
5.4.3  W5100晶片的暫存器 101
5.4.4  W5100晶片的使用 105
5.4.5  Ethernet Shield套用實例 105
5.4.6  程式設計 106
5.5  I/O擴展板 109
5.5.1  Xbee感測器擴展板V5 109
5.5.2  伺服電機控制 110
5.5.3  伺服電機套用實例 111
5.5.4  Interface shield 114
5.5.5  RGB LED Module 114
5.5.6  RGB LED Module套用實例 118
5.5.7  程式的精練 123
第6章  Arduino的擴展庫 126
6.1  Arduino擴展庫介紹 126
6.1.1  Arduino擴展庫的作用 126
6.1.2  Arduino擴展庫的套用 126
6.2  對象和類 130
6.2.1  類的定義 130
6.2.2  對象的創建及成員函式的調用 131
6.2.3  對象的初始化和構造函式 132
6.2.4  函式的重載 133
6.2.5  析構函式 133
6.3  LiquidCrystal庫 134
6.3.1  構造函式 136
6.3.2  command( )和write( ) 139
6.3.3  begin( ) 140
6.3.4  clear( ) 142
6.3.5  home( ) 142
6.3.6  setCursor( ) 142
6.3.7  noDisplay( )和display( ) 143
6.3.8  cursor( )和noCursor( ) 143
6.3.9  blink( )和noBlink( ) 143
6.3.10  autoscroll( )和
noAutoscroll( ) 144
6.3.11  scrollDisplayLeft( )和scrollDisplayRight( ) 144
6.3.12  print( ) 145
6.4  Ethernet庫 146
6.4.1  EthernetClass類定義 146
6.4.2  Server類定義 148
6.4.3  Server類構造函式 148
6.4.4  Server類成員函式 148
6.4.5  Client類定義 152
6.4.6  Client類構造函式 152
6.4.7  Client類成員函式 153
6.5  SoftwareSerial庫 158
6.5.1  構造函式 159
6.5.2  begin( ) 160
6.5.3  read( ) 160
6.5.4  print( )和println( ) 161
6.5.5  使用限制 164
6.6  EEPROM庫 165
6.6.1  read( ) 165
6.6.2  write( ) 166
6.7  Wire庫 166
6.7.1  IIC匯流排概述 166
6.7.2  TwoWire類定義 167
6.7.3  begin( ) 168
6.7.4  requestFrom( ) 168
6.7.5  available ( ) 169
6.7.6  receive( ) 169
6.7.7  beginTransmission( ) 170
6.7.8  endTransmission( ) 170
6.7.9  send( ) 171
6.7.10  onReceive( ) 172
6.7.11  onRequest( ) 173
6.8  Servo庫 174
6.8.1  構造函式 175
6.8.2  attach() 176
6.8.3  write( ) 177
6.8.4  writeMicroseconds( ) 177
6.8.5  read( ) 178
6.8.6  readMicroseconds( ) 178
6.8.7  attached( ) 178
6.8.8  detach( ) 179
6.9  Stepper庫 179
6.9.1  步進電機概述 179
6.9.2  步進電機的基本參數 180
6.9.3  步進電機的優缺點 181
6.9.4  步進電機的工作原理 181
6.9.5  步進電機的控制電路 183
6.9.6  Stepper類定義 185
6.9.7  構造函式 186
6.9.8  setSpeed( ) 188
6.9.9  step( ) 188
6.10  TLC5940庫 189
6.10.1  Tlc5940類的定義 190
6.10.2  init( ) 191
6.10.3  update( ) 192
6.10.4  set( ) 193
6.10.5  get( ) 194
6.10.6  setAll( ) 194
6.10.7  clear( ) 195
6.11  OneWire庫 195
6.11.1  單匯流排的結構 195
6.11.2  單匯流排控制方式 195
6.11.3  單匯流排信號形式 196
6.11.4  OneWire類 198
6.11.5  構造函式 200
6.11.6  reset( ) 200
6.11.7  write_bit( ) 201
6.11.8  read_bit( ) 202
6.11.9  write( ) 202
6.11.10  read( ) 203
6.11.11  select( ) 203
6.11.12  skip( ) 204
6.12  XBee庫 204
6.12.1  XBee類定義 204
6.12.2  構造函式 205
6.12.3  begin( ) 206
6.12.4  readPacket( ) 206
6.12.5  send( ) 209
6.13  創建自己的庫 210
6.13.1  庫的功能—Morse 210
6.13.2  MorseCode類的定義 213
6.13.3  MorseCode類的成員函式 214
6.13.4  MorseCode庫的使用 222
6.13.5  關鍵字的定義 223
第7章  無線模組的套用 224
7.1  APC220 224
7.1.1  APC220性能指標 224
7.1.2  模組引腳定義 226
7.1.3  模組的使用 226
7.1.4  注意事項 227
7.2  DFduino wireless 228
7.2.1  DFduino wireless性能指標 228
7.2.2  模組引腳定義 229
7.2.3  模組的使用 229
7.3  Bluetooth V3 231
7.3.1  Bluetooth V3性能指標 231
7.3.2  模組引腳定義 232
7.3.3  模組的使用 232
7.4  XBee和XBee PRO 234
7.4.1  XBee及XBee PRO性能指標 235
7.4.2  模組引腳定義 235
7.4.3  模組的使用 236
7.4.4  程式設計 236
第三篇  套用篇
第8章  打造自己的遙控履帶車 242
8.1  履帶車的驅動 242
8.1.1  實現功能 242
8.1.2  所需器材 242
8.1.3  硬體連線 243
8.1.4  程式設計 246
8.1.5  MotorCar類 251
8.1.6  類的套用 255
8.2  添加感知器件 257
8.2.1  實現功能 257
8.2.2  所需器材 257
8.2.3  器材介紹 257
8.2.4  硬體連線 258
8.2.5  程式設計 258
8.3  添加無線模組 261
8.3.1  實現功能 261
8.3.2  所需器材 261
8.3.3  硬體連線 261
8.3.4  程式設計 262
8.4  製作遙控器 264
8.4.1  實現功能 264
8.4.2  所需器材 265
8.4.3  硬體連線 265
8.4.4  程式設計 265
8.5  履帶車遙控調速 267
8.5.1  實現功能 267
8.5.2  程式設計 267
8.6  添加無線攝像頭 272
8.6.1  實現功能 272
8.6.2  所需器材 272
8.6.3  器材介紹 272
8.6.4  硬體連線 273
8.6.5  程式設計 277
8.7  環境信息獲取器件 283
8.7.1  實現功能 283
8.7.2  所需器材 284
8.7.3  器材介紹 284
8.7.4  硬體連線 285
8.7.5  程式設計 286
第9章  仿生機器人 295
9.1  遙控機械臂 295
9.1.1  實例功能 295
9.1.2  器材列表 295
9.1.3  搭建硬體環境 296
9.1.4  安裝控制部分 298
9.1.5  Wii遊戲手柄 298
9.1.6  機械臂程式設計 300
9.2  雙足機器人 304
9.2.1  實例功能 304
9.2.2  器材列表 304
9.2.3  搭建硬體環境 305
9.2.4  雙足機器人程式設計 307
9.2.5  PC調試軟體編寫 310
9.2.6  雙足機器人的調試 317
附錄A  Arduino引腳與AVR單片機管腳對應關係 319
附錄B  Arduino擴展板 320
附錄C  其他可擴展模組 322

相關詞條

相關搜尋

熱門詞條

聯絡我們