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."); }