sábado, 14 de marzo de 2015

Vúmetro, con Arduino y PCF8574p

Vúmetro hecho con Atmega 328P
& 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:

Los diagramas de estados son una técnica conocida para describir el comportamiento de un sistema. Describen todos los estados posibles en los que puede entrar un objeto particular y la manera en que cambia el estado del objeto, como resultado de los eventos que llegan a él. En la mayor parte de las técnicas OO, los diagramas de estados se dibujan para una sola clase, mostrando el comportamiento de un solo objeto durante todo su ciclo de vida.










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.




 Esta señal es de milivoltios, y es la que se mete al arduino, con lo cual hay que amplificarla. Ya que el arduino no lee milivoltios. Pero al amplificar esta señal, hay que tener en cuenta, y es muy importante; que no le podemos meter a arduino tensiones por debajo de 0 ni mayor que 5 voltios. Ya que el arduino solo trabaja con tensiones entre 0 y 5 Voltios.

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).

Este es muy facil de usar, es muy útil a la hora de querer utilizar varias salidas, ya que solo con dos salidas del arduino podemos controlar hasta 16 pcf y estos tienen 8 saldias cada uno, es decir tenemos  128 salidas diferentes con solo 2 líneas del Arduino.
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:





Esquema de mi fuente:




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:
  1. Una ráfaga de pulsos de 9 ms.
  2. Un espacio 4,5 ms
  3. La dirección para el dispositivo receptor (8 bits)
  4. El inverso lógico de la dirección (8 bits) (para comprobar errores)
  5. El comando (8 bits)
  6. El inverso lógico del comando (8 bits)
  7. 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:

LM324

TDA2822M

PCF8574P

MOSFET
TIRA DE LEDS

APP INVENTOR
BLUETOOTH
MANDO BLUETOOTH:


NTC




MÚSICA UTILIZADA



No hay comentarios:

Publicar un comentario