Skip to content

Instantly share code, notes, and snippets.

@racsoraul
Last active October 14, 2019 19:45
Show Gist options
  • Save racsoraul/531c3d2bd6e7c4972628 to your computer and use it in GitHub Desktop.
Save racsoraul/531c3d2bd6e7c4972628 to your computer and use it in GitHub Desktop.
Código para el control de dos motores DC utilizando el monitor serial como interfaz. Código que luego se adaptará en un módulo de WiFi para usarlo a través de WebServices.
/*
FUNCIONAMIENTO:
En el monitor serial:
1. Se elige uno de los motores mediante el ingreso de 'a' o 'b'.
2. Se ingresa el sentido (+ o -) para preparar al motor en el
sentido de giro, luego se ingresa la velocidad en un rango entre 0-9.
Donde: 0 es igual a APAGADO.
9 es igual a MAXIMA VELOCIDAD.
*/
const int enPin = 5; //Pin 5 PWM conectado al pin 1 (1,2EN) del puente H.
const int enPin2 = 6; //Pin 6 PWM conectado al pin 9 (3,4EN) del puente H.
const int in1Pin = 7; //Pin 7 conectado al pin 2 (1A) del puente H.
const int in2Pin = 4; //Pin 4 conectado al pin 7 (2A) del puente H.
const int in3Pin = 14; //Pin 14 (A0) conectado al pin 2 (3A) del puente H.
const int in4Pin = 15; //Pin 15 (A1) conectado al pin 7 (4A) del puente H.
//Inicializando valores.
void setup(){
Serial.begin(9600); //Abriendo puerto serie a 9600 bs.
pinMode(in1Pin, OUTPUT); //Estableciendo in1Pin como salida.
pinMode(in2Pin, OUTPUT); //Estableciendo in2Pin como salida.
pinMode(in3Pin, OUTPUT); //Estableciendo in3Pin como salida.
pinMode(in4Pin, OUTPUT); //Estableciendo in4Pin como salida.
//Imprimiendo en consola del puerto serial indicaciones.
Serial.println("Elegir el motor 'a' o motor 'b:");
}
void loop(){
if(Serial.available()){ //Verificando si hay datos en el puerto serial.
char motor = Serial.read();
if(motor == 'a'){
Serial.println("Ingresar + o - para invertir giro (O iniciar)");
Serial.println("Ingresar nivel de velocidad: 0-9");
while(1){
if(Serial.available()){
char ch = Serial.read(); //Leyendo el caracter.
if(ch >= '0' && ch <= '9'){ //Verificando si esta en el rango requerido.
int velocidad = map(ch, '0', '9',0, 255); //Realizando mapeo para cambio de rangos.
analogWrite(enPin, velocidad); //Enviando valor analogico por el pin PWM.
Serial.println(velocidad); //Imprimiendo el valor analogico (La velocidad).
}
// Se realiza el intercambio de polaridades segun el caracter leido. Entra en total
// funcionamiento la logica del puente H.
else if(ch == '+'){
Serial.println("Sentido de las agujas del reloj");
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, HIGH);
}
else if(ch == '-'){
Serial.println("Contrario al sentido de las agujas del reloj");
digitalWrite(in1Pin, HIGH);
digitalWrite(in2Pin, LOW);
}
else{
Serial.println("Caracter invalido");
Serial.println(ch);
}
}
}
}
else if(motor == 'b'){
Serial.println("Ingresar + o - para invertir giro (O iniciar)");
Serial.println("Ingresar nivel de velocidad: 0-9");
while(1){
if(Serial.available()){
char ch = Serial.read(); //Leyendo el caracter.
if(ch >= '0' && ch <= '9'){ //Verificando si esta en el rango requerido.
int velocidad = map(ch, '0', '9',0, 255); //Realizando mapeo para cambio de rangos.
analogWrite(enPin2, velocidad); //Enviando valor analogico por el pin PWM.
Serial.println(velocidad); //Imprimiendo el valor analogico (La velocidad).
}
// Se realiza el intercambio de polaridades segun el caracter leido. Entra en total
// funcionamiento la logica del puente H.
else if(ch == '+'){
Serial.println("Sentido de las agujas del reloj");
digitalWrite(in3Pin, HIGH);
digitalWrite(in4Pin, LOW);
}
else if(ch == '-'){
Serial.println("Contrario al sentido de las agujas del reloj");
digitalWrite(in3Pin, LOW);
digitalWrite(in4Pin, HIGH);
}
else{
Serial.println("Caracter invalido");
Serial.println(ch);
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment