Aller au contenu


Photo
- - - - -

Robot Suiveur de Ligne -> Toulouse Robot Race !

voiture téléguide + arduino

59 réponses à ce sujet

#41 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 08 août 2016 - 09:51

void loop() {
 
 int8_t essai = 0;
 uint8_t essai2 = 0;
 essai = computeInput();
 essai2 = computeInput();

 
 
int angle = map(essai, -3, 3, 1230, 1500);
Direction.write(angle);

int vitesse = map(essai2, 0, 3, 255, 50  );
 motor.setSpeed(vitesse);
  
  }  

 Bon j'ai presque réussi le problème c'est que lorsqu'un virage serré se présente, la valeur de -3 ou 3 ne se présente suffisamment pas longtemps pour que le robot prenne le virage, il continue tout droit.



#42 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 231 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 08 août 2016 - 10:57

pourquoi faire " essai " et "essai 2 " ?  un seul calcul est suffisant avec computeInput() est suffisant =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#43 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 09 août 2016 - 07:47

Car je pensais que comme il me faut une valeur absolue et une valeur signée, je doit utiliser "uint8_t" et " int8_t . Pour avoir à la fois de 0 à 3 et de -3 à 3



#44 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 231 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 09 août 2016 - 09:29

Oulà j'avais même pas pas vu cette autre petit boulette ^^ 

Non c'est pas la bonne façon de faire. 

Pour t'en convaincre essaye de faire sur ta carte arduino : 

 

int8_t i = -3; 

uint8_t j; 

j=i;

Serial.print(j);

et dis nous ce que ça donne ;)

 

 

par contre tu peux ensuite essayer de faire un truc comme ça : 

int8_t i = -3; 

uint8_t j; 

if (i<0)
{
    j=-i;
}
else {
j=i;
}

Serial.print(j);

ou tu peux utiliser la fonction valeur absolue  :  j = abs(i) ; 

=) 

 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#45 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 09 août 2016 - 10:40

Bon aller ce soir j'ai juste fait une piste à l'échelle histoire de voir ce que cela donne (je n'ai pas encore touché au code suivant les dernière remarques de Mike, je fait ça demain) : 

 

 

Désolé pour la vidéo, elle donne le tournis  :lol:



#46 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 231 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 10 août 2016 - 02:10

hey c'est déjà pas mal ! =) 

Tu devrais posté la version de ton code actuelle ça fera une trace aussi bien pour toi que pour les prochains qui liront ;) 

et tu pourras ensuite comparer avec la suite : un code + vidéo de ce que ça fait c'est cool ;) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#47 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 11 août 2016 - 03:30

const int SEUILMINNOIR = 270;
const int SEUILMAXBLANC = 70;
  
uint8_t stateSensor[5];
int value;
int angle;

int sensorValueMillieu = 0;         // the sensor value
int sensorMinMillieu = 1023;        // minimum sensor value (min seuil noir)
int sensorValueDroite2 = 0;         // the sensor value
int sensorMaxDroite2 = 0;           // maximum sensor value (max seuil blanc)

int CapteurDroite2 = A5;
int CapteurMillieu = A3;



#include <Servo.h>
Servo Direction;

#include <AFMotor.h>
AF_DCMotor motor(2, MOTOR12_64KHZ);

 
void setup()
{
 Serial.begin(115200);
 //Servos moteur de direction
 Direction.attach(10, 1230, 1500);
 
 // Moteur voiture
 motor.setSpeed(255); // vitesse 255 max 

 
     
 while (millis() < 5000) {
    sensorValueDroite2 = analogRead(CapteurDroite2);
    sensorValueMillieu = analogRead(CapteurMillieu);
    if (sensorValueMillieu < sensorMinMillieu) {
      sensorMinMillieu = SEUILMINNOIR;
      
    }
    if (sensorValueDroite2 > sensorMaxDroite2) {
      sensorMaxDroite2 = SEUILMAXBLANC;  }
 }
 motor.run(FORWARD);
 }
 
/****************Fonction readState**********************/////
 
void readState() {
  for (uint8_t i=1; i<6; i++) // i de 1 à 5 pour les capteurs de 1 à 5 capteur 1 mis sur A1 capteur 5 sur A5
  {
    value = analogRead(i); 
    if ( value< SEUILMINNOIR ) // dans ce cas on est sur du noir
    {
      stateSensor[i-1]=0; // i-1 car on commence un tableau à l'index 0 ... et ici i entre 1 et 5 
    }
    else if ( value>SEUILMAXBLANC ) // dans ce cas on est sur du blanc
    {
      stateSensor[i-1]=1; // à voir si il faut échanger 0 et 1 entre les deux lignes stateSensor en fonction de si on cherche du blanc ou du noir
    }
    else 
    {
      // Do nothing : on est entre 70 et 270 on ne sait pas sur quel couleur on est on garde l'état précédent 
    }
  }
}
 
 
/****************Fonction computeInput**********************/////
 
int8_t computeInput() {
 
  int8_t result=0;
  readState();  // appel de la fonction readState 
 
  for (int8_t i=0; i <5; i++ )
  {
    result = result +(i-2)*stateSensor[i];
  }
 
  return result;
}
 
 
// focntion principale
 
void loop() {
 
 int8_t essai = 0;
 uint8_t essai2 = 0;
 essai = computeInput();
 essai2 = computeInput();

 
 
int angle = map(essai, -3, 3, 1230, 1500);
Direction.write(angle);

int vitesse = map(essai2, 0, 3, 200, 100);
 motor.setSpeed(vitesse);
  
  }

Voici le code complet (toujours pas retouché ... :ph34r: )

 

J'attaque en parallèle le robot bipède pour la course qui sera une version un peu plus grande de mon MobBob 

 

 



#48 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 728 messages
  • Gender:Male
  • Interests:Glenn

Posté 11 août 2016 - 05:12

Excellent, tu as assuré :)


signature_01.png -->

 

Mon Tipeee
 


#49 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 11 août 2016 - 07:01

Merci mais il me reste encore pas mal de boulot, ce soir j'ai démonté pas mal d'élément sur le robot, j'en profite pour redessiner et imprimer de nouvelles pièces 3d



#50 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 728 messages
  • Gender:Male
  • Interests:Glenn

Posté 11 août 2016 - 07:53

Vivement que l'on voit un peu tout ça ;)

Si l'envie te prenait de faire d'autres photos et vidéos par exemple des éléments en cours d'impression et le final n'hésite pas :)

 

 

Merci


signature_01.png -->

 

Mon Tipeee
 


#51 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 19 août 2016 - 12:31

Aujourd'hui petit test avec un circuit un peu plus grand.

 

Bon c'est pas parfait, le robot fait le circuit une fois sur trois. Je pense descendre les capteurs plus proche du sol et mettre un amortisseur à l'avant sinon je risque d'avoir de la casse  :ignat_02:

 

 

A suivre :)



#52 yamovince

yamovince

    Habitué

  • Membres
  • PipPip
  • 288 messages

Posté 19 août 2016 - 01:03

Bravo, ca tourne déjà pas mal du tout !

Je t'encourage à continuer sur ta lancée (j'ai vu l'équipe AirDuino au tournoi de Nîmes, ils ont aussi un bon petit bolide et ils seront présents à Toulouse) Fais chauffer les pneus ! ;)



#53 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 4 653 messages
  • Gender:Male

Posté 19 août 2016 - 01:04

Pas mal, avec cette vitesse là !
Bravo.

#54 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 19 août 2016 - 01:20

Merci !

L'objectif pour notre premier concours c'est de finir ^^ Le reste ce n'est que du bonus :)

#55 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 21 septembre 2016 - 11:01

Aller aujourd'hui j'ai fini la partie comptage de tour du robot, je fait au plus simple  :ignat_02:

 

P1070431.JPG

 

Une tige carbone de cerf volant + un joint torique + une piece imprimé en 3d + un micro switch : 

 

P1070433.JPG

 

Je vais surement lui ajouter une boule en mousse sur le haut de la tige pour augmenter la surface de contact, il y aura surement des ajustement à faire le jour du concours car mine de rien c'est haut (1 mètre)

 

Maintenant reste plus qu'a rajouter un petit bout de code  :yahoo:



#56 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 728 messages
  • Gender:Male
  • Interests:Glenn

Posté 21 septembre 2016 - 11:04

Hey heyyyyy, ça bombarde dis donc, et il suis pas trop mal la ligne je trouve.


signature_01.png -->

 

Mon Tipeee
 


#57 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 4 653 messages
  • Gender:Male

Posté 21 septembre 2016 - 11:11

Pourquoi dis-tu qu'il fait 1m de haut.
Ta boule en mousse, comment elle augmenterait la surface de contact ? Comprends pas ...

#58 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 21 septembre 2016 - 11:22

En fait pour compter les tours , j'ai choisis la solution de venir toucher l'arche symbolisant la ligne de depart/arrivé : 

 

arrivee2.jpg

 

Le point le plus haut de l'arche fait 1050 mm, ma tige carbone fait cette taille à peu prés sachant que je ne souhaite pas que mon robot soit stoppé sous l'arche a cause de la tige de carbone (qui n'est pas très souple) je préfère rajouter une boule en mousse qui s’écrasera un peu au passage de l'arche.

 

Je ne sais pas si je suis très clair dans mon explication ...



#59 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 4 653 messages
  • Gender:Male

Posté 21 septembre 2016 - 12:55

Ok, merci, j'ai compris.
Faut tester, parce que la boule peut accrocher au portique.

#60 Guigz65

Guigz65

    Membre occasionnel

  • Membres
  • Pip
  • 137 messages
  • Gender:Male
  • Location:33 - Nord Gironde

Posté 21 septembre 2016 - 02:04

Dernière version du code avec le compteur : 

const int SEUILMINNOIR = 270;
const int SEUILMAXBLANC = 70;
  
uint8_t stateSensor[5];
int value;
int angle;

int sensorValueMillieu = 0;         // the sensor value
int sensorMinMillieu = 1023;        // minimum sensor value (min seuil noir)
int sensorValueDroite2 = 0;         // the sensor value
int sensorMaxDroite2 = 0;           // maximum sensor value (max seuil blanc)

int CapteurDroite2 = A5;
int CapteurMillieu = A3;

int Compteur = A0;
int etat;
int nombreDeTour = 0;
int memoire_plus = HIGH;


#include <Servo.h>
Servo Direction;

#include <AFMotor.h>
AF_DCMotor motor(2, MOTOR12_64KHZ);

 
void setup()
{
// Ajout du compteur
pinMode(Compteur, INPUT);

 Serial.begin(115200);
 //Servos moteur de direction
 Direction.attach(10, 1230, 1500);
 
 // Moteur voiture
 motor.setSpeed(255); // vitesse 255 max 

 
     
 while (millis() < 5000) {
    sensorValueDroite2 = analogRead(CapteurDroite2);
    sensorValueMillieu = analogRead(CapteurMillieu);
    if (sensorValueMillieu < sensorMinMillieu) {
      sensorMinMillieu = SEUILMINNOIR;
      
    }
    if (sensorValueDroite2 > sensorMaxDroite2) {
      sensorMaxDroite2 = SEUILMAXBLANC;  }
 }
 motor.run(FORWARD);
 }
 
/****************Fonction readState**********************/////
 
void readState() {
  for (uint8_t i=1; i<6; i++) // i de 1 à 5 pour les capteurs de 1 à 5 capteur 1 mis sur A1 capteur 5 sur A5
  {
    value = analogRead(i); 
    if ( value< SEUILMINNOIR ) // dans ce cas on est sur du noir
    {
      stateSensor[i-1]=0; // i-1 car on commence un tableau à l'index 0 ... et ici i entre 1 et 5 
    }
    else if ( value>SEUILMAXBLANC ) // dans ce cas on est sur du blanc
    {
      stateSensor[i-1]=1; // à voir si il faut échanger 0 et 1 entre les deux lignes stateSensor en fonction de si on cherche du blanc ou du noir
    }
    else 
    {
      // Do nothing : on est entre 70 et 270 on ne sait pas sur quel couleur on est on garde l'état précédent 
    }
  }
}
 
 
/****************Fonction computeInput**********************/////
 
int8_t computeInput() {
 
  int8_t result=0;
  readState();  // appel de la fonction readState 
 
  for (int8_t i=0; i <5; i++ )
  {
    result = result +(i-2)*stateSensor[i];
  }
 
  return result;
}
 
 
// focntion principale
 
void loop() {
 
 int8_t essai = 0;
 int8_t essai2 = 0;
 
 essai2 = abs(essai) ;
 essai = computeInput();
 
 
 
int angle = map(essai, -3, 3, 1230, 1500);
Direction.write(angle);

int vitesse = map(essai2, 0, 3, 150, 100);
 motor.setSpeed(vitesse);

 etat = digitalRead(Compteur); 
  if((etat != memoire_plus) && (etat == LOW ))
    {
       
        nombreDeTour++;
    }
  memoire_plus = etat;

  if(nombreDeTour >= 3)
    {
       motor.run(RELEASE);
    }
  }

il ne manquera plus qu'un essai :)





Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users