2017年12月31日 星期日

BoxyBot 線控紙盒機器人

BoxyBot 線控紙盒機器人是一款適合親子活動的教材,家長可以和家中唸國小或幼稚園的小朋友一起動手做。




完全不需要寫程式,您就可以輕易做出機器人,透過手把上的電池盒開關,您可以輕易地讓 BoxyBot 線控紙盒機器人前進、右轉、左轉或停止。



套件清單
1.TT減速馬達 *2只
2.塑膠輪子 *2只
3.橡膠輪胎 *2只
4.馬達固定鐵件 *2套
5.M2.3x8自攻螺絲 *2只
6.M3尼龍墊片 *4只
7.2節3號電池盒帶開關帶蓋 *2只
8.電線 *4條
9.雙面膠帶 *2片
10.3mm熱縮管 *1條


自備工具與材料
1.烙鐵 *1支
2.小電鑽 *1支 (非必要)
3.美工刀(筆刀尤佳) *1支
4.切割墊 *1片
5.小鎳子 *1支
6.M3螺絲起子 *1支
7.焊錫 *少許
8.白膠 *1瓶
9.噴膠 *1瓶
10.電工膠帶 *少許
11.3號電池 *4顆
12.厚度0.5mm以下A4硬紙板 *2張
13.彩色筆 *1盒 (非必要)


組裝步驟

Step1 使用現成的小紙盒,例如燈泡盒子,


前兩天去郵局寄包裹,看到櫃檯上這個郵局販售的「行動郵車礦泉水」瓶也蠻合適的,


或是下載模板紙 檔案並以 A4 尺寸列印。



Step2 如果是使用現成的紙盒,可以省略此步驟。
用噴膠將 2 張模板紙背面都均勻塗佈薄薄一層膠水,然後將上了膠的模板紙貼住厚紙板。
提醒您:
1.使用噴膠罐前要先搖一搖罐子。
2.鋪貼後之模板紙表面需平整。



Step3 用電鑽鑽孔或用筆刀(美工刀)挖孔,接著再用筆刀(美工刀)裁切模板紙。
提醒您:實線需要切割,虛線則是彎折線,切記不能切割。



Step4 如果是使用現成的紙盒,可以省略此步驟。
沿著虛線彎折紙盒,並用白膠黏貼,但上下蓋先不要黏貼。


Step5 用彩色筆在模板紙上畫出喜歡的圖案。例如鋼鐵人、海綿寶寶或皮卡丘。



Step6 使用剝線鉗將 4 條電線的頭尾兩端去皮。如果使用美工刀,應謹慎小心不要切斷銅線。


Step7 將 4 條電線穿過手把中間的孔洞,輕輕打一個單結以防止電線因拉扯而從電池盒上脫落。



Step8 將雙面膠帶貼住電池盒,再將電池盒貼住手把紙板。
提醒您:電池盒上的開關務必要對準模板紙的孔洞。




Step9 將 4 條電線分別與電池盒的電線焊接在一起,務必紅與紅接,黑與黑接。再用電工膠帶纏繞焊接觸做出絕緣,最後用電工膠帶將全部電線固定在模板紙上。







Step10 將熱縮管剪成數小段,然後將 4 條電線另一頭穿過熱縮管。
為了不讓 4 條電線散亂,您可以適當地調整熱縮管位置,然後用吹風機開啟熱風吹熱縮管使它緊固。
提醒您:如果沒有熱縮管,也可以用束帶代替。



Step11 將 4 條電線從紙盒外面穿過中間的洞,並在紙盒內部那端將電線輕輕打一個單結,單結至電線末端留下約 5 cm 長度。




Step12 將 4 條電線分別與馬達焊接。
提醒您:手把左邊的電池盒電線要焊到左馬達,手把右邊的電池盒電線要焊到右馬達,請注意圖片中紅色和黑色電線在馬達銅片上的位置,如果位置焊錯,輪子轉動的方向會不如預期。



Step13 取出長螺絲、螺帽和墊片,將馬達固定到紙盒內部。
提醒您:有「給氣狼機器人聯盟」字樣的那一端為車頭,左馬達務必要固定到小車左邊,右馬達務必要固定到小車右邊。






Step14 隨意取出一支筆,將圖片中之小紙板弄圓。



Step15 將小紙板從紙盒外部穿過細長孔,在紙盒內部用電工膠帶固定。圖片中另一端尚未貼膠帶的地方也需要貼膠帶。



這是紙盒底部,可以看到我們做出一個小輪子。



Step16 將橡膠輪胎套進塑膠輪子,用 M2.3 螺絲將它鎖固到馬達軸。




Step17 將手把上的電池盒分別裝入電池,切換 ON-OFF 開關,就可以讓 BoxyBot 紙盒機器人動起來。




採購資訊

BoxyBot 線控紙盒機器人 http://goods.ruten.com.tw/item/show?21752517807151

2017年8月1日 星期二

[Otto Robot] 組裝說明

這是一款適合小白練手的入門機器人!
這是一款完全開源,而且短時間就能快速制作的機器人!
他就是 Otto 開源人形機器人!
只要兩個小時,你也能制作一個專屬的超級可愛 Otto 小玩伴!




2017年7月30日 星期日

[MeArm.Dynamic] 機械手臂動力套件 -- 簡介

您的 MeArm 機械手臂只能停留在原地方夾取物體嗎? 現在起您可以讓它趴趴造了。

MeArm.Dynamic 動力套件是一組多功能動力套件,他提供 MeArm 機械手臂全程四驅強力動力,讓您的機械手臂不再只是定點夾取物體,而是能夠隨心所欲到處夾取物體。

不只如此,MeArm.Dynamic 動力套件也擴增了 MeArm 的功能,他同時也具備有循跡車和避障車的功能。



機械手臂擴增功能

MeArm.Dynamic 動力套件底板可以完全取代原先的 MeArm 底板,所以您可以把 MeArm 整組手臂轉移固定到 MeArm.Dynamic 動力套件底板上。他同時還增加一片層板,讓您可以用 2 只雙軸按鍵搖桿控制機械手臂。



循跡車

MeArm.Dynamic 動力套件底板增加一組方向輪固定孔,以及 1~5 組的紅外線循跡模塊固定板,讓您的循跡車在循線時更加迅速。



避障車

MeArm.Dynamic 動力套件底板具備一組 SG90 伺服馬達固定座,以及一組超音波測距模塊固定片,讓您的避障車在避開障礙時更加精準。



火星探險車

MeArm.Dynamic 動力套件麻雀雖小五臟俱全,只要您將 MeArm 機械手臂、循跡功能和避障功能全部搭載到動力套件底板上,那麼他就是一台 MeArm.Rover 火星探險車。




註:MeArm.Dynamic 動力套件不含 MeArm 機械手臂。如果您也需要 MeArm 機械手臂,建議您可以購買 MeArm.Rover 火星探險車。


購買資訊

1. MeArm.Dynamic 動力套件 http://goods.ruten.com.tw/item/show?21816913621763

2. MeArm.Rover 火星探險車 http://goods.ruten.com.tw/item/show?21638708796647






2017年4月29日 星期六

[NodeMCU] Lab1 點亮 8-Bit 2812 RGB LED

之前我們介紹過如何用 Arduino 點亮 8-Bit 2812 RGB LED 燈板,詳

http://pizgchen.blogspot.tw/2017/04/ws2812-8-bit-2812-rgb-led.html

這兒我們要改用 NodeMCU 點亮它。



準備材料

1. 8-Bit 2812 RGB LED 燈板 *1
2. 公排針(間距2.54mm) 4P *1
請先依 http://pizgchen.blogspot.tw/2017/04/ws2812-8-bit-2812-rgb-led.html 文中描述焊妥排針。
3. NodeMCU 開發板 *1
4. 杜邦線母母頭 3P *1


電路接線

用杜邦線依下表將 NodeMCU 與燈板連接起來:

NodeMCU      燈板
5V                   VDC
Gnd                 Gnd
D1                   DI


下載函式庫

1. 點選右側網址下載函式庫 https://github.com/adafruit/Adafruit_NeoPixel
2. 將下載的檔案解壓縮,複製到 Arduino IDE 的 libraries 資料夾裏。
3. 更改名稱為「Adafruit_NeoPixel」。


程式碼

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

#define PIN D1  //GPIO5

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  // End of trinket special code


  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  // Some example procedures showing how to display to the pixels:
  colorWipe(strip.Color(255, 0, 0), 50); // Red
  colorWipe(strip.Color(0, 255, 0), 50); // Green
  colorWipe(strip.Color(0, 0, 255), 50); // Blue
//colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW
  // Send a theater pixel chase in...
  theaterChase(strip.Color(127, 127, 127), 50); // White
  theaterChase(strip.Color(127, 0, 0), 50); // Red
  theaterChase(strip.Color(0, 0, 127), 50); // Blue

  rainbow(20);
  rainbowCycle(20);
  theaterChaseRainbow(50);
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}


相關連結

NodeMCU 文件 https://nodemcu.readthedocs.io/en/master/en/modules/pwm/
Adafruit https://www.adafruit.com/product/1426


採購資訊

1. 8-Bit 2812 RGB LED http://goods.ruten.com.tw/item/show?21715791439863
2. NodeMCU Lua Wifi 開發板 http://goods.ruten.com.tw/item/show?21716910606278
3. 公排針 http://goods.ruten.com.tw/item/show?21646385415847
4. 杜邦線 母母頭 http://goods.ruten.com.tw/item/show?21629159825718


[NodeMCU] Lab0 安裝與設定

有別於 Arduino 開發板,NodeMCU 開發套件本身就可以連網,它是一款以 ESP8266 模塊作為基礎的開發板,它將 ESP8266 所有的腳位分別引出,可以讓您作為多種用途使用。

目前的 NodeMCU 開發板有兩種版本,其 USB 轉 TTL 一款是 CP2102,如下圖


另一款是 CH340G,這一款號稱 V3 版,如下圖




NodeMCU 與 ESP8266 的主要差異

  • NodeMCU 包含一個 USB to serial 晶片,可隨插即用
  • NodeMCU firmware 可使用 Lua script 撰寫程式

NodeMCU 開發板使用 Lua 來程式設計,而 ESP8266 系列模塊的使用者,只要把 firmware 更新為 NodeMCU,也可以使用 Lua 來撰寫程式。


本文是使用 NodeMCU 基於 CP2102 開發板來作說明。

如果你是首次使用 NodeMCU,在您將 NodeMCU 插入電腦時,它會要求你安裝 CP2102 驅動程式,因為它使用 CP2102 晶片當作 USB 與 UART 的溝通橋樑。

下載 CP2102 驅動程式 http://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

下載後解壓縮,並且依照您的作業系統分別執行

CP210xVCPInstaller_x86.exe (32位元)

CP210xVCPInstaller_x64.exe (64位元)


檢查 NodeMCU 是否已和電腦正確連接

開啟「控制台」>「裝置管理員」>「連接埠(COM 和 LPT)」。
檢視序列埠是否有被啟用(你我的埠可能會不同),如下圖



使用 Arduino IDE 撰寫程式

為了讓我們可以使用 Arduino IDE 來編寫程式,需要做一些設定,這個步驟只需做一次即可,以後啟動 Arduino IDE 都無需重覆設定。

Step1 開啟 Arduino IDE。

Step2 點擊「檔案」>「偏好設定」,將底下那一行字貼到「Additional Boards Manager URLs:」右側欄位內

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Step3 點擊「確定」鈕,並關閉 Arduino IDE。

Step4 再次開啟 Arduino IDE。

Step5 安裝 ESP8266 工具,點擊「工具」>「板子」>「Boards Manager...」。
(出現「Boards Manager」對話窗)

Step6 捲動右側拉桿到下方,點擊「esp8266 by ESP8266 Community」那一欄,再點擊「Install」鈕。

Step7 點擊「關閉」鈕。



開啟範例程式

在自己編寫程式之前,我們先來執行內建的範例程式。這個程式會讓 NodeMCU 板載的 LED 閃爍。

Step1 開啟 Arduino IDE。

Step2 點擊「工具」>「板子」,選擇「NodeMCU 1.0 (ESP-12E Module)」。

Step3 點擊「序列埠」,選擇正確的埠。

Step4 點擊「檔案」>「範例」>「ESP8266」>「Blink」。

Step5 點擊「上傳」。

此時你可以看到 Arduino IDE 下方的訊息欄有陸續出現許多紅點與上傳的百分比,等待顯示上傳完畢,你就可以看到 NodeMCU 板子上面的 LED 閃爍。



圖片中 NodeMCU 下方那一個是電機驅動板,它可以驅動 2 只馬達。


程式說明

1. 我們可以看到 NodeMCU 板子上面的 LED 在閃爍,可是為什麼我們在程式中的腳位是寫著 "LED_BUILTIN" 呢? 這是因為 "LED_BUILTIN" 是 ESP8266 的關鍵字,它其實是等於 "D0",也就是 D0 腳。


接著我們來看看底下這張 NodeMCU 的腳位圖


由圖中我們可以看到 D0 就是 GPIO16,所以如果我們把程式中的「LED_BUILTIN」改成「GPIO16」,你猜 LED 還會正常閃爍嗎?

答案是否定的。正確的寫法如下:

int ledPin = 16; // GPIO16

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, LOW);
  delay(1000);
  digitalWrite(ledPin, HIGH);
  delay(2000);
}


2. 不知您是否有發現 LED 閃爍的頻率有點怪怪的,程式中明明寫著 LOW 的時間是 1秒,HIGH 的時間是 2 秒,可為什麼 LED 卻是亮 1 秒、暗 2 秒?那是因為 NodeMCU 板子在電路設計上就是 LOW 時才可以點亮該腳位的 LED。

3. D9 腳位可以點亮 ESP8266 板載 LED,但它也是輸出 LOW 時被點亮,HIGH 就熄滅。


Lua 編輯器

除了使用 Arduino IDE 來編寫程式之外,我們也可以在 ESPlorer 編輯器上用 Lua 語言來寫程式。

點擊右側網址下載並安裝 ESPlorer http://esp8266.ru/esplorer-latest/?f=ESPlorer.zip

用滑鼠右鍵點擊「ESPlorer.bat」。此時會出現命令列畫面,隨後就出現 ESPlorer IDE 視窗。



選擇正確的 COM 埠,並設定 UART 通訊的 Baudrate 為 9600。


點擊「Open」鈕







下方清單框內會出現連線訊息,



我的第一支 Lua 程式

NodeMCU 的特色之一,就是能使用 Lua 來撰寫程式。在 ESPlorer 畫面左側的編輯區,輸入第一個 Hello World 程式碼如下:

print("hello world")

完成後,按下 Send to ESP 按紐,即可將程式碼傳送至 NodeMCU 上執行。


相關連結

NodeMCU 官網 http://nodemcu.com/index_cn.html
NodeMCU 參考文件 https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_cn
Instruceables http://www.instructables.com/id/Programming-ESP8266-ESP-12E-NodeMCU-Using-Arduino-/
ESPlorer 編輯器 http://esp8266.ru/esplorer/
Lua 編譯器的用法 http://yhhuang1966.blogspot.tw/2015/07/lua.html


採購資訊

NodeMCU Lua Wifi 開發板基於 CP2102 http://goods.ruten.com.tw/item/show?21716910606278
NodeMCU Lua Wifi 開發板基於 CP2102 電機驅動板 http://goods.ruten.com.tw/item/show?21716910640647
NodeMCU Lua Wifi 開發板基於 CH340G http://goods.ruten.com.tw/item/show?21721367978126
NodeMCU Lua Wifi 開發板基於 CH340G 底板 http://goods.ruten.com.tw/item/show?21718168558530