jueves, 13 de abril de 2017

Controlar un timbre, zumbador o buzzer pasivo con Python

En este post os voy a mostrar como usar los puertos GPIO y un pequeño programa en Python para controlar un timbre piezoeléctrico pasivo(también llamado zumbador o buzzer). aquí os dejo una imagen del que he usado yo.



Como podéis ver se parece mucho, pero mucho a un buzzer activo, luego os explico la diferencia.
Para ello voy a usar una placa protoboard, cables de conexión, 1 timbre activo, 1 resistencia (opcional, según el modelo de timbre que tengáis) y mi RaspberryPi. Si sois nuevos en esto os aconsejo leer los anteriores posts (del uso de los GPIO en el apartado Programación/GPIO).


1. Que es un buzzer pasivo


No soy ni mucho menos un experto pero voy a intentar explicarlo de forma fácil (si alguien sabe dar una mejor explicación por favor que haga un comentario en el blog).
Al igual que un buzzer activo se trata de un altavoz, pero nos permite generar tonos ya que debemos enviarle una señal ampliada o modificada para que emita un sonido. A efectos prácticos, el buzzer activo emite sonido solamente conectando el polo positivo y negativo, mientras que el buzzer pasivo emitirá un sonido al enviarle una señal modificada (amplificada). Si conectamos el buzzer pasivo como en el ejemplo del buzzer activo este no emite sonido. Tendremos que modificar la señal de salida para obtener un tono. Lo veremos con un ejemplo muy muy fácil.

2. Organización del circuito

En primer lugar vamos a ver como nos debe quedar nuestro circuito para poder controlar un timbre. Aquí os dejo una imagen para que veáis la distribución que he usado, tened cuidado y respetad la posición de los polos positivo y negativo del timbre (generalmente está indicado, en caso contrario la conexión más larga indica el polo positivo)



si no habéis leído los anteriores post sobre leds os recomiendo hacerlo (sobretodo el primero, en el que detallo el uso de las conexiones y hay un apartado al final sobre el uso de las resistencias, aquí está el link). 
Bien, como podéis ver uso el pin número 6 (cable azul para tierra, etiquetado como GROUND) y el pin número 12 (cable rojo para el positivo, etiquetado como GPIO18). En mi caso conecto el timbre directamente si ninguna resistencia. Si vuestro timbre requiere resistencia o no estáis seguros os recomiendo  usar una resistencia de 470 omnios (colocadla en el cable positivo antes del timbre). Si habéis puesto una resistencia y el timbre no suena o suena muy bajo, sustituid la resistencia por una menor. 

lunes, 3 de abril de 2017

Controlar un display de un dígito y siete segmentos con un chip 74HC595

En el anterior post vimos como controlar un display de forma directa con la Raspberry Pi. Pero aveces es necesario ahorrar en salidas GPIO, para usarlos con otros fines o bien porque nuestro dispositivo tiene un número de salidas limitado. En este post os voy a mostrar como usar un chip 74HC595 para controlar el display con solo 5 puertos GPIO y unos ejemplos en Python para poder practicar. El display es el modelo SMA42056



Como podéis ver el dispositivo dispone de 7 segmentos, más un punto en la parte inferior derecha, iluminados por led. Dispone de un total de 10 conexiones (5 en la parte superior y cinco en la inferior para hacerlo funcionar). 

El chip 74HC595 es lo que en inglés se llama un Shift Register, este modelo es del tipo 8 bits serial-in, parallel-out, o sea, que acepta la entrada de de 8 bits en serie y su salida es en 8 pines paralelos (no nos pongamos nerviosos... que ya lo iremos viendo). y la función básica es la de poder "multiplicar" los pines. Aquí tenéis una imagen

Para este ejercicio vamos a necesitar, cables de conexión, 1 display de un dígito de 7 segmentos, el chip 74HC595 y la RaspberryPi. Si sois nuevos en esto os aconsejo leer los anteriores posts (del uso de los GPIO en el apartado Programación/GPIO, y el anterior post para controlar el display de forma directa).


1. Distribución de las conexiones y los segmentos del display


Vamos a ver como se distribuyen las conexiones del display en relación con los segmentos del mismo, lo mejor es que veáis la siguiente imagen

como podéis ver, el display tiene un total de 10 pines, el pin 3 y 8 son los pines del cátodo o ánodo común (según el tipo de display que tengamos que se identifican con la letra K), sería el pin de tierra. Los pines 1, 2, 4, 5 en la parte inferior y los pines 6, 7, 9 y 10 en la superior son los polos positivos de cada uno de los segmentos del display, aunque se llame display de 7 segmentos, en total hay 8, ya que hay que tener en cuenta el punto decimal (DP) en la parte inferior derecha. En la imagen podéis ver la correspondencia entre los pines y los segmentos.


2.Distribución de las conexiones del chip 74HC595


Ahora vamos a ver como se distribuyen las conexiones de nuestro chip (a esto se le llama el pinning), aquí tenéis una imagen



para no equivocaros con la orientación del chip fijaos en la muesca con forma semicircular en un extremo del chip. Vamos a ver los pines que vamos a necesitar para los ejemplos que os muestro luego. En primer lugar las entradas (todas en la parte derecha de la imagen): MR, SHCP, STCP, OE, DS, VCC; y ahora las 8 salidas, Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7, todas ellas se encuentran en el lado izquierdo del chip excepto el Q0; y finalmente el pin GND también en el lado izquierdo.
Las entradas sirven para enviar la información al chip y que se pueda almacenar, y las salidas permiten enviar a otro dispositivo (en este caso un display) la información necesaria para que este se ilumine.
Para saber más sobre el funcionamiento de este chip os dejo el siguiente link

https://drive.google.com/file/d/0BzaKjvCRihgbNFVEOUY5NWRTSmc/view

3. Organización del circuito


En primer lugar vamos a ver como nos debe quedar nuestro circuito para poder controlar un display de un dígito. Aquí os dejo una imagen para que veáis la distribución que he usado, tened cuidado que en este ejercicio hay mucho cable.



si no habéis leído los anteriores post os recomiendo hacerlo.
Bien, ahora podría hacer una larga descripción de como he realizado el cableado (lo que sería bastante aburrido de leer) creo que es mejor usar una tabla para hacerlo más sencillo

Raspberry Pi Color cable Chip 74HC595 Color cable Display
GND negro GND (pin8) negro pin3 (K), pin 8 (K)
3V3 rojo Vcc (pin16)
GPIO17 verde DS (pin14)
GPIO27 gris claro STCP (pin12)
GPIO22 naranja SHCP (pin11)
GPIO25 amarillo MR (pin10)
SPISCLK (GPIO11) azul OE (pin13)
Q0 (pin15) lila pin1 (e)
Q1 (pin1) fucsia pin2 (d)
Q2 (pin2) azul oscuro pin4 (c)
Q3 (pin3) verde claro pin6 (b)
Q4 (pin4) azul claro pin7 (a)
Q5 (pin5) gris oscuro pin9 (f)
Q6 (pin6) naranja oscuro pin10 (g)
Q7 (pin7) amarillo oscuro pin5 (DP)

fijaos que el cable negro (GND) va conectado a un pin del Chip 74HC595, y a dos pines del display. El resto de conexiones creo que son bastante sencillas las que van de la Raspberry Pi al Cip y las que van del Chip al Display.
Tened en cuenta que si usáis otro modelo de chip o display las conexiones pueden ser diferentes, consultad la documentación técnica para no equivocaros. Por otro lado es mejor que os aseguréis que en la pestaña Interfaces de la pantalla de Configuración de Raspberry Pi, no tengáis activado el SPI, el I2C, etc. ya que vamos a usar pines GPIO que pueden tener varias funciones al activarlos.