8/15/2018

CAN bus + Teensy


Saludos,

bueno hace mucho que no público, y bla bla bla bla. No os voy a contar mi vida... Hoy vengo a hablaros de un proyecto en el que estoy trabajando control de la iluminación de un suelo interactivo. El suelo en si ya existía, pero la iluminación de cada baldosa estaba hecha con 3 lámparas de Neon, un RGB sencillo pero muy caro en consumo eléctrico.  La nueva versión esta pensada hacerse con Leds.

Exactamente los test y pruebas las estamos haciendo con WS2811, hubiera preferido usar Neopixels, pero una confusión me hizo pedir estos, la diferencia más gorda es que el neopixel lo controlas led a led, y con la tira de WS2811 va de tres en tres, los rimeros funcionan a 3V y los segundos necesitan 12v.

Para el control de los leds me base en este proyecto desarrollado con la placa teensy 3.2, la librería OctoWs2811 no funciona en Arduino, pero podéis controlar los leds con la misma librería de Adafruit Neopixel. Empleando un teensy y colocándoles un resistencia a la salida de 100 ohms  la salida del teensy me daba para controlar 48 puntos de luz, 144 leds. Para conseguir encender mas leds seria necesario colocar un bufer  a 5v. Los dos intentos que ha he hecho a este respecto han fracaso.

VPWM0 son 5V y el transistor que regula la conmutación BC547
Driver 74LS07D


El primer montaje funciona y la salida es igual que la entrada, pero a 5V con la corriente que proporciona el LM7805, pero dee introducir un cierto retraso que hace que los leds WS2811 no se enteren de la señal que reciben. El segundo montaje debería ser con el 74HTC245, pero en su lugar encontré el 74LS07D que yo pensé que era equivalente, hay que leerse bien los datasheets, porque el comportamiento que tiene es totalmente diferente, sin entrar en detalle los leds no responden, por lo tanto, no funciona.

Llegado a este punto pensé 48 puntos de luz por salida no está nada mal…

Disposición aproximada de las baldosas




Cada baldosa mide 76cm de diámetro y 15,5 cm de alto, llevan un difusor y un cristal de unos 4 cm de grosor, cada baldosa incluye 3 sensores de presión, en total hemos colocado 120. El suelo forma parte de una sala interactiva que tendrá 4 pantallas donde se proyectaran, convirtiéndola en una especie de holocubierta, para hacer experimentos de realidad mixta, VR … Y si puedo hacer una adaptación del Heroquest.





Test con una tira de 48 puntos de luz



Empleando el StadarTest de Neopixel probamos como se vería una de las baldosas y como se hacia la transición, este test está hecho con los leds pegados a la base de la baldosa y empelando una fuente de 3A de corriente a 12 V.  Con una fuente de estas características se pueden alimentar a 96 puntos de luz 288 leds sin problema, con tres baldosas 432 la ultima baldosa fallaba cuando se le envía el color blanco, los tres RGB encendidos.

Pero para la instalación final queríamos un patrón uniforme para “poder hacer algunas animaciones” en las baldosas, las comillas es debido al difusor las animaciones deberían ser muy simples. Hemos optado por hacer un patron  que nos permita colocar los leds de forma uniforme.


Diseño en Sketchup y disposisón de los WS2811


En realidad este post no venía a comentar el proyecto entero, simplemente para controlar las 120 baldosas teníamos que escoger un método de control que nos permitiera control, velocidad de respuesta y protegido a interferencias, y actualizable, este ultimo punto en principio era importante, no me quería ver levantado baldosa por baldosa para instalar la nueva versión de la librería o corregir un error. Baraje la opción de emplear una raspberry pi 3, la librería de neopixel esta desarrollada en Python pero solo me limitaba a usar los pines PWM0 y PWM1. El tiempo de respuesta a  hacer funcionar la librería era alto, unos 5 segundos hasta que comenzaba a funcionar el standtest, la conexión seria mediante cables ethernet, el numero de baldosas que controlaría cada placa seria 2 y en el mejor de los casos 4 usando las dos salidas simultáneamente, si era posible hacerlo. Los sensores de presión irían conectado a una placa que enviaría la información a la raspberry pi mediante I2C.


Con los teensy el control era muy rápido y robusto, había realizado mas pruebas y con la librería OctoWS2811 podría conectar 16 baldosas por teensy, 8 lineas de 38 leds + 16 placas de i2c con la información de los sensores de presión…. Pero como se comunicarían entre ellas, RS232, RS485, I2C, Ethernet… Finalmente opte por Can Bus, es un protocolo normalizado, con inmunidad a interferencias y protocolo para detectar y corregir errores. Además el teensy tiene de serie un puerto para el bus can, lo que lo hacia el candidato excelente para testear.

Siguiendo esta guía, y empleando la librería flexcan, me hice con mis plaquitas  SN65HVD230 o similar por amazon, diseñe la paca en Eagle para integrar todo lo necesario y me lleve un fiasco cuando era imposible enviar nada, no funcionaban. O no he sido capaz de hacerlo funcionar. La otra placa que compre a la desesperada fue la MCP2515, especial para Arduino y que, al conectarla a un teensy, desaprovecharía su bus can, en realidad solo necesitaría el MCP2551, y es posible que lo compre en un futuro y o integre a la placa final.


SN65HVD230
MCP2515


Diferencias entre las placas muchas, las primeras son un simple conversor de niveles eléctricos al protocolo del bus, pero todas las pacas vienen con la resistencia de 120 Ohms conectada, Este protocolo debe tener una resistencia al principio y al final, pero si quieres conectar tres de estas plaquitas, debes quitar la resistencia en la placa del medio. La segunda, placa gestión el bus can, con un conversor de niveles el MCP2510 el U1, esta placa incluye un jumper que te permite colocar la resistencia o no. Por otro lado requiere de unos cuantos cables mas que las primeras.

Teensy 3.2
MCP2515
Pin digital
Int
13
SCK
11
SI
12
SO
10
CS
GND
GND
VIN
VCC


Para emplear esta placa utilice la librería MCP2515 de Arduino y conseguí que entre los dos teensy se enviaran mensajes el siguiente paso era comprobar que podría controlar los 2280 puntos de luz del suelo de forma fluida, no es que deba cambiarse con mucha frecuencia pero si es necesario, que la transición no tenga demasiado delay.


Editado: La librería ha sido modificada si tenéis problemas con la nueva, podéis usar MCP_CAN_lib-master.zip  
                                                                                                                                                                       

A continuación, os dejo unos vídeos de unas pruebas que hecho, ahora toca depurar código para gestionar mejor los paquetes de información, numero de mensajes, etc. Y hacer unos nuevos prototipos para probar “in situ”.




Test de la baldosa con 19 leds en disposición.




Test de control secuencia RGB a 1000Kbaudios y a 500Kbaudios


En estos dos últimos test el teensy de control esta enviando los 2280 mensajes, que supuestamente leerán los teensy distriubuidos, como solo disponía de una tira de leds de 7 leds la secuencia con la que envió el mensaje es primero enciendo el primer punto de luz de todas las baldosas, después el segundo y así hasta 19. La forma que tienen de encenderse los leds es representativo de como se encendería todo el suelo.


Anakleto.

3/15/2018

Pi Zero !!!


Saludos,

ha pasado mucho tiempo desde mi última entrada pero esto no quiere decir que haya parado, simplemente tengo menos tiempo para escribir, y el poco que tengo lo pierdo viendo películas o series en Netflix o similares.

Hoy vengo a hablaros de la raspberry Pi Zero, el último juguetito que he adquirido y que me está permitiendo sacarle partido a estas placas, a la vez que me vienen a la cabeza algunos otros proyectos de hardware.

Estaba buscando para enlazar un artículo anterior sobre la raspberry Pi, y sorpresa que no está publicado, ni terminado….





Resumiendo la Pi Zero es una versión reducida en tamaño de la Raspberry Pi 3, que incluye wifi y bluetooth, evidentemente esta reducción de tamaño conlleva perdida de puertos usb, puertos de Ethernet, conectores Jack…







Pero tiene el tamaño ideal para hacer pequeños robots, muy potentes difícilmente alcanzable con arduinos o similares. Pero para ello es necesario poder conectarle dispositivos de una forma sencilla. Así que lo primero que haces es buscar que hay en el mercado para poder conectar a esta placa.





El video anterior es lo que buscaba, una placa que se financio mediante un kickstarter como otras tantas. Pero en mi opinión no era muy potente, ¿Que ofrecía por 25$?

·         2 puertos analógicos
·         1 puerto serie
·         2 puertos digitales

¿Y ya está?, a parte que aumentaba la placa de tamaño.

Pues ni corto ni perezoso me puse manos a la obra, cosa que ninguna otra placa de raspberry pi había conseguido, con la Zero veo potencial para hacer proyectos hardware.









Os presento Zero Grove Board.


Exactamente en el mismo tamaño que la Pi Zero, tenemos:

·         1 puerto serial
·         6 puertos digitales
·         1 puerto PWM
·         5 puertos Analogicos
·         1 puerto I2C

Todo ello con conectores Grove, para que sea sencillo conectar sus sensores y placas. Pero claro la programación va a ser muy compleja pues es algo que he creado yo y no es estándar. Pues nada que ver, la programación es simple, instalando la librería wiringPi, te permite programarlo en C, en Python y en scratch no lo he probado, pero no veo porque no.








Detalle visto con los conectores.


Los cables que veis en las fotos es que se me quedaron dos pistas sin hacer... Nada importante, son para programar el Pic...


Los puertos digitales, es sencillo, se cablean del puerto de la Pi Zero y arreando, pero para crear los puertos de entrada analógico ha empleado un Pic, concretamente el PIC16F1503, conectado a la Pi Zero mediante I2C, acceder a las entradas analógicas es muy sencillo con la misma librería.






En el vídeo veis, primero que soy un zopenco grabando. El programa es muy simple los puertos digitales están configurado como output, al arrancar el programa toma un muestra de la entrada analógica 2, y en función de la nueva muestra en mayor o menor encienden los leds amarillos o verdes. El sistema responde muy fino, en el pic se hace 5 lecturas y se pasa el valor medio.



Y bueno sin enrollarme mucho mas os dejo el código en c del programa en cuestión.

Anakleto.

12/14/2017

Robot Ecology

Saludos,

hace tiempo que no publico nada nuevo así que retomare el último proyecto en el que estuve involucrado,  el “new roboecology”, pero para ello he de explicar el anterior proyecto. Hace años diseñamos una instalación llamada Roboecology, que pretendía ser un ecosistema de robots, para una instalación itinerante organizada por el CaixaForum  llamada tecnorevolución.




Muchas de las decisiones del diseño no fueron tomadas por mí, me las encontré. Bueno en aquella época 8 años atrás tampoco tenía la misma experiencia ni las mismas herramientas que las que tenemos actualmente. El sistema estaría puesto en una cúpula de 1,20 m de diámetro, donde habría 3 zonas y en la que convivirían tres tipos de robots.


Tres clases de robots las Formicas, Scavengers y una Araña, que actuaban autónomamente en la instalación. Otro robot con cámara era controlado por el usuario y permitía ver la instalación desde el nivel de los “insectos”.




El sistema tenía dos modos de funcionamiento, noche y día, durante la noche los robots permanecían parados y en el monitor de la instalación se pasaba el video de la demo. Cuando se pasaba a modo día, los robots cobraban vida. Las formicas (5 unidades) más pequeñas que el resto de robots se desplazaban por toda la arena “buscando” comida, los Scavenger (2 unidades) simulaban a unos escarabajos que trataban de buscar comida y evitar a la araña, que era la depredadora de la arena. A su vez la araña (1 unidad) se desplazara por la arena y si detecta a uno de los escarabajos tratara de cazarlo.
 




  • Dos motores de vibrador de móvil.
  • Batería: 320mAh litio polímero.
  • Microcontrolador: MSP430F2254; 16kB de memoria flash, 512 bytes de RAM.
  • Comunicación: Tres IR LED/fotodiodo
  • Sensores: IR para detectar la reflectividad del suelo. LDR para detectar el rango de luz en el suelo.
  • Led bicolor para determinar el estado.
  • Formica











·        Dos motores de DC con un mecanismo de reducción mediante seis ruedas en los ejes. Driver L298N.
·        Batería: cuatro baterías AAA. Esto es suficiente para 1,5 a 2 horas de movimiento continuo y autónomo.
·        Microcontrolador: Arduino.
·         Sensores: dos antenas para detectar obstáculos, dos sensores infrarrojos para detectar la araña, LDR para detectar la luz del suelo.
·       Tres leds RGB para determinar diferentes estados.





  • Dos motores de DC con un mecanismo de reducción mediante seis ruedas en los ejes.  
  • Batería: cuatro baterías AAA.
  • Microcontrolador: EMP78P156E
  • Sensores: Tres emisores y un receptor para evitar obstáculos. Antenas para evitar la cúpula y LDR para detectar la luminosidad del suelo.
  • C-9813










  • Estructura de metacrilato
·        19 Servos  Savox SH-0253
·        32 Controlador de servo: HT48F70E
·         Bateria: NiMH 5 celulas 2200mAh 6V
  • Sensores: Ultrasonidos, receptor y emisor  de infrarrojos, LDR para detector la luminosidad del suelo.
  • Minihexapodinno

















  • ·        Un robot e-puck:
          CPU:DSPIC 30F6014A
          2 motores PAP.
          Bluetooth.
          Microfono.
          Altavoz.
          Accelerometro.
          CMOS camera
          IR sensors
          Bateria litio.

  • Una camara Bluetooth a 1.2GHz
  • LDR para detectar la luminosidad del suelo.
  • Epuck

        




La mesa estaba compuesto de un metacrilato retro iluminado por leds, la mesa constaba de un ordenador y un arduino. El ordenador reproducía un video, que estoy tratando de localizar, en diferentes idiomas (castellano, catalán, gallego y euskera)  elegido mediante un selector del arduino. El video se reproducía cuando la instalación estaba parada o en modo “Noche”, con a retro iluminación apagada.






Al ponerse en marcha, modo “Día”, se proyectaba la imagen, que reproducía el robot cámara, para tener una visión semejante a los insectos. Los usuarios podían mover la cámara controlando un joystick que tenía la mesa.


La cúpula que envolvía la instalación se movía mediante un sistema hidráulico que ya venía instalado, simplemente se abría la cúpula para mantenimiento de la instalación, cambiar baterías, substituir robots, etc.






Si os habéis fijado en las características de los robots y sus sensores, la interacción entre ellos era limitada, las formicas eran demasiada pequeñas para ser detectadas, y los sensores infrarrojos empleados por la araña y los escarabajos, no siempre funcionaban, resultado una instalación demasiado caótica, que en ocasiones funcionaba como el guion que habíamos supuesto.


“Las hormigas se mueven en su territorio buscando comida, si atraviesan hacia el otro territorio (Sensor IR inferior) trataran de regresar al suyo. Los Escarabajos buscaran comida y trataran de evitar a la araña, mediante las antenas o el receptor de IR. La araña se moverá por su territorio y si detecta a un escarabajo, mediante el receptor de IR, atacara o simulara que atacará.”



En ocasiones los escarabajos atacaban a la araña, y las hormigas se sentían atraídas por la cámara, debido a que sus sensores IR, las confundían con el cargador de las baterías. En otras las hormigas enloquecían y hacían cosas raras, divertidas pero fuera del guion. Pero pensábamos que para explicar a unos niños el funcionamiento de los robots, era bastante atractivo/divertido.




El programa de estas determinaba la dirección y velocidad dependiendo de la luminosidad ambiente y la temperatura, una forma de realizar un random muy efectivo. Pero no al gusto del cliente. Finalmente este caos fue sustituido por una tediosa secuencia, donde el programa de las hormigas fue capado hasta que hicieran solo lo que debían, los escarabajos igualmente repetían una secuencia, añadiendo algunos comportamientos aleatorios, y la araña hacia siempre la misma secuencia.


No he podido localizar el vídeo de la presentación,  debió perecer con el disco duro, pero si que tengo algunos vídeos de cuando realizaba las pruebas en el laboratorio, la araña no estaba presente. La que habían comprado inicialmente para una instalación mas grande  no cabía en la cúpula.



  


Pero con este vídeo podéis daros cuenta de lo entretenido que eran, sobretodo las formicas.




La instalación no estuvo exenta de problemas,  sin contar los fallos del guion de los robots, los servos de la araña se rompían con frecuencia, las formicas perdían  su programación al descargarse la batería, era debido a que se auto cargaban el programa al iniciar al tener poca batería el programa quedaba corrupto y nada funcionaba. En una instalación itinerante era un problema y la solución comentar una linea de código, pero hasta que di con el error. Finalmente otro problema fue la duración de la instalación,  En principio pensada para un año, quizá dos, duro cinco años con unos robots en muchos casos juguetes, no pensados para durar tanto.


Anakleto.