Controle moteur +2A double sens PWM

Salut à tous,

Nous avons réalisé un montage pour contrôler un moteur 12 volt double sens, en PWMvitesse regulé, pour un projet de tondeuse télécommandé en Bluetooth.

Donc l’arduino sort 2 signaux logic 0-5, qui commande 2 transistor de type 2n2222A. Les transistor eux commande 2 relais NO/NC. Donc les signaux logic commande les bobines des relais!

Au repos les contact relais seront NC Relié au + 12v, le commun au moteur. Le NO lui part sur DRAIN du mosfet pour gerer la puissance en PWM. SOURCE sera relie au GND 12V et GATE sera notre PWM d’arduino.

Le potar est un test, peut etre supprimé.

Voila peut etre que ca aidera pour un futur combat de robot tondeuse

int moteur= 46; // PWM 
int moteur2= 44;// PWM
int butAV=2;
int butAR=3;
int potar=A0;

void setup() {
  Serial.begin(9600);

  pinMode(11, OUTPUT);
   pinMode(12, OUTPUT);
   pinMode(moteur, OUTPUT); 
    pinMode(moteur2, OUTPUT); 
  pinMode(butAV, INPUT_PULLUP);
  pinMode(butAR, INPUT_PULLUP);
  
}


void loop() {
  
 int sensorValAV = digitalRead(2);
 potar = analogRead(A0); 
 Serial.println(potar);
 
if ((sensorValAV == LOW) || (potar <500)){  
  digitalWrite(11, HIGH);
  analogWrite (moteur,150 ); 
}
else   {   
  digitalWrite(11, LOW);   
}

 int sensorValAR = digitalRead(3);
 
if ((sensorValAR == LOW) || (potar >520)) {
  digitalWrite(12, HIGH);  
 analogWrite (moteur2,190 ); 
}
else   {  
  digitalWrite(12, LOW);    
}


}

code avec controle vitesse au potar

int moteur= 46; //M1 Controle de vitesse PWM )
int moteur2= 44;
int butAV=2;
int butAR=3;
int potar=A0;
int outputValue=0;
// the setup function runs once when you press reset or power the board
void setup() {
  Serial.begin(9600);
  // initialize digital pin 13 as an output.
  pinMode(11, OUTPUT);
   pinMode(12, OUTPUT);
   pinMode(moteur, OUTPUT); 
    pinMode(moteur2, OUTPUT); 
  pinMode(butAV, INPUT_PULLUP);
  pinMode(butAR, INPUT_PULLUP);
  
}

// the loop function runs over and over again forever
void loop() {

 int sensorValAV = digitalRead(2);
 potar = analogRead(A0); 
 Serial.println(potar);
   outputValue = map(potar, 0, 1023, 0, 255);
  analogWrite (moteur,outputValue );  
if (sensorValAV == LOW)/* || (potar <500))*/{

  digitalWrite(11, HIGH);
 

  
}
else   {       
  digitalWrite(11, LOW);   
  //analogWrite (moteur,255 ); 
}


 int sensorValAR = digitalRead(3);
 analogWrite (moteur2,outputValue );  
if (sensorValAR == LOW)/* || (potar >520))*/ {//plus grand que 520

  digitalWrite(12, HIGH);  
// analogWrite (moteur2,190 ); 
}
else   {  
  digitalWrite(12, LOW);   
 // analogWrite (moteur,255 ); 
}


  
}

allez je rajoute une télécommande kyosho PERFEX KT 3HS 27 MHz d voiture RC.

le recepteur Kyosho est alimenter par l’arduino en 5V. on prend le signal du recepteur qu’on branche au pin 5 arduino. on utilise pulsin pour lire le signal et on adapte au code. je ne fais que marche avant moteur. expérimentation
!!!

//  AVEC POTAR EN VITESSE

int ch1; //
int moteur= 46; //M1 Controle de vitesse PWM )
int moteur2= 44;//PWM
int butAV=2;
int butAR=3;
int potar=A0;
int outputValue=0;

void setup() {
  //Serial.begin(9600);

  pinMode(5, INPUT); 

  pinMode(11, OUTPUT);
   pinMode(12, OUTPUT);
   pinMode(moteur, OUTPUT); 
    pinMode(moteur2, OUTPUT); 
  pinMode(butAV, INPUT_PULLUP);
  pinMode(butAR, INPUT_PULLUP);  
}
void loop() {

  ch1 = pulseIn(5, HIGH, 25000); // Read the pulse width  

 int sensorValAV = digitalRead(2);
 potar = analogRead(A0); 
 Serial.println(potar);
 outputValue = map(potar, 0, 1023, 0, 255);
 analogWrite (moteur,outputValue ); 
  
if ((sensorValAV == LOW)||(ch1<1350)){
  digitalWrite(11, HIGH);  
}
else{       
  digitalWrite(11, LOW);   
}

 int sensorValAR = digitalRead(3);
 analogWrite (moteur2,outputValue );
  
if ((sensorValAR == LOW)||(ch1>1610)) {
  digitalWrite(12, HIGH);  
}
else{  
  digitalWrite(12, LOW);   
}
 
}

Un schéma :slight_smile: ?