Go Down

Topic: [Résolu] Gérer des moteurs avec des transistor (Read 275 times) previous topic - next topic

Geek2005

May 18, 2019, 09:40 am Last Edit: May 18, 2019, 04:08 pm by Geek2005
Bonjour,
Essayant de faire une voiture autonome avec un capteur à ultrasons, j'ai décidé de gérer les moteurs avec des transistors de type : 2N 2222. Voici les moteurs : https://www.amazon.fr/XCSOURCE-Ensembles-dEngrenage-Arduino-TE696/dp/B06XPCZ78W/ref=sr_1_6?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=moteur+dc&qid=1558164542&s=gateway&sr=8-6
Le problème c'est que je ne sais pas comment câbler les transistors et quelle alimentation choisir en sachant que je souhaite alimenter mes moteurs avec la même alimentation (parfois il y a les deux moteurs qui roulent parfois juste un).
Merci d'avance,
 ;D

hbachetti

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Geek2005

#2
May 18, 2019, 11:21 am Last Edit: May 18, 2019, 11:45 am by Geek2005
Je vais regarder mais pour l'alim les moteur accepte du courant de 3 à 6V mais comme j'alimente ma carte en 6V   est ce que je pourrais dénudé des fils pour que les 4 piles 1,5V alimente la carte et les moteurs ? Je me pencherai sur le pont en H cet après-midi et je vous communiquerai si cela roule mais je pensai gérer qu'un seul sens du moteur.
Merci de votre réponse,

Geek2005

Je pensais plutot a gerer qu'une direction.
Je vais regarder mais pour l'alim les moteur accepte du courant de 3 à 6V mais comme j'alimente ma carte en 6V   est ce que je pourrais dénudé des fils pour que les 4 piles 1,5V alimente la carte et les moteurs ? Je me pencherai sur le pont en H cet après-midi et je vous communiquerai si cela roule mais je pensai gérer qu'un seul sens du moteur.
Merci de votre réponse,

hbachetti

Quote
mais je pensai gérer qu'un seul sens du moteur
Dans ce cas un pont en H n'apportera rien. Un simple PN2222 en émetteur commun suffira.

Alimenter une carte ARDUINO en 6V peut s'avérer insuffisant.
Tout dépend du régulateur.
Le LM1117 d'une UNO ou NANO produira une chute de tension de plus de 1V, ce qui réduit la tension d'alimentation à moins de 5V. Quand les piles vont s'user, ce sera encore moins.

Comme il s'agit d'une voiture je suppose que c'est une petite carte mais il faudrait préciser laquelle.

L'idéal serait une PRO MINI 3.3V, qui acceptera de fonctionner jusqu'à environ 2.7V
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Geek2005

C'est une arduino uno mais le capteur a ultrasons et le servomoteur fonctionne très bien.

hbachetti

Il me semble que la limite basse de fonctionnement d'une UNO est aux alentours de 3.7V, plutôt 3.8V.
En ajoutant au minimum 1V de chute dans le régulateur, la carte devrait fonctionner jusqu'à 4.7V à 4.8V.

De plus, les piles ont une résistance interne assez élevée, et cette résistance augmente avec la décharge. La tension aux bornes de la pile diminue quand elle débite du courant, et cette chute augmente quand la pile se vide.

Tu peux essayer, tu verras bien combien d'autonomie tu obtiens.
Difficile d'en dire plus sans connaître la taille des piles ni leurs caractéristiques.

Remarque : une batterie rechargeable serait préférable.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Geek2005

J'ai une batterie rechargeable donc j'aliment l'arduino avec la batterie et le boitier de 4 piles 1,5V pour les moteur. Merci beaucoup car maintenant je sais comment alimenter l'arduino uno.

Jacques3012

Bonjour.

Voici un petit schéma que j'ai dessiné vous indiquant comment utiliser un transistor 2N2222 ou PN2222.

En augmantant la résistance sur la base, vous ferez varier la vitesse du moteur. Plus vous mettrez une résistance élevée, moins le moteur recevra de courant, et diminuera ainsi sa vitesse. Ne mettez pas une résistance plus basse que 1k car vous risquerez de griller le transistor.

J'espère que ça vous aidras un peu.

Salutations

Jacques3012

Geek2005

Merci beaucoup car grâce a votre schéma mon robot roule et évite les murs.
Mille fois merci

Geek2005



Geek2005

Code
Code: [Select]
#include <Servo.h>
Servo ServoRobot;

float distance_devant;
float distance_droite;
float distance_gauche;


int MOTEUR_1 = 2;
int MOTEUR_2 = 3;
int PIN_TRIG = 4;
int PIN_ECHO = 5;
void setup(){
  ServoRobot.attach(6);
 
  pinMode(MOTEUR_1,OUTPUT);
  pinMode(MOTEUR_2,OUTPUT);
  pinMode(PIN_TRIG,OUTPUT);
  pinMode(PIN_ECHO,INPUT);

  Serial.begin(9600);
}
void loop(){
  avancer();
  Serial.println("avancer");
  distance_devant_fonction();
  if(distance_devant < 20.0){
    arreter();
    Serial.println("arreter");
    distance_droite_gauche();
    if(distance_droite < distance_gauche){
      tourner_droite();
      Serial.println("droite");
      delay(500);
    }
    else{
      tourner_gauche();
      Serial.println("gauche");
      delay(500);
    }
  }
}
void distance_devant_fonction(){
  digitalWrite(PIN_TRIG,HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG,LOW);
 
  distance_devant = pulseIn(PIN_ECHO,HIGH);
  distance_devant = distance_devant/2;
  distance_devant = distance_devant * 340 / 10000.0;
}
void distance_droite_gauche(){
  ServoRobot.write(0);
  delay(1000);
 
  digitalWrite(PIN_TRIG,HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG,LOW);
 
  distance_gauche = pulseIn(PIN_ECHO,HIGH);
  distance_gauche = distance_gauche/2;
  distance_gauche = distance_gauche * 340 / 10000.0;
 
  ServoRobot.write(180);
  delay(1000);
 
  digitalWrite(PIN_TRIG,HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG,LOW);
 
  distance_droite = pulseIn(PIN_ECHO,HIGH);
  distance_droite = distance_droite/2;
  distance_droite = distance_droite * 340 / 10000.0;
 
  ServoRobot.write(90);
  delay(1000);
}
void avancer(){
  digitalWrite(MOTEUR_1,HIGH);
  digitalWrite(MOTEUR_2,HIGH);
}
void tourner_droite(){
  digitalWrite(MOTEUR_1,LOW);
  digitalWrite(MOTEUR_2,HIGH);
}
void tourner_gauche(){
  digitalWrite(MOTEUR_1,HIGH);
  digitalWrite(MOTEUR_2,LOW);
}
void arreter(){
  digitalWrite(MOTEUR_1,LOW);
  digitalWrite(MOTEUR_2,LOW);
}

Go Up