Nous suivre sur Facebook & Twitter & Luddva


https://www.facebook.com/TSMRobotshttps://twitter.com/tsmrobots

Robot 3 roues

Mise à jour septembre 2013 :


Des améliorations ont était faite, ajout d'une roue pivotante plus grosse, profilé vertical avec capteur infrarouge pour la télécommande.






Nouvelle modification en cours un châssis fait par moi même .
Mise a jour Octobre 2013 :


[FR] Châssis blanc fait avec la pate a modeler durcissant a l'air (plastiroc)

[FR] châssis poncé et peint avec une peinture métallisée bleu .

[FR] châssis monté avec capteur et arduino.


[FR] Ajout d'une batterie 7,5 volts 2700mAh .



[FR] Ajout d'un feux à LED rouge(4 leds) .


[FR] feux a led rouge éteint.

[FR] feux à led rouge allumé.


[FR] code à mettre dans l'arduino :   



#include "IRremote.h"
#include "Servo.h"
#undef round
//led
int ledrouge1Pin = 9;
int ledrouge2Pin = 10;
int ledrouge3Pin = 11;
int ledrouge4Pin = 12;
//contrôle moteur
const int E1=5;    //moteur 1 (droit) activer le code PIN
const int M1=4;    //moteur 1 (droit) broche de direction
const int E2=6;    //moteur 2 (gauche) activer le code PIN
const int M2=7;    //moteurr 2 (gauche) broche de direction

//Pin Module récepteur IR et variable
int RECV_PIN = 3;
IRrecv irrecv(RECV_PIN);
decode_results results;


void setup()
{
//configure led en sortie
pinMode(ledrouge1Pin, OUTPUT);
pinMode(ledrouge2Pin, OUTPUT);
pinMode(ledrouge3Pin, OUTPUT);
pinMode(ledrouge4Pin, OUTPUT);
//configurer tous les broches de commande du moteur en sortie
pinMode(E1,OUTPUT);
pinMode(M1,OUTPUT);
pinMode(E2,OUTPUT);
pinMode(M2,OUTPUT);

//désactiver a la fois les moteurs par défaut
digitalWrite(E1,LOW);
digitalWrite(E2,LOW);

Serial.begin(9600);

//le récepteur IR
irrecv.enableIRIn();
}


void loop()
{
Serial.println(results.value, DEC);

//IR signal reçu
if(irrecv.decode(&results))
{
//led allumé (1)
if(results.value==0xFD08F7)
{
digitalWrite(ledrouge1Pin, HIGH);
digitalWrite(ledrouge2Pin, HIGH);
digitalWrite(ledrouge3Pin, HIGH);
digitalWrite(ledrouge4Pin, HIGH);
}
//led eteint (2)
if(results.value==0xFD8877)
{
digitalWrite(ledrouge1Pin, LOW);
digitalWrite(ledrouge2Pin, LOW);
digitalWrite(ledrouge3Pin, LOW);
digitalWrite(ledrouge4Pin, LOW);
}
//avant (VOL+)
if(results.value==0xFD807F)
{
motor(255,255);
}
//inversée (VOL-)
else if(results.value==0xFD906F)
{
motor(-255,-255);
}
//pivoter vers la gauche (PREVIOUS)
else if(results.value==0xFD20DF)
{
motor(-255,0);
}
//pivoter vers la droite (NEXT)
else if(results.value==0xFD609F)
{
motor(0,-255);
}

//recevoir la prochaine valeur
irrecv.resume();

//court délai d'attente pour répéter le signal IR
// (empêcher de s'arrêter si aucun signal reçu)
delay(150);
}
//aucun signal IR reçu
else
{
//arrêt de la roue droite
digitalWrite(E1,LOW);

//arrêt de la roue gauche
digitalWrite(E2,LOW);
}
}

//Fonction de commande du moteur
void motor(int left, int right)
{
//limiter la vitesse max
if(left>255)left=255;
else if(left<-255)left=-255;
if(right>255)right=255;
else if(right<-255)right=-255;

//roue gauche avant
if(left>0)
{
//direction de la roue gauche avant
digitalWrite(M2,HIGH);
//vitesse de la roue gauche
analogWrite(E2,left);
}
//inverser la roue gauche
else if(left<0)
{
//léfé inverser de la direction de roue
digitalWrite(M2,LOW);
//vitesse de la roue gauche
analogWrite(E2,-left);
}
//arrêt de la roue gauche
else
{
//arrêt de la roue gauche
digitalWrite(E2,LOW);
}

//roue droite avant
if(right>0)
{
//direction de la roue droite avant
digitalWrite(M1,LOW);
analogWrite(E1,right);
}
//inverse de la roue droite
else if(right<0)
{
//droit de l'inverser de la direction de roue
digitalWrite(M1,HIGH);
analogWrite(E1,-right);
}
//arrêt de la roue droite
else
{
//arrêt de la roue droite
digitalWrite(E1,LOW);
}
}

Open Source :

[FR] Image avec les dimensions du châssis fait en plastiroc il peut être refait en impression 3d  ou autre libre a vous de faire ce que vous voulez avec.



[FR] Fichier (.STP) téléchargeable ici.



[FR] Code arduino du robot libre aussi vous pouvez le modifier, le partager :


#include "IRremote.h"
#include "Servo.h"
#undef round
//led
int ledrouge1Pin = 9;
int ledrouge2Pin = 10;
int ledrouge3Pin = 11;
int ledrouge4Pin = 12;
//contrôle moteur
const int E1=5;    //moteur 1 (droit) activer le code PIN
const int M1=4;    //moteur 1 (droit) broche de direction
const int E2=6;    //moteur 2 (gauche) activer le code PIN
const int M2=7;    //moteurr 2 (gauche) broche de direction

//Pin Module récepteur IR et variable
int RECV_PIN = 3;
IRrecv irrecv(RECV_PIN);
decode_results results;


void setup()
{
//configure led en sortie
pinMode(ledrouge1Pin, OUTPUT);
pinMode(ledrouge2Pin, OUTPUT);
pinMode(ledrouge3Pin, OUTPUT);
pinMode(ledrouge4Pin, OUTPUT);
//configurer tous les broches de commande du moteur en sortie
pinMode(E1,OUTPUT);
pinMode(M1,OUTPUT);
pinMode(E2,OUTPUT);
pinMode(M2,OUTPUT);

//désactiver a la fois les moteurs par défaut
digitalWrite(E1,LOW);
digitalWrite(E2,LOW);

Serial.begin(9600);

//le récepteur IR
irrecv.enableIRIn();
}


void loop()
{
Serial.println(results.value, DEC);

//IR signal reçu
if(irrecv.decode(&results))
{
//led allumé (1)
if(results.value==0xFD08F7)
{
digitalWrite(ledrouge1Pin, HIGH);
digitalWrite(ledrouge2Pin, HIGH);
digitalWrite(ledrouge3Pin, HIGH);
digitalWrite(ledrouge4Pin, HIGH);
}
//led eteint (2)
if(results.value==0xFD8877)
{
digitalWrite(ledrouge1Pin, LOW);
digitalWrite(ledrouge2Pin, LOW);
digitalWrite(ledrouge3Pin, LOW);
digitalWrite(ledrouge4Pin, LOW);
}
//avant (VOL+)
if(results.value==0xFD807F)
{
motor(255,255);
}
//inversée (VOL-)
else if(results.value==0xFD906F)
{
motor(-255,-255);
}
//pivoter vers la gauche (PREVIOUS)
else if(results.value==0xFD20DF)
{
motor(-255,0);
}
//pivoter vers la droite (NEXT)
else if(results.value==0xFD609F)
{
motor(0,-255);
}

//recevoir la prochaine valeur
irrecv.resume();

//court délai d'attente pour répéter le signal IR
// (empêcher de s'arrêter si aucun signal reçu)
delay(150);
}
//aucun signal IR reçu
else
{
//arrêt de la roue droite
digitalWrite(E1,LOW);

//arrêt de la roue gauche
digitalWrite(E2,LOW);
}
}

//Fonction de commande du moteur
void motor(int left, int right)
{
//limiter la vitesse max
if(left>255)left=255;
else if(left<-255)left=-255;
if(right>255)right=255;
else if(right<-255)right=-255;

//roue gauche avant
if(left>0)
{
//direction de la roue gauche avant
digitalWrite(M2,HIGH);
//vitesse de la roue gauche
analogWrite(E2,left);
}
//inverser la roue gauche
else if(left<0)
{
//léfé inverser de la direction de roue
digitalWrite(M2,LOW);
//vitesse de la roue gauche
analogWrite(E2,-left);
}
//arrêt de la roue gauche
else
{
//arrêt de la roue gauche
digitalWrite(E2,LOW);
}

//roue droite avant
if(right>0)
{
//direction de la roue droite avant
digitalWrite(M1,LOW);
analogWrite(E1,right);
}
//inverse de la roue droite
else if(right<0)
{
//droit de l'inverser de la direction de roue
digitalWrite(M1,HIGH);
analogWrite(E1,-right);
}
//arrêt de la roue droite
else
{
//arrêt de la roue droite
digitalWrite(E1,LOW);
}
}

 Mise a jour Septembre 2014 :