Base robot LynxMotion A4WD1 Aluminium
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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."); }