Programa en Arduino con sensores CNY70 definitivo
//Proyecto cuatrimestral: Eje Movimiento
//del tiempo y las marcas…
//Mariana Pozo
//Maestría en Tecnología y Estética de las Artes Electrónicas
//UNTreF
//Segundo Año -Agosto 2010-
//Declaración de variables
int ledPin = 13; // LED UV conectado al pin digital 13
int M1_A = 7; // Motor 1 entrada A
int M1_B = 8; // Motor 1 entrada B
int M1_Enable = 9; // Motor 1 Enable
int M2_A = 2; // Motor 2 entrada A
int M2_B = 4; // Motor 2 entrada B
int M2_Enable = 3; // Motor 2 Enable
int OPTO_1 = 1; // opto conectado a pin analógico 1
int OPTO_2 = 2; // opto conectado a pin analógico 2
int OPTOVal_1 = 0;//variable para almacenar pin 1
int OPTOVal_2 = 0;//variable para almacenar pin 2
int umbral = 500; // variable para el umbral de los sensores
void setup()
{// Inicializa los pines de salida
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode( M1_A, OUTPUT);
pinMode( M1_B, OUTPUT);
pinMode(M1_Enable, OUTPUT);
pinMode( M2_A, OUTPUT);
pinMode( M2_B, OUTPUT);
pinMode(M2_Enable, OUTPUT);
pinMode(OPTOVal_1, INPUT); //pin para el estado del OPTO 1
pinMode(OPTOVal_2, INPUT); //pin para el estado del OPTO 2
}
void loop(){
OPTOVal_1 = analogRead(OPTO_1); //lee pin analògico en 1
OPTOVal_2 = analogRead(OPTO_2); //lee pin analógico en 2
digitalWrite(ledPin, HIGH); // enciende el led
if((OPTOVal_1 + OPTOVal_2)/2 < umbral)//si se cumple esta condición
{
delay(1000);//espera un segundo
digitalWrite( M2_A,LOW);
digitalWrite( M2_B, HIGH); //el motor 2 se pondrá en marcha
analogWrite(M2_Enable, 255);//a toda velocidad
digitalWrite(M1_A,LOW);
digitalWrite(M1_B,LOW);//el motor 1 quedará apagado y el móvil girará sobre sí mismo
analogWrite(M1_Enable, LOW);//deshabilita el pin Enable del puente H
}
else // si no se cumple la condición
{
digitalWrite( M1_A, HIGH); // Valores ALTO en A y BAJO en B simultáneamente
digitalWrite( M1_B, LOW); // hacen girar el motor 1( hacia ADELANTE)
analogWrite(M1_Enable, 64); //
digitalWrite( M2_A, HIGH); // Valores ALTO en A y BAJO en B simultáneamente
digitalWrite( M2_B, LOW); // hacen girar el motor 2 (hacia ADELANTE)
analogWrite(M2_Enable, 64); //El móvil se desplaza en dirección recta
delay(1000); // Espera un segundo
digitalWrite( M1_A,HIGH ); // Valores ALTO en A y BAJO en B simultáneamente
digitalWrite( M1_B, LOW ); // hacen girar el motor 1 (hacia ADELANTE)
analogWrite(M1_Enable, 128); // a una velocidad moderada (50%)
digitalWrite( M2_A,HIGH ); // Valores ALTO en A y BAJO en B simultáneamente
digitalWrite( M2_B,LOW ); // hacen girar el motor 2 (hacia ADELANTE)
analogWrite(M2_Enable, 64); // a menos velocidad que motor 1 (25%), cambia la dirección
delay(1000); // Espera un segundo
digitalWrite( M1_A,LOW ); // Valores BAJO en A y ALTO en B simultáneamente
digitalWrite( M1_B,HIGH ); // hacen girar el motor 1( hacia ATRÁS)
analogWrite(M1_Enable, 50); //
digitalWrite( M2_A,LOW); // Valores BAJO en A y ALTO en B simultáneamente
digitalWrite( M2_B, HIGH); // hacen girar el motor 2 (hacia ATRÁS)
analogWrite(M2_Enable, 50); //El móvil CAMBIA EL GIRO y se desplaza en dirección recta con veloc. moderada
delay(1000);
digitalWrite( M1_A,HIGH ); // Valores ALTO en A y BAJO en B simultáneamente
digitalWrite( M1_B, LOW ); // hacen girar el motor 1 (hacia ADELANTE)
analogWrite(M1_Enable,20); // a una velocidad lenta
digitalWrite( M2_A,HIGH ); // Valores ALTO en A y BAJO en B simultáneamente
digitalWrite( M2_B,LOW ); // hacen girar el motor 2 (hacia ADELANTE)
analogWrite(M2_Enable, 50); // a más velocidad que motor 1 cambia la dirección
delay(2000);
digitalWrite( M1_A, LOW); // Valores BAJO en A y ALTO en B simultaneamente
digitalWrite( M1_B, HIGH); // hacen girar el motor 1 (hacia ATRAS)
analogWrite(M1_Enable, 20); // a una velocidad lenta
digitalWrite( M2_A, LOW); // Valores BAJO en A y ALTO en B simultaneamente
digitalWrite( M2_B, HIGH); // hacen girar el motor 2 hacia ATRAS
analogWrite(M2_Enable, 20); // a una velocidad lenta, el móvil se desplaza en línea recta
delay(3000); // Espera unos segundos
digitalWrite(M1_Enable, LOW); //deshabilita el pin Enable del puente H (el motor se detiene )
digitalWrite(M2_Enable, LOW); //deshabilita el pin Enable del puente H (el motor se detiene )
digitalWrite(ledPin, LOW); // apaga el led UV
}
}
4-Video en correspondencia con el programa para dos motores con sensores.
PRUEBA 4
Programa simple de prueba sin sensores para 2 motores de corriente continua.
int ledPin = 13; // LED conectado al pin digital 13
int M1_A = 7; // Motor 1 entrada A
int M1_B = 8; // Motor 1 entrada B
int M1_Enable = 9; // Motor 1 Enable
int M2_A = 2; // Motor 2 entrada A
int M2_B = 4; // Motor 2 entrada B
int M2_Enable = 3; // Motor 2 Enable
void setup()
{// Inicializa los pines de salida
pinMode(ledPin, OUTPUT);
pinMode( M1_A, OUTPUT);
pinMode( M1_B, OUTPUT);
pinMode(M1_Enable, OUTPUT);
pinMode( M2_A, OUTPUT);
pinMode( M2_B, OUTPUT);
pinMode(M2_Enable, OUTPUT);
}
void loop(){
digitalWrite(ledPin, HIGH); // enciende el led
digitalWrite( M1_A, HIGH); // Valores ALTO en A y BAJO en B simultaneamente
digitalWrite( M1_B, LOW); // hacen girar el motor 1 hacia ADELANTE
analogWrite(M1_Enable, 20); //
digitalWrite( M2_A, HIGH); // Valores ALTO en A y BAJO en B simultaneamente
digitalWrite( M2_B, LOW); // hacen girar el motor 1 hacia ADELANTE
analogWrite(M2_Enable, 80); //cambia la dirección
delay(3000); // Espera unos segundos
digitalWrite(M1_Enable, LOW); //deshabilita el pin Enable del puente H (el motor se detiene )
digitalWrite(M2_Enable, LOW); //deshabilita el pin Enable del puente H (el motor se detiene )
digitalWrite(ledPin, LOW); // apaga el led
delay(1000); // Espera un segundo
digitalWrite(ledPin, HIGH); // enciende el led
digitalWrite( M1_A, LOW); // Valores BAJO en A y ALTO en B simultaneamente
digitalWrite( M1_B, HIGH); // hacen girar el motor 1 hacia ATRAS
analogWrite(M1_Enable, 128); // a una velocidad moderada (50%)
digitalWrite( M2_A, LOW); // Valores BAJO en A y ALTO en B simultaneamente
digitalWrite( M2_B, HIGH); // hacen girar el motor 2 hacia ATRAS
analogWrite(M2_Enable, 128); // a una velocidad moderada (50%)
delay(3000); // Espera unos segundos
digitalWrite(M1_Enable, LOW); //deshabilita el pin Enable del puente H (el motor se detiene )
digitalWrite(M2_Enable, LOW); //deshabilita el pin Enable del puente H (el motor se detiene )
digitalWrite(ledPin, LOW); // apaga el led
delay(1000); // Espera un segundo
}
PRUEBA 3
3-Video en correspondencia con el programa para dos motores sin sensores.
PRUEBA 2
2-Ahora está ok. Un motor gira para adelante y para atrás alternativamente con el enable del puente H.
PRUEBA 1
1-Comencé por la práctica más simple. Mover un motor para un lado y para el otro alternativamente, pero el pin del enable del puente H no estaba en el pin 9 del micro, por ende, giró solo para atrás:"E pur si muove"
Decidí subir al blog todas las instancias del proceso, aún aquellas que no tuvieron resultado favorable.
Bien. Ahora, hay que apoyarlo sobre las ruedas y que salga caminando !!
ResponderEliminar