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 :
|