Aller au contenu


Contenu de j-l freerider

Il y a 16 élément(s) pour j-l freerider (recherche limitée depuis 03-avril 13)


#95726 Machine agricole autonome.

Posté par j-l freerider sur 23 mai 2018 - 06:15 dans Robots roulants, chars à chenilles et autres machines sur roues

Si je devais recommencer j'utiliserai un raspberryPI pour le logiciel GPS car mon 18F4620 est au bout de sa vie pour tenir la cadence, lol.
Pour l'interface tracteur je ne changerai rien.
Pour les capteurs je manque encore de recule.



#95725 Machine agricole autonome.

Posté par j-l freerider sur 23 mai 2018 - 06:11 dans Robots roulants, chars à chenilles et autres machines sur roues

Merci !

Pas bête du tout le coup de l accéléromètre;)
Le miens est bien différent, c est un capteur piezo enfermer dans un boîtier avec une fixation magnétique.
Un choc sur un outil du sol (ex:une dent rentre en contact avec une pierre) provoque une onde de choc qui se ressent dans tout le châssis. Le capteur ne fait "qu'écouter" cette onde et une electronique derriere constituer d un AOP monté en comparateur et d'un microtroleur interprètent toute l info.

J utilise un GPS agricole Trimble, le choix réside juste dans le fait que je l avais déjà, lol et que la précision me suffit pour le travaille que je lui demande.



#95723 Machine agricole autonome.

Posté par j-l freerider sur 23 mai 2018 - 05:27 dans Robots roulants, chars à chenilles et autres machines sur roues

Le but est de pouvoir effectué des travaux au champs sous la surveillance d un opérateur situé dans une autre machine. (Deux machines, un seul chauffeur)
Il suffit d enregistrer le sens de travaille, la périphérie du champ et la largeur de l outils accroché derrière.
De définir le type de demi tour que l on souhaite (bouclé en U, ou marche arriere).
Ensuite le logiciel fait les calcul de position et de marche à suivre.

Le DGPS a une précision de 8cm au sol (30cm sur 24heures).

Le logiciel a la mains sur 100% des fonction du tracteur, régime moteur, boite de vitesses, rapport sous charge, direction, frein, commande du pont avant et tout les distributeurs hydrolique auxiliaire.
Possibilité de le piloté à distance, détection de choc (capteur fabriqué par mes soins) permet de détecter les chocs sur les outils du sol et modifié le comportement en conséquent.
Lidar TF02 cadencé à 100 hz. Plus parchoc amovible en cas de gros problèmes lol.



#95721 Machine agricole autonome.

Posté par j-l freerider sur 23 mai 2018 - 05:02 dans Robots roulants, chars à chenilles et autres machines sur roues

Bonjour à tous !

Voici le projet sur le quel j ai beaucoup travaillé.



Il s agît d un tracteur de 6 tonnes et 160ch converti en véhicule 100% autonome.
L électronique s articulé autour de deux Pic 18F4620.
La localisation se fait par DGPS avec correction WAAS et EGNOS.
Commande à distance avec 1km de porté, télémétrie et retour vidéo.
Lidar frontal pour les obstacles, plus diver sécurité mécanique.

J-L



#59031 Robot balayeur

Posté par j-l freerider sur 27 décembre 2013 - 12:46 dans Autres projets inclassables

merci beaucoup!

J'ai compris le principe, je vais regarder sa de plus près, sa ne devrait pas poser problème avec mikoP.

et la valeur du shunt ?
as tu fait un essai sur table ? ne doit pas être linéaire et chute de tension importante ?


le shunt est R1 ( 4 ohms )
servos en rotation sans charge j'ai 4.5 V
Servos en rotation avec les roues au sol j'ai environ 4,1 V
Servos bloqué j'ai 1.5 V

Donc nan pas vraiment linéaire, mais dans l'utilisation que j'en fait, sa répond bien a la demande.
Et la plage de mesure est assez étalée pour effectuer une mesure précise.



#59027 Robot balayeur

Posté par j-l freerider sur 27 décembre 2013 - 12:13 dans Autres projets inclassables

et voila le schéma !


shunt courant.jpg



^_^



#59025 Robot balayeur

Posté par j-l freerider sur 27 décembre 2013 - 11:32 dans Autres projets inclassables

Salut,

une première évolution consiste à remplacer toutes les procédures "PWM" par une function ayant pour paramètres PortNumber,TimeOn, TimeOFF.
Ceci permettrait ainsi d'avoir un balayage continu.


Pourrais tu devellopper si sa ne te dérange pas ? Que je comprenne bien le principe.

Cependant normalement les servos doivent être pilotés toutes les 20ms; pour ce faire, vu la taille du code, une procédure gérant les servos et qui n'est exécutée que toutes les 20ms est possible, le mieux étant de générer une interruption toutes 20ms.



Se sont des servo 8grammes numériques, donc avec mon programme un état bas de 5 ms permet d'interrompre les sacades que font les servos avec un état bas de 20 ms.

le balayage du centre de la pièce se fait " au hasard " des obstacles rencontré, mais il y'a une tendance à être plus sur les exterieurs de la pièce qu'au centre effectivement.

une autre : schéma de la mesure du courant ? un shunt sur le 0 avec un ampli op non inverseur?


Du tout ! mesure toute simple ( m'en vas faire un schema et je reviend ...)

et merci d'avoir pris un peu de temps pour répondre ;)



#59021 Robot balayeur

Posté par j-l freerider sur 26 décembre 2013 - 10:23 dans Autres projets inclassables

Tu as bien fais de mettre des commentaires ;)/>/> Je sais pas si on peut plus l'obtimiser mais dans tout les cas tant que ça fonctionne ça va xD ;)/>/>


Les commentaires sa devrait être obligatoire ! lol
Comme tu dis tant que sa fonctionne ;)



#59018 Robot balayeur

Posté par j-l freerider sur 26 décembre 2013 - 09:47 dans Autres projets inclassables

Salut !

Je pose le code de mon programme, je rappel, je suis débutant se code fonctionne correctement, mais n'est certainement pas optimisé.
Donc quelque critiques de personnes plus habituées que moi à manier du Pic sont les bienvenus !

program mo_robot;  // Robot balayeur


// PIC 16F88 / int 8 MHz
// Written and compiled with MikroPascal Pro V5.30

var
  wIn1: word;
  wIn2: word;
  win3: word;
  win4: word;
  i: byte;
  i1: byte;
  i2: byte;
  i3: byte;
  i4: byte;
  i5: byte;
  i6: byte;
  
const
  cdo = 523; cdod = 554; cre = 587; cred = 622; cmi = 659;
  cfa = 698; cfad = 739; csol = 783; csold = 830; cla = 880;
  clad = 932; csi = 987;
  cdoG = 1046;

procedure Main_Init;
begin
  CMCON := CMCON or $07;  // turn off comparators
  CCP1CON := CCP1CON or %00001100; // turn on PWM
  OPTION_REG := %10000000; // pullup désactivé (bit 7 à 1)
  INTCON := $00;
  TRISA := %00001111;
  TRISB := %00000000;
  ANSEL := $00;
  ANSEL.ANS0 := 1; // set RA0 as analog input
  ANSEL.ANS1 := 1; // set RA1 as analog input
  ANSEL.ANS2 := 1; // set RA2 as analog input
  ANSEL.ANS3 := 1; // set RA3 as analog input
  ANSEL.ANS4 := 0; // set RA4 as digital I/O
  ANSEL.ANS5 := 0; // set RB6 as digital I/O
  ANSEL.ANS6 := 0; // set RB7 as digital I/O
  OSCCON := 0;
  OSCCON.IRCF2 := 1;
  OSCCON.IRCF1 := 1;
  OSCCON.IRCF0 := 1;
  ADC_Init;
  delay_ms(100);
  Sound_init(portb, 2);
end;

// Procedure de controle des servomoteur:

 // Roue gauche----------------------------------------------------------------

procedure PWM_9;
   begin
    PORTB.0 := 1;
    delay_us(1300);
    PORTB.0 := 0;
    delay_ms(5);
   end;

 procedure PWM_8;
    begin
      PORTB.0 := 1;
      delay_us(800);
      PORTB.0 := 0;
      delay_ms(5);
    end;
    
procedure PWM;
    begin
     {PORTB.0 := 1;
      delay_us(1435);}
      PORTB.0 := 0;
      delay_ms(5);
    end;

procedure pwm8;
   begin
    PORTB.0 := 1;
    delay_us(2000);
    PORTB.0 := 0;
    delay_ms(5);
   end;

procedure pwm9;
   begin
    PORTB.0 := 1;
    delay_us(1525);
    PORTB.0 := 0;
    delay_ms(5);
   end;



 // Roue droite----------------------------------------------------------------
 procedure PWM_9_;
   begin
    PORTB.1 := 1;
    delay_us(1280);
    PORTB.1 := 0;
    delay_ms(5);
   end;

 procedure PWM_8_;
    begin
      PORTB.1 := 1;
      delay_us(800);
      PORTB.1 := 0;
      delay_ms(5);
    end;
    
procedure PWM_;
    begin
    {PORTB.1 := 1;
      delay_us(1425);}
      PORTB.1 := 0;
      delay_ms(5);
    end;

procedure pwm8_;
   begin
    PORTB.1 := 1;
    delay_us(2000);
    PORTB.1 := 0;
    delay_ms(5);
   end;

procedure pwm9_;
   begin
    PORTB.1 := 1;
    delay_us(1590);
    PORTB.1 := 0;
    delay_ms(5);
   end;

//  Servo avec capteur infrarouge-----------------------------------------------

procedure pwmIR;
    begin
      PORTA.4 := 1;
      delay_us(1425);
      PORTA.4 := 0;
      delay_ms(2);
    end;

procedure pwmIR1;
    begin
      PORTA.4 := 1;
      delay_us(1925);
      PORTA.4 := 0;
      delay_ms(2);
    end;

procedure pwmIR2;
    begin
      PORTA.4 := 1;
      delay_us(925);
      PORTA.4 := 0;
      delay_ms(2);
    end;

 // Servo du Balai rotatif------------------------------------------------------


 procedure pwmB;
    begin
      PORTB.4 := 1;
      delay_us(2800);
      PORTB.4 := 0;
      delay_ms(2);
    end;

procedure pwmB1;
    begin
      PORTB.4 := 1;
      delay_us(1200);
      PORTB.4 := 0;
      delay_ms(2);
    end;

//------------------------------------------------------------------------------
// Procedure de synchronisation des servos:

procedure robot_1; // marche avant / servoIR à gauche
  begin
      i:=0;
      while i < 10 do
        begin
        inc(i);
        pwmIR1; PWM_9; PWM9_; pwmB;
    end;
  end;

procedure robot_courant;  // évitement après mesure de courant > à la référence
  begin
      i1:=0;
      while i1 < 60 do
        begin
        inc(i1);
        pwmB1; PWM8; PWM8_;
        end;
   end;
    
procedure robot_obstacle1;  //contournement par la droite
  begin
      i2:=0;
      while i2 < 30 do
        begin
        inc(i2);
        PWM9; PWM9_;
        end;
  end;
  
procedure robot_2; // marche avant / servoIR au centre
  begin
      i3:=0;
      while i3 < 10 do
        begin
        inc(i3);
        pwmIR; PWM_9; PWM9_; pwmB;
      end;
    end;

procedure robot_3; // marche avant / servoIR à droite
  begin
      i5:=0;
      while i5 < 10 do
        begin
        inc(i5);
        pwmIR2; PWM_9; PWM9_; pwmB;
    end;
  end;
  
procedure robot_obstacle2;  //contournement par la gauche
  begin
      i6:=0;
      while i6 < 30 do
        begin
        inc(i6);
        PWM_9; PWM_9_;
    end;
  end;
     

begin
  Main_Init;
  delay_ms(100);
  sound_play(cdo, 200);
  delay_ms(100);
  sound_play(cdo, 200);
  delay_ms(3000);
  
  sound_play(cla, 160);  // Intro musique  Mario Bros... (très important ..)
  delay_ms(2);
  sound_play(cla, 160);
  delay_ms(60);
  sound_play(cla, 180);
  delay_ms(60);
  sound_play(cfa, 160);
  delay_ms(2);
  sound_play(cla, 160);
  delay_ms(60);
  sound_play(cdoG, 180);
  delay_ms(420);
  sound_play(cdo, 180);

  delay_ms(1000);
  wIn2 := ADC_Read(1) ;  // lecture référence de réglage pour le capteur IR
  wIn4 := ADC_Read(2);   // lecture référence de réglage pour la mesure de courant
  while true do
  begin

     wIn1 := ADC_Read(0) ;  // lecture capteur IR
     if (wIn1 <= win2) then
       begin
        robot_1;

        wIn3 := ADC_Read(3);  // lecture pour mesure de courant
        if (wIn3 < win4) then
          begin
            robot_courant;
          end;

        wIn1 := ADC_Read(0) ;  // lecture capteur IR

        if (wIn1 > win2) then
          begin
            robot_obstacle1;
          end;
       end;

     wIn1 := ADC_Read(0) ;  // lecture capteur IR
     if (wIn1 <= win2) then
     begin
       robot_2;

       wIn1 := ADC_Read(0) ;  // lecture capteur IR
        if (wIn1 > win2) then
        begin
          robot_obstacle2;
        end;
     end;

      wIn1 := ADC_Read(0) ; // lecture capteur IR  
      if (wIn1 <= win2)  then
       begin
         robot_3;

         wIn1 := ADC_Read(0) ;  // lecture capteur IR
         if (wIn1 > win2) then
         begin
           robot_obstacle2;
         end;
      end;

       wIn1 := ADC_Read(0) ;  // lecture capteur IR
       if (wIn1 > win2) then
           begin
             PWM9; PWM_9_;
             PWM9; PWM_9_;
            end;

    end;
end.

J'ai déjà réussi à épuré pas mal le code en utilisant des boucles type " While Do ". Mais sa ne doit pas être parfait je pense.



#58966 Robot balayeur

Posté par j-l freerider sur 24 décembre 2013 - 10:28 dans Autres projets inclassables

Salut,

C'est a dire que j'ai appris l'électronique seul il y'a 3 ans, j'avoue que le site sonelec-musique.com à été d'une grande aide !
Je suis loin d'être un électronicien confirmé et j'ai de grosse lacune en se qui concerne la programmation, C'est a force de décortiqué des code trouvé ici et là que j'apprend.

Il est vrai que ayant eu des programmes arduino devant les yeux, sa à l'aire bien plus intuitif que le mikropascal, et en plus il y'a des routines tout faite pour la gestion des servos, donc pour la robotique c'est idéal !
Mais j'ai tellement galéré à apprendre les Pics, leur particularités ainsi que le langage de programmation que j'ai " peur" de me lancé et de me perdre avec ses concurrents.

Si non je travaille avec des 12F675 (8 broches et Can), 16F628a (bon a tout faire mais pas de Can), 16F88 (générateur pwm et can) et 18F2520 (28 broches, 2 générateur pwm, 10 entré Can ect ..) que je ne dois même pas exploiter a 50 % ... lol

Je suis débutant donc à part utilisé les entrées en Can ou entré numérique, je ne sais pas utilisé les liasions serie, I2c ect, à vrai dire je n'ai même pas cherché, je me contente de faire avec se que je maitrise ... bref niveau débutant quoi :D/>

D'ailleurs il n'y a qu'a voir le programme utilisé pour le robot... loin d'être optimisée, au point d'avoir épuisé la routine (delay_) ... lool
Si sa te dit je veux bien posé mon code et que tu me conseille pour l'optimiser ?

Merci pour le robot ! Sur la Vidéo c'est vrai qu'il ronfle ! mais en réalité il fait pas autant de bruit que l'on pourrai le croire. Se qui fait du bruit c'est le servo su balai rotatif, qui est poussé a sa vitesse max, en même temps se n'est qu'un servo 8 grammes qui est surement une contrefaçon made in hongkong ..

a + :)



#58959 Robot balayeur

Posté par j-l freerider sur 23 décembre 2013 - 10:54 dans Autres projets inclassables

Pour compléter la réponse de mike118 :

admettons que ton capteur envoie une tension de 3 volt au Can sa nous fait : ((1024 / 5v) * 3v) = 613 ( ou 5volt correspond a l'echelle pleine du Can)

ton programme lira le chiffre "613" pour 3 volts

donc il suffit d'écrir qu'elle chose du style :

Si valeur Can > à 613 alors :
virage gauche;

se n'est qu'un exemple bien sur , en espérant que sa t'éclairera.

Par contre personnellement je ne sais que programmer des PIC microchips et en langage Mikropascal.
Je ne connais strictement rien au Arduino et leur langage.



#58937 Robot balayeur

Posté par j-l freerider sur 23 décembre 2013 - 07:33 dans Autres projets inclassables

c'est simple : le Can serra lu par le programme après que celui ci est envoyé le PWM correspondant au servo.
et la position du servo devra resté la même pendant quelque millisecondes le temps que la mesure s'effectue.
ensuite le programme oriente le servo sur une autre position et on recommence. ^_^



#58932 Robot balayeur

Posté par j-l freerider sur 23 décembre 2013 - 06:41 dans Autres projets inclassables

Je pense que sa doit être faisable, il suffit de faire en sorte que la période de manœuvre soit proportionnel ( ou inversement proportionnel suivant le capteur) à la tension lu par le Can provenant du capteur IR.
Mais pour que le programme traite l'information corectement il faut aussi connaitre la position du servo ou se trouve le capteur IR, et integré cette donné au calcul final.
Et ainsi déterminé la periode de manœuvre pour éviter l'objet.



#58913 Robot balayeur

Posté par j-l freerider sur 23 décembre 2013 - 07:34 dans Autres projets inclassables

Salut,

Pour le capteur, j'ai utilisé le modele GP2Y0A41SK0F, qui délivre une tension de 0,4 à 2,25 V en sortie pour une distance comprise entre 4 à 30 cm.
La mesure est précise par contre c'est de L'IR donc très directif, il faut absolument que le capteur balai aussi large que la largeur du robot, si non difficile d'éviter un petit obstacle a coup sur.
L'approche de détection pour le programme :


Marche avant, Servo Ir à droite.
Si tension IR > à la référence(obstacle) alors rotation vers la gauche.
Si non marche avant, Servo Ir au centre
Si tension IR > à la référence(obstacle) alors marche arrière puis rotation vers la gauche.
Si non marche avant, Servo Ir à gauche
Si tension IR > à la référence(obstacle) alors rotation vers la droite
Si non marche avant, Servo Ir à gauche

Si mesure du shunt sur servo Roue (mesure de courant) > à la référence alors marche arrière puis rotation vers la droite.
Si non retour début programme.

Rien de compliqué en soit !



#58903 Robot balayeur

Posté par j-l freerider sur 22 décembre 2013 - 06:17 dans Autres projets inclassables

Salut !

Donc je vous présente mon 1er projet robotique, un robot balayeur,.
Je suis pas le 1er et certainement pas le dernier a faire quelque chose du genre, juste l'architecture différente de se que j'ai pu voir ici et là.

Le châssis est réalisé avec de l'aluminium de récup', Les roues sont propulsée pas des petit servos modifiés pour fonctionner en rotation continu, Même chose pour le moteur de la brosse rotative.

Au niveau électronique, un PIC 16f88 s'occupe du contrôle des données, un capteur de distance IR Sharp posé sur un servomoteur pour la détection d'obstacle et une mesure de courant consommé sur les moteur des roue via le CAN du Pic, pour contourner un éventuel obstacle qui aurait échappé au capteur IR.

Je ne sais pas si mettre le programme du Pic est utile ? si besoin y'a qu'à demander smile.gif

Assez parlé : voici 2 vidéos de la bête:

 



1er Vidéo..

 



et la 2ème !

Bon visionnage ! happy.gif

J-L

Image(s) jointe(s)

  • DSC00396.jpg



#58895 Hello !

Posté par j-l freerider sur 22 décembre 2013 - 05:48 dans Et si vous vous présentiez?

Bonjours à tous et à toutes

Moi c'est J-L, 29 ans, agriculteur de métier.
Passionnée de technologie en tout genre, je me suis mis a l'électronique il y'a 3 ans et j'ai tout appris sur le net, (Google is my friend !) l'électronique m'a mené vers les microcontrôleurs, et les microcontrôleurs vers la robotique!
J'ai construit mon 1er "vrai" robot il y'a quelque jours et se ne serra certainement pas le dernier, donc je me suis dit qu'il y avait certainement de bonne chose à apprendre ici et à partager. ^_^/>


J-L