domingo, 21 de abril de 2013

POST#6: Sensor de gas y temperatura portátil de bajo costo con LCD 16x2 controlador por PIC16F88 y batería recargable.


Objetivo: 

Al cursar las distintas materias de la universidad me tope con proyectos electrónicos que fueron asignados como prueba de los conocimientos adquiridos en el tiempo de estudio, en este caso les traigo uno de los proyectos el cual tenia la premisa de ser una versión de un producto funcional, con acabado para la venta y que solventara alguna problemática existente en nuestro entorno.

A que me encamine en el diseño y construcción de un Sensor de Gas y Temperatura portable, que sea recargable con facilidad y que el mismo sea controlado mediante el uso de un microcontrolador PIC ejecutando algoritmos en lenguaje C de control, en cuanto a la etapa de potencia de la entrada de alimentación se basa en el regulador de voltaje LM7805 de voltaje fijo a 5V, con un LM317 en modo regulador de corriente  permitiendo solo el paso suficiente de la misma para cargar la batería a un 10% de su capacidad de corriente y al mismo tiempo de un punto anterior al LM317 se toma la alimentación para el dispositivo sin ninguna restricción de corriente. Con esto obtenemos una carga segura que no destruye la integridad de la batería y alarga su vida útil. Cuando se encuentra conectado al cargador se enciende el LED de carga amarillo ademas de que el dispositivo en modo carga puede ser usado sin problemas mientras se  muestra en todo momento en pantalla el estado de la carga al estar encendido.

El sensor MQ4 al iniciar la lectura de gas necesita de un pre-calentamiento del mismo, esto para que los componentes internos se calienten y ocurra un proceso químico que detecte el gas en el lugar. El dispositivo muestra en pantalla en todo momento el estado del gas y la temperatura en el lugar, como así también la cantidad de carga de la batería.

La carga de la batería en un estado de completa descarga, necesita de al menos de 11 horas seguidas de alimentación del toma corrientes de 110V con un transformador de 110v a 12v AC, o cuando esta la batería a media carga simplemente con observar el estado de la carga en la pantalla. Todo esto sin tener la preocupación de estropearla por sobre carga ya que como es una carga lenta de solo el 10% de la corriente de la batería esta no sufre luego de estar completamente recargada simplemente pasaría a un estado de carga flotante.

Al terminar el proyecto propuesto se cumplió con todas las exigencias del curso logrando la máxima puntuación para el mismo.


Materiales principales utilizados:
  • 1 x PIC16F88. (Muestra gratis obtenida gracias a Microchip)
  • 2 x Pulsadores - Para control manual desde el frontal.
  • 1 x Baquelita para el montaje.
  • 1 x Sensor MQ4 - Sensor de gas natural.
  • 1 x LCD 16x2 - Para visualización del menú, estado del dispositivo y configuraciones. 
  • 1 x LM7805 regulador de voltaje para la lógica de control.
  • 1 x LM317 regulador de corriente para la carga de la batería. 
  • Switch pequeño simple color negro.
  • Caja para prototipos de calidad tamaño mediano plástica color negro.
  • 4 x Patas de goma.
  • LM35 - Sensor de temperatura para controlar el ventilador según se necesite.
  • 1 x Batería Recargable 8.4v ni-mh 200 mAh.


Microcontrolador PIC16F88.MQ4 Sensor de Gas
LM7805 Regulador de voltajeLM317 Regulador
LM35 Sensor de temperatura.QC1602A LCD 16x2.
74HC164

Esquemas de Conexión de algunas partes del proyecto:

LM317 según datasheet.PIC16F88 según datasheet.
MQ4 según datasheet.LM35 según datasheet.
LCD 3 pines.74HC164 según datasheet.

Esquema Completo

Diagrama de proyecto:

PCB de LCD con 3 pines.PCB de Lógica de control.
PCB de pulsadores de control.PCB de Sensores de gas y temperatura.
PCB completo.
Librerías y algunas rutinas del código fuente desarrolladas para el proyecto:


///////////////////////////////////////////////////////////////
// adc
///////////////////////////////////////////////////////////////
void adc(void)
{
   ADC_1_LM35   = 0;
   ADC_2_MQ4   = 0;
   ADC_3_SUPPLY   = 0;
   ADC_4_BATT   = 0;
   set_adc_channel(1);  //BATT CANAL 1 (LM35)
   delay_us(TIEMPO_DELAY);
   value = read_adc();  //lee el valor del ADC y lo guarda en
                        //el registro adc
   delay_us(TIEMPO_DELAY);
   ADC_1_LM35 = Filtro_Analog_LM35((float) (value*(0.48875)));
   //---------------------------------------------------------
   value = 0;
   set_adc_channel(2);  //BATT CANAL 2 (Bateria)
   delay_us(TIEMPO_DELAY);
   value = read_adc();  //lee el valor del ADC y lo guarda en
                        //el registro adc
   delay_us(TIEMPO_DELAY);
   ADC_4_BATT = Filtro_Analog_BATT((float)(value*0.048828125));
   //----------------------------------------------------------
   value = 0;
   set_adc_channel(3);  //BATT CANAL 3 (SUPPLY)
   delay_us(TIEMPO_DELAY);
   value = read_adc();  //lee el valor del ADC y lo guarda en
                        //el registro adc
   delay_us(TIEMPO_DELAY);
   if((float)(value*0.048828125) > 9)
      ADC_3_SUPPLY = (float)(value*0.048828125);
   else
      ADC_3_SUPPLY = 0;
   //---------------------------------------------------------
   value = 0;
   set_adc_channel(4);  //BATT CANAL 4 (Sensor de Gas)
   delay_us(TIEMPO_DELAY);
   value = read_adc();  //lee el valor del ADC y lo guarda en
                        //el registro adc
   delay_us(TIEMPO_DELAY);
   ADC_2_MQ4 = Filtro_Analog_MQ4((float)(value));
   //---------------------------------------------------------
}

///////////////////////////////////////////////////////////////
// adc
///////////////////////////////////////////////////////////////
void adc(void)
{
   ADC_1_LM35   = 0;
   ADC_2_MQ4   = 0;
   ADC_3_SUPPLY   = 0;
   ADC_4_BATT   = 0;
   set_adc_channel(1);  //BATT CANAL 1 (LM35)
   delay_us(TIEMPO_DELAY);
   value = read_adc();  //lee el valor del ADC y lo guarda en
                        //el registro adc
   delay_us(TIEMPO_DELAY);
   ADC_1_LM35 = Filtro_Analog_LM35((float) (value*(0.48875)));
   //---------------------------------------------------------
   value = 0;
   set_adc_channel(2);  //BATT CANAL 2 (Bateria)
   delay_us(TIEMPO_DELAY);
   value = read_adc();  //lee el valor del ADC y lo guarda en
                        //el registro adc
   delay_us(TIEMPO_DELAY);
   ADC_4_BATT = Filtro_Analog_BATT((float)(value*0.048828125));
   //----------------------------------------------------------
   value = 0;
   set_adc_channel(3);  //BATT CANAL 3 (SUPPLY)
   delay_us(TIEMPO_DELAY);
   value = read_adc();  //lee el valor del ADC y lo guarda en
                        //el registro adc
   delay_us(TIEMPO_DELAY);
   if((float)(value*0.048828125) > 9)
      ADC_3_SUPPLY = (float)(value*0.048828125);
   else
      ADC_3_SUPPLY = 0;
   //---------------------------------------------------------
   value = 0;
   set_adc_channel(4);  //BATT CANAL 4 (Sensor de Gas)
   delay_us(TIEMPO_DELAY);
   value = read_adc();  //lee el valor del ADC y lo guarda en
                        //el registro adc
   delay_us(TIEMPO_DELAY);
   ADC_2_MQ4 = Filtro_Analog_MQ4((float)(value));
   //---------------------------------------------------------
}

Imágenes del sensor de gas en fase de construcción:


PCB perforada - Parte lógica.PCB perforada - LCD 3 pines.
Sensor de temperatura y gas parte
de atrás.
Modulo de pulsadores y LED.
PCB conectadas.
Sensor de temperatura y gas
de frontal.

Sensor de temperatura y gas parte
de atrás de serca.

Sensor de temperatura y gas
de lado.

Sensor de temperatura y gas con cajón
exterior prototipo.

Sensor de temperatura y gas dentro 
cajón exterior prototipo.
Caja de prototipo marcada lista para
los cortes con la herramienta dremel.
Caja de prototipo ya trabajada y pulido
los bordes.
Vista de la caja de prototipo frontal.
Vista de la caja de prototipo frontal 
y las demás partes del proyecto.
Colocando separadores para la caída
del LCD 16x2.
LCD 16X2 ajustado en la caja de
prototipos.
Vista de frente con LCD.
Colocando modulo de pulsadores y 
LED con sus respectivos separadores
metálicos
Vista de frente con LCD y modulo de
pulsadores y LED.
Extensión de modulo sensor de gas 
y temperatura con alambre de cobre
interno para brindar rigidez al momento
de direccionarlo al punto a medir.

Vista de atrás con LCD , modulo de
pulsadores y  parte lógica como
también el control de LCD con 3 pies.
Ajustando los cables en el interior.
Ajustando los cables en el interior 
con la batería a un costado con
sierre mágico.
LED de carga, Entrada plug de voltaje
de carga y orificio de salida del modulo
de sensor de gas y temperatura.
Interruptor de apagado del dispositivo.Cerrando con todas las partes
acomodadas.
Equipo sin el frontal a un lado.Etiqueta que disimula defectos y
proporciona indicaciones de cada
parte del frontal.
Dispositivo terminado sin frontal.
Imágenes del sensor de gas finalizado:


Foto frontal del equipo con etiqueta.Foto sensor de gas y temperatura.
Foto frontal completa.
Bibliografia, Web, Datasheet:

10 comentarios:

  1. Hola, que buen! Quisiera saber si puedes regalar mas información, como un diagrama del circuito. Te dejo mi correo para que me envies la información por favor nicolas_cristobal@hotmail.com, nic.martinezr@gmail.com Gracias :)

    ResponderEliminar
    Respuestas
    1. Hola nicolas, edite el post y agregue un esquemas más completo.

      Eliminar
  2. Buenas. Nose si se publicó mi anterior mensaje, pero lo escribo de nuevo: Me puedes explicar la conexión del MQ-4? Para que sirve el potenciómetro que has puesto en un pin del sensor?
    Muchas gracias.

    ResponderEliminar
    Respuestas
    1. Buenas amigo, ese potenciómetro ajusta la sensibilidad con la que el sensor mide la temperatura, con lo cual se puede tener un optimo valor para ser leído por el convertidor análogo digital del PIC y la conexión del mismo es como se muestra en el esquema general

      Eliminar
    2. Muchas gracias por responder, John. Aunque algo sucede: lo he conectado como el esquema general, y empieza a salir humo del sensor; es normal o no? porque yo lo he conectado tal como esta el esquema.

      Eliminar
    3. A ver intenta esto donde sale los 3 pines juntos de A H A a VCC 5v y el H que esta solo al otro lado a GND. El sensor se pondrá caliente ya el trabaja con un químico que lo calienta para medir los niveles de gas

      Eliminar
    4. Hola, he intentado como me has dicho; igualmente, como dice el datasheet, pero igual: se sigue quemando. Antes de usarlo, medí la continuidad de sus pines, y estaba ok.
      Lo he probado con 3 voltios, y, de la misma manera, se quema. No entiendo cual es el problema =/

      Eliminar
    5. Bueno mira en la parte de librería y rutinas el MQ4 sensor de gas ejemplo donde dice web de ejemplo 2, en ella se ve mejor como se conecta me comentas cualquier cosa

      Eliminar

POST#20: UPS AC-DC 5V a 4 Amp con cargador de batería de ácido plomo sellada

Objetivo:  Debido a los constantes bajones y cortos programados de la energía eléctrica en mi país Venezuela, he determinado hac...