2019年3月10日 星期日

[Arduino] 實做 PCF8574 模組的輸出入功能(二)

本文在說明前文提到可以串聯多個 PCF8574 模組作為多個輸出入端口,這裏只實做 2 個模組串聯。模組端部留有公排針與母排針,串聯時只要將公排針插入母排針即可,記得還需要調整跳線帽重新定址,如下圖。


如果您對 PCF8574 模組還不熟悉,建議您先參閱
「實做 PCF8574 模組的輸出入功能(一)」 http://pizgchen.blogspot.com/2019/03/arduino-pcf8574.html


接線

Arduino       PCF8574 模組
VCC            VCC
GND           GND
A4               SDA
A5               SCL

將 2 個 PCF8574 模組串接,並調整第二個模組的跳線帽,第一個模組的位址是 0x38,第二個模組的位址是 0x39,如下圖。

第一個模組

第二個模組

兩個模組串接


實作範例一

這個實驗用 Arduino 讓第一個模組的 pin0 腳位和第二個模組的 pin7 腳位 LED 每秒閃一次,所以您還應該在那 2 個腳位設置 LED 電路,然後您可以看到閃爍的 LED,並在 Arduino 的序列視窗看到腳位的輸出狀態。

程式碼

#include "HCPCF8574.h"      //Include the HCPCF8574 library

#define I2C_ADD1 0x38       //I2C address of the first PCF8574 device
#define I2C_ADD2 0x39       //I2C address of the second PCF8574 device

HCPCF8574 Port1(I2C_ADD1);  //Create an instance of the library to control the first device
HCPCF8574 Port2(I2C_ADD2);  //Create an instance of the library to control the second device

void setup()
{
  Serial.begin(9600);
  Port1.init();             //Initiliase the first PCF8574 (all pins are set to high)
  Port2.init();             //Initiliase the second PCF8574 (all pins are set to high)
  Port1.pinMode(0, OUTPUT); //Set digital pin 0 on the first device to an output
  Port2.pinMode(7, OUTPUT); //Set digital pin 7 on the second device to an output
}


void loop()
{
  Serial.println("Port1 pin0 & Port2 pin7 is HIGH");
  Port1.pinWrite(0, HIGH);  //Set digital pin 0 on the first device high
  Port2.pinWrite(7, HIGH);  //Set digital pin 7 on the second device high
  delay(1000);                       //Wait 1 second

  Serial.println("Port1 pin0 & Port2 pin7 is LOW");
  Port1.pinWrite(0, LOW);   //Set digital pin 0 on the first device low
  Port2.pinWrite(7, LOW);   //Set digital pin 7 on the second device low
  delay(1000);                       //Wait another second
}


實作範例二

這個實驗用 Arduino 讀取 2 組 PCF8574AT 模塊的 P0~P7 腳位信號,所以您還應該在那些腳位總共設置 16 個按鈕電路,然後可以在 Arduino 的序列視窗顯示按鈕的開關狀態。

程式碼

#include "HCPCF8574.h"      //Include the HCPCF8574 library

#define I2C_ADD1 0x38       //I2C address of the first PCF8574 device
#define I2C_ADD2 0x39       //I2C address of the second PCF8574 device

HCPCF8574 Port1(I2C_ADD1);  //Create an instance of the library to control the first device
HCPCF8574 Port2(I2C_ADD2);  //Create an instance of the library to control the second device

void setup()
{
  Serial.begin(9600);
  Port1.init();             //Initiliase the first PCF8574 (all pins are set to high)
  Port2.init();             //Initiliase the second PCF8574 (all pins are set to high)
  for (int i=0; i<8 ; i++) {
    Port1.pinMode(i, INTPUT); //Set digital pin 0 on the first device to an output
    Port2.pinMode(i, INTPUT); //Set digital pin 7 on the second device to an output
  }
}

void loop()
{
   boolean State10 = Port1.pinRead(0);  //Read the port1 of digital pin 0
   boolean State11 = Port1.pinRead(1);  //Read the port1 of digital pin 1
   boolean State12 = Port1.pinRead(2);  //Read the port1 of digital pin 2
   boolean State13 = Port1.pinRead(3);  //Read the port1 of digital pin 3
   boolean State14 = Port1.pinRead(4);  //Read the port1 of digital pin 4
   boolean State15 = Port1.pinRead(5);  //Read the port1 of digital pin 5
   boolean State16 = Port1.pinRead(6);  //Read the port1 of digital pin 6
   boolean State17 = Port1.pinRead(7);  //Read the port1 of digital pin 7

   boolean State20 = Port2.pinRead(0);  //Read the port2 of digital pin 0
   boolean State21 = Port2.pinRead(1);  //Read the port2 of digital pin 1
   boolean State22 = Port2.pinRead(2);  //Read the port2 of digital pin 2
   boolean State23 = Port2.pinRead(3);  //Read the port2 of digital pin 3
   boolean State24 = Port2.pinRead(4);  //Read the port2 of digital pin 4
   boolean State25 = Port2.pinRead(5);  //Read the port2 of digital pin 5
   boolean State26 = Port2.pinRead(6);  //Read the port2 of digital pin 6
   boolean State27 = Port2.pinRead(7);  //Read the port2 of digital pin 7

   Serial.println("Port1="); 
   Serial.print(State10); Serial.print(State11); Serial.print(State12);   Serial.print(State13);
   Serial.print(State14); Serial.print(State15); Serial.print(State16);   Serial.print(State17);

   Serial.println("Port2="); 
   Serial.print(State20); Serial.print(State21); Serial.print(State22);   Serial.print(State23);
   Serial.print(State24); Serial.print(State25); Serial.print(State26);   Serial.print(State27);
   
   delay(1000);                       //Wait another second
}


採購資訊

PCF8574AT I/O擴展模塊 https://goods.ruten.com.tw/item/show?21908917689628





2019年3月3日 星期日

[Arduino] 實做 PCF8574 模組的輸出入功能(一)


此模組採用 PCF8574AT 芯片,具有 8 位輸入/輸出 (I/O) 擴展功能,您可以通過串行 I2C 接口擴展微控制器的可用數字 I/O 引腳。該器件具有8位準雙向 I/O 端口 (P0~P7),包括具有高電流驅動能力的鎖存輸出,可直接驅動LED。每個準雙向 I/O 都可以用作輸入或輸出,而無需使用數據方向控制信號。

3個板載跳線允許選擇最多8個 I2C 地址,這意味著最多 8 個模組 (64個 I/O 引腳) 可以連接到同一個 I2C 接口。該模組的每一端還具有方便的輸入和輸出接頭,因此可以簡單地以菊花鏈形式連接其他模塊,而無需額外的電線等。

註:模組附帶 PCF8574T 或 PCF8574AT 芯片,它會有不同的 I2C 地址,範圍如下:

PCF8574T = 0x20至0x27
PCF8574AT = 0x38至0x3F

PCF8574AT 模組 VCC工作電壓為 2.5~6V,低待機最大電流消耗 10μA,具有漏極開路中斷輸出功能,並與 Arduino 等大多數微控制器兼容,具有高電流驅動能力的鎖存輸出,閂鎖性能超過每 JESD 78 100 mA,Class II 。


Datasheet http://pdf1.alldatasheet.com/datasheet-pdf/view/18216/PHILIPS/PCF8574AT.html



接線

Arduino        PCF8574AT 模組
VCC             VCC
GND            GND
A4                SDA
A5                SCL


實作範例一

這個實驗用 Arduino 讀取 PCF8574AT 模組的 P0 腳位信號,所以您還應該在該腳位設置一個按鈕電路,然後在 Arduino 的序列視窗顯示按鈕的開關狀態。

程式碼

#include "HCPCF8574.h"    //Include the HCPCF8574 library

#define I2C_ADD 0x38      //I2C address of the PCF8574

HCPCF8574 Port(I2C_ADD);  //Create an instance of the library

void setup()
{
  Serial.begin(9600);     //Initiliase the Arduino serial library.
  Port.init();            //Initiliase the PCF8574 (all pins are set to high)
  Port.pinMode(0, INPUT); //Set digital pin 0 to an input
}

void loop()
{
  boolean State = Port.pinRead(0);  //Read the state of digital pin 0
  // Output the state to the serial port
  Serial.print("Pin 0 = ");
  if(State)
    Serial.println("HIGH");
  else
    Serial.println("LOW");

  delay(100);
}


實作範例二

承上個實驗一樣用 Arduino 讀取 PCF8574AT 模塊的 P0 腳位信號(您仍應該在該腳位設置一個按鈕電路),然後用 PCF8574AT 模塊的 P1 腳位讓 LED 隨著按鈕開關明滅(您應該在該腳位串接一個 LED 電路)。

程式碼

#include "HCPCF8574.h"    //Include the HCPCF8574 library

#define I2C_ADD 0x38      //I2C address of the PCF8574

HCPCF8574 Port(I2C_ADD);  //Create an instance of the library

void setup()
{
  Serial.begin(9600);     //Initiliase the Arduino serial library.
  Port.init();            //Initiliase the PCF8574 (all pins are set to high)
  Port.pinMode(0, INPUT); //Set digital pin 0 to an input
  Port.pinMode(1, OUTPUT); //Set digital pin 1 to an output
}

void loop()
{
  boolean State = Port.pinRead(0);  //Read the state of digital pin 0
  // Output the state to the serial port
  // Serial.print("Pin 0 = ");
  if(State)
    // Serial.println("HIGH");
    Port.pinWrite(1, HIGH);
  else
    // Serial.println("LOW");
    Port.pinWrite(1, LOW);

  delay(100);
}


後記

1.上電後的 PCF8574 模組腳位作為輸出時,是在 HIGH 的狀態,這個需要注意一下。

2.在 PCF8574 模組腳位作為輸出時,發現串接限流電阻 220R 的白發紅 5mm LED 並不是很亮,移除限流電阻後也沒達到正常亮度,如果真要用它來點亮 LED,應加裝電晶體來驅動 LED。


相關連結

實做 PCF8574 模組的輸出入功能(二) https://pizgchen.blogspot.com/2019/03/arduino-pcf8574_10.html


採購資訊

PCF8574AT I/O擴展模塊 https://goods.ruten.com.tw/item/show?21908917689628








2018年12月7日 星期五

[Robot] 履帶車(坦克車)底盤套件組裝

這一款履帶車(坦克車)底盤套件雖然價格低廉,但它搭載的減速馬達卻是動力十足,就是再崎嶇不平的地形也可輕易越過。
底盤套件




工具

1.烙鐵
2.焊錫
3.尖嘴鉗
4.斜口鉗
5.M2 螺絲起子




組裝步驟

Step1 使用烙鐵和焊錫將電池盒電線焊到馬達上。



Step2 用 2 只螺絲先把電池盒鎖到塑膠條,再拿出 2 支中間長度的鐵條插上塑膠條。

提醒您:
1. 須注意電池盒和鐵條在塑膠條上的位置。
2. 塑膠條中間孔有通孔和未通孔兩種,鐵條要插到未通孔上。這部份要插緊避免鬆脫,如果鐵條插不進塑膠條,可用鐵鎚或重物將其敲進。





Step3 將 2 支鐵條的另一端也插上塑膠條。



Stpe4 使用 2 只螺絲將 2 片長 L 形鐵片鎖到塑膠條。
提醒您:須注意 L 形鐵片在塑膠條上的位置。




Step5 使用 2 只螺絲將 2 片短 L 形鐵片鎖到塑膠條。



Step6 使用斜口鉗將最短的 2 支鐵條都剪去 1 公分,放置一旁備用。

將馬達置放在兩支塑膠條中間 (由於固定馬達這端是履帶車頭,此時要注意馬達轉動的方向),馬達的鐵殼有磁性,他會吸住長 L 形鐵片,再將 2 支短鐵條分別穿過塑膠條插進馬達軸心。

提醒您:須注意馬達軸心在塑膠條上的位置。

將最長 2 支鐵條先穿過 2 只桔色固定環,一支穿過車尾塑膠條中間通孔,另一支穿過短 L 形鐵片。



Steo7 調整桔色固定環位置,使 2 支鐵條平均置中,而且保持鬆緊適中地可以轉動。



Step8 裝上 6 只輪子。調整這 3 對子使其保持同樣寬度。



Step9 裝上履帶,至此完成。


這是車頭細部

這是車尾細部

這是電池盒細部

觀賞影片


採購資訊

履帶車(坦克車)底盤套件 https://goods.ruten.com.tw/item/show?21849173965858




2018年7月11日 星期三

DIY推桿

運用齒輪帶動齒條可發展出推桿裝置,推桿可以運用在門窗和遮陽簾的開閤...等處。

這裏要說明的是利用雷射切割壓克力,做出類似推桿的裝置。本推桿使用一只 MG90S 伺服馬達作為動力來源,其直線運動行程可達 60mm,外觀如下圖


下圖是市售品


應用例之一



另外,跟推桿類似的裝置是油(氣)壓缸,它是一種將液(氣)體力量轉換為直線機械動力的機械,只需利用少量的力量透過液體就可推動數倍重量的物體,多用於:千斤頂、吊車、起重機、堆高機、怪手(挖土機)、、、等需要大量動力的重機械機具。




其運作原理祥下圖




組裝步驟

在本說明裏為清晰表現圖片效果,並未移除壓克力機構件表面護膜。但為使本裝置能順暢作動,建議您務必移除表面護膜或貼紙。

Step1 使用M2螺絲和螺帽將 MG90S 伺服馬達固定在底板上。請務必鎖緊。
提示:請注意伺服馬達的轉軸是在底板中間處。



Step2 使用伺服馬達所附的自攻螺絲將塑料搖臂固定在齒輪上。



Step3 使用伺服馬達所附的M2螺絲將齒輪鎖固到伺服馬達上。



Step4 使用 4 只 M3x6 螺絲將尼龍柱固定在底板上。請務必鎖緊。



Step5 上傳下方程式到 Arduino,將伺服馬達固定在 90 度位置。

#include <Servo.h>
Servo myservo;

void setup() {
  myservo.attach(9);
  myservo.write(90);
}

void loop() {
}


Step6 取出下列機構件,


將它們安放到底板上,
提示:注意齒條中間要盡量放在齒輪處。



Step7 使用 4 只 M3x6 螺絲將蓋板鎖固到尼龍柱上,組裝至此完成。



開啟 Arduino IDE 範例程式 Servo\Sweep.ino,將程式上傳到 Arduino,然後您就可以看到軌道推桿裝置在作動。影片如下



相關連結

溫室遮陽棚系統 http://www.bf150.com/jianshe/607.html


採購資訊

近期上市。



2018年3月5日 星期一

[meArm] 機械手臂組裝說明

meArm 機械手臂可以讓您用它來夾取物體。



一、準備材料

機構件


提醒您:強烈建議您先把壓克力表面的保護紙撕除後再繼續以下之組裝步驟。


機電零件

Arduino nano 開發板 * 1
Arduino UNO nano 兩用擴展板 * 1


您也可以使用 UNO 及其擴展板



SG90 伺服馬達 * 4
(建議使用 MG90S * 1 + SG90 * 3)



杜邦線 公母頭 * 3




二、開始組裝

組裝前注意事項:

1.本套件所有螺絲孔都是 M3 孔,但孔有2種,一種是鬆孔,另一種是緊孔(自攻孔)。鬆孔在螺絲穿過後機構件仍可以鬆動;緊孔在螺絲穿過後機構件無法鬆動,在穿螺絲時請注意方向。

因為機器在加工時會有誤差,如果在鎖緊孔時發現太鬆,請在緊孔內塗抹樹脂再鎖螺絲,或是在鎖好螺絲後用快乾膠點黏緊孔處。


2.為了我們在組裝時方便識別起見,需要先定義一下機械手臂各部位名稱。把手臂放在胸前,夾子跟眼睛的方向一樣朝前放置,機身左側的馬達稱為左馬達,右側馬達稱為右馬達,底部的馬達稱為底座馬達,而夾子處的馬達理所當然稱為夾子馬達。

3.***最重要是這件事*** 在將機構件固定到馬達時,建議夾子馬達、右馬達和底座馬達需上電並固定在 90 度;左側馬達,需上電並固定在 170 度(註A),而後再鎖緊螺絲。

註A:

有些 SG90 伺服馬達無法轉到 180 度,如果程式持續要求它要 180 度,馬達有可能會燒毀。建議在組裝前先了解一下伺服馬達的可轉動範圍,而此處的 170 度只是一個保守的安全角度,並非絕對。

指定馬達轉動到特定角度程式詳 http://pizgchen.blogspot.tw/2016/09/mearmrover.html


Step1 這個步驟我們要來組裝夾子。



準備下列機構件



使用 2 只 M3x8 螺絲鎖住夾子。
提醒您:此處不可鎖緊,應讓夾子能自由轉動。


這是背面


使用 4 只 M3x10 螺絲將下列機構件鎖住。
提醒您:靠進夾子那 2 支螺絲不可鎖過頭,應讓夾子能自由轉動。



這是側面


這是另一面


使用 1 只 M3x8 螺絲將下列機構件鎖住。
提醒您:此處不可鎖緊,應讓它能自由轉動。



取出下列機構件
提醒您:下方這個機構件有 2 片,此處應取用較短那片。


將伺服馬達搖臂塑膠片置入大孔內


在另一面用伺服馬達所附的自攻螺絲固定


使用下列程式將伺服馬達轉動到90度位置

#include <Servo.h>
Servo myservo;  // create servo object to control a servo

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  myservo.write(90);
}

void loop() {
}


在伺服馬達上電的情況下,將之前組件套入伺服馬達,並用伺服馬達所附之小螺絲將它鎖緊。

然後再使用 1 只 M3x8 螺絲將機構件另一端鎖住。
提醒您:此處不可鎖緊,應讓它能自由轉動。


這是完成的樣貌



Step2 為夾子裝上 3 根桿件,如下圖。


準備下列機構件


取出下列機構件


使用 M3x10 螺絲將桿子鎖上。
提醒您:此處不能鎖太緊,要讓它能夠靈活轉動。


取出下列機構件


使用 M3x10 螺絲將較細那端鎖到夾子的側孔。
提醒您:此處不能鎖太緊,要讓它能夠靈活轉動。


取出下列機構件


使用 M3x10 螺絲將桿件鎖到夾子的側孔。
提醒您:此處不能鎖太緊,要讓它能夠靈活轉動。


這是完成的樣貌



Step3 組裝右側板,如下圖。



使用 M2 螺絲和螺帽將伺服馬達鎖緊。
提醒您:此處請務必鎖緊。


這是背面


準備下列機構件


使用 M3x8 螺絲將桿件鎖到右側板。
提醒您:此處不能鎖太緊,要讓它能夠靈活轉動。


使用 M3x10 螺絲將桿件和墊片鎖到三角片(墊片被夾在桿件和三角片之間)。
提醒您:
1. 注意三角片之正確孔位。
2. 此處不能鎖太緊,要讓它能夠靈活轉動。


這是背面



Step4 組裝左側板,如下圖。


使用 M2 螺絲和螺帽將伺服馬達鎖緊。
提醒您:此處請務必鎖緊。


這是背面


準備下列機構件


取出下列機構件


將伺服馬達搖臂塑膠片置入大孔內


在另一面用伺服馬達所附的自攻螺絲固定


使用下列程式將伺服馬達轉動到170度位置

#include <Servo.h>
Servo myservo;  // create servo object to control a servo

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  myservo.write(170);
}

void loop() {
}


在伺服馬達上電的情況下,將之前組件套入伺服馬達,並用伺服馬達所附之小螺絲將它鎖緊。


然後再使用 1 只 M3x8 螺絲將機構件另一端鎖住。
提醒您:此處不可鎖緊,應讓它能自由轉動。



Step5 組合 H 形組件,如下圖。



準備下列機構件



將伺服馬達搖臂塑膠片置入大孔內,並在背面用伺服馬達所附的自攻螺絲固定


這是背面



使用下列程式將伺服馬達轉動到90度位置

#include <Servo.h>
Servo myservo;  // create servo object to control a servo

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  myservo.write(90);
}

void loop() {
}


在伺服馬達上電的情況下,將之前組件套入伺服馬達,並用伺服馬達所附之小螺絲將它鎖緊。


使用 1 只 M3x12 螺絲和螺帽將機構件鎖住。


使用 1 只 M3x12 螺絲和螺帽將機構件鎖住。



Step6 組裝基座,如下圖。


準備下列機構件



將伺服馬達底部穿過機構件,杜邦線由背面穿出


使用 4 只 M3x12 螺絲和螺帽將伺服馬達鎖緊。


使用 4 只尼龍柱和螺帽將機構件鎖緊。


準備下列機構件和材料


使用伺服馬達所附之 2 只大螺絲將它鎖緊。
提醒您:此處壓克力板上的小箭頭是朝上的。


這是背面


準備下列組件


使用下列程式將伺服馬達轉動到90度位置

#include <Servo.h>
Servo myservo;  // create servo object to control a servo

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  myservo.write(90);
}

void loop() {
}


在伺服馬達上電的情況下,將之前組件套入伺服馬達,並用伺服馬達所附之小螺絲將它鎖緊。
提醒您:此處壓克力板上的小箭頭是朝左的。




Step7 組合右側板與基座。



準備下列機構件



將它組合成工字形


這是它的右視圖
提醒您:山形板除外的那兩片壓克力板的孔洞不是在板子中間。


這是它的左視圖


將山形組件插入右側板


使用 1 只 M3x12 螺絲和螺帽將它鎖緊。


翻到另一側,使用 1 只 M3x12 螺絲和螺帽將它鎖緊。


將上面部件安裝到基板上




Step8 組合左側板與基座。

將左側板蓋上

使用 1 只 M3x12 螺絲和螺帽將它鎖緊。


翻到另一側,使用 1 只 M3x12 螺絲和螺帽將它鎖緊。



Step9 組合夾子與 H 形部件。

使用 1 只 M3x8 螺絲將它鎖住。
提醒您:此處不可鎖緊,應讓它能自由轉動。


使用 1 只 M3x8 螺絲將另一支桿件鎖上。
提醒您:此處不可鎖緊,應讓它能自由轉動。


使用 1 只 M3x12 螺絲依序將三角片、爪子桿件和 H 形部件鎖住。
提醒您:此處不可鎖緊,應讓它能自由轉動。


翻轉到背面,使用 1 只 M3x8 螺絲將另一支桿件鎖上。
提醒您:此處不可鎖緊,應讓它能自由轉動。



Step9 將整組夾子固定到底板。

使用 4 只 M3x8 螺絲將尼龍柱固定到底板。


這是背面



Step10 組裝控制板。

準備 Arduino Nano 開發板和擴展板


將 Nano 插入擴展板


使用 4 只 M3x12 螺絲和螺帽將 Arduino 控制板固定到底板。


將夾子的伺服馬達杜邦線穿過 H 形部件的圓孔,
並將 3P 公母頭杜邦線的公頭與夾子的伺服馬達杜邦線母頭接在一起,作為延長使用。



Step11 將 Arduino 控制板固定到底板(為了清楚展示,我先暫時移除機械手臂部件)。




Step11 電路接線

伺服馬達與 Nano 擴展板的接線如下:

擴展板     伺服馬達
5V            VCC
GND        GND
D2            底板馬達橘色線
D3            右側馬達橘色線
D4            左馬達橘色線
D5            夾子馬達橘色線




Step12 上傳程式


//2016-09-21 by PizG Chen
#include <Servo.h>
Servo s1,s2,s3,s4;
int b1,b2;
int v0,v1,v2,v3;
int a,a1,a2,a3,a4;

void setup() {
  Serial.begin(9600);
  s1.attach(2); // 夾子
  s2.attach(3); // 右馬達
  s3.attach(4); //左馬達
  s4.attach(5); // 基座馬達
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  a=2;
  a1=90;
  a2=90;
  a3=120;
  a4=90;
}

void loop() {
  // get data
  b1 = digitalRead(6);
  v0 = analogRead(A0);
  v1 = analogRead(A1);
  b2 = digitalRead(7);
  v2 = analogRead(A2);
  v3 = analogRead(A3);

  // print data
  // turn data
  if (v3 < 340) a1 = a1 + a;
  if (v3 > 680) a1 = a1 - a;
  s1.write(a1);
  if (v2 < 340) a2 = a2 - a;
  if (v2 > 680) a2 = a2 + a;
  s2.write(a2);
  if (v1 < 340) a3 = a3 - a;
  if (v1 > 680) a3 = a3 + a;
  s3.write(a3);
  if (v0 < 340) a4 = a4 - a;
  if (v0 > 680) a4 = a4 + a;
  s4.write(a4);

  delay(100);
}



========================================================================

以下為使用搖桿控制機械手臂的範例

Step1 組裝搖桿。


準備下列機構件


將 8 只小墊圈置於搖桿孔位上。





用 8 只 M3x12 螺絲和螺帽將搖桿固定到層板。




使用 4 只 螺帽將 M3x30+6 尼龍柱固定到層板。


使用 4 只 M3x8 螺絲將尼龍柱固定到底板。



Step2 電路接線

搖桿與 Nano 擴展板的接線如下:

擴展板      左搖桿
GND         GND
5V             VCC
A0             VRX
A1             VRY
D6             SW

擴展板      右搖桿
GND         GND
5V             VCC
A2             VRX
A3             VRY
D7             SW




Step3 上傳程式

//2016-09-21 by PizG Chen
#include <Servo.h>
Servo s1,s2,s3,s4;
int b1,b2;
int v0,v1,v2,v3;
int a,a1,a2,a3,a4;

void setup() {
  Serial.begin(9600);
  s1.attach(2); // 夾子
  s2.attach(3); // 右馬達
  s3.attach(4); //左馬達
  s4.attach(5); // 基座馬達
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  a=2;
  a1=90;
  a2=90;
  a3=120;
  a4=90;
}

void loop() {
  // get data
  b1 = digitalRead(6);
  v0 = analogRead(A0);
  v1 = analogRead(A1);
  b2 = digitalRead(7);
  v2 = analogRead(A2);
  v3 = analogRead(A3);

  // print data
  // turn data
  if (v3 < 340) a1 = a1 + a;
  if (v3 > 680) a1 = a1 - a;
  s1.write(a1);
  if (v2 < 340) a2 = a2 - a;
  if (v2 > 680) a2 = a2 + a;
  s2.write(a2);
  if (v1 < 340) a3 = a3 - a;
  if (v1 > 680) a3 = a3 + a;
  s3.write(a3);
  if (v0 < 340) a4 = a4 - a;
  if (v0 > 680) a4 = a4 + a;
  s4.write(a4);

  delay(100);
}

右搖桿往右手臂往右轉;往左手臂往左轉。
右搖桿往前手臂往前伸;往後手臂往後退。
左搖桿往前降低夾子高度;往後升高夾子高度。
左搖桿往右夾子閉合;往左夾子開啟。


技術資料

SG90 伺服馬達 http://www.micropik.com/PDF/SG90Servo.pdf
雙軸按鍵搖桿 http://pizgchen.blogspot.tw/2016/05/blog-post_23.html
MeArm 組裝手冊 https://ia902701.us.archive.org/19/items/mearmcontroller/MearmAssemblyInstructions.pdf


採購資訊

雙軸按鍵搖桿套件 https://goods.ruten.com.tw/item/show?21629149689670
MeArm.Rover 機械手臂火星探險車 http://goods.ruten.com.tw/item/show?21638708796647