lunes, 5 de marzo de 2012

Entrega 1 de Cilindrín: Pruebas con sensores,servos y placa.


Ayer terminé de circuitear el Cilindrín, el cual se presentara como modelo de ejemplo en el Cybertech. Esta entrada formara parte de su documentación.

Prueba de sensores

Estuve probando los diferentes sensores y estos fueron los resultados:

Programa de prueba:

#define inPin 1
int value = 0; /
void setup()
{
Serial.begin(9600);
pinMode(inPin, INPUT);
}
void loop()
{
value = analogRead(inPin);
Serial.println(value);
delay (500);
}

Finales de carrera (End-Stops): Las pruebas con los sensores se hicieron con el esquema que viene en los talleres, pero debe ser al revés cuando es la entrada es digital.



LDRs: Mismo esquema que en el anterior pero cambiando el final de carrera por el LDR. Solo 200 puntos de diferencia en la entrada analógica ,lo que indica mucha sensibilidad.

Potenciómetro: Igual que LDRs, pero con total recorrido de puntos en la entrada para un potenciometro de 4K7.


Sensores de distancia y fotodetectores.

Esquema

En el sensor analogico el valor maximo es 650


El sensor digital presenta un led rojo.
Array optodetectores (digital)



Con componentes basicos: fotodiodo y fototransistor

El fototransistor pasa de no conducir a 20 k (haría falta un transistor para amplificar). Conectado directamente es 60 puntos de diferencia.
Funciona igual reflejando en superficies blancas
Para puentear , habría que amplificar con transistor. Mejor utilizar el integrado 4n37

Foto del montaje

Receptor ir preparado:

Parece que da el valor en digital.
Esquema

http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
Hay que realizar una modificacion para las versiones modernas (viene al principio de la pagina)
El que mejor va es el ejemplo irreceiverdump.

Controlo de servo continuo(trucado o no)

Los diferentes valores dan diferentes velocidades y sentidos de giro:
Pos=0, sentido antihorario
Pos=180, sentido horario
Siempre hay una posición que bloquea las ruedas, en nuestro caso es 94
No hemos podido alimentar la placa de potencia con el microcontrolador.
Ejemplo practico a modificar para placa de control:

int inpuA = 2; // define function INTPUT 1 (IC2)
int inpuB = 12; // define function INTPUT 2 (IC2)
int inpuC = 8; // define function INTPUT 3 (IC2)
int inpuD = 7; // define function INTPUT 4 (IC2)
int pwm1 = 11; // define function ENABLE A (IC2)
int pwm2 = 10; // define function ENABLE A (IC2)
void setup()
{
pinMode (inpuA, OUTPUT); // definir la pa􀁗illa como salida
pinMode (inpuB, OUTPUT); // definir la pa􀁗illa como salida
pinMode (inpuC, OUTPUT); // definir la pa􀁗illa como salida
pinMode (inpuD, OUTPUT); // definir la pa􀁗illa como salida
pinMode (pwm1, OUTPUT); // definir la pa􀁗illa como salida
pinMode (pwm2, OUTPUT); // definir la pa􀁗illa como salida
}
void loop()
{
int i,d ;
i=255; // definir el valor del PWM 0-255 (velocidad)
d=50; // definir el valor del PWM 0-255 (velocidad)
analogWrite(pwm1, i); // Salida del PWM para el ENABLE A (IC2)
digitalWrite (inpuA, HIGH); // Activa el INTPUT 1 (IC2)
digitalWrite (inpuB, LOW); // Desactiva el INTPUT 2 (IC2)
// Resultado del OUT1 = +
// Resultado del OUT2 = -
delay (1000);
analogWrite (pwm2, d); // Salida del PWM para el ENABLE B (IC2)
digitalWrite (inpuC, LOW); // Desactiva el INTPUT 3 (IC2)
digitalWrite (inpuD, HIGH); // Activa el INTPUT 4 (IC2)
delay (1000);
// Resultado del OUT3 = -
// Resultado del OUT4 = +
}


TABLA DE CONEXIONES

Documento adjunto. En el Dropbox del Proyecto

Una pregunta interesante seria:¿ Existe diferencia entre A1 y 1? Si ,son entradas diferentes.
Problema en el load: Para cargar los programas desconectar la alimentación de los servos.

Programa de prueba(Girar a la derecha)

#include

Servo myservod;
Servo myservoi;

const int buttonPin = 3; // the number of the pushbutton pin
int pos = 180; // variable to store the servo position
int pos2 = 0; // variable to store the servo position
int var=1 ;
void setup()
{
Serial.begin(9600);
myservod.attach(9); // attaches the servo on pin 9 to the servo object
myservoi.attach(6); // attaches the servo on pin 9 to the servo object
pinMode(buttonPin, INPUT);
}


void loop()
{

myservod.write(pos); // tell servo to go to position in variable 'pos'
myservoi.write(pos2); // tell servo to go to position in variable 'pos'
var = digitalRead(buttonPin);
delay(15);


if(var == LOW)
{
Serial.write(1);
myservod.write(pos); // tell servo to go to position in variable 'pos'
myservoi.write(pos);
delay(1000);
}
delay(1000);
}

Y el video:



No hay comentarios:

Publicar un comentario

Seguir @Exergy123