Aller au contenu


3721

Inscrit(e) (le) 26 oct. 2017
Déconnecté Dernière activité juin 04 2020 07:16
-----

#101300 Base Alu ( ou la galère 2)

Posté par 3721 - 08 janvier 2019 - 04:36

Salut a tous ,

Alors voila j'ai fait une nouvelle base pour mon robot : 300 mm de long ,190 de large et 5 de haut le tout en alu ,avec les moteur et encodeur de la boutique , toujours un moteur pas a pas pour la tourelle et une Arduino Uno classique en microcontrôleur  :

IMG_20190107_160619.jpg IMG_20190107_160626.jpg IMG_20190107_160744.jpg

 

 

Pour couper la plaque d'alu j'ai d'abord décider de la modéliser en 3D sur fusion 360 et après de la faire découper au plasma (je pouvais :beach: :Koshechka_08:) mais trop pas trop le temps je voulais avoir assez vite mon chassie donc j'ai passé le fichier 3D au format PDF et je l'ai imprimer pour après le calquer au pointeau sur ma plaque .

Mais la petit problème, je pense qu'en le mettant en PDF le fichier a diminué de taille donc pratiquement toute les mesure était fausse, c'est pour cela qu'il y a un petit fail sur les troues pour le moteur droit . Avez vous une Idée d’où peut venir cette erreur si elle vous est déjà arrivé??

 

Maintenant que le chassie est découpé, percé, taraudé, que les fils sont branchés ... Il me reste juste a faire un petit adaptateur pour ma Tourelle et un j'ai petit souci d'alimentation (je créerais un autre sujet pour régler ce dernier). Je suis passé sur la programmation et premièrement réussir à implémenter le PID et la je bloque ...... je me suis beaucoup aidée du code de MIKE118 sur son robot de dernière minute pour la coupe de robotique ( désoler j'ai même un "peu" copier"), c'est le seul code assez complet et avec la librairie PID_V1 que je comprenais.

Pour l’instant le voici même s'il est pas du tout terminé:

#include <Stepper.h>
Stepper Motor (200,A0,A1,A2,A3);

const byte MotorRightEnable = 5;
const byte MotorRight1 = 8;
const byte MotorRight2 = 9;
const byte MotorLeftEnable = 6;
const byte MotorLeft1 = 10;
const byte MotorLeft2 = 11;

const byte EncodeurDroitA = 2;
const byte EncodeurDroitB = 4;
const byte EncodeurGaucheA= 3;
const byte EncodeurGaucheB= 7;

const byte TrigPin = 12;
const byte EchoPin = 13;
const byte MaxDist = 200;
#include <NewPing.h>
NewPing Tourelle(TrigPin,EchoPin,MaxDist);

#include <PID_v1.h>
#include <TimerOne.h>
double SetPointDroit, InputDroit, OutputDroit;
double SetPointGauche, InputGauche, OutputGauche;
double Kp = 0,Ki =0, Kd = 0;
PID PIDDroit(&InputDroit, &OutputDroit, &SetPointDroit, Kp, Ki, Kd, DIRECT);
PID PIDGauche(&InputGauche, &OutputGauche, &SetPointGauche, Kp, Ki, Kd, DIRECT);

volatile byte CountDroit = 0;
volatile byte CountGauche = 0;
volatile double SpeedDroit = 0;
volatile double SpeedGauche = 0;

void setup() {
  pinMode(EncodeurDroitA,INPUT_PULLUP);
  pinMode(EncodeurDroitB,INPUT_PULLUP);
  pinMode(EncodeurGaucheA,INPUT_PULLUP);
  pinMode(MotorRightEnable,OUTPUT);
  pinMode(MotorLeftEnable,OUTPUT);
  pinMode(EncodeurGaucheB,INPUT_PULLUP);
  pinMode(MotorRight1,OUTPUT);
  pinMode(MotorRight2,OUTPUT);
  pinMode(MotorLeft1,OUTPUT);
  pinMode(MotorLeft2,OUTPUT);
  pinMode(TrigPin,OUTPUT);
  pinMode(EchoPin,INPUT);
  pinMode(A0,OUTPUT);
  pinMode(A1,OUTPUT);
  pinMode(A2,OUTPUT);
  pinMode(A3,OUTPUT);
  
  Serial.begin(9600);
  Motor.setSpeed(240);
  
  attachInterrupt (0, CounterDroit, CHANGE);
  attachInterrupt (1, CounterGauche, CHANGE);
  
  Timer1.initialize (80000);  
  Timer1.attachInterrupt( timerIsr );
  
  InputDroit = 0;
  SetPointDroit = 0;
  InputGauche = 0;
  SetPointGauche = 0;
  
  PIDDroit.SetMode(AUTOMATIC);
  PIDDroit.SetOutputLimits(-255, 255);
  PIDGauche.SetMode(AUTOMATIC);
  PIDGauche.SetOutputLimits(-255, 255);
}
void loop() {


}    
void CounterDroit(){
  byte state =PIND;
(((state >> EncodeurDroitA) & 1)^((state >> EncodeurDroitB) & 1)) ? CountDroit-- : CoutDroit++; 
}
void CounterGauche(){
  byte state =PIND;
(((state >> EncodeurGaucheA) & 1)^((state >> EncodeurGaucheB) & 1)) ? Countgauche++ : CountGauche--; 
}
void timerIsr (){
  SpeedDroit = CountDroit;
  CountDroit = 0;
  Speedgauche = CountGauche;
  CountGauche;
}

Donc le moment des questions :ignat_02: :

1)sur le code de MIKE118, le dernier  code (https://www.robot-ma...upe-de-france)

Il utilise un contrôleur de moteur avec seulement 2entrées alors que moi j'utilise le L293D qui en utile 3 :2 pour la direction et 1en PWM pour la vitesse . Comment pourrais je faire pour adapter mon code?? un truc comme sa :

void setMotorRigh (int speeds,boolean reverse){
  analogWrite(motorRighEnablePin,speeds);
  digitalWrite(motorRighIn1,reverse);
  digitalWrite(motorRighIn2,! reverse);

2) pour avoir la vitesse le code n'a-t-il pas besoin du diamètre des roue ? Je parle uniquement pour l'asservissement en vitesse  ou la vitesse est juste en tours par minute/seconde?

 

3) Est -ce une bonne idée de partir sur le code de la coupe de robotique pour faire mon code??Avez vous des exemples plus explicites même si j'ai très bien compris celui ci ?

 

Merci de vos réponse

j’espère avoir été assez compréhensif :thank_you:

:bye:

 




#96322 trouver un encodeur pour l'adapter sur des axes Meccano

Posté par 3721 - 12 juin 2018 - 06:00

Bonjour,

Le but de ce topic ,est comme évoqué dans le titre et dans mon autre sujet sur on robot en Meccano, de trouver des encodeur a adapter sur le axes Meccano.

Je n'ai pas envie de changer les moteur car j'ai deja eu du mal a les mettre et cela voudrai dire changer tout mon châssis.

 

le problème c'est que ces axes sont un peu triangulaire et assez gros (je peux pas mesurer leur diamètre maintenant mais bientôt).

J'ai eu l'idée il y a quelques jour de faire une sorte d'adaptateur imprimée en 3D mais je ne pas d'imprimante par contre j'ai vue que le forum proposée des services.

 

les photos des Axes:

20180513_121023.jpg

20180513_121108.jpg

 

Pensez vous que la solution avec l'imprimant 3D est viable sinon connaissez vous des encodeur avec des axes aussi gros ??

j'ai fait des recherche sur internet mais il  y a beaucoup de choix et je ne sais pas vers quoi me diriger.




#95428 Robot en mecanno avec une tourelle

Posté par 3721 - 14 mai 2018 - 12:06

Bonjour a tous,

il y a quelques temps je me suis inscrit sur le forum pour poser des question quand j'en aurais besoin.Depuis j'ai crée mon premier robot sur roue avec un chassie en meccano car il y avait deja des moteur adaptées et plusieurs engrenages et courroies.

 

Mon robot est maintenant terminé mais je suis passé par  plusieurs galère avant de le finir : il-n’avait pas suffisamment de couples, les courroies patinait, après il y avait trop de frottement avec les pièces d'origine :dash2: .... Mais j'ai quand même réussi a adapter sur les meccano l’Arduino ,la roulette, le capteur (avec quelques petits trous.)

je suis un débutant en programmation (j'ai suivie les cours du kit de base et sur le blog d'Eskimon)mais j'ai réussie a faire un programme simple ou le robot avance tant qu'il n'y a pas d'obstacle a moins de 30cm sinon il recule et tourne a gauche pendant X secondes.

Mais maintenant je veut faire tourner ma tourelle avec un moteur pas a pas que j'ai réussi a adapter mais je bloque sur certaines chose:

-faire tourner le moteur :facile

-mettre les valeur du capteur dans un tableau :facile

-comparer les valeur pour trouver la plus grande :pas facile mais je crois que j'ai trouver

-associer cette valeur a temps pour faire tourner le robot vers la valeur du capteur la plus grande :beaucoup chercher pas trouver (j'ai essayer avec un tableau a 2 dimension mais a chaque fois je bloque sur un truc).

 

voila le code :Fichier joint  voituremecanoV1.ino   2,18 Ko   173 téléchargement(s) désoler j'ai oublié de le commenter j'espère que vous le comprendrait ou je le reposterait .

 

et voici les photos:

20180513_121205.jpg

20180513_120954.jpg

20180513_121023 - Copie.jpg

20180513_121040.jpg

20180513_121108.jpg

 

 

merci d'avance pour vos réponses.

ps:désoler pour le fautes et poser vos questions si tout n'est pas clair.