jueves, 22 de julio de 2010

pruebas ensayo-error

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.

1 comentario:

  1. Bien. Ahora, hay que apoyarlo sobre las ruedas y que salga caminando !!

    ResponderEliminar