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.

martes, 20 de julio de 2010

Primeras pruebas con pintura fosforescente

La pintura fosforescente tiene la capacidad continua de absorber ondas luminosas artificiales o naturales. La fotoluminiscencia es emitida por un pigmento que ha acumulado luz durante un corto periodo de tiempo. Luego de haber absorbido luz, los pigmentos foto-luminiscentes desprenden la energía lumínica acumulada en la absoluta oscuridad.
Tamaño de las partículas de la pintura utilizada: 90micras.
Duración de fosforescencia nocturna 10HS+



Color: ultra azul (de noche), blanco verdoso (de día).

Con la ayuda de un puntero UV realicé las primeras experiencias para observar las reacciones de la pintura en la oscuridad:





.La distancia adecuada para que se note el trazo.
.La velocidad necesaria para dejar el rastro.
.La dilución de thinner más ajustada para que las partículas no se superpongan y se produzca el fenómeno físico que hace al concepto del ejercicio.


Registro con flash


MARCAS DEJADAS POR LA LUZ UV EN PLENA OSCURIDAD











Después de hacer las primeras pruebas se realizarán básicamente modificaciones en la dilución de la pintura, el tipo de papel y experiencias con distinta carga de luz diurna sobre la superficie de la instalación donde se deslizará el móvil.

domingo, 11 de julio de 2010

Circuito motores



Tercera versión con conexiones digitales.
VERSIÓN CORRECTA





















Segunda versión circuito motores.
















Estoy tratando de comprender el circuito.
Pregunta:
¿Control de la velocidad con M2
Se puede enviar una señal del puente H (pin 1 enable) al pin digital de Arduino (PWN) y
enviar simultáneamente la señal del pin 1 (puente H) a la alimentación lógica que correspondería al motor 1?

jueves, 8 de julio de 2010

Tracción diferencial

Después de la clase del 7 de julio se clarifican algunas cuestiones sobre el proyecto. Los móviles de juguete serán aprovechados como chasis, dejando solamente una de las ruedas delanteras de cada uno de los autos a la que le corresponderá 1 motor ya que el móvil tendrá tracción diferencial.






ESTRUCTURA MECÁNICA
La tracción diferencial hace posible que dos ruedas motrices montadas sobre el mismo eje sean controladas independientemente, lo cual permite al robot realizar variedad de movimientos tales como desplazarse en línea recta, describir arcos o girar sobre sí mismo, lo cual posibilita que pueda cambiar su orientación si necesidad de modificar su posición. Para asegurar la estabilidad del robot se incorpora otra rueda que sirve únicamente de soporte.







Al programar se debería integrar la velocidad media del robot v para obtener su posición (x, y) e integrar su velocidad angular media w para obtener su orientación a.

Página consultada: http://www.cea-ifac.es/actividades/jornadas/XXII/documentos/A_02_R.pdf



Estructura del chasis

domingo, 4 de julio de 2010

Descripción del proyecto y objetivos

El proyecto tiene por objeto la realización de un dispositivo robótico provisto en su base de un led UV (Ultra Violeta) que se activa -poniéndose en movimiento- y dibuja durante x tiempo sobre una superficie fosforescente a su paso a manera de estela en la oscuridad. El grafismo lumínico se difumina con el correr del tiempo hasta desaparecer subvirtiendo su cualidad de potencial marca.


Boceto de la instalación


Boceto del dispositivo móvil


El proyecto podría realizarse en cuatro etapas a considerar:


1-La construcción del dispositivo mecánico de desplazamiento que constaría de:
▪2 ruedas motrices y 1 rueda loca
▪2 motores planos de 3 V
▪ Alimentación motores: 4 baterías recargables de 1,2V en serie = 4,8V
▪Led uv

2- Conexiones con el dispositivo electrónico
▪Placa microcontrolador Arduino Duemilanove (Atmega 328) -incorporado al dispositivo móvil-
▪Entradas analógicas y digitales
▪Puerto cable USB liberado de la cápsula externa del móvil

3- Software
▪Control de dirección y velocidad
▪Control del espacio habilitado para el desplazamiento con dos optoacopladores laterales orientados hacia el suelo que advertirían la diferencia lumínica de la superficie.


4- Estética del dispositivo móvil
▪El móvil llevaría una cápsula externa del mismo color que la superficie
fosforescente de desplazamiento.