特色:
最簡單的自走車方案
官網:
說明:
Motoduino 是結合 arduino duemilanove 和 L293D 馬達驅動晶片的一塊整合板,可以驅動兩顆直流馬達(電流最大到 1.2A)及利用 PWM特性控制馬達轉速 。Motoduino 完全相容於 arduino duemilanove ,大部分可以堆疊上去 arduino 的擴充板都可以使用。Motoduino 搭配藍芽模組(已預留孔位, 請注意安裝藍芽模組腳位一定要正確對應Motoduino Motoduino 主板 主板), 可以跟其它藍芽裝置(如 android 手機)溝通傳遞訊息。適合應用在如遙控車,自走車等。(詳如附件)
官網售價:600元,含車體:1600元(http://goods.ruten.com.tw/item/show?21406209016146)
實作:
安裝如下圖:
註:兩顆電池(9V) (9V)驅動馬達接法:把板子上的 J5 移到 Ext. Vin 的地方 ,外部電源/電池的負極接 GND,正極接 7V~12V 的位置。
開啟 Arduino 開發環境,把 motoduino 接上 PC,Tools->Board->Arduino Duemilanove w/ ATmega328 及正確的serial port ,並開啟Motoduino_BT.ino (如附件,內容如下:),Upload 鍵燒入程式到板子上!
/*
Motoduino : Arduino with motors driver
author: http://motoduino.com - Feb. 2012
*/
const int Motor_E2 = 5; // digital pin 5 of Arduino (PWM)
const int Motor_E1 = 6; // digital pin 6 of Arduino (PWM)
const int Motor_M2 = 7; // digital pin 7 of Arduino
const int Motor_M1 = 8; // digital pin 8 of Arduino
char val; // variable to receive data from the serial port(bluetooth)
void setup()
{
// Start serial communication at 57600
Serial.begin(57600);
pinMode(Motor_M1, OUTPUT);
pinMode(Motor_M2, OUTPUT);
}
void loop()
{
if(Serial.available())
{
val = Serial.read();
switch(val)
{
case 'f': // car forward
forward(0, 255);
break;
case 'b': // car backward
backward(0, 255);
break;
case 'l': // car turn left
left(0, 255);
break;
case 'r': // car turn right
right(0, 255);
break;
case 's': // car stop
motorstop(0, 0);
break;
}
}
}
void motorstop(byte flag, byte motorspeed)
{
Serial.println("Stop!");
digitalWrite( Motor_E1, motorspeed);
digitalWrite( Motor_E2, motorspeed);
}
void forward(byte flag, byte motorspeed)
{
Serial.println("Forward!");
digitalWrite( Motor_M1, HIGH);
digitalWrite( Motor_M2, HIGH);
analogWrite( Motor_E1, motorspeed);
analogWrite( Motor_E2, motorspeed);
}
void backward(byte flag, byte motorspeed)
{
Serial.println("Backward!");
digitalWrite( Motor_M1, LOW);
digitalWrite( Motor_M2, LOW);
analogWrite( Motor_E1, motorspeed);
analogWrite( Motor_E2, motorspeed);
}
void right(byte flag, byte motorspeed)
{
Serial.println("Turn Right! ");
digitalWrite( Motor_M1, HIGH);
digitalWrite( Motor_M2, HIGH);
analogWrite( Motor_E1, motorspeed);
analogWrite( Motor_E2, 0);
}
void left(byte flag, byte motorspeed)
{
Serial.println("Turn Left!");
digitalWrite( Motor_M1, HIGH);
digitalWrite( Motor_M2, HIGH);
analogWrite( Motor_E1, 0);
analogWrite( Motor_E2, motorspeed);
}
打開Serial Monitor輸入f b l r s來測試自走車會不會按照「前 後 左 右 停」的指令來運動
註:
1.馬達若無外接電池,要將J5移到 VCC-5V
2.Serial Monitor右下角的速率要改成57600
3.可改變forward( 255)、backward( 255)、left( 255)、right( 255)、motorstop(0)內的值來改變各轉速!
2016.05.11更新(使用 Motoduino U1)
Motoduino U1 是延續舊版Motoduino 所修改下一代Arduino UNO 相容板,是結合Arduino UNO 和 L293D 馬達驅動晶片的一塊整合板, 可以驅動兩顆直流馬達(電流最大到1.2A)及利用PWM 特性控制馬達轉速。Motoduino U1 完全相容於arduinoUNO, 所有可以堆疊上去arduino 的擴充板都可以使用。 MotoduinoU1 搭配藍芽模組(已預留孔位, 請注意安裝藍芽模組腳位一定要正確對應Motoduino U1 主板), 可以跟其它藍芽裝置溝通傳遞訊息,適合應用在如遙控車、溫度監控器等。此外,Motoduino U1 設計時完全考慮到S4A 使用者,可以配合 S4A 軟體做教學使用,完全不需要修改原廠官方Firmware(載到Motoduino 上)即可以使用。(手冊如附件)
利用Serial Monitor輸入f b l r s來測試自走車會不會按照「前 後 左 右 停」的指令來運動
/////////////////////////////////////////
// 程式說明: Android藍芽手機遙控車配合Motoduino U1使用
// 作者: Dennis Chen 2015
// Email:
/////////////////////////////////////////
// 馬達與motoduino的腳位對應
const int Motor_E1 = 5; // 控制馬達1轉速 digital pin 5 of Arduino (PWM)
const int Motor_E2 = 6; // 控制馬達2轉速 digital pin 6 of Arduino (PWM)
const int Motor_M1 = 10; // 控制馬達1正反轉 digital pin 10 of Arduino
const int Motor_M2 = 11; // 控制馬達2正反轉 digital pin 11 of Arduino
char val; // 接收來自藍芽資料
void setup()
{
// Start serial communication at 57600 baud rate(傳輸率)
Serial.begin(57600);
pinMode(Motor_M1, OUTPUT); //設定 Motor_M1為輸出腳位
pinMode(Motor_M2, OUTPUT); //設定 Motor_M2為輸出腳位出
}
//////////// 主程式 ////////
void loop()
{ if(Serial.available())
{ val = Serial.read();
switch(val) {
case 'f': // 前進
forward(0, 255);
break;
case 'b': // 後退
backward(0, 255);
break;
case 'l': // 左轉
left(0, 255);
break;
case 'r': // 右轉
right(0, 255);
break;
case 's': // 停止
motorstop(0, 0);
break;
} }
}
void motorstop(byte flag, byte motorspeed)
{
Serial.println("stop!");
digitalWrite( Motor_E1, motorspeed);
digitalWrite( Motor_E2, motorspeed);
}
void forward(byte flag, byte motorspeed)
{
Serial.println("forward!");
digitalWrite( Motor_M1, HIGH);
digitalWrite( Motor_M2, HIGH);
analogWrite( Motor_E1, motorspeed);
analogWrite( Motor_E2, motorspeed);
}
void backward(byte flag, byte motorspeed)
{
Serial.println("backward!");
digitalWrite( Motor_M1, LOW);
digitalWrite( Motor_M2, LOW);
analogWrite( Motor_E1, motorspeed);
analogWrite( Motor_E2, motorspeed);
}
void right(byte flag, byte motorspeed)
{
Serial.println("right!");
digitalWrite( Motor_M1, HIGH);
digitalWrite( Motor_M2, HIGH);
analogWrite( Motor_E1, 0);
analogWrite( Motor_E2, motorspeed);
}
void left(byte flag, byte motorspeed)
{
Serial.println("left!");
digitalWrite( Motor_M1, HIGH);
digitalWrite( Motor_M2, HIGH);
analogWrite( Motor_E1, motorspeed);
analogWrite( Motor_E2, 0);
}
利用手機APP,透過藍芽來測試自走車會不會按照「前 後 左 右 停」的指令來運動
#include <SoftwareSerial.h>
SoftwareSerial BT(0,1); // 接收腳(RX), 傳送腳(TX);接HC-06之TXD、RXD;先不要用0,1,因為USB用
const int Motor_E1 = 5; // 控制馬達1轉速 digital pin 5 of Arduino (PWM)
const int Motor_E2 = 6; // 控制馬達2轉速 digital pin 6 of Arduino (PWM)
const int Motor_M1 = 10; // 控制馬達1正反轉 digital pin 10 of Arduino
const int Motor_M2 = 11; // 控制馬達2正反轉 digital pin 11 of Arduino
char val; // 接收來自藍芽資料
void setup()
{
// Start serial communication at 57600 baud rate(傳輸率)
// Serial.begin(57600);
BT.begin(57600);
pinMode(Motor_M1, OUTPUT); //設定 Motor_M1為輸出腳位
pinMode(Motor_M2, OUTPUT); //設定 Motor_M2為輸出腳位出
}
//////////// 主程式 ////////
void loop()
{
// if(Serial.available())
// { val = Serial.read();
if(BT.available() ) {
val=BT.read();
switch(val) {
case 'f': // 前進
forward(0, 255);
break;
case 'b': // 後退
backward(0, 255);
break;
case 'l': // 左轉
left(0, 255);
break;
case 'r': // 右轉
right(0, 255);
break;
case 's': // 停止
motorstop(0, 0);
break;
} }
}
void motorstop(byte flag, byte motorspeed)
{
Serial.println("stop!");
digitalWrite( Motor_E1, motorspeed);
digitalWrite( Motor_E2, motorspeed);
}
void forward(byte flag, byte motorspeed)
{
Serial.println("forward!");
digitalWrite( Motor_M1, HIGH);
digitalWrite( Motor_M2, HIGH);
analogWrite( Motor_E1, motorspeed);
analogWrite( Motor_E2, motorspeed);
}
void backward(byte flag, byte motorspeed)
{
Serial.println("backward!");
digitalWrite( Motor_M1, LOW);
digitalWrite( Motor_M2, LOW);
analogWrite( Motor_E1, motorspeed);
analogWrite( Motor_E2, motorspeed);
}
void right(byte flag, byte motorspeed)
{
Serial.println("right!");
digitalWrite( Motor_M1, HIGH);
digitalWrite( Motor_M2, HIGH);
analogWrite( Motor_E1, 0);
analogWrite( Motor_E2, motorspeed);
}
void left(byte flag, byte motorspeed)
{
Serial.println("left!");
digitalWrite( Motor_M1, HIGH);
digitalWrite( Motor_M2, HIGH);
analogWrite( Motor_E1, motorspeed);
analogWrite( Motor_E2, 0);
}
原理:
手機控制:
藍牙模組的鮑速要改為57600
安裝附件MDUINO2.APK的APP
參考資料: