Aller au contenu


Photo
- - - - -

Robot télécommandé


45 réponses à ce sujet

#21 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 20 octobre 2011 - 11:49

Salut à tous.

Bon voila j'ai bosser sur le capteur de mouvement PIR

Donc j'ai fait un teste code pour savoir a quelle distance il peut détecté une chose ou une ( personne ) la distance et de 260cm il peut faire plus je pence.

Il me manque juste à le modifier pour le mètre sur le programme de mon robot pour qu’il suive mon mouvement comme ma main ou un gros ballon.

Voici le programme


int LEDPIN = 13;       // Choisir la broche pour la LED 13
int Mouvement = 4;    // Choisir la broche d'entrée (pour le capteur PIR)
int EX = LOW;        // Je commence, en supposant qu'aucun mouvement sera détecté
int val = 0;        // Variable pour la lecture de l'état de la broches
 
void setup() 
{
  pinMode(LEDPIN, OUTPUT);      // Déclare la LED 13 en sortie
  pinMode(Mouvement, INPUT);   // Déclare le capteur comme une entrée
 
  Serial.begin(9600);
}
 
void loop()
{
   val = digitalRead(Mouvement);    // Lire la valeur d'entrée
   if (val == HIGH)                // Vérifier si l'entrée est HAUTE
{              
   digitalWrite(LEDPIN, HIGH);  // Clignotants à DEL ON
   if (EX == LOW) 
{
     
   // allumage
   Serial.println("Mouvement detecte!!!!!");   
   EX = HIGH;
}
 } 
  
   else 
{
   digitalWrite(LEDPIN, LOW); // Clignotants à DEL OFF
   if (EX == HIGH)
{
      
    //éteinte  
    Serial.println("Mouvement terminee!");
      
      EX = LOW;
}
 }
  }

Bon voila j'ai plus ça modifier mon petit code ^^ et le fusionné avec mon programme de mon robot ( allée aux bouleaux ).

#22 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 20 octobre 2011 - 05:55

Bon je ni n’arrive pas je laisse sa de coté ça me prend la tête.

#23 Astondb8

Astondb8

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 111 messages
  • Gender:Male
  • Location:Paris

Posté 20 octobre 2011 - 06:23

Tu te complique bien la vie

void setup() 
{
  pinMode(13, OUTPUT);      // Déclare la LED 13 en sortie
  pinMode(4, INPUT);   // Déclare le capteur comme une entrée
 
  Serial.begin(9600);
}
 
void loop()
{
   if (digitalRead(4 == HIGH))
{              
  digitalWrite(13, HIGH);
  Serial.print("Il y a personne");
  Serial.println();
}
 else 
 {
 digitalWrite(13, LOW);
 Serial.print("Il y a quelqu'un");
 Serial.println();
 
}

}

Ça devrait suffire

Au pire, je suis a l'envers sur les HIGH et LOW mais c'est bon
Et n plus, a mon avis, tu pourrais encore simplifier en virant le else

Cdlt
Yves

 


#24 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 20 octobre 2011 - 06:36

OK Astondb8 je teste sa merci

#25 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 23 octobre 2011 - 01:00

Bonsoir je c'est il et tare LOL

Bon voila je n'arrive toujours pas a programmé mon robot pour qu’il suis un mouvement.

J’ai passé pas mal de temps , des jours , et des heures sur le net a cherché , j'ai trouvé des DOC, mais ça ne me parle pas ( je ne comprends pas. )

Sinon j'ai le choie je possède 2 capteurs infrarouges sharp et un capteur de mouvement PIR de coté.

voilà ce que je cherche à faire




#26 Astondb8

Astondb8

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 111 messages
  • Gender:Male
  • Location:Paris

Posté 23 octobre 2011 - 01:07

Je n'ai pas essayé, mais a voir la vidéo je tenterais bien une piste.

Je ne la tenterais pas ce soir. Je vais me faire dormir les yeux.
Mais mon idée devrait fonctionner et je la teste demain.

Regarde bien la vidéo, la piste est visible à l'image... ;)

A demain donc

Cdlt
Yves

 


#27 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 23 octobre 2011 - 10:30

Regarde bien la vidéo, la piste est visible à l'image...


heu.... sur la vidéo!!!

Je voie un capteur infrarouge sharp ,un gros servomoteur ,Un Support pour capteur infrarouge sharp , le sabots noir qui permet

de renversé les robots , deux gros roue , une carte mes je ne voie pas la quel que c'est , des LED , est tous les branchements

des fils pour les composants

#28 Sani300

Sani300

    Habitué

  • Membres
  • PipPip
  • 150 messages
  • Gender:Male

Posté 23 octobre 2011 - 11:32

C'est pas tres compliqué seb, soit tu en met qu'un de capteur sharp comme lui la solution tu la sur la video c'est a dire
- Tu fais tourner le capteur sharp a gauche et a droite avec un servo.
- Dès qu'il vois un objet il tourne a droite puis a gauche. Si il voit a gauche un objet alors il va continuer a tourner a droit et a gauche, a gauche. C'est un peut dur a expliquer ^^

Apres tu peux faire avec deux capteurs sharp cote a cote c'est plus simple mais plus chere. Je te l'ai deja expliqué cette methode.
exmple
- Tu fais rouler ton robot droit quand les deux capteurs voit un objet
- Si le capteur droit capte alors tu tourne a droite jusqu'a ce que les deux capteurs voit un objet
- Si le capteur gauche capte alors tu troune a gauche jusqu'a ce que les deux capteurs voit un objet.

#29 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 23 octobre 2011 - 11:47

Salut Sani300 ça fait longtemps

Et bien je n’ai pas tous compris.

En gros moi mon capteur sharp des qu'il voie un obstacle devant luit il va reculé , s’il voit un obstacle à droite il va aller à gauche.

Donc si j'ai bien compris se que tu m’expliques , si mon capteur sharp voie un obstacle devants lui il ira tous droit , s’il

tourne à gauche et qu'il voit un obstacle il ira à gauche pour rejoindre l'obstacle.

En faite c'est simple en l’expliquant comme ça.

Mais le plus dur reste la programmation la ça vas un peux bloqué.

La je reprends le tout premier code que j'ai pour mon robot , donc il faut inversé, mais coi???



//Déclare
#include <Servo.h>

int vitesse1 = 6;
int vitesse2 = 5;
int direction1 = 7;
int direction2 = 4; 

Servo myservo; // créer un objet de servo pour contrôler un servomoteur
 
int capteur = 0; // broche analogique utilisé pour connecter le capteur
int val; // variable pour lire la valeur de la broche analogique
 
void Moteur1(int valeur_vitesse, boolean sens_avant)
{
analogWrite(vitesse1,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum
if(sens_avant)
{
digitalWrite(direction1,HIGH);
}
else
{
digitalWrite(direction1,LOW);
}
}
 
void Moteur2(int valeur_vitesse, boolean sens_avant)
{
analogWrite(vitesse2,valeur_vitesse); //valeur_vitesse = 0 à l'arrêt, et 255 pour vitesse maximum
if(sens_avant)
{
digitalWrite(direction2,HIGH);
}
else
{
digitalWrite(direction2,LOW);
}
} 


void setup()
{
  
myservo.attach(2); // attache le servo sur la broche 2 à l'objet servo
int i;
for(i=5;i<=8;i++)
pinMode(i, OUTPUT); //met les pin 4,5,6,7 en mode sortie 
}
 
void loop()
{
  
val = analogRead(capteur); // lit la valeur du capteur (valeur comprise entre 0 et 115)
val = map(val, 0, 115, 0, 190); // l'échelle pour l'utiliser avec le servo (valeur entre 0 et 300)
myservo.write(val); // définit la position d'asservissement en fonction de la valeur à l'échelle
delay(1000); // attend que le servo pour y arriver
 
if (val <= 215) // si on est à quelque cm d'un obstacle
{
  Moteur1(0,true); //j’arrête le moteur 1
 Moteur2(0,true); // j’arrête le moteur 2
 delay(300);    //j’attends quelque seconde
  Moteur1(255,true); //J'avance le moteur 1
 Moteur2(0,true); // j’arrête le moteur 2
 delay(400); //la valeur à mettre reste à définir en fonction de la vitesse du robot 
  Moteur1(255,true); //J'avance tout droit en mettant les 2 moteurs à fond
 Moteur2(255,false); //J'avance tout droit en mettant les 2 moteurs à fond
 
}
else
{
 Moteur1(255,false);
 Moteur2(255,true); 
}
  
}


#30 Astondb8

Astondb8

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 111 messages
  • Gender:Male
  • Location:Paris

Posté 23 octobre 2011 - 12:04

Tu vois que la réponse était sur la Vidéo.

Au lieu de commencer a écrire du code, commence par te demander ce que tu veux faire et traduis ça en lignes d'actions.
Ensuite tu n'as plus qu'à traduire des lignes d'actions en lignes de code.

Je demande a mon capteur de d'aller a droite
je lis la valeur
Je lui demande de tourner a gauche
Je lis la valeur
Etc…

Tu Verra c'est bien plus simple comme ça.

PS: dimanche en famille plus finale de coupe du monde ;( font que je n'ai pas encore ou me mettre devant mon établi.

Cdlt
Yves

 


#31 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 24 octobre 2011 - 09:23

Bonsoir Astondb8 , bonsoir à tous.

En faite malgré que ça me prend la tête je continue a cherché ( je suis obstiné ).

J'ai fait divers combinaison de code pfft au moins une 10.

Et la se soir j'ai fait se petit morceau de code et , je voulais savoir ton avis Astondb8 ou sani300

Voila mon code , dit moi si je suis sur la bonne voie ou si je suis vraiment a coté de la plaque.

( C’est un petit morceau de code [( fait a la vas vite donc ya encore des réglages de rotation du servo )) donc , je n’ai pas voulu rajouter les codes pour les contrôles des motoreducteurs. )


#include <Servo.h>
 Servo myservo;
 int servorightPin ;
 int capteur = 0;
 int val;

void setup() 
{
  myservo.attach(2);
  }
  
  
void loop() 
 {
 val = analogRead(capteur);
 if (val <=0)
 servorightPin = 0;
 myservo.write(servorightPin );
 delay(100);
 
 
  val = analogRead(capteur);
  if (val <=190)
  servorightPin = 0;
  myservo.write(servorightPin );
  delay(100);
  
  
  val = analogRead(capteur);
  if ( val <=190) 
  servorightPin = 190;
  myservo.write(servorightPin );
  delay(100);
  
  
  val = analogRead(capteur);
  if ( val <=190)
  servorightPin = 220;  
  myservo.write(servorightPin);
  delay(100);
 

//SEB03000
 }


#32 Astondb8

Astondb8

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 111 messages
  • Gender:Male
  • Location:Paris

Posté 24 octobre 2011 - 11:27

Bon aller, je vais te mettre sur la piste car apparemment tu n'y arrive pas.

Si tu regarde bien la vidéo, que peut tu observer ?
Le capteur fais sans cesse des allers et retours
Pourquoi fait il cela ?
Est ce un défaut de conception ?
Pas du tout.
Les capteur IR ou US ne peuvent analyser qu'un seul point a chaque fois.
Hors, pour savoir si l'objet, l'obstacle ou autre est plus a droite qu'à gauche (et vis versa) il me faut analyser deux ponts.
Il fait donc des allers et retours pour pouvoir analyser sans arrêt 2 points.

Pour essayer de traduire cela en phrases cela donnerait.

J’envoie mon capteur de 10 point à droite
J'analyse la valeur renvoyée et la range dans la variable valDroite
J’envoie mon capteur de 10 points à gauche
J'analyse la valeur retournée et la range dans la variable valGauche
Je compare les deux variable (si varDroite > que varGauche)
Suivant si la valeur la plus proche ou la plus petite j'utilise > ou <
Je demande a mon robot d'aller à droite durant 100mS (ou a gauche selon le cas)
Et je recommence...

Voila une boucle qui analyse sans arrêt si il doit se déplacer à droite ou a gauche en fonction :
Du résultat de l'opération demandée pour comparer les deux variables varDroite et varGauche)
Du type de capteur
Etc...

Je te laisse traduire cela en code.
Si tu n'y arrive pas fais nous signe...

Cdlt
Yves

 


#33 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 24 octobre 2011 - 11:33

Merci je métré ça en code demain , je (vous) te tien au courant.

#34 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 25 octobre 2011 - 12:28

À partir de la je coince.


J'analyse la valeur retournée et la range dans la variable valGauche
Je compare les deux variable (si varDroite > que varGauche)
Suivant si la valeur la plus proche ou la plus petite j'utilise > ou <



#35 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 25 octobre 2011 - 12:50

Ça fait un truc comme ça

Bon il est pas encore fini le code désolé


#include <Servo.h>
 Servo myservo;
 int servoleft;      //gauche
 int servoright;    //droit
 int capteur = 0;
 int valleft;
 int valright;

void setup() 
{
  myservo.attach(2);

}
  
void loop() 
 {
 servoright = 190;
 myservo.write(servoright);
 valright = analogRead(capteur);
 
 if (valright >=180)
{ 

 servoleft = +50;
 myservo.write( servoleft);
 valleft = analogRead(capteur);
 
 if (valleft >=180)
{
  (servoright > servoleft);
  
}
 }
  }


#36 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 27 octobre 2011 - 06:28

Bon j'ai avancé, mais ce n’est pas encore ça je bloque toujours


 // Déclare mon servo
 #include <Servo.h>
 
 Servo myservo;     // Servo
 int capteur = 0;  // Capteur
 int val;         // Variable pour lire la valeur du capteur de la broche analogique
 int servoright; //Droit
 int servoleft; //Gauche
 
void setup() // fonction setup - début de l'exécution du programme
{
  myservo.attach(2);             // Attache le servo sur la broche 2 à l'objet servo
  
  pinMode(servoright,OUTPUT);   //Met le servoright en mode sortie
  pinMode(servoleft,OUTPUT);   //Met le servoleft en mode sortie
}
  
  
void loop() 
 {
{
 if (val <=240)                 // Si on est à moins de quelque cm d'un obstacle pour le capteur
 
 servoright = 0;              // Rotation du servo Droit
 val = analogRead(capteur);  // lit la valeur du capteur analogique présente sur la broche
 myservo.write(servoright);

 delay(1000);               // attendre une seconde
}
 
 
 {
  if (val <=240)                // Si on est à moins de quelque cm d'un obstacle pour le capteur
  
  servoleft = 0;              // Rotation du servo Gauche
  val = analogRead(capteur); // lit la valeur du capteur analogique présente sur la broche
  myservo.write(servoleft);
  
  delay(100);              // attendre une seconde
 }
  
  
 {
  if ( val <=240)                // Si on est à moins de quelque cm d'un obstacle pour le capteur
  
  servoright = 190;            // Rotation du servo Droite
  val = analogRead(capteur)  ;// lit la valeur du capteur analogique présente sur la broche 
  myservo.write(servoright);
  
  delay(1000);               // attendre une seconde
 }
  
 
  {
  if ( val <=240)               // Si on est à moins de quelque cm d'un obstacle pour le capteur
  
  servoleft = -190;            // Rotation du servo Gauche
  val = analogRead(capteur); // lit la valeur du capteur analogique présente sur la broche
  myservo.write(servoleft);
  
  delay(100);              // attendre une seconde
  }
 }
 //SEB03000


#37 Astondb8

Astondb8

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 111 messages
  • Gender:Male
  • Location:Paris

Posté 27 octobre 2011 - 06:34

C'est normal S'en

Tu ne suis toujours pas le plan que je t'ai fait.

Suis ce plan a la ligne ;) et puis c'est tout.
Là c'est pas du tout ça.

Allez encore un effort.

Cdlt
Yves

 


#38 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 27 octobre 2011 - 06:43

Tous n'est pas bons dans mon code???

Je pense que cette partie-là est bonne quand même???


// Déclare mon servo
 #include <Servo.h>
 
 Servo myservo;     // Servo
 int capteur = 0;  // Capteur
 int val;         // Variable pour lire la valeur du capteur de la broche analogique
 int servoright; //Droit
 int servoleft; //Gauche
 
void setup() // fonction setup - début de l'exécution du programme
{
  myservo.attach(2);             // Attache le servo sur la broche 2 à l'objet servo
  
}


#39 Astondb8

Astondb8

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 111 messages
  • Gender:Male
  • Location:Paris

Posté 27 octobre 2011 - 06:48

Mais ça je ne t'en parle meme pas. C'est juste la base déclarant des variables tes pins et ton servo. C'est pas ça ton code.
Si tu n'arrivais pas a declarer ton servo et ton capteur ça serait grave ;)

C'est apres que ça compte. Fais ce sur je t'ei dit de faite.
Mais tu es têtu. ;)

Moi j'ai enfin fini mon bras ;)

Vous aurez une Video ce soir ou demain.

Cdlt
Yves

 


#40 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 04 novembre 2011 - 09:33

Non je ne suis pas têtu seulement que je mis paire.

Mais c'est bon j'ai trouvé et cela fonction ( je ferai une vidéo pour vous montrée )

Maintenant j'attaque ma pince en aluminium ( mon bras )

j'ai déjà pas mal avancé , j'arrive a ouvrir ma pince et a la refermé.

Il manque plus que le gros servo a programmé ( mais se gros servo me demande trop d'alimentation ), donc je vais changer se servo.

Et je pense que je vais attaquer un nouveau robot donc je luis métré cette pince et le morceau de code du capteur infrarouge sharp qui détecte les mouvements.

Donc le robot Jardise et fini ( s’il me manque une chose a faire raccourcir le code de mon robot )



Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users