期末作品製作過程記錄
伺服馬達轉向測試
使用Arduino uno+變阻器+伺服馬達進行轉向測試
2015.12.21
藍牙通訊測試(HC-06)
搭載
Bluetooth HC-06
L293D Board (H-橋式電機驅動器)
進行藍牙連接伺服馬達進行轉向的測試
2015.12.23
測試影片
(只會轉向)
車體拼裝組合+自帶電源
2016.1.2

#include <Servo.h>
#include <AFMotor.h>
#define MAX_UARTCMDLEN 128
#define SERVO1_PWM 10 // Pin10/SERVO1_PWM, and Pin9/SERVO2_PWM for L293D motor shield
// up to 128 bytes UART command received from the Android system
byte uartCmdBuff[MAX_UARTCMDLEN];
int uartCmdLen = 0; // received BT command length
// Higher frequencies produce less audible hum in operation, but may result in lower torque
// The valid values for speed are between 0 and 255.
AF_DCMotor motor(1,MOTOR12_2KHZ); // DC減速馬達, 1KHZ會有鳴叫聲
Servo servo; // 伺服器馬達, 紅色(VDD), 棕色(GND), 橙色(Signal)
void setup() {
Serial.begin(9600); // can connect with the bluetooth HC_06, after downloading the software
servo.attach(SERVO1_PWM);
servo.write(0); // 設置旋轉的角度
motor.run(RELEASE);
}
void loop() {
if ( listenSerialCmd()>0 )
executeSerialCmd();
}
void executeSerialCmd() {
char cmd[MAX_UARTCMDLEN];
char* p;
int value = 0; // angle or speed value
// parse UART command
sprintf(cmd,"%s",uartCmdBuff);
if ( (p=strchr(cmd,','))==NULL )
return;
*p = '\0';
// get speed
value = atoi(p+1);
Serial.print("Dir:"); Serial.print(cmd); Serial.print(", Value:"); Serial.println(value);
// Be friendly to the motor: stop it before reverse.
// DC馬達的轉速反應與程式的RPM不是線性的
switch ( cmd[0] ) {
case 'a':
servo.write(value); // 設置旋轉的角度
break;
case 'f': // DC motor forward
motor.run(RELEASE);
motor.setSpeed(value);
motor.run(FORWARD);
break;
case 'b': // DC motor backword
motor.run(RELEASE);
motor.setSpeed(value);
motor.run(BACKWARD);
break;
case 'x':
default:
motor.run(RELEASE);
break;
}
}
int listenSerialCmd() {
char tmp;
uartCmdLen = 0;
memset(uartCmdBuff,0,MAX_UARTCMDLEN);
while( Serial.available()>0 ) {
if( (tmp=Serial.read())=='O' ){
uartCmdLen = 0;
}
uartCmdBuff[(uartCmdLen++)%MAX_UARTCMDLEN] = tmp;
delay(5); // wait RX signal
}
return uartCmdLen;
}



沒有留言:
張貼留言