Proyecto Arduino

Control de música desde un NES pad.

 Materiales:

  •  1 NES pad
  •  1 Arduino UNO
  •  Cables para conexiones



 El proyecto consiste en utilizar el NES pad para controlar el reproductor de música, poder cambiar la canción, subir el volumen, abrir y cerrar el reproductor etc.



 Para ello se utilizo un script en python que mediante el modulo serial nos estuviese comunicando con el arduino y este a su vez nos mandara la información de los botones que están presionando en el NES pad.




El NES pad cuenta con 8 botones, los cuales consisten:
  •  flechas ( Arriba, Abajo, Izquierda, Derecha ) 
  •  boton Select
  •  boton Start
  •  boton A
  •  boton B

A cada uno de los botones se le asignara un comando especial para el uso del reproductor de música. El reproductor que seleccione fue Banshee.

Para conectar el NES pad tome en cuenta su diagrama de pin out.




Despues de las conexiones indicadas con el pinout el sketch de arduino para este proyecto es el siguiente quedo de la siguiente manera.

Este sketch hace envios por el puerto serial hacia la pc, despues necesitamos un cliente que este recibiendo los datos del arduino y para ello tenemos este script en python.

Como podemos ver en el script se pregunta en que puerto esta conectado el arduino, y despues inicia ciclos para verificar que boton ha sido presionado segun la informacion que el arduino le envia a la pc.

Cada boton crea una impresion de una letra por el puerto serial, python la captura y decide que hacer.
  • Flecha arriba : Aumentar volumen
  • Flecha Abajo : Bajar volumen
  • Flecha Izquierda: Devolver una cancion o reiniciarla
  • Flecha Derecha: Siguiente cancion
  • Start: iniciar el reproductor
  • Select: cerrar el reproductor
  • Boton B: detener la reproduccion actual
  • Boton A: cambiar entre pausado y reproducion.


He aquí una demostración en video:

Proyecto PIC

Manipulación de un motor de corriente directa usando un microprocesador.

Para este proyecto utilize un puente H ya que me ayudara a controlar el motor de corriente directa, y en esta entrada.




Material.






La mayor parte de como se controla con el puente H ya que es el que permite controlar la direccion del motor.
Por la parte del pic pensé en usarlo como si fuese ya un circuito tipico de uso industrial ya sea en maquinas o aparatos de mediano tamaño pero con tareas especificas, es decir un circuito en el cual su principal función es dar ciclos realizando una misma tarea.

El motor que encontre es de un viejo reproductor de discos.
abajo
arriba





 






En realidad tiene dos motores, el que se supone hace girar los discos y el que mueve el lector óptico de arriba hacia abajo y viceversa. Pero usaré solo uno para propositos de muestra del funcionamiento del puente H y el PIC16F628A.

El Codigo del PIC El codigo que estoy usando es realmente simple. En realidad tenia unas pocas  series randoms para el movimiento del motor, pero por alguna razón el pic no lograba ejecutarlas ni en la simulación..

El pic logra mover el motor para ambas direcciones, aunque presenta un poco de fallos con la corriente electrica.


Puente H

¿Qué es un puente H? 


El puente H o puente en H es un circuito electrónico que permite a un motor eléctrico DC girar en ambos sentidos, avanzar y retrocerder.
Los puentes H ya vienen hechos en algunos circuitos integrados, pero también se  pueden construir a partir de componentes discretos.


Un puente H se construye con 4 interruptores (mécanicos o mediante transistores). Cuandos los interruptores S1 y S4 están cerrados ( S2 y S3 abiertos ) se aplica una tensión positiva en el motor, haciéndolo girar en un sentido. Abriendo los interruptores S1 y S4 ( cerrando S2 y S3 ), el voltaje se invierte, permitiendo el giro en sentido inverso del motor.

Un puente H se usa para invertir el giro de un motor, pero también se puede usar para frenarlo de manera brusca, al hacer un corto entre las bornas del motor, o incluso puede usarse para permitir que el motor frene bajo su propia inercia, cuando desconectamos el motor de la fuente que lo alimenta.
Basicamente se puede hacer esto tomanto en cuenta las Sn



La forma más común de hacer un puente H es usando interruptores de estado sólido ( son llamados transistores ), puesto que sus tiempos de vida y frecuencias de conmutación son mucho más altas. En convertidores de potencia es impensable usar interruptores mecánicos, dado sus especificaciones tan embonables a los requerimientos.

Además los interruptores se acompañan de diodos que permitan a las corrientes circular en sentido inverso al previsto cada vez que se conmute la tensión puesto que el motor está compuesto por bobinados que durante varios períodos de tiempo se opondrán a que la corriente varié.


Ahora vemos un puente H creado comunmente.


¿Que se necesita?

  • 2 transistores 2N2222 que son los que conmutaran las salidas.
  • 4 transistores TIP31 los cuales actuaran como interruptores.
  • 4 Diodos rectificadores para crear un puente de diodos a manera que limpien la señal analógica y se pueda usar el motor de corriente directa.


Relativamente es muy sencillo y los 2N2222 son los que ayudan como puentes para ver si se avanza o se retrocede.



Ahora, como se menciono más arriba. El uso de transistores y del puente rectificador es necesario en sistemas que requieren manejar voltajes altos y movimientos precisos, pero como en mi caso estoy usando un maximo de 5V con 200 miliamperes y a falta de transistores utilizaré una implementación wannabe pero efectiva del puente H.

Para ello utilizaré:
  • 2 circuitos integrados NE555 para aprovechar sus flipflops como transistores
  • 2 push o fuentes para crear interrupciones
  • 2 diodos rectificadores 1N4004 
  • 2 capacitores de .1 microFaradios
  • 2 resistores de 220 Komhs
  • Algo de cable

El diagrama de conexiones seria algo así:

Normalmente se usan reistencias pull-up si el disparador sera con negativo o pull-down si el disparador sera con positivo. Esto para que mande las señales de voltaje correctas, pero como el voltaje y amperaje que utilizaré son minimos, pués me di el lujo de utilizar resistores "normales".

Ambas salidas del motor de corriente directa van a un 555 y el motor esta compartiendo señal mediante los diodos rectificadores, para regular que el voltaje sea similar en ambos lados, obviamente no al mismo tiempo.

Por ultimo puedo decir que al utilizar este tipo de puente H ( si es que se  le puede llamar asi ) también se pueden usar las 4 variaciones. Avanza,frena por inercia, frena bruscamente, retrocede.

Una vez armado nos quedaria más o menos de esta forma:



Solo faltaria conectar el motor a las terminales de ambos lados para que funcione.
Y así es como se ensambla un puente H improvisado para motores tipicamente llamados " de juguete " que no son mas que motores de corriente directa. 



Interrupciones en arduino

¿Que es una interrupción?

Las interrupciones se refieren al paro inmediato del funcionamiento común del sistema. Esto es muy útil para hacer que las cosas sucedan automáticamente en programas que sean sensibles a estados, también pueden ayudar con problemas de temporizadores. También puede servir para detener completa o parcialmente el sistema en caso de que algún evento especifico suceda.

Un ejemplo de como utilizar estas interrupciones sería el de un lector de datos por ejemplo un sensor de temperatura. Suponiendo que al inicio del programa se toma lectura de la temperatura después se llama una función que cree la estadísticas, se empaqueta, se manda por algún protocolo seguro y después hace otra lectura. Ahora bien si llegamos a tener una aumento de temperatura inesperado queremos que tome esa temperatura y la envíe, pero esto es un problema ya que el proceso de creación de estadística, empaquetado y envió es tarado, más sin embargo si se le asigna una interrupción a la lectura de temperaturas el programa entero es interrumpido y se ejecuta la lectura para después enviar los datos que son más importantes.

También si tenemos un sistema que este enviando datos cualesquiera para monitorearlos, podemos asignar una interrupción que se accione con un botón para detener el programa y poder utilizar los datos, o para dejar de recibir más datos, según sea el caso.

¿Cómo usar una interrupción con el arduino?

La mayoría de las placas arduino tienen dos interrupciones externas.

   Interrupcion externa 0 : ( pin digital 2 )
   Interrupcion externa 1: ( pin digital 3 )

Esto para el arduino UNO.

Para usar interrupciones tenemos la función:

 void attachInterrupt( interrupcion, funcion, modo )

Dicha función especifica que función se invoca cuando se produce una interrupcion externa, si ya existia una función adjuntada al pin se substituye por la nueva.

Los parámetros de esta función son:

  •   interrupcion: el número de la interrupción ( Es un int y puede ser 0 o 1 esto para asignar el pin a usar ).

  •   funcion: Es la función que se invocara cuando la interrupción suceda, esta funcion NO debe tener parametro NI tampoco devolver nada. Comunmente se le conoce como  rutina de interrupción de servicio.

  •   modo: Esto define el criterio de la interrupción es decir cuando se considerara como interrupción. Existen 4 constantes predefinidas para poder usarlas como modos. 

   LOW Se dispara la interrupción cuando el pin tenga un valor bajo ( Cero lógico o LOW ).


   CHANGE Se dispara la interrupción cuando el pin se tenga un valor alto ( Uno lógico o HIGH ).

   RISING Se dispara la interrupción cuando el pin pase de valor bajo a alto ( LOW a HIGH | 0 a 1 ).

   FALLING Se dispara la interrupción cuando el pin pase de valor alto a bajo ( HIGH a LOW | 1 a 0 ).


Como dato queda decir que también se cuenta con funciones para activar o desactivar el uso de las interrupciones. Con tan solo usar la función noInterrupts() se asegura de que no se interrumpa la porción de código que le sigue a esta función, también esta la función interrupts() que hace lo contrario, ya que permite las interrupciones.Esto puede ser útil dependiendo el caso y se maneja similar a los hilos y candados.
Podríamos tener una porción de código así:

     void loop() {
        noInterrupts();
        FuncionCritica();
        interrupts();
        funcionComun();
        funcionComun2();
   }

Ahora vemos como seria el diagrama de conexiones para realizar una prueba.

Basicamente es un push button, un led y un par de resistencias acomodadas de manera que  se puedan utilizar con el siguiente codigo.


De no utilizar las interrupciones, el led tendria un comportamiento un poco raro, ya que pudiese no captar bien las señales que se le envian.
Esto es muy familiar respecto a los threads y los candados.

Sistemas operativos embebidos

¿Qué es un sistema operativo embebido?

Se puede definir como un sistema computacional que realiza una función espesifica o es diseñada con una aplicacion de software embebida. Dichos sistemas utilizan sistemas operativos en una ROM, tal como si fuera un disco duro en el uso de la pc.

¿Qué hace bueno a un sistema operativo integrado?

Son modulares, escalables, altamente configurables, tienen soporte para CPU y aceptan controladores de dispositivos perifericos.

Algunos ejemplos de estos sistemas operativos embebidos son:


  • OS/2 ( eComStation ) Este sistema fue uno de los más usados para sistemas embebidos, empezo a utlizarse para cajeros automaticos pero ya no es común ver dichos cajeros con este tipo de sistema.


  • Windows CE Al igual que OS/2 también fue muy usado en cajeros automaticos, aunque también llego a utilizarse en sistemas de navegación por mapas y se utilizo en la videoconsola Dreamcast, la cual no fue muy buena.






  • Windows XP Embedded Es básicamente el sistema operativo windows XP pero con la fortuna de que se pueden elegir las funciones y servicios que se necesitan, este sistema operativo es el que usan cajeros automáticos, expendedores, puntos de venta, algunas consolas y maquinas de videojuegos.




  • OSEK Este sistema es usado en un consorcio de empresas como un estandar abierto que rige la mitad de la industria automóvil, se puede ver en automóviles como los BMW, Chrysler, Opel o renault.



  • FreeBSD Este sistema operativo no es propio de sistemas embebidos, su versatilidad y su codigo abierto unix-like han permitido a la comunidad realizar proyectos para portarlo a sistemas embebidos.Satisfactoriamente se utiliza en televisores, routers, sistemas de seguridad y fue la base para CellOs.







  • vxWorks Este sistema operativo es un poco diferente ya que pertenece a la rama de RTOS   (real time operating systems ) y se utiliza en muchos dispositivos destacando que fue usado para operar vehículos espaciales.



  • QNX Este sistema fue desarrollado escensialmente para sistemas embebidos y esta disponible para muchas arquitecturas, tiene la capacidad de instalarse diferentes window managers y proporciona características de estabilidad frente a fallos de perifericos y aplicaciones. QNX se utilizo tambien en el Dreamcast.



  • LynxOS Este sistema junto con QNX pertenecen tambien a la familia de RTOS unix-like. Fue desarrollado con para su uso con una arquitectura de intel x86 y en su actualidad funciona con arquitecturas ARM, MIPS y PowerPC.



  • Embedded Debian, básicamente son los paquetes de Debian optimizados para su uso con procesadores menos potentes, RAM de baja capacidad y aplicaciones espesificas. Este sistemas operativo embebido forma parte de los mas importantes bajo el yugo del nucleo linux, ya que es de los mas estables que contienen dicho nucleo.


  • SALE Sonia Arch Linux Embedded, en marzo fue el release de la versión alfa/beta de este sistema operativo integrado. Dicho proyecto tiene un compilador de kernel customizado a partir de la distribución Arch Linux  y cuenta con la posibilidad de manejar el sistema como servidor, monitoreando el sistema via web, además de proximamente incluirle una versión de inteligencia artificial para su uso, muy prometedor y de codigo abierto.





¿Por qué usar un sistema operativo embebido?

Por que permite la multitarea y utilizar diferentes soluciones ya desarrolladas (dependiendo el sistema a usar ) para la solución de problemas, en vez de tener que desarrollar heurísticas para cada sistema embebido que se desarrolle. Son robustos y personalizables y tienen soporte en la web.

Consideraciones

Cuando se va a usar un sistema operativo integrado se deben tener ciertas consideraciones, ¿Qué procesadores son soportados por el OS?, ¿qué necesidades tiene el kernel con respecto al sistema embebido?,¿Tiene soporte para los drivers de los perifericos que necesito?


Gumstix

Los equipos Gumstix se concentran basicamente en dos productos: Gumstrix Overo y Gumstix Verdex. Ambos son SCBs ( single computer boards ).



Dichos equipos ofrecen una amplia gama de funciones para procesar aplicaciones especificas de sistemas ubicuos, capacidad para almacenamiento externo en memorias microSD, implementacion de interfaces inalámbricas para Bluetooth y Wifi, comunicación por puerto de serie, puertos USB, puerto para ethernet. Dichas SCB estan implementadas con Linux para sistemas embebidos.



Básicamente son ordenadores completos en una tarjeta.





Cuando recien se fueron desarrollando estas SCBs las gumstix Verdex presentaban un microprocesador Marvel XScale PXA270 que funcionaba a 400 o 600 MHz, contenian 128MB de memoria RAM.

Las Overo tenian un procesador Texas Instruments OMAP 3505 que se ejecutaba a 750 MHz, contenia 256MB de RAM.




Ambas tarjetas usan sistemas Linux configuradas especificamente para sistemas embebidos, además se pueden agregar modulos adicionales a las SCBs.


Gumstix SDK


Gumstix utiliza un framework de desarrollo llamado OpenEmbedded para completar una compilación cruzada desde las builds del framework, al compilar dichas builds se transfieren el kernel y la imagen del root file system a la gumstix usando cualquier tipo de transferencia, ya sea por ethernet, tarjeta SD o por puerto Serie.




- OpenEmbedded -
 Este framework se utiliza para crear distribuciones (comunmente, pero no obligatoriamente) para sistemas embebidos. Este framework nace a partir de algunos builds de gentoo, y dicho framework se maneja desde git, ya que es open source.


Raspberry Pi




En Febrero del 2012 salio al mercado una placa SBC ( single board computer ) llamada raspberry Pi.




¿Qué es una SBC, qué es la raspberry pi?

Una Single Board Computer es una computadora completa en un sólo circuito, básicamente esta constituida por un microprocesador con memoria RAM, Entradas y Salidas y demás características de un pc cualquiera.
Una SBC no es óptima para el uso cotidiano, más se utiliza para entornos de la industria o para aprendizaje sobre sistemas embebidos en el area de ciencia, tecnológia y electrónica.



Raspberry Pi contiene un procesador ARM1176JZF-S que corre a 700Mhz, contiene 256MB de memoria RAM y tiene ranura para una tarjeta SD para el almacenamiento externo.
Comunmente se le incluye el sistema operativo GNU/Linux o RISC OS.

Dicha placa contiene gran potencial a bajo coste, estas son sus especificaciones.





El primer prototipo de la raspberry era muy pequeño y contenia solo 1 puerto USB y 1 puerto HDMI. En su fase de pruebas ya era capaz de ejecutar un entorno operativo demostrando que usar Debian con escritorio ligero era facil.
También se hicieron pruebas con el HDMI ejecutando un video full HD a traves de dicha salida.


Esta placa principalmente es promovida por sus desarrolladores para promover el aprendizaje en python, C, BASIC y perl principalmente.


Ever Medina. Con la tecnología de Blogger.