Base robot LynxMotion A4WD1 Aluminium

From air
Jump to navigation Jump to search
Base robot LynxMotion A4WD1 with Arduino
Base robot LynxMotion A4WD1 with Arduino
Base robot LynxMotion A4WD1 with Arduino
Base robot LynxMotion A4WD1
Base robot LynxMotion A4WD1
Base robot LynxMotion A4WD1


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

  1. Add JY-MCU Arduino Bluetooth Wireless Serial Port Module to the pins 10 and 11 of the Arduino board
  2. Allumez l'arduino : la led du module clignote
  3. 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)
  4. utilisez l'application BlueTerm disponible sur l'Android Market Google Play
  5. connectez vous au device
  6. 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."); 
}



Liens