Pong con acelerómetro en matriz de leds

Siguiendo con los experimentos con acelerómetro y la matriz de leds, ahora le toca el turno a un mini juego de Pong.
La pala se maneja moviendo la placa hacia los lados, con la particularidad que ésta es ligeramente elástica y rebota contra las paredes laterales.
La velocidad de la pelota varía según el tipo de golpe que se le de y la fuerza de empuje lateral que lleve la pala.
Ahí os dejo un video del funcionamiento:



Salu2

Acelerómetro con matriz de leds

Bueno, después de un tiempo y embarcado en un par de proyectos que no me dejan hacer mucho más, os dejo un video con una placa de pruebas usando:

  • 1x PIC16F688
  • 3x 74HC595 (registros de desplazamento con latches)
  • 1x acelerómetro 3 ejes MMA7260 (PCB de Surestore)
  • Matriz de leds 5x19 ( contruida con 3 matrices de 8x8 leds bicolores)
Esto es lo que puedo enseñaros por ahora... resulta muy divertida la pelotita :)



Mi agradecimiento a Alejandro Conty por su inestimable ayuda con los vectores de velocidad y las físicas de la pelotita.
Y a Xavier Belanche por ponerme en contacto con él ;)
Bueno, pasad por alto el lio de mi mesa :)
Salu2.

Sensor capacitivo mTOUCH



Últimamente los MP3, MP4, electrodomésticos y demás aparatos están implementando controles sin botones mecánicos, usando sensores capacitivos. El más famoso es la click-wheel del iPOD que ya incorporan algunos teléfonos móviles.
Esta última semana la he pasado haciendo pruebas con este tipo de sensores para un futuro proyecto que tengo en marcha y he aprendido mucho sobre lo que puedo y no puedo hacer con ellos sin gastar mucho dinero en placas de evaluación.
En un principio he barajado 2 alternativas:

  • Sensores capacitivos de Quantum (QT100A)
  • Sensores capacitivos mTOUCH de Microchip
Como no disponía de los QT100A de Quantum, me he decidido por los mTOUCH y cual ha sido mi sorpresa al descubrir que mTOUCH abarca todo tipo de capacidades sensoras de tipo capacitivo aplicadas a los PIC. Realmente es simplemente software aplicado a unas trazas de diseño PCB un tanto particulares.
El sensor más básico posible con los PIC está basado en el 10F206 que es un PIC de 6 patillas ( en el caso del encapsulado SOT-23) que incorpora un comparador interno, la base de la detección en este caso particular.
La capacidad de deteccion se consigue convirtiendo el comparador interno del 10F206 en un oscilador de relajacion. La salida de este comparador, es usada para cargar/descargar la capacidad que se forma en el sensor ( pad del circuito ) y se usa como entrada del comparador, la tension de 0,6v del BandGap del micro:
(fuente microchip.com)

El programa del pic, disponible en Microchip, lo que hace es usar el Timer0 como contador de frecuencia y luego compara el valor leido con un valor almacenado para una pulsacion que genera una frecuencia de entre 100kHz-400kHz, asi a grandes rasgos. Todo está muy explicado en la Appnote AN1202 de Microchip.
Yo he modificado el programa, para que se encienda el led cuando se pulse ( al revés que la aplicación de Microchip).
Antes de pasar al circuito, me gustaría dar un tirón de orejas a los fabricantes de PCBs fotosensibles por su manía de variar los barnices que hacen que con el método habitual, salgan chapuzas que nos obligan a calibrar otra vez insoladoras y tiempos de insolado...

El circuito

El circuito está basado en la appnote de microchip y gira en torno al 10F206 SOT-23.
Hay un condensador de desacoplo en la alimentación del circuito, que puede ser de 3v dadas las características de bajo consumo del PIC.
Una resistencia de Pull-up de 10k en el MCLR del PIC y otra de 220k para completar el circuito RC del oscilador.
Un diodo tipo BAS16W o 1N4148 es usado para cargar el condensador parásito con la tensión de salida del comparador. En el circuito, como no disponia de ningún BAS16W, opté por un schottky de conmutación rápida de un aparato reciclado que tenía por casa.

LA PCB
Esta parte ha sido la más complicada de desarrollar, ya que no encontré demasiada información sobre diseños con mTOUCH.
Las directrices de Microchip, están recogidas en la AppNote AN1102 y las más importantes a tener en cuenta son:
  • El pad del sensor no importa la forma, pero debería ser de al menos el área de un dedo
  • El pad debería estar lo más próximo posible a la patilla del PIC
  • Pistas de GND cercanas reducen la sensibilidad, pero pueden ser imprescindibles para aislar un sensor de otro.
  • Pads sin pistas de GND próximas producen efectos indeseados en la detección así como un exceso de sensibilidad.
  • Si se usa un material tipo Plexiglás o cristal para cubrir el sensor, éste añade su constante dieléctrica al condensador parásito que se forma y hace que se reduzca la sensiblidad con respecto al uso del aire como dieléctrico.
  • Unos 2mm de plexi o cristal dan buenos resultados de sensibilidad.
  • En el caso de PCBs de doble cara, es preferible que los pads vayan en la cara opuesta al PIC y otros componentes, y aislados de éstos.
  • En algunos circuitos puede ser necesario aislar la alimentación del PIC del resto del circuito, para evitar mal funcionamientos. Usar por ejemplo un regulador LDO.
Después de todo esto, me he puesto manos a la obra y esto es lo que ha salido, un montón de placas que no funcionan y una evolución de la que si funcionó hasta lograr un diseño que pudiera se implementado sobre otra placa:


La primera placa que ha funcionado, y creo que ha sido de suerte, ya que se me olvidó la pista de GND del PIC, un plano de masa rodea al sensor, pero en intentos sucesivos, los sensores aislados con un plano de masa no han dado resultado, carecían de sensibilidad.



Luego vino el plano de masa solo sobre la circuitería:



El diseño final:



Y el más pequeño para integrar en otras PCBs:



Un video de la primera prueba. Podeis ver el cablecillo que une al PIC con GND.
En este caso la sensibilidad es buena y el aislamiento del resto del circuito tambien:



Otra de las pruebas fue con una PCB sin plano de masa y con dos sensores. Uno de ellos estaba dentro de un lazo de VDD y los resultados fueron opuestos.
El sensor1 ofrece una sensibilidad desmesurada que lo hace inútil para una aplicación de botonera y por el contrario, el sensor2 envuelto en el lazo de VDD no ofrece casi sensibilidad. Mirad los videos:






Así que despues de muchas pruebas, la PCB final con conector ICSP y led 0603 es esta:



Y el diseño para implementar en un circuito, es este, con el ICSP en forma de testpads y sin led:



Estos son los fotolitos:


Finalmente resaltar el efecto de reducción de sensibilidad introduciendo un dieléctrico entre el sensor y el dedo que hace variar la capacidad parásita.
Aquí lo podeis observar con un placa de 1,8mm de espesor de algo que parece plástico-plexiglás:



Se le pueden encontrar aplicaciones muy interesantes a este tipo de sensores, sobre todo integrando paneles al aire libre o en cajas estancas sumergibles...
El inconveniente mayor es que hay que programar los PICs y en el caso de los sensores de Quantum esto no es necesario, así que si es para una integración a baja escala, sería necesario programarlos todos antes ( saldría muy caro pedirlos ya programados ) bien antes de soldar o añadiendo conectividad ICSP para hacerlo sobre placa.

Salu2,
Droky.

Descargas

Hackeando un ventilador POV de Thermaltake



Volvemos a la carga con un montaje diferente, al estilo DIY de hackaday, hackedgadgets o make.
Hace unos meses, en el escaparate de una tienda de informática, me llamó la atención un ventilador POV (Persistence of vision) de la firma Thermaltake, concretamente el modelo iflash mini.



En él se mostraba el nombre de la marca, la temperatura y creo que las revoluciones ( de esto ya no estoy seguro) y me dije: - si no se puede reprogramar, se puede modificar y si no, se puede aprovechar la PCB de los leds y la alimentación- y me compré uno.
Echando un vistazo a la electrónica, lleva un uC chino MDT2010 ( un clon del PIC16C56 y con patillaje similar al 16F628 ) en formato SOP



El circuito
EL circuito está compuesto por:

  • El uC en cuestión que usa una señal de reloj interna y no necesita cuarzo.
  • Una NTC con un circuito de carga/descarga de un condensador para medir el valor del tiempo de la descarga y así obtener el valor de la temperatura.
  • 8 leds tamaño 0603 que ponen el mensaje en el aire.
  • Una bobina tipo dinamo de 8 cuerpos que genera la tensión que alimenta al circuito y los pulsos para que el uC sepa cuando da una vuelta el ventilador y posicionar los mensajes.
  • Un puente rectificador para la tension de la bobina y un zener estabilizador, además de un condensador electrolítico para reducir el rizado de la tensión de alimentación y algunos componentes discretos
Lo primero de todo fue sustituir el MDT2010 por algo que pudiera programar, y como el patillaje del PIC 16F628 es el mismo, pues quité uno y puse el otro ( no tengo imágenes del antes... )
Como no tenía ganas de crear una rutina que midiera el tiempo de carga y descarga del condensador para obtener el valor de la NTC y así la temperatura, le añadí un DS1820 ( 1-wire sensor de temperatura ) que solo necesita una patilla y una resistencia de pullup para conectarse, pegado a la PCB con un poco de Epoxi.
También añadí una conexión ICD2 para facilitar las operaciones de programación del PIC:
Unos hilos por aqui y otros por allá y así quedó:




Ahora necesitaba usar la señal de los pulsos que vienen de la bobina ( que son 8 por cada vuelta que da, ya que tiene 8 devanados ) y lo más sencillo para contarlos sin usar ninguna rutina de interrupciones es ponerlos en la patilla 3 que es la entrada del contador RTCC, así no me tengo que preocupar si estoy poniendo algo en "pantalla" de que se me escapen pulsos y me desposicione el mensaje en el refresco siguiente (ojo a la resistencia de pullup).
Este es el esquema del antes y el después del circuito:




Ahora el tema está en contar los pulsos de entrada y cada 8, poner el mensaje para refrescarlo.
Al principio me volví un poco loco con los pulsos, pero finalmente conseguí domesticarlos.
Esta es una prueba que hice mandando un pulso cada 8 recibidos:



Trabajando en CCS
Entonces configuramos el RTCC en el inicio del código:

  1. set_rtcc(0);
  2. setup_counters(RTCC_EXT_H_TO_L,RTCC_DIV_1);


  1. void espera_inicio()
  2. {
  3. flancos = get_rtcc(); //asigna valor del contador RTCC
  4. //a flancos
  5. while (flancos<8) //Espera a que hayan pasado
  6. //8 flancos
  7. {
  8. flancos = get_rtcc();
  9. }
  10. set_rtcc(0); //reinicia el contador del RTCC
  11. }



Entonces el programa lo que hace es:
  1. Espera inicio ( 8 pulsos )
  2. Pone mensaje
  3. Vuelve al punto 1 y así el mensaje se mantiene en la misma posición.
He añadido algunas rutinas de giro, efecto con una máscara y parpadeo. Os dejo los fuentes para que si os animáis hagáis algo más creativo.
Los caracteres están todos organizados en 3 tablas de ROM ( por aquello de solo poder direccionar 255 indices )
Unas imágenes:









Un video del funcionamiento (el parpadeo es de la cámara):



Y en el último momento le he añadido una rutina de alarma por sobrecalentamiento, que podeis ver en el siguiente vídeo aplicandole una tobera de soldadura:


Hasta que la temperatura no baja de 50ºC, la alarma no desaparece y no continua su funcionamiento normal.

Hasta otra...

DESCARGAS


USB <> TTL (3 y final)

Tenía que darle el último giro de tuerca y hacerlo más profesional, así que me decidí a encargar unas PCBs y ver que salía de todo esto.
Las PCBs llegaron cortadas y con un acabado "gold" muy bueno. Me sorprendo a mí mismo de que el único fallo cometido haya sido en la serigrafía, que se ha montado el "www.radikaldesig.com" sobre "C3" por un error mío en el tamaño de la tipografía.


Depues de recibir las placas, viene el delicado tema de la soldadura, un poco tedioso si se trata de aplicar pasta con la jeringuilla sobre las PCBs, así que decidí aplicar el sistema que vi hace un tiempo en sparkfun .
El caso es que como no dispongo de un sistema de corte de laser cercano y económico para hacer mi stencil, me hice uno un poco "chapucero" con una transparencia y un cutter.
Antes de aplicar la pasta:

Y después de aplicarla:


Tampoco quedó tan mal... el caso es que despues de posicionar los componentes y meterlos al horno, el resultado es el siguiente:

Y una tras otra... allá van todas:


Ha sido una interesante experiencia fabricando una pequeña serie de aspecto casi profesional.
Si estáis interesados en algún conversor montado o alguna PCB del conversor sin componentes, poneros en contacto conmigo.

Droky 2008

 
RaDiKalDeSIG | Designed by Techtrends | © 2007-2008 All rights reserved