Base robot LynxMotion A4WD1 Aluminium
Jump to navigation
Jump to search
Nu sans carte de contrôle des moteurs : http://www.robotshop.com/eu/robot-kit-aluminium-4wd1.html
(possibilité de mettre un STM32Discovery + une carte L298
Avec carte de contrôle des moteurs (Basic) et le pont Sabertooth mais sans batterie : http://www.robotshop.com/eu/productinfo.aspx?pc=RB-Lyn-400&lang=fr-CA
Guides LynxMotion
Bluetooth Controller
- Add JY-MCU Arduino Bluetooth Wireless Serial Port Module to the pins 10 and 11 of the Arduino board
- Allumez l'arduino : la led du module clignote
- appariez le device BT (le nom par défaut est "RobairBT" ou "linvor") sur votre téléphone Android : la clé par défaut est "1234" : la led rouge du module est fixe (on)
- utilisez l'application BlueTerm disponible sur l'Android Market Google Play
- connectez vous au device
- tapez 'h' pour la liste des commandes de pilotage
// Bluetooth Robot Controller
// @author: Didier Donsez, 2013
// see http://arduino.cc/en/Reference/SoftwareSerial
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
//-- MOTEUR A --
int ENA=5; //Connecté à Arduino pin 5(sortie pwm)
int IN1=2; //Connecté à Arduino pin 2
int IN2=3; //Connecté à Arduino pin 3
//-- MOTEUR B --
int ENB=6; //Connecté à Arduino pin 6(Sortie pwm)
int IN3=4; //Connecté à Arduino pin 4
int IN4=7; //Connecté à Arduino pin 7
int curDirA=0; // 1=forward, -1=reverse
int curSpeedA=0;
int curDirB=0; // 1=forward, -1=reverse
int curSpeedB=0;
int batteryLevel;
int batteryNominalLevel=111; // 11.1V
int MAX_SPEED=255; // 160 (=255*72/111) for an 7.2V DC motors
int curAccelerationStep=32;
int defaultSpeed=MAX_SPEED/2;
void setup() {
configAB();
// initialize serial communication:
Serial.begin(9600);
mySerial.begin(9600);
delay(500);
mySerial.print("AT+NAMERobairBT"); // Set the name to RobairBT
//usage();
}
void loop() {
if (mySerial.available() > 0) {
int inByte = mySerial.read();
Serial.write(inByte);
mySerial.write(inByte);
switch (inByte) {
case ' ': // stop
case 'g': // stop
stopAB();
break;
case 't': // forward
forwardA();
forwardB();
speedAB(defaultSpeed);
break;
case 'v': // reverse
reverseA();
reverseB();
speedAB(defaultSpeed);
break;
case 'y': // forward right
forwardA();
forwardB();
speedA(defaultSpeed);
speedB((defaultSpeed/2));
break;
case 'r': // forward left
forwardA();
forwardB();
speedB(defaultSpeed);
speedA((defaultSpeed/2));
break;
case 'c': // reverse right
reverseA();
reverseB();
speedA(defaultSpeed);
speedB((defaultSpeed/2));
break;
case 'b': // reverse left
reverseA();
reverseB();
speedB(defaultSpeed);
speedA((defaultSpeed/2));
break;
case 's': // rotate
forwardA();
reverseB();
speedA(defaultSpeed);
speedB(defaultSpeed);
break;
case 'd': // antirotate
reverseA();
forwardB();
speedA(defaultSpeed);
speedB(defaultSpeed);
break;
case '1':
defaultSpeed=MAX_SPEED/9;
break;
case '2':
defaultSpeed=(MAX_SPEED/9)*2;
break;
case '3':
defaultSpeed=(MAX_SPEED/9)*3;
break;
case '4':
defaultSpeed=(MAX_SPEED/9)*4;
break;
case '5':
defaultSpeed=(MAX_SPEED/9)*5;
break;
case '6':
defaultSpeed=(MAX_SPEED/9)*6;
break;
case '7':
defaultSpeed=(MAX_SPEED/9)*7;
break;
case '8':
defaultSpeed=(MAX_SPEED/9)*8;
break;
case '9':
defaultSpeed=MAX_SPEED;
break;
case 'h': // help
case 'u': // help
usage();
break;
default:
break;
}
inByte=0;
}
}
void configAB() {
pinMode(ENA,OUTPUT);
pinMode(ENB,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
}
void stopA() {
digitalWrite(ENA,LOW);// Moteur A - Ne pas tourner (désactivation moteur)
}
void stopB() {
digitalWrite(ENB,LOW);// Moteur B - Ne pas tourner (désactivation moteur)
}
void stopAB() {
stopA();
stopB();
//delay(??);
}
void forwardA() {
if(curDirA==1) return;
stopA();
curDirA=1;
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
}
void reverseA() {
if(curDirA==-1) return;
stopA();
curDirA=-1;
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
}
void forwardB() {
if(curDirB==1) return;
stopB();
curDirB=1;
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
void reverseB() {
if(curDirB==-1) return;
stopB();
curDirB=-1;
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}
void speedA(int speed) {
if(curDirA==0) return;
curSpeedA=(speed>=MAX_SPEED)?MAX_SPEED:speed;
analogWrite(ENA,curSpeedA);
}
void speedB(int speed) {
if(curDirB==0) return;
curSpeedB=(speed>=MAX_SPEED)?MAX_SPEED:speed;
analogWrite(ENB,curSpeedB);
}
void speedAB(int speed) {
speedA(speed);
speedB(speed);
}
void rotate() {
forwardA();
reverseB();
}
void antirotate() {
forwardB();
reverseA();
}
void usage() {
mySerial.print("Enter keys for drive control \n");
mySerial.print("t = Forward \n");
mySerial.print("v = Backward \n");
mySerial.print("y = Right Forward\n");
mySerial.print("r = Left Forward\n");
mySerial.print("y = Right Backward\n");
mySerial.print("r = Left Backward\n");
mySerial.print("r = Rotate\n");
mySerial.print("d = Antirotate\n");
mySerial.print("1 .. 9 = default speed\n");
mySerial.print("g = Stop \n");
mySerial.print(" = Stop \n");
mySerial.print("(c) Didier Donsez, 2013.");
}