Bonjour à tous,
Je vais procéder à une mise en contexte avant de commencer.
Nous sommes en classe de terminale et nous avons un projet de fin d’année à réaliser.
Nous avons comme projet de faire entièrement un robot (fabrication et programmation), qui suivrait un utilisateur grâce à la caméra Pixy2 qui détecterait l’utilisateur grâce à une couleur.
Nous sommes 2 à s’occuper de la partie programmation du projet. Nous avons choisit de programmer sur Arduino et en utilisant la caméra Pixy2.
Malheureusement nous avons un problème (pour le moment ), nous n’arrivons pas a récupérer les informations que détecte la caméra.
Nous souhaiterons savoir comment récupérer ces informations (x;y;height;width) pour pouvoir déterminer la distance entre le robot et la caméra; si il doit tourner a gauche, à droite …
Pouvez vous nous aider à mener à bien ce projet pour notre examen et ainsi impressionner notre jury ?
Je vous envoie notre programme actuel :
#include <Pixy2.h> //inclure bibliothèque Pixy2
Pixy2 pixy;
//caméra
int signature = 0; //initialisation couleur
int x = 0; //position sur x
int y = 0; //position sur y
int width = 0; //largeur=0
int height = 0; //hauteur=0
int area = 0; //distance caméra-objet
int newArea = 0;
int Xmin = 95; //limite Xmin au pixel 95
int Xmax = 200; //limite Xmax au pixel 200
int minArea = 0;
int maxArea = 0;
//moteurA
int ENA = 12; //vitesse moteurA
int IN1 = 9; //sens moteurA
int IN2 = 8; //sens inverse moteurA
//moteurB
int ENB = 6; //vitesse moteurB
int IN3 = 4; //sens moteurB
int IN4 = 5; //sens inverse moteurB
void setup()
{
pixy.init(); //initialisation Pixy
pinMode (ENA, OUTPUT); //ENA sur sortie
pinMode (IN1, OUTPUT); //IN1 sur sortie
pinMode (IN2, OUTPUT); //IN2 sur sortie
pinMode (ENB, OUTPUT); //ENB sur sortie
pinMode (IN3, OUTPUT); //IN3 sur sortie
pinMode (IN4, OUTPUT); //IN4 sur sortie
}
void loop() //Programme
{
while(millis()<5000){ //tant que temps<5000 millisecondes
scan(); //faire scan
area = width * height;
maxArea = area + 1000;
minArea = area - 1000;
}
scan(); //fonction scan
if(signature == 1) //s'il reconnait l'objet
{
newArea = width * height;
if (x < Xmin) //si x < Xmin
{
gauche(); //faire fonction gauche
}
else if (x > Xmax) //sinon si x > Xmax
{
droite(); //faire fonction gauche
}
else if (newArea < minArea) //sinon si newArea < minArea
{
avancer(); //faire fonction avncer
}
else if (newArea > maxArea) //sinon si newArea > maxArea
{
freiner(); //faire fonction freiner
}
else //sinon
{
arret(); //fonction arret
}
}
else //sinon
{
arret(); //fonction arret
}
}
void avancer() //vitesse de croisière : moteur gauche et droit à 200
{
digitalWrite (IN1,HIGH); //IN2 à l'état haut
digitalWrite (IN2,LOW); //IN2 à l'état bas
analogWrite (ENA, 200); //ENA vitesse 200
digitalWrite (IN3,HIGH); //IN3 à l'état haut
digitalWrite (IN4,LOW); //IN4 à l'état bas
analogWrite (ENB, 200); //ENB vitesse 200
}
void freiner() // diminuer vitesse moteur gauche et droit
{
digitalWrite (IN1,HIGH); //IN1 à l'état haut
digitalWrite (IN2,LOW); //IN2 à l'état bas
analogWrite (ENA, 100); //ENA vitesse 100
digitalWrite (IN3,HIGH);
digitalWrite (IN4,LOW);
analogWrite (ENB, 100);
}
void droite() //augmenter vitesse moteur droit
{
digitalWrite (IN1,HIGH);
digitalWrite (IN2,LOW);
analogWrite (ENA, 100);
digitalWrite (IN3,HIGH);
digitalWrite (IN4,LOW);
analogWrite (ENB, 200);
}
void gauche() // augmenter vitesse moteur gauche
{
digitalWrite (IN1,HIGH);
digitalWrite (IN2,LOW);
analogWrite (ENA, 200);
digitalWrite (IN3,HIGH);
digitalWrite (IN4,LOW);
analogWrite (ENB, 100);
}
void arret() //fonction arret
{
analogWrite (ENA, 0); //moteur 1 0
analogWrite (ENB, 0); //moteur 2 0
}
void scan()
{
uint16_t blocks;
blocks = pixy.ccc.getBlocks();
uint16_t m_signature = signature;
uint16_t m_x = x;
uint16_t m_y = y;
uint16_t m_width = width;
uint16_t m_height = height;
}