Aller au contenu


Photo
- - - - -

votre avis sur le chassis et le controleur


61 réponses à ce sujet

#41 TIMAL

TIMAL

    Nouveau membre

  • Membres
  • 53 messages
  • Gender:Male

Posté 03 mars 2010 - 11:58

Merci a vous!!!!!
alors pour void loop (void), le (void) c'est pour les pluristes, sinon un simple () fait l'affaire :D

j'ai compilé ton code galactus!!!! la partie manuel nikel mais la partie auto flanche"ça donne le même résultat, comme lorsque j'emploi le if" le robot avance mais ne prend pas en compte l'état des capteurs donc il ne tourne pas ne recul pas.
Le pire est que si je met dans void loop () automatique(); ça fonctionne très bien , il suffit de mettre un if ou un switch pour que ça flanche :wacko:

le langage est le c , je travail sur une carte arduino.
Je suis sidéré par ce problème!!!!

     int inputPinG = 8; 
     int inputPinC = 9; 
     int inputPinD = 10;
     
     int valG = 0;    
     int valC = 0; 
     int valD = 0; 
     
     void automatique(void) 
   {   
       valG = digitalRead(inputPinG);
       valC = digitalRead(inputPinC);
       valD = digitalRead(inputPinD); 
       
      if(valG&&valC&&valD==HIGH)
      advance(50,50);
      else if (!valG&&valC&&valD==HIGH)
      advance(70,50);
      else if (valG&&valC&&!valD==HIGH)
      advance(50,70);
      else turn_R(50,50);
     }
     
     int E1 = 5; //M1 vitesse
     int E2 = 6; //M2 vitesse
     int M1 = 4; //M1 Direction 
     int M2 = 7; //M1 Direction 
     
     void manuel(void)
     {
     char f = Serial.read();
     switch (f)  
     { 
     case 'z'://avancer
     advance (50,50); //réglage vitesse
     break;
     case 'w'://reculer
     back_off (50,50);
     break;
     case 'q'://virage gauche
     advance (70,50); //réglage vitesse
     break;
     case 's'://virage droite
     advance (50,70); //réglage vitesse
     break;
     case 'a'://tourner sur place à gauche
     turn_L (50,50);
     break;
     case 'x'://tourner sur place à droite
     turn_R (50,50);
     break;
     case 'c':// stop
     advance (0,0);
     break;
     }
     } 
     
   void stop(void) //Stop
   {
   digitalWrite(E1,LOW);
   digitalWrite(E2,LOW);
   }
     
     void advance(char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> //avancer
     {
     analogWrite (E1,a); 
     digitalWrite(M1,LOW);
     analogWrite (E2, <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> ;
     digitalWrite(M2,LOW);
     }
     void back_off (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> //reculer
     {
     analogWrite (E1,a);
     digitalWrite(M1,HIGH);
     analogWrite (E2, <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> ;
     digitalWrite(M2,HIGH);
     }
     void turn_L (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> //tourner à gauche
     {
     analogWrite (E1,a);
     digitalWrite(M1,HIGH);
     analogWrite (E2, <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> ;
     digitalWrite(M2,LOW);
     }
     void turn_R (char a,char <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> //tourner à droite
     {
     analogWrite (E1,a);
     digitalWrite(M1,LOW);
     analogWrite (E2, <img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' /> ;
     digitalWrite(M2,HIGH);
     
     }
     void setup(void)
     {
     int i;
     for(i=5;i<=8;i++)
     pinMode(i, OUTPUT);
     pinMode(inputPinG, INPUT);  // declare Infrared sensor as input
     pinMode(inputPinC, INPUT);  // declare Infrared sensor as input
     pinMode(inputPinD, INPUT);  // declare Infrared sensor as input
     
     Serial.begin(19200); //Set Baud Rate
     }
     
   void loop()
             {
             char val = Serial.read();
   
     switch(val){
     case 'j':
     automatique();
     break;
                   
   default:
   manuel();
             }
             }

Image IPB

#42 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE
  • Interests:Électronique, robotique ludique, programmation de jeux et utilitaires, et plein d'autres choses.

Posté 04 mars 2010 - 12:04

Bizarre, essai de remplacer void loop(void) par void main(void) on sait jamais car le C est pointilleux si on met pas un main normalement.

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#43 TIMAL

TIMAL

    Nouveau membre

  • Membres
  • 53 messages
  • Gender:Male

Posté 05 mars 2010 - 07:58

Merci à tous!!!!!!!

J'ai du nouveau!!!!!

voila, quand j'appuie sur la touche 'j' le mode automatique se lance et comme d'habitude le robot ne fait qu'avancer sans prendre en compte la valeur des capteurs, mais j'ai remarqué que si on mettait la main sur un des trois capteurs et que l'on réappuyait sur la touche 'j' le robot prenait en compte la nouvelle valeur du capteur.

donc en mode automatique le robot prend en compte la première valeur lu par les capteurs et si entre temps la valeur venait à changer il faudrait réappuyer sur la touche 'j' pour que la nouvelle valeur soit prise en compte.

C"est quand même malheureux pour un mode automatique.

je souhaiterai rafraichir le programme de manière à ce que les valeurs des capteurs soient lues en continues.
Si vous avez une piste ce serait génial!!!!!
Image IPB

#44 TIMAL

TIMAL

    Nouveau membre

  • Membres
  • 53 messages
  • Gender:Male

Posté 05 mars 2010 - 08:02

ce phénomène ce produit quelque soit les méthodes et préconisations données par électron ou galactus.
Image IPB

#45 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE
  • Interests:Électronique, robotique ludique, programmation de jeux et utilitaires, et plein d'autres choses.

Posté 05 mars 2010 - 09:21

Bha dans ce cas, essaie de donner la valeur "j" par défaut, ou aussi de mettre une lecture de val carrément en début du loop^^

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#46 galactus

galactus

    Habitué

  • Membres
  • PipPip
  • 157 messages

Posté 06 mars 2010 - 03:54

essaye avec une boucle infinie

while(1){
pouet = serial.read();
si pouet='j'->return "on sort de la boucle";
sinon
fait peter();


}

ps: ce code reste a libre interprétation :lol:

#47 galactus

galactus

    Habitué

  • Membres
  • PipPip
  • 157 messages

Posté 11 mars 2010 - 11:39

bon alors ca marche ou tu as finis ton robot a grand coup de masse? :lol:

#48 TIMAL

TIMAL

    Nouveau membre

  • Membres
  • 53 messages
  • Gender:Male

Posté 14 mars 2010 - 06:15

salut! non galactus!!!!! je prends de grande inspirations sinon çe serai la masse :D

alors j'ai compiler ton code mais toujours pareil, il faut rester appuyer pour avoir le mode auto snif à moins que j'ai mal interprété ton message

electron si je met valeur "j" par défaut impossible de passer en mode manuel snif

c cho!!!!!!!


  void loop()
    {
      choixMode(); 
      lecture();
    }
    
    void lecture(void)
    {
   while (Serial.available()) {
    char val = Serial.read();
  if (val=='j')
  automatique(void);
  else
  choixMode(); 
  }
  }
    
    
  void choixMode(void)
    {
    while (Serial.available()) {
    char val = Serial.read();
    switch (val)  
    { 
    case 'z'://avancer
    advance (50,50); //réglage vitesse
    break;
    case 'w'://reculer
    back_off (50,50);
    break;
    case 'q'://virage gauche
    advance (70,50); //réglage vitesse
    break;
    case 's'://virage droite
    advance (50,70); //réglage vitesse
    break;
    case 'a'://tourner sur place à gauche
    turn_L (50,50);
    break;
    case 'x'://tourner sur place à droite
    turn_R (50,50);
    break;
    case 'c':// stop
    advance (0,0);
    break;
    case 'j':// auto
    automatique();
    break;
    }
    } 
    }

Image IPB

#49 galactus

galactus

    Habitué

  • Membres
  • PipPip
  • 157 messages

Posté 15 mars 2010 - 11:30

et un truc dans le genre:

void loop(){
  char choix= Serial.read();
  change_mode(choix);
}


void change_mode(char choix){
  switch( choix)
  {
   case 'j':
   Serial.println('bienvenue en mode manuel');
   char direction = Serial.read();
     switch(direction){
            case 'z'://avancer
                    advance (50,50); //réglage vitesse
                    break;
            case 'w'://reculer
                    back_off (50,50);
                    break;
            case 'q'://virage gauche
                    advance (70,50); //réglage vitesse
                    break;
            case 's'://virage droite
                    advance (50,70); //réglage vitesse
                    break;
             case 'a'://tourner sur place à gauche
                    turn_L (50,50);
                    break;
             case 'x'://tourner sur place à droite
                    turn_R (50,50);
                    break;
              default:// stop
                      advance (0,0);
                      }
  default:
  automatique();  
    
    
  }
 
}


#50 TIMAL

TIMAL

    Nouveau membre

  • Membres
  • 53 messages
  • Gender:Male

Posté 24 mars 2010 - 07:37

salut à tous ,
galactus , ton code me paraissait nickel mais ça veut pô marcher.
j'ai utilisé un bouton "digital, numérique" sur mon microcontroleur pour choisir entre manuel et automatique et ça fonctionne!!!!

mais je n'arrive toujours pas à contrôler avec les touches du clavier

pensez vous avec l'exemple du bouton trouver la solution ou le lien qui permettrait de contrôler avec les touches du clavier
merci!!! :D

    //partieBouton
     int key_s6 = 2; 
     int val=0;
   
     //partieMoteur
     
     int E1 = 5; //M1 vitesse
     int E2 = 6; //M2 vitesse
     int M1 = 4; //M1 Direction 
     int M2 = 7; //M1 Direction 
   
     //partieCapteur
     
     int valD =0;    
     int valC =0; 
     int valG =0; 
     
     int capteurD = 8; 
     int capteurC = 9; 
     int capteurG = 10;
      
   void setup(void)
     {
      int i;
      for(i=4;i<=7;i++){
      pinMode(i, OUTPUT);}
      
      pinMode(key_s6, INPUT); 
   
      pinMode(capteurD,INPUT);
      pinMode(capteurC,INPUT);
      pinMode(capteurG,INPUT);
      
     Serial.begin(19200); 
     }
     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   void loop()
     {
      valD = digitalRead(8);
      valC = digitalRead(9);
      valG = digitalRead(10);
     
      if(digitalRead(key_s6)==0)
      {
      while(!digitalRead(key_s6));
      val++;
      }
     if(val==1)
      {
      automatique();
      }
   
     else if(val==2)
      {
      val=0;
      stop();
      }
   
     manuel();
    }
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
   

Image IPB

#51 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE
  • Interests:Électronique, robotique ludique, programmation de jeux et utilitaires, et plein d'autres choses.

Posté 24 mars 2010 - 10:12

Il te faudrait pouvoir activer ce bouton par une commande IR (en remplaçant le bouton par un contact électronique, transistor, contacteur etc...).

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#52 TIMAL

TIMAL

    Nouveau membre

  • Membres
  • 53 messages
  • Gender:Male

Posté 24 mars 2010 - 10:59

bonsoir électron
mon projet est avant tout de pouvoir piloter de n'importe où dans le monde mon robot grâce a vnc et a mon APC 220 module sans fil 2,4 ghz.
c'est pour cela que je souhaite tout contrôler sur mon clavier grâce à "processing qui travail avec l'arduino"
merci quand même. :)
Image IPB

#53 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE
  • Interests:Électronique, robotique ludique, programmation de jeux et utilitaires, et plein d'autres choses.

Posté 25 mars 2010 - 01:39

De rien ;)

Bein il faudrait que ton recepteur 2.4 Ghz puisse commander le contacteur électronique qui remplace le bouton.

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#54 galactus

galactus

    Habitué

  • Membres
  • PipPip
  • 157 messages

Posté 27 mars 2010 - 09:57

bon c'est pas comme tu voulais mais au moins ca marchouille ^^

#55 TIMAL

TIMAL

    Nouveau membre

  • Membres
  • 53 messages
  • Gender:Male

Posté 23 juin 2010 - 06:21

Bonjour à tous!!!!!!!!
depuis vos dernières interventions il y a eu du changement et de l'avancement sur mon robot!!!!!
Le problème rencontré précédemment n'est plus qu'un mauvais souvenir: il fallait incorporer dans le code les fonctions
"boolean choixauto = false;
if (choixauto) automatique();"

voici quelque photo:
Image IPB

Image IPB

Image IPB




c'est un plaisir de pouvoir contrôler mon robot à distance grâce à VNC et de voir de jour comme de nuit avec la camera sans fil "résultat bluffant !!"

j'espère retenir votre attention car j'aimerai avoir votre avis sur la manière de charger ce dernier!
Je m'explique: j'ai un chargeur A2PRO avec delta peak http://www.net-loisi...peak-p1441.htmlqui me permet de recharger mes batteries "robot éteint".
Mon objectif est de laisser mon robot en charge 24H/24 afin de pouvoir l'utiliser quand bon me semble.
"j'ai fait un test pour connaître l'autonomie robot allumé sans le faire rouler, il est de 8H. donc si je pars une semaine c'est cuit cuit!!!!"

sachant que pour charger une batterie de 12V il faut rajouter 3V pendant la charge donc 15V et que ma carte "contrôleur moteur" ne peut excéder 12V je compte mettre un régulateur de tension " jusque la je pense que c'est juste".

J'ai pleins d'idées pour faire la station sur lequel sera le robot et le chargeur A2PRO2 " mais la n'est pas le problème".

j'aimerai savoir si lorsque le robot s'enclenchera sur la station de charge, est ce que le delta peak du chargeur fonctionnera correctement sachant que le microcontrôleur restera allumé "il consommera donc quelques milliampères"
je ne sais pas si cela aura un réel impact pour préserver ma batterie, j'ai cru comprendre qu'un chargeur de nimh travail à courant constant "

Merci, toutes propositions sera la bienvenue!!!!!!!
Image IPB

#56 obrelux

obrelux

    Nouveau membre

  • Membres
  • 39 messages
  • Gender:Male

Posté 23 juin 2010 - 07:47

Moi perso j'en sais rien, mais je voudrai savoir autre chause : c'est quoi cette caméra ?
Et aussi quel est le prix final de ton robot ?

#57 TIMAL

TIMAL

    Nouveau membre

  • Membres
  • 53 messages
  • Gender:Male

Posté 23 juin 2010 - 09:23

voila le lien de la camera
http://cgi.ebay.fr/K...=item5ad353ce58

Bonne continuation champion!!!!
Image IPB

#58 Dr.Calvin

Dr.Calvin

    Membre passionné

  • Membres
  • PipPipPip
  • 474 messages
  • Gender:Female

Posté 24 juin 2010 - 01:17

le mieux que tu as à faire, il me semble, c'est...un test : tu utilises le delta peak comme tu le décris et tu mesures le temps que ça dure...normalement, la consommation du µc serait trop faible pour mettre en danger l'autonomie du robot, mais évidemment, ca reste une consommation de courant, et puisque tu as le robot, tu es le mieux à même de mesurer cette autonomie...

Autre chose : vérifie que le fonctionnement du robot 24h/24h ne risque pas de fragiliser à terme le micro contrôleur. Ca doit te paraître idiot, comme conseil, mais il m'est déjà arrivé d'abîmer un CI en l'alimentant en permanence trop longtemps. :excl:

sur ce je resors :ph34r:

#59 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE
  • Interests:Électronique, robotique ludique, programmation de jeux et utilitaires, et plein d'autres choses.

Posté 24 juin 2010 - 08:28

Pour ce que dit Dr Calvin au sujet de la détérioration du mC par le temps de fonctionnement, tu peux mettre un tit radiateur en alu sur le dessus du mC, il ne chauffe pas beaucoup le mC mais tu sera sûr de ne pas l'user par la durée de chauffe.
Sinon un tit ventilo sur le chassis du robot pour attirer l'air chaud intérieur vers l'extérieur du robot.

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#60 Leon

Leon

    Membre passionné

  • Membres
  • PipPipPipPipPip
  • 1 289 messages
  • Gender:Male

Posté 26 juin 2010 - 09:34

voici quelque photo:
Image IPB

Tu peux nous dire ce que sont ces 3 trucs à l'avant du robot, au dessous de ta plaque noire? Des capteurs IR? Autre chose?

j'espère retenir votre attention car j'aimerai avoir votre avis sur la manière de charger ce dernier!
Je m'explique: j'ai un chargeur A2PRO avec delta peak http://www.net-loisi...peak-p1441.htmlqui me permet de recharger mes batteries "robot éteint".
Mon objectif est de laisser mon robot en charge 24H/24 afin de pouvoir l'utiliser quand bon me semble.
"j'ai fait un test pour connaître l'autonomie robot allumé sans le faire rouler, il est de 8H. donc si je pars une semaine c'est cuit cuit!!!!"

Tu as une solution très efficace pour le rendre plus autonome: le mettre en "veille". Il est fort à parier que la caméra consomme beaucoup, par exemple. Alors il faut la désactiver. Tu installes un relais ou un transistor de puissance pour la commuter, et tu commandes ça par l'arduino. Pareil, l'arduino a peut-être un mode veille. A toi de voir...

sachant que pour charger une batterie de 12V il faut rajouter 3V pendant la charge donc 15V et que ma carte "contrôleur moteur" ne peut excéder 12V je compte mettre un régulateur de tension " jusque la je pense que c'est juste".

En fait, tu dois déjà excéder 12V, car un pack 12V chargé monte à plus de 14V. Le régulateur est une fausse bonne idée, car si la tension des accus descend en dessous de 12V, tu auras des problèmes. Complication inutile, à mon avis. As-tu les caractéristiques détaillées de ta carte controle moteur? Pour comprendre la limitation 12V?

j'aimerai savoir si lorsque le robot s'enclenchera sur la station de charge, est ce que le delta peak du chargeur fonctionnera correctement sachant que le microcontrôleur restera allumé "il consommera donc quelques milliampères"
je ne sais pas si cela aura un réel impact pour préserver ma batterie, j'ai cru comprendre qu'un chargeur de nimh travail à courant constant

Avec un chargeur externe comme le tien, ça ne fonctionnera pas! Si tu veux faire ça, ou alors très mal, car le chargeur, une fois la batterie chargée, ne compensera pas la consommation de ton robot, il chargera avec un courant trop faible. Sur ce genre de chargeur, la charge ne se re-déclenche pas automatiquement, donc tu finira avec un robot déchargé.

Le plus propre est de faire un régulateur de charge interne. C'est ce que j'ai sur mon BOB3, réalisé à partir d'un MAX712. Ce régulateur régule le courant qui va vers l'accu, et non le courant qui sort du chargeur (bloc secteur). Si le robot consomme beaucoup, le bloc secteur délivrera suffisamment de courant pour charger l'accu (au courant pré-déterminé) et pour alimenter la forte consommation du robot. De même, en fin de charge, le bloc secteur compensera la consommation du robot, en limitant le courant de charge de l'accu. Mais tu n'as pas forcément besoin d'une telle complication, si tu arrives à limiter la consommation "en veille" de ton robot!

Leon.

BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + Foxboard Linux http://ze.bot.free.fr/
BOB5, robot bipède simulé, puis tentative de réalisation (fail)




Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users