Vúmetro hecho con Atmega 328P
& expansores de bits (PCF8574p).
& expansores de bits (PCF8574p).
Buenas, soy el progenitor de este proyecto. Se trata de un vúmetro o también llamado visualizador de música con leds. Este proyecto contiene un módulo bluetooth, mando infrarrojos y un sensor de temperatura. Y esta controlado con Arduino y dos expansores de bits:
Aquí tenemos el Gant de este proyecto:
Diagrama de estados:
A continuación me dispongo el funcionamiento y el proceso de creación de este proyecto.
Principalmente centré en amplificar la señal de la música, que sale desde un conector jack esterio de 6,3 mm. Aquí os dejo una foto de este. Como bien pone en la imagen al tratarse de un funcionamiento no balanceado se tiene que puentear el anillo y el vástago de este conector.
Esto yo lo e echo con un LM324,
.
Pero hay muchas maneras de amplificar la señal. aquí dejo una imagen del esquema de dicho amplificador. Ya que este solo necesita 5 voltios como se indica en su hoja de datos.
Aquí está el esquema que he montado yo.
Importante antes de meterle la salida de este al arduino, poner un diodo para que no elimine las tensiones negativas, para así no romper nuestro micro-controlador. Y los condensadores que hay en este esquema es para el rizado, ya que para una lectura mejor del Arduino, la señal que se le mete tiene que se con el menor rizado posible.
Después me centré en como hacer un amplificador de audio para un altavoz, que sería por donde se escucharía la música.
Hay muchísimos amplificadores de audio, el que elegí yo que es muy fácil y no me dio muchos problemas es el TDA2228M. ¡Una maravilla en DIP8! Aliméntalo con un rango de tensión de 1.8 a 15 voltios, úsalo en mono, stereo o bridge, para ordenadores, teléfonos, MP3, o guitarra. Es sencillo de montar.
En primer lugar, su configuración modo stereo, típico. El circuito de pruebas recomendado por el fabricante es:
Con solo 4 resistencias y 7 condensadores!!!!!!!!!
Pero claro, ahí no tenemos por ejemplo un control de volumen. He quí una sugerencia, se puede usar un potenciómetro doble para regular ambras entradas a la vez:
El esquema que utilicé yo es un esquema as sencillo que saca menos ruido y es muy parecido al del fabricante:
Mientras estaba haciendo pruebas con este TDA, descubrí que se puede hacer una radio. Aquí les dejo un video de este mini-invento:
Ahora tras meterle la señal al arduino por un pin Analógico, hay que asegurarse de que este lee bien la señal que le llega.
Después de asegurarse de que a la señal que le llega al arduino es la que quería, y tener un amplificador de música, continué con el expansor de bits (PCF8574P).
Aquí os está el esquema que he utilizado con este pcf.
Como se puede ver en el esquema, a este expansor hay que conectarle solo el SDA y SCL a los pines A4 y A5 del arduino y lo demás es jugar con los 3 bits de dirección (A0, A1 y A2).
Y se puede utilizar tanto como para leer como para escribir.
El único inconveniente de este pcf es que no trabaja con Pwd, solo trabaja a nivel ALTO (5v) o BAJO (0v).
Las lineas de dirección se controlan de la siguiente manera:
Esta página explica todo bien a cerca de este pcf, que lamentablemente poca gente conoce y es muy útil para la electrónica.
Para el programa del arduino quí se los dejo, este programa essimplemente para encender los leds:
#include <Wire.h>
// address of PCF8574 IC on TWI bus
#define IO_ADDR (0x40 >> 1) // esta lína cambia dependiendo de cuántos pcf vallas a utilizar
//Y se la configuras con las de dirección si conectas los 3 pines a masa sería (0x40)
//si el A1 lo conectais a 5v y el A2 y A3 a masa sería (0x41)
//y así sucesivamente dependiendo de como conectas las lineas de direccion
void setup() {
Wire.begin(); // initialize the I2C/TWI interface
}
void loop() {
static unsigned char data = 0x01; // data to display on LEDs
static unsigned char direc = 1; // direction of knight rider display
// send the data to the LEDs
Wire.beginTransmission(IO_ADDR);
Wire.write(~data);
Wire.endTransmission();
delay(70); // speed of display
// shift the on LED in the specified direction
if (direc) {
data <<= 1;
}
else {
data >>= 1;
}
// see if a direction change is needed
if (data == 0x80) {
direc = 0;
}
if (data == 0x01) {
direc = 1;
}
}
Y aquí el resultado obtenido con todo lo hecho hasta el momento.
Tras poner esto expansores tuve que sustituir los leds por tiras de leds, debido a esto me vi obligado a poner mosfet para cada tira, este mosfet debía de soportar los voltios de votos los leds y la intensidad de estos. Elegí: 2N7002
Transistor Mosfet canal N versión SMD.
N-MOSFET | ||
unipolar | ||
60V | ||
800mA | ||
200mW | ||
SOT23 | ||
7.5Ω | ||
SMD |
Después de tener toda la base del proyecto hecha, tenía que hacer el esquema final uniendo todo lo que he ido construyendo en estas semanas (LM324, TDA2822M & PCF8574P).
A aquí esta la imagen de mi placa final por las dos caras en ARES.
Y en 3D.
Para hacer las tiras de los leds con la fuente tuve que hacer unos pequeños cálculos, ya que el transformador que tengo saca 38 Voltios y 3 Amperios.
Los leds que puse yo son de 5 mm, con lo cual tenía que calcular su consumo y los v que necesitan.
Tuve que hacer los cálculos para saber la tensión que necesita cada tira de leds para encenderse:
Led Rojo : c4v--- 20mA.
4*8= 32 Voltios para cada tira y 20mA, porque están en serie.
Led Verde y Azul : 3'3v----- 20mA.
3'3*8= 26,4 Voltios para cada tira y 20 mA, ya que están en serie.
Led Blanco y Amarillo : 2'4v---- 20mA.
2'4*8= 19'2 Voltios para cada tira y 20mA, porque están en serie.
Aquí veemos una foto de la placa de las tiras de leds final. Y su PCB.
Como las tiras están en paralelo, la tensión es la misma. Pero en este caso la intensidad ya no es la misma, sino que es 20 mA * 16 tiras= 0'32 A.
Sabiendo la intensidad y los voltios que necesita cada tira para iluminarse, tuve que encontrar una forma sencilla de regular la tensión.
La forma más sencilla que encontré es con resistencias:
Y también tuve los vatios que necesitan estas, para que no se calienten:
Fuente echa en placa PCB.:
Primero tenemos el puente de diodos, que convierte la señal de alterna a continua.
Después esta el condensador, que es de 63 voltios y 2200 uF, la función de este es establecer el rizado.
De esta manera consigo que en los borners de este condensador haya 38 voltios.
Otra forma de hacer la fuente es:
Ahora que ya tenemos todo el proyecto hecho, toca controlarlo con bluetooht, con can mando infrarrojos y colocar la NTC.
Vamos a empezar a ver el control con el bluetooth:
Hay dos módulos bluetooth el HC-06 y ek HC-05.
Este módulo es muy barato, podemos encontrarlo en cualquier tienda de electrónica; Miki.pro, ebay, Raite...
Tanto para uno como para otro la contraseña para vincular estos con el teléfono móvil suele ser "1234" o "0000".
Primero empecé creando la aplicación para el móvil desde la página de app inventor. Es una página realmente sencilla para hacer aplicaciones para el móvil. Yo me base principalmente en el siguiente vídeo.
Tras hacer la aplicación, la descargué al móvil, e intenté conectarme con el módulo bluetooth. Al principio me falló, ya que no tenía invertidos el Rx y el Tx del bluetooth con los del Arduino (estos deben de ir invertidos).
Aquí tenemos el funcionamiento de este módulo controlando los led:
Ahora vamos a ver una breve explicación sobre el mando infrarrojos.
He elegido utilizar este mando porque es sencillo de utilizar, y es muy barato. Como se ve en la siguiente imagen vale solo 1,77 Euros.
Tiene solo 3 patillas: Vcc, Gnd y la Salida que se conecta al arduino:
Existen multitud de dispositivos que utilizan tecnología infrarroja para control remoto, por ejemplo los mandos de las televisiones. Su funcionamiento se basa en la emisión de secuencias de pulsos de luz IR que transportan un código de N bits que identifica la tecla pulsada.
Existen muchos protocolos de comunicación infrarroja, nos vamos a centrar en el protocolo NEC, que es el que usan los mandos universales.
El protocolo NEC utiliza pulsos distancia para la transmisión de un mensaje. Este protocolo funciona a una frecuencia de 38kHz, es decir, los pulsos duran 562.5 μs. El mensaje se transmite de la siguiente forma:
- 0 lógico: Envía un pulso de 562,5 μs, seguido de un espacio de 562,5 μs de duración (tiempo de transmisión de 1,125 ms)
- 1 lógico: Envía un pulso de 562,5 μs seguido de un espacio de 1.6875 ms de duración (tiempo de transmisión de 2,25 ms)
Cuando pulsamos un botón de un mando, se envía la siguiente cadena de pulsos:
- Una ráfaga de pulsos de 9 ms.
- Un espacio 4,5 ms
- La dirección para el dispositivo receptor (8 bits)
- El inverso lógico de la dirección (8 bits) (para comprobar errores)
- El comando (8 bits)
- El inverso lógico del comando (8 bits)
- Un pulso de 562.5 μs para indicar el final de la transmisión del mensaje.
A continuación se ilustra con una imagen para una dirección 00000000 y un comando 10110101:
El código para el Arduino, es este; este lo e utilizado para encender o apagar un led con la misma tecla:
#include <Arduino.h>
#include <NECIRrcv.h>
#define IRPIN 4 // pin that IR detector is connected to
int led = 13;
static int aux = 1;
NECIRrcv ir(IRPIN) ;
void setup()
{
pinMode(led, OUTPUT);
ir.begin() ;
}
void loop()
{
unsigned long ircode ;
while (ir.available()) {
ircode = ir.read() ;
Serial.print("got code: 0x") ;
Serial.println(ircode,HEX) ;
if(ircode == 0XBF40FF00){ /*en nuestro caso, corresponde con el botón encendido/apagado del mando*/
if(aux == 0){
digitalWrite(led, LOW);
aux = 1;
}
else{
digitalWrite(led, HIGH);
aux = 0;
}
}
}
}
Y aquí tenemos el resultado uniendo mi proyecto y el mando:
Y por último coloqué la NTC (Sensor de temperatura).
Como se puede ver este sensor tiene 3 patillas; Vcc, Gnd y la Salida para el arduino.
- DHT11 es un sensor digital de humedad y temperatura.
- Este sensor esta diseñado para medir temperatura y humedad de una forma muy sencilla. Es compatible con MCU de 8 bytes. Este módulo es muy útil.
- Panel Negro.
- Sensor incluye resistencia, lo que facilita su conexión.
- Respuesta rápida, gran capacidad anti-interferencia y duradero.
- Alcance de transmisión de señal: 20 mts.
- Energía 5 v
- Rango de temperatura: 0 – 50 ºC.
- Rango de humedad: 20 – 90 % de humedad realtiva.
- Dimensaiones: 0,98 x 0,63.
- Peso: 9g
Para su conexión tambien es sencilla como veemos en el siguiente esquema:
Código para arduino de este sensor:
// Internet de las Cosas
// www.internetdelascosas.cl
// Sketch de prueba para sensores DHT humedad / temperatura
// Escrito por @joniuz basado en el sketch de Ladyada
// Libreria para Sensores DHT
#include "DHT.h"
#define DHTPIN A1 // Pin del Arduino al cual esta conectado el pin 2 del sensor
// Descomentar segun el tipo de sensor DHT usado
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Diagrama
// Pin 1 Sensor a +5V de Arduino
// Pin 2 Sensor a HDTPIN (en este sketch es el pin 2)
// Pin 4 Sensor a GROUND de Arduino
// Resistencia de 10K desde Pin 2 de sensor a Pin 1 de Sensor o +5V
// Inicializa el sensor
DHT dht(DHTPIN, DHTTYPE);
// Configura Arduino
void setup() {
Serial.begin(9600);
Serial.println("InternetdelasCosas.cl\n\nPrueba de sensor DHTxx!");
dht.begin();
}
void loop() {
// Espera dos segundos para realizar la primera medición.
delay(2000);
// Lee los datos entregados por el sensor, cada lectura demora 250 milisegundos
// El sensor muestrea la temperatura cada 2 segundos}
// Obtiene la Humedad
float h = dht.readHumidity();
// Obtiene la Temperatura en Celsius
float t = dht.readTemperature();
// Control de errores, valida que se obtuvieron valores para los datos medidos
if (isnan(h) || isnan(t)) {
Serial.println("Falla al leer el sensor DHT!");
return;
}
Serial.print("Humedad: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println(" *C ");
}
Y aquí esta el resultado obtenido:
Bib-liografía:
- http://proton.ucting.udg.mx/expodec/abr99/e43/e_43.html
- http://www.ti.com/lit/ds/symlink/lm124-n.pdf
- https://electronicaengeneral.wordpress.com/2014/03/25/tda2822m/
- http://pdf.datasheetcatalog.com/datasheet/SGSThomsonMicroelectronics/mXqwxzy.pdf
PCF8574P
- http://startingelectronics.com/beginners/start-electronics-now/tut17-electronic-dice
- http://tronixstuff.com/2011/08/26/tutorial-maximising-your-arduinos-io-ports/
- http://arduino.cc/en/Reference/Wire
- http://labdegaragem.com/profiles/blogs/tutorial-sobre-pcf8574-e-como-utiliz-lo-com-arduino
- http://www.nxp.com/documents/data_sheet/PCF8574_PCF8574A.pdf
MOSFET
- https://www.miki.tienda/mosfet.html
- http://www.tme.eu/es/details/2n7002/transistores-con-canal-n-smd/fairchild-semiconductor/
TIRA DE LEDS
APP INVENTOR
- http://diymakers.es/arduino-bluetooth/
- http://androidcontrol.blogspot.com.es/
- http://www.ebay.com/itm/1PCS-Slave-HC-06-Wireless-Bluetooth-Transeiver-RF-Master-Module-for-Arduino-/201303249044
- http://es.aliexpress.com/item/For-Arduino-Infrared-wireless-remote-control-kit/1061976188.html
- http://electronicavm.net/2011/09/20/recepcion-ir-con-arduino-protocolo-nec/
- http://www.davidmiguel.com/arduino/dia-3-sensor-ir/
NTC
- http://chioszrobots.com/2013/07/15/dht11-digital-temperature-humidity-sensor-module-keyes/
- http://www.micropik.com/PDF/dht11.pdf
- http://www.hobbyist.co.nz/?q=documentations/wiring-up-dht11-temp-humidity-sensor-to-your-arduino
MÚSICA UTILIZADA
No hay comentarios:
Publicar un comentario