Robot arduino avec caméra

Robot Arduino avec caméra

Voici le robot Arduino avec caméra. 

Une caméra a été ajoutée sur le robot Arduino et ceci permet de voir les déplacement du robot. 

1- Package du robot Arduino avec caméra. 

 

 

2- Robot kit assemblé

    

Connexion caméra avec téléphone

La caméra peut être connecté avec votre Iphone et vous pouvez voir le déplacement de votre robot.

C'est une belle nouveauté pour ce robot. 

Vous pourrez vous amuser avec ce robot et ainsi pouvoir réaliser beaucoup de vidéos. 

   

Bon jeu..

Je vous présenterais comment on peut en faire un véhicule autonome qui peut se promener partout. 

Produit assemblé : 

     

Voici le produit complètement assemblé et qui fonctionne très bien. 

Après avoir assemblé, on télécharge une application.

 Application ELEROBOT

Après avoir téléchargé l'application, vous avez un écran d'interface ou vous avez trois possibilités

Vous avez 3 possibilités : 

  • Programme 
  • Control
  • DIY

Programme

Pour le programme, on peut programmer  une séquence que le robot pourra exécuter. 

 

Contrôle

Au niveau du contrôle, on peut soit utiliser le joystick pour faire bouger le robot (la molette ronde jaune), soit on peut utiliser la fonction "évitement d'obstacle" (en haut à gauche), soit utiliser la fonction "tracking" qui permet au robot de suivre une ligne noire (en haut à droite) et une nouvelle fonction qui permet au robot de suivre un objet. (en haut au milieu avec aimant). 

Après vous pouvez utiliser la fonction caméra (bouton caméra en bleu en bas à droite). Vous pouvez la mettre en HD pour visualiser et ça fonctionne très bien. Si vous voulez enregistrer il est préférable de se mettre en SD. 

DIY

Cette fonction permet d'envoyer des requêtes et de les enregistrer. 

voilà, vous pouvez maintenant vous amuser avec ce robot et vous balader ou vous voulez grâce à cette caméra. 

Bon jeu et amusez vous bien !!!

 

 

 

 

 

Fonction voiture robot bluetooth complet (soft arduino)

Voiture Bluetooth version complète. 

   

Voici la version bluetooth version complète, c'est à dire qu'il fait toutes les fonctions à l'aide du téléphone. 

J'ai crée un programme ou on ajoute toutes les fonctions dans un même programme. 

Interface personnalisée pour robot Arduino. 

Voici l'interface de mon téléphone pour le déplacement du véhicule Arduino. 

Il suffit d'appuyer sur le bouton du téléphone pour déclencher la fonction du robot arduino. 

Il y a une fonction lumière, une fonction avancer, reculer et stopper, tourner gauche, tourner droite,  AUTO GO et évitement obstacle.  

Pour réussir à tout intégrer, il faut créer plusieurs groupe de fonctions

Groupe de fonctions

  • Le groupe de fonction 'Faire bouger le véhicule" qui est composé de lumière,  Avancer, reculer, gauche, droite, stop. 
  • La fonction "infrarouge" qui permet d'utiliser la télécommande à infra-rouge.  
  • La fonction obstacle qui permet d'éviter les obstacle quand le robot l'aperçoit. 

 Voici le programme pour faire fonctionner tout le véhicule. 

Programme de toutes les fonctions robot arduino.

 programme Avancer et reculer.   

Programme voiture robot Arduino Bluetooth complet (version pdf)

Il faut bien installer toutes les bibliothèques et vous assurez que chaque sous-fonction marche correctement pour que l'ensemble du programme fonctionne.

Vous avez terminé, vous pouvez jouer avec le robot Arduino et avoir toutes les commandes sur le téléphone. 

Bon programme et amusez vous bien.

 

Faire bouger la voiture

Faire bouger la voiture :

Voici une explication pour faire bouger la voiture robot Arduino. 

La définition des ports de connexion sur la carte L298N sont indiquée ci dessus. Les moteurs doivent être connectés à la carte L298N. 

L298 GND est connecté à la batterie GND

L298N VCC est connecté au boitier de batterie VCC

La carte UNO est également connectée au boitier de la batterie

L298N 5V ici ne peut pas être connecté à UNO 5V.

ENA et ENB contrôlent la vitesse du moteur droit et la vitesse du moteur gauche séparément par PWM.

IN1, IN2, IN3, IN4  : IN1 et IN2 sont utilisé pour contrôler le moteur gauche, IN3 et IN4 sont utilisés pour contrôler le moteur droit. 

On utilise les commande en configurant les différentes entrées. 

Exemple : Pour STOP, on met ENA à 0 et le véhicule freine.

pour avancer, on met ENA à 1, IN1 à 1 et IN2 à 0. 

Faire bouger le véhicule

 

nous allons déplacer le véhicule sans contrôler la vitesse. 

Pour cet exemple, nous utiliserons Arduino 5,6,7,8,9 11 broches pour contrôler la voiture. 9 et 11 broches contrôle la roue droite, 7 et 8 broches contrôlent la roue gauche. 5 et 6 broches contrôlent ENA et ENB. 

La connexion est donc : 

 

 Ensuite il faut réaliser un soft arduino pour lancer le programme. 

Voici les différents logiciels arduino. Ces softs sont utilisé pour configurer les mouvement et en faire une application simple. 

Je vous conseille d'acheter le kit complet, ca vous permettra de bien comprendre le produit. 

Programme Avancer et reculer (Forward et back). 

Le programme permet de faire avancer, de stopper, de reculer et de stopper. C'est un programme ELEGOO extrait des documents du kit Robot Arduino.

Vous définissez les bibliothèques, ensuite vous définissez les paramètres, vous configurez le set up et après vous exécutez le programme principal (LOOP). 

programme Avancer et reculer.   

Programme Rotation roue gauche

Ce programme permet de faire une rotation de la roue gauche de 500ms, de stopper, de revenir en arrière de 500ms et de stopper. C'est un programme ELEGOO extrait des documents du kit Robot Arduino.

Vous définissez les bibliothèques, ensuite vous définissez les paramètres, vous configurez le set up et après vous exécutez le programme principal (LOOP). 

programme Avancer et reculer.   

Programme Rotation roue droite

Ce programme permet de faire une rotation de la roue droite de 500ms, de stopper, de revenir en arrière de 500ms et de stopper. C'est un programme ELEGOO extrait des documents du kit Robot Arduino.

Vous définissez les bibliothèques, ensuite vous définissez les paramètres, vous configurez le set up et après vous exécutez le programme principal (LOOP). 

programme Avancer et reculer.   

Programme Déclencher une vitesse

Ce programme permet de déclencher une vitesse. C'est un programme ELEGOO extrait des documents du kit Robot Arduino.

Vous définissez les bibliothèques, ensuite vous définissez les paramètres, vous configurez le set up et après vous exécutez le programme principal (LOOP). 

programme Avancer et reculer.   

 Programme AUTO GO (Automatisation)

Cette fonction est une fonction de de déplacement automatisée. Le produit se déplace en avançant pendant 1s, recule pendant 1s, tourne à droite pendant 1s, tourne à gauche pendant 1s. 

Vous définissez les bibliothèques, ensuite vous définissez les paramètres, vous créez des fonctions avance, recule, gauche et droite, ensuite,  vous configurez le set up et après vous exécutez le programme principal (LOOP). 

programme Avancer et reculer.   

 

 Programme AUTO GO2 (Automatisation)

Cette fonction est une fonction de de déplacement automatisée. Le produit se déplace en avançant pendant 2s, recule pendant 2s, tourne à droite pendant 500ms, tourne à gauche pendant 500ms. c'est un soft que j'ai modifié pour permettre de tourner à droite et à gauche plus rapidement.

Vous définissez les bibliothèques, ensuite vous définissez les paramètres, vous créez des fonctions avance, recule, gauche et droite, ensuite,  vous configurez le set up et après vous exécutez le programme principal (LOOP). 

programme Avancer et reculer.   

 

 Programme AUTO GO3 (Automatisation d'un endroit A à un endroit B)

Cette fonction est une fonction de de déplacement automatisée. Le produit réalise un séquence de fonction avancer, reculer, arrêter, tourner droite et tourner gauche. cette séquence permet d'aller d'un point A à un point B, en évitant les obstacles. 

Vous définissez les bibliothèques, ensuite vous définissez les paramètres, vous créez des fonctions avance, recule, gauche et droite, ensuite,  vous configurez le set up et après vous exécutez le programme principal (LOOP). 

programme Avancer et reculer.   

 

Vous pouvez vous amusez à modifier le programme principal pour faire des fonctions AUTO GO customisé.

 

 Tous ces programmes sont des simples programmes qui ne sont pas intelligent mais qui permettent simplement de faire bouger le véhicule. (Avancer, reculer, tourner droite, tourner gauche et automatisation des mouvements). 

 

 

 

 

Voiture Bluetooth

Voiture Bluetooth

Carte Bluetooth

Pour la fonction Bluetooth, on utilise la carte Bluetooth.

Ensuite on connecte le Bluetooth au module Arduino. 

Cette connexion permet de relier la fonction Bluetooth au module principal via le module Arduino de connexion. 

un voyant rouge s'allume, cela veut dire que la fonction Bluetooth est opérationnel. 

 

Ensuite on télécharge l'application Bluetooth sur votre téléphone et vous pourrez faire bouger le véhicule avec votre téléphone. 

Application Bluetooth. BLE

Pour IOS, vous allez dans l'Apple store et vous recherchez ELEGOO BLE Tool et vous l'installez. 

Ensuite vous suivez les instructions pour connecter la fonction Bluetooth. Il faut se connecter à la fonction HC-08.

Dès que c'est connecté, vous obtenez l'image suivante

  

Ensuite vous pouvez configurer l'interface avec les programmes que vous avez défini, ce qui donne ceci. 

Mon interface personnalisé.

De mon côté, voici l'interface que j'ai défini en Français. 

J'ai ajouté  la fonction auto go, infra rouge et obstacle. Cette partie sera détaillée dans la partie fonction complète voiture robot Arduino. 

Nous allons maintenant définir le programme pour la fonction bluetooth. 

Programme Lumière

Le programme permet d'allumer la lumière en bluetooth. C'est un programme ELEGOO extrait des documents du kit Robot Arduino.

Définissez la pin 13 pour la LED, ensuite on définit le set up et une sous fonction de controle de la LED, et après vous définissez le programme principale qui allume la lampe. 

Vous mettez la fonction en bluetooth avec le nom "a". (gestr="a")

 

programme Avancer et reculer.   

 

 Programme fonction Bluetooth. 

Le programme permet d'utiliser les fonctions du véhicule piloter par le téléphone en bluetooth. C'est un programme ELEGOO extrait des documents du kit Robot Arduino.

Définissez les pins pour chaque fonction , ensuite on définit les différentes fonctions avancer (forward), reculer (back), gauche (left), droite (rigth), et stop (stop) et ensuite vous définissez le set up en initialisant chaque sortie utilisée, en enfin vous définissez le programme principale en utilisant la fonction bluetooth via la commande switch (gestr) 

Vous définissez les noms comme par exemple pour le "a": (avancer)forward, pour le "b"reculer (back)....

Pour que ca fonctionne, laissez les fonctions en anglais. 

programme Avancer et reculer.   

Pour la version complète en bluetooth (Voir version bluetooth complète).

 

 

 

Fonction car complet (logiciel)

Fonction car complet (partie logiciel) :

Cette fonction permet de réaliser le SW pour faire la voiture complète. Ce soft permet de réaliser toutes les fonctions en même temps. 

On peut ainsi utiliser la fonction télécommande infra rouge, la fonction bluetooth, la fonction AUTO GO et la fonction Avancer, reculer et tourner à droite et à gauche. 

Programme Soft Bluetooth car complet. 

Soft voiture Arduino complet. (soft à compiler. 

Attention bien intégrer les bibliothèques demandé et au bon endroit. 

// The direction of the car's movement
// ENA ENB IN1 IN2 IN3 IN4 Description
// HIGH HIGH HIGH LOW LOW HIGH Car is runing forward
// HIGH HIGH LOW HIGH HIGH LOW Car is runing back
// HIGH HIGH LOW HIGH LOW HIGH Car is turning left
// HIGH HIGH HIGH LOW HIGH LOW Car is turning right
// HIGH HIGH LOW LOW LOW LOW Car is stoped
// HIGH HIGH HIGH HIGH HIGH HIGH Car is stoped
// LOW LOW N/A N/A N/A N/A Car is stoped


#include <IRremote.h>
#include <IRremoteInt.h>

#include <Servo.h> //servo library
Servo myservo; // create servo object to control servo

////////// IR REMOTE CODES //////////
#define F 16736925 // FORWARD
#define B 16754775 // BACK
#define L 16720605 // LEFT
#define R 16761405 // RIGHT
#define S 16712445 // STOP
#define UNKNOWN_F 5316027 // FORWARD
#define UNKNOWN_B 2747854299 // BACK
#define UNKNOWN_L 1386468383 // LEFT
#define UNKNOWN_R 553536955 // RIGHT
#define UNKNOWN_S 3622325019 // STOP

//Line Tracking IO define
#define LT_R !digitalRead(10)
#define LT_M !digitalRead(4)
#define LT_L !digitalRead(2)


#define RECV_PIN 12
int Echo = A4;
int Trig = A5;
/*define channel enable output pins*/
#define ENA 5 // Left wheel speed
#define ENB 6 // Right wheel speed
/*define logic control output pins*/
#define IN1 7 // Left wheel forward
#define IN2 8 // Left wheel reverse
#define IN3 9 // Right wheel reverse
#define IN4 11 // Right wheel forward
#define carSpeed 150 // initial speed of car >=0 to <=255
#define LED 13

int rightDistance = 0, leftDistance = 0, middleDistance = 0;
int obstacleloop=0, lineloop=0, autogoloop=0;

// infra red
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long val;
unsigned long preMillis;

//unsigned char carSpeed = 150;
bool state = LOW;
char getstr;

void forward(){
digitalWrite(ENA, carSpeed);
digitalWrite(ENB, carSpeed);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
Serial.println("Forward");
}

void back(){
digitalWrite(ENA, carSpeed);
digitalWrite(ENB, carSpeed);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
Serial.println("Back");
}

void left(){
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
Serial.println("Left");
}

void right(){
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
Serial.println("Right");
}

void stop(){
digitalWrite(ENA,LOW);
digitalWrite(ENB,LOW);
Serial.println("Stop!");
}

void stateChange(){
state = !state;
digitalWrite(LED, state);
Serial.println("Light");
}
//Ultrasonic distance measurement Sub function
int Distance_test() {
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(20);
digitalWrite(Trig, LOW);
float Fdistance = pulseIn(Echo, HIGH);
Fdistance= Fdistance / 58;
return (int)Fdistance;
}

void setup() {
myservo.attach(3); // attach servo on pin 3 to servo object
Serial.begin(9600);
pinMode(LED, OUTPUT);
pinMode(Trig, OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(ENA,OUTPUT);
pinMode(ENB,OUTPUT);
pinMode(LT_R,INPUT);
pinMode(LT_M,INPUT);
pinMode(LT_L,INPUT);
stop();
irrecv.enableIRIn();
}

void obstacle()
{
myservo.write(95); //setservo position according to scaled value
delay(500);
middleDistance = Distance_test();

if(middleDistance <= 20) {
stop();
delay(500);
myservo.write(5);
delay(1000);
rightDistance = Distance_test();

delay(500);
myservo.write(180);
delay(1000);
//myservo.write(180);
//delay(1000);
leftDistance = Distance_test();

//delay(500);
//myservo.write(90);
//delay(1000);
Serial.print("right:");
Serial.println(rightDistance);
Serial.print("left:");
Serial.println(leftDistance);
if(rightDistance > leftDistance) {
right();
delay(360);
}
else if(rightDistance < leftDistance) {
left();
delay(360);
}
else if((rightDistance <= 20) || (leftDistance <= 20)) {
back();
delay(180);
}
else {
forward();
}
}
else
{
forward();
}
}

void autogo()
{
forward(); //go forward
delay(1000);//delay 1000 ms
back(); //go back
delay(500);
left(); //turning left
delay(700);
right(); //turning right
delay(500);
}

void line() {
if(LT_M){
forward();
}
else if(LT_R) {
right();
while(LT_R);
}
else if(LT_L) {
left();
while(LT_L);
}
}

void loop()
{

myservo.write(95); //setservo position according to scaled value
delay(500);
middleDistance = Distance_test();
Serial.println(middleDistance);
if(middleDistance <= 20){obstacle();forward();}

getstr = Serial.read();
switch(getstr)
{
case 'f': forward();autogoloop=0;lineloop=0; break;
case 'b': back();autogoloop=0;lineloop=0;break;
case 'l': left();autogoloop=0;lineloop=0; break;
case 'r': right();autogoloop=0;lineloop=0; break;
case 's': stop();autogoloop=0;lineloop=0; break;
case 'a': stateChange(); break;
case 'o': obstacle();autogoloop=0;lineloop=0;break;
case 'g': autogo();autogoloop=1;lineloop=0;break;
case 'n': line();lineloop=1;autogoloop=0;break;
default: break;

}
if (autogoloop==1)
{
forward(); //go forward
delay(1000);//delay 1000 ms
back(); //go back
delay(500);
left(); //turning left
delay(700);
right(); //turning right
delay(500);
forward ();
delay(1000);
}

if (lineloop==1)
{
{
if(LT_M){
forward();
}
else if(LT_R) {
right();
while(LT_R);
}
else if(LT_L) {
left();
while(LT_L);
}
}
}

if (irrecv.decode(&results)){
preMillis = millis();
val = results.value;
Serial.println(val);
irrecv.resume();
switch(val){
case F:
case UNKNOWN_F: forward(); break;
case B:
case UNKNOWN_B: back(); break;
case L:
case UNKNOWN_L: left(); break;
case R:
case UNKNOWN_R: right();break;
case S:
case UNKNOWN_S: stop(); break;
default: break;
}
}
/*else{
if(millis() - preMillis > 500){
stop();
preMillis = millis();
}
}*/


}