lunes, 19 de diciembre de 2011

Segundas pruebas (mecánica-2)

Después de varias semanas sin sacar la cabeza por aquí , hoy me he decidido postear en vez de cacharrear.

Eje vertical > Acabé montando una reducción intermedia con engranajes de nylon+resina. Ahora entre otras cosas he ganado en precisión, suavidad y reducción del ruido.
Para ello tuve que ensamblar los dos engranajes uno dentro del otro (uno de 58z y el otro de 18z)  y fijarlos con loctite entre ellos para forzar que se movieran a la vez . Seguimos con engranajes de paso 1mm.  Ahora tendría u reducción final de 32,2 vueltas en el eje motor para recibir una en el eje de rotación de la cámara. El porque de esta reducción tan “imprecisa” fue un tema mecánico de los diseñadores de los engranajes = el sobresaliente del piñón de 18z encajaba justo en el interior del de 58z, eso lo decidí en la propia tienda al mostrarme el vendedor todo el catalogo con las cotas respectivas. También pensé que como el motor va por impulsos y tiene que haber un solape entre capturas no seria de vital importancia que la reducción final fuera un número entero.

NOTA > Ya sé que queda desplazado el engranaje del motor respecto al engranaje atacado, es de fácil resolver pero tampoco es crítico pues hay una superficie de contacto de unos 10 mm.

Hice las primeras pruebas ….lo siento no hay video! Finalmente debería dar 25 impulsos al pequeño motor para obtener una inclinación de 1.47º (el resto hasta 1.8º es el solape) . Una medida que en principio seria justa al provocar un solape de casi un 30% entre capturas. No os podéis imaginar que es un zoom de 500 mm (equivalente a 750) dentro de un piso…se va de foco 3 pueblos!

Luego empecé con el eje horizontal , en principio más fácil….pero JA!!! Aprovechando un perfil de aluminio que corría por el trastero de un anterior invento lo usé para utilizarlo de bancada al que posteriormente le monté unas patas para poder apoyarlo correctamente en el suelo.

Luego una maderita de DM o MD (prensado de resinas) que me gustan porque aguantan mucho peso y como que cada vez pesaba mas el invento y yo no quería flexiones. Monté unos rodamientos bolas que son tan fáciles de montar que sólo hay que agujerear…visita al Leroy Merlin a por una broca de madera de 22mm y en un pis pas la madera hecha un colador con 8 rodamientos que evitarían fricciones y sobreconsumos del motor.


En el centro de la madera hay un casquillo casero de una especie de Nylon con un agujero de 12 mm justo para que pasara un tornillo de M12 (el piñón tenia un agujero interior de 12 y mediante 2 tuercas a fuerza bruta hacen que este no se mueva, lo mismo que en otro eje –es un sistema guarro pero uno no tiene un taller en casa!-). Finalmente en el otro extremo y más abajo un rodamiento “loco” es el encargado de acabar de centrar todo. Y digo loco porque era la única manera de que no me crujiera continuamente la madera (aun no entiendo dónde está el error, creo que está en la rosca un pelín torcida de la pletina superior.También se cómo arreglarlo pero me da un poco de miedo cargarme esa rosca y tener que readaptar todo este movimiento a otro métrico).


Después de otras pruebas decidí que el paso seria de 13 impulsos para mover los 2.34º (el solape seria hasta los 2.7º). Aquí al tener solo una reducción de 1:10 va bastante rápido y me estoy pensando en montar un reductor intermedio pero me falta espacio o bien hacer un juego de piñones…ya veremos!

¿ Mejor una afotillo del conjunto  no ?


Lo siguiente será aprovechando las vacaciones de navidad tengo previsto de instalar un radiador+ventilador para refrigerar los drivers de potencia de los motores y también fabricarme una fuente de alimentación para reducir el voltaje a algo menos de 6 voltios (tensión en que los motores parece que trabajan más finos). En principio y para hacerlo portable tenia previsto usar una batería de coche baratilla.

También tengo unos problemas con la adaptación de mi keypad casero con el programa ….es curioso hay cosas que ahora no entiende el Arduino ….

Por cierto FELIZ NAVIDAD !!

viernes, 2 de diciembre de 2011

Keypad para Arduino

Estrujando la cabeza se me ocurrió de aprovechar las entradas análogicas del Arduino, y en vez de conectar un potenciometro de 10 kOhms, pensé "porque no monto divisores de tensión fijos", asi mediante el uso de resistencias podré "multiplexar" las entradas analogicas de una manera un poco "guarras" (a menos a la vista! cabe recordar que estoy limitado en conocimientos de electrónica, pero esto es de electricidad...jeje!).

AlexRVD me dijo "¿Por que no te curras un keypad?" y  a partir de aqui empezó todo. Primero localizar un keypad de desguace (en las chatarrerias/deixalleries siempre se encuentran cosas interesantes).

Una vez abierto.... sorpresaaaaaaaaaa! aparte de la botonera habia una placa electrónica que me sobrava, luego tuve que empezar a cortar pistas con un cutter para asegurarme de evitar señales cruzadas.
Y a partir de aqui todo es manos a la obra: soldador y un puñado de resistencias.


En la versión beta monté divisores de tensión que luego me daban lecturas "falsas" cuando la entrada respecto a positivo era inferior a 5 kOhms por lo que decidí que la resistencia siempre serian a partir de 5 kOhms hacia arriba a excepción de una combinación en que no uso ninguna resistencia (derivando todo a GND).

Os dejo un ejemplo gráfico de como es, luego sólo hay que múltiplicar el circuito por tantas veces como queramos (en mi caso x 4 veces). Otra opción seria montar más divisores de tensión intermedios pero en mi caso preferia asegurar las lecturas.
Aproximadamente los valores que utilizé fueron R1 y R8 = 10 kOhms, R2 = 6k8 , R3 = 3k3, R4 = 8k , R5 = 2k2, R6 = 6k2 y R7= 4k2.

Por si no os acordais de los colores de las resistencias, aqui teneis una tabla:
Luego ya todo es programación pura y dura. Yo lo hice a base de leer los datos del AnalogRead(x) y luego mediante instrucciones if provocar que ejecute una acción , por ejemplo Serial.print(tecla).

Y aqui la programación. Los valores que hay dentro de las comparativas if son susceptibles que se tengan de ir modificando o depurando, pero eso ya es cosa de que cada uno se lo optimize a su gusto.

El delay(200) es importante si no queremos que nuestro teclado se convierta en una metralleta de datos.

/*
  Keypad para Arduino
(G) CopyGuay by XavierGP 2011

 */
int sensorValue0 = 0;  // variable to store the value coming from the sensor
int sensorValue1 = 0;  // variable to store the value coming from the sensor
int sensorValue2 = 0;  // variable to store the value coming from the sensor
int sensorValue3 = 0;  // variable to store the value coming from the sensor
void setup() {
  
 Serial.begin(9600);
}
void loop() {
  // read the value from the sensor:
 
  sensorValue0 = analogRead(A0);   
  sensorValue1 = analogRead(A1);
  sensorValue2 = analogRead(A2);
  sensorValue3 = analogRead(A3);
 
 
   if(sensorValue0<2){
  Serial.println("Esc");
  }
   if(sensorValue0>329 && sensorValue0<334){
  Serial.println("Del");
  }
   if(sensorValue0>393 && sensorValue0<397){
  Serial.println("7");
  }
    if(sensorValue0>182 && sensorValue0<185){
  Serial.println("4");
  }
  if(sensorValue0>1020){
  Serial.println("1");
  }
 
 
 
   if(sensorValue1<2){
  Serial.println("Ctrl");
  }
   if(sensorValue1>330 && sensorValue1<333){
  Serial.println("/");
  }
    if(sensorValue1>395 && sensorValue1<399){
  Serial.println("8");
  }
    if(sensorValue1>182 && sensorValue1<185){
  Serial.println("5");
  }
  if(sensorValue1>1020){
  Serial.println("2");
  }
 
 
   if(sensorValue2<2){
  Serial.println("Alt");
  }
   if(sensorValue2>332 && sensorValue2<335){
  Serial.println("*");
  }
    if(sensorValue2>398 && sensorValue2<401){
  Serial.println("9");
  }
    if(sensorValue2>179 && sensorValue2<182){
  Serial.println("6");
  }
    if(sensorValue2>1020){
  Serial.println("3");
  }
 
 
  if(sensorValue3<2){
  Serial.println("<-");
  }
   if(sensorValue3>328 && sensorValue3<331){
  Serial.println("-");
  }
    if(sensorValue3>393 && sensorValue3<396){
  Serial.println("+");
  }
    if(sensorValue3>178 && sensorValue3<182){
  Serial.println("Enter");
  }
    if(sensorValue3>1020){
  Serial.println("0");
  }
 
  delay(200);         
              
}