Pages Menu
TwitterFacebook



BANNER2_ALT

Posted by on Abr 15, 2014 in PIC | 26 comments

Control de temperatura con  PIC16F887

Control de temperatura con PIC16F887

Control y sensado de temperatura por medio de PIC16F887

 

Autor: Méndez Cruz Juan Daniel

 

Introducción.

Temperatura

La temperatura es una magnitud física que poseen los cuerpos rígidos, gases etc., y que es la energía cinética que contiene ese cuerpo en un instante de tiempo, en otras palabras es la medida en la que se puede dictaminar si un cuerpo está caliente o esta frio,esto con ayuda de un Sensor de temperatura y esto se hace mediante escalas de temperatura como lo son Celsius, Kelvin, Fahrenheit.

La temperatura es un factor a considerar para todo, ya que un gran incremento en la temperatura por ejemplo de una maquina industrial causaría desperfectos en ella, tan solo en el cuerpo humano un incremento de temperatura mayor  a 36 grados Celsius podría causar un grave daño en el organismo, de la misma manera pasa cuando se tienen temperaturas menores a los 36 grados Celsius se podría caer hipotermia, por ello el control de la temperatura es un factor a considerar, y la industria no es la excepción , ya que la temperatura pude influir en causar daños a la misma máquina o al producto etc.

El Control de temperatura ha sido un tema de interés para la ingeniería, por ello se han implementado diferentes sistemas de control de  temperatura ya sea para aumentar la temperatura si se desea o hacer que esta descienda, para ello se tiene sistemas de calefacción, ciclos de refrigeración , lavado de aire que comúnmente se le conoce como aire acondicionado para mayor informacion puedes visitar http://es.wikipedia.org/wiki/Termorregulaci%C3%B3n.

Este tipo de sistemas de control se pueden encontrar en todo tipo de instalaciones desde hogares, establecimientos, pequeñas empresas e industrias a gran escala. La importancia de estos sistemas de control es tal que siempre se consideran en este tipo de instalaciones.

Por ello es que el control de  la temperatura permite ambientar un cuarto con personas, reducir el daño de maquinas por aumento de temperatura, reducir riesgos de cortos eléctricos, incendios entre una serie de factores tales que hacen que la temperatura sea importante.

Para el control de la temperatura se hace uso de la tecnología de sistemas automatizados dotados de sensores y actuadores los cuales al recibir datos atreves de Sensor de temperatura se decide si la temperatura es la adecuada o es demasiado alta, y en base a estas consideraciones los actuadores entran en acción, ya sean ventiladores, ciclos de refrigeración etc.

Los microcontroladores son pequeños dispositivos electrónicos que son considerados “computadoras dentro de un chip”, obviamente con recursos más limitados hablando de CPU,RAM,ROM, periféricos entre otras cosas, enfocándonos en este caso se hará énfasis en los microcontroladores PIC de Microchip, los cuales tiene distintos módulos que son realmente útiles, como comparadores, conversar analógico digital, PWM entre muchas más, para el caso de control de temperatura se utilizará el convertidor analógico digital.

Para la recepción de datos atreves del controlador a una interfaz gráfica se hace uso de la conexión seria RS232 la cual se describe a continuación:

El protocolo RS-232 es una norma o estándar mundial que rige los parámetros de uno de los modos de comunicación serial. Por medio de este protocolo se estandarizan las velocidades de transferencia de datos, la forma de control que utiliza dicha transferencia, los niveles de voltajes utilizados, el tipo de cable permitido, las distancias entre equipos, los conectores, etc.
Además de las líneas de transmisión (Tx) y recepción (Rx), las comunicaciones seriales poseen otras líneas de control de flujo (Hands-hake), donde su uso es opcional dependiendo del dispositivo a conectar.

 

Objetivos:

  • Desarrollar un sistema automático para la regulación y control de la temperatura mediante un Sensor de temperatura aplicado a una maquina industrial.
  • Poner en práctica los conocimientos de programación de microcontroladores PIC.
  • Dar una  aplicación real  de los circuitos digitales que sean de utilidad.

Material y equipo:

  • Grabador de PIC´s Mini Prog +
  • 1 PIC 16F887
  • 1 Cristal de cuarzo a 20Mhz
  • 10 LED’s de 5 mm.
  • 10 Resistores de 330 Ω. a ¼ watt
  • Cable  de colores 24 AWG.
  • 2 Tabletas de prueba Protoboard.
  • 2 Capacitor Cerámico de 22 uF.
  • 1 Fuente de Corriente Continua.
  • 2 Cables Banana- Caimán.
  • 4 Push button
  • ISIS Proteus v7.6 SPO
  • PIC C CCS
  • Computadora PC
  • Pickit 2
  • 2 sensores de temperatura LM35
  • L293D
  • 2 Ventiladores de 12 V
  • Pantalla LCD 16×2
  • 1 Buzzer

 

Planteamiento verbal del problema.

Se requiere diseñar un sistema que sea capaz de censar la temperatura en tiempo real mostrada por medio de un LCD, donde se tendrán tres rangos de temperatura si la temperatura es menor a 0 °C se considera baja,  la temperatura es menor de a  30 °C se considera temperatura media, pero si esta excede los 40 °C se considera alta y se mandara una alerta , para controlar la temperatura se activaran dos ventiladores con el fin de bajar la temperatura cuando la temperatura es mayor a 20 °C se activara un ventilador para que regule la temperatura y evitar que esta aumente.

Diagrama de Bloques

Se trata de un diagrama ilustrativo que muestra, la interación entre los elementos, como es que se conectan y cómo funciona el circuito se muestra a continuación.

PIC16F887 Control de temperatura

Diagrama de bloques

 

 

Desarrollo.

 Diagrama de flujo.

El diagrama de flujo es un estructura grafica que permite visualizar el algoritmo a seguir para tener una programación mas estructurada del microcontrolador esto con el fin de tener un mayor orden en el diseño del sistema de control de temperatura.

pic16f887 Control de temperatura

Diagrama de flujo

 

A partir del diagrama de flujo se procedió a la programación del microcontrolador empelando el software PIC C CCS, en lenguaje C, el programa se muestra a continuación, con sus respectivos comentarios véase Apéndice parte 1.

 

Diagrama electrico

Una vez depurado  de errores y sintaxis errónea se procedió a compilar el programa el cual no tiene ningún error. Posteriormente se simuló el programa en PROTEUS y se comprobó que efectivamente el circuito de control cumpliera con las especificaciones y objetivos del proyecto, dando resultados positivos de esta manera se paso al siguiente paso, a grabar el chip por medio una tarjeta de desarrollo para el PIC16F887, por medio de el programa TinyBootloader se programo por el archivo generado por el compilador en extensión *.hex

Control

Diagrama electrico simulacion

 

 

En la Figura  se muestra la simulación del circuito el cual consiste en diferentes etapas las cuales son las siguientes:

  • Procesamiento: EL cual se da por medio del microcontrolador PIC16F887
  • Sensores: Por medio de dos sensores de temperatura  LM35
  • Actuadores: Se lleva a cabo por medio de dos ventiladores de 12 V a 1.2 A

Despliegue: Este forma dos partes:

  • Ambiente gráfico en C# mediante comunicación RS232
  • LCD de 16×2 Pixeles

Interacción: Por medio de dos botones dedicados para cada sensor de temperatura.

Alarma: Esta conforma por tres LED´s los cuales fungirán como semáforos, cuando si la temperatura es mayor a 40 °C se activa una alarma sonora.

El sistema funcionara con la interacción de cada una de las etapas, donde el micrcontrolador mostrara una serie de mensajes acerca de el nombre del proyecto, los nombres de los integrantes, como se muestra a continuación.

Control

Pantallas LCD

 

Posteriormente se comenzara la lectura de la temperatura proporcionada por un Sensor de temperatura LM35 , donde el microcontrolador comenzara la lectura del la señal proporcionada por el Sensor  mediante el convertidor analógico, configura a una resolución de 10 bits, lo cual nos proporcionara una buena lectura de la señal.

A continuación se muestra cómo es que se da el despliegue de la señal por medio del LCD, además de la comunicación RS232 esta se simulara por medio de una terminal virtual que es una herramienta que nos proporciona el simulador Proteos, el tema referente al ambiente grafico se tratara posteriormente.

Control

Despliegue de la señal (LCD)

En este caso se muestra una temperatura de 45°C lo cual según nuestro rango de temperaturas es alto por lo cual se mandara una señal de alarma por medio de un buzzer, ademas de que en el semáforo se debe encender el LED rojo, ademas de estar funcionando ambos ventiladores, con el fin de reducir la temperatura.

Control

Simulacion del funcionamiento

 

En el caso de  que se encuentre una temperatura en el rango medio, que debe ser el adecuado, se procede de la misma forma, solo que en este caso solo se acciona un motor, con el fin de eficiente el suministro de energía, el despliegue se da de la misma manera, esto se ilustra a continuación.

Control

Diagrama de control

Para último caso que la temperatura sea menor de 10 °C, el despliegue del LCD, el semáforo,  será de la siguiente manera, hay que resaltar que no se encenderán los ventiladores, ya que  no es necesario.

Control

Diagrama de control

Ese es  el funcionamiento del circuito de control, se han tratado los tres posibles casos, y es de esta manera que el sistema funciona, solo queda abarcar el tema referente a la comunicación R232 que estará dada por un programa en ambiente grafico, programado en lenguaje C# el cual se muestra a continuación.

PROGRAMA C#

En este ambiente de control grafico tenemos que cuenta tres botones uno de ellos nos conecta al Pic y comienza a recibir datos por medio de la comunicación RS232, el segundo botón nos desconecta de dicha conexión y el tercer botón se utiliza para salir de la aplicación asi mismo cuenta con un label el cual nos indica el estado de nuestra aplicación, ya sea conectado o desconectado,  cuenta con tres label mas uno de ellos nos da la fecha y hora en la que se está operando el programa, otro ello nos informa el estado de los motores es decir si se encuentran desactivados, un solo motor activado o ambos motores activados y un tercer laber en el cual nos indica la temperatura actual que se encuentra nuestro dispositivo este tiene la particularidad  de cambiar de color dependiendo del nivel de temperatura es decir podrá estar de color verde, amarillo y rojo, además de estos label cuenta con una caja de texto en la cual se va guardando el histórico de las lecturas de temperatura hechas en nuestra conexión.

Control

Interfaz grafica

 

En esta imagen observamos que la conexión es exitosa y asi mismo tiene una temperatura de 9°C por lo tanto su color es verde y así mismo se encuentran los motores desactivados

Control

Interfaz grafica

 

En esta siguiente imagen observamos que ahora la temperatura es de 19°C por lo tanto nos encontramos en una alerta media  lo cual lo vemos en la imagen ya que es de color amarillo y  se encuentra un motor activado

Control

Interfaz grafica

 

Para esta imagen vemos que la temperatura es de 40°C y por lo tanto nos manda una señal de alerta así como los indicadores color rojo

 

Implementación física

Ya pasada la etapa de programación y simulación del micrcontrolador, verificando que todo se lleve a cabo desacuerdo a lo que se programo se procedió a la parte de la implantación física se fue dado por varios procesos:

  • Implementación  del Circuito
  • Implementación de una maqueta ilustrativa

La implementación del circuito de prueba en Protoboard, con el fin de verificar que el circuito funcione adecuadamente, verificando que opere de manera adecuada.

Control

Circuito de prueba

 

Se abrevara que están conectados todos los elementos del circuito que conforman al sistema de control de temperatura, se verifico que este funcionada adecuadamente, y que la lectura del sensor fuese adecuada teniéndose excelentes resultados.

La parte de los ventiladores se dio por medio de una etapa de amplificación, empleado un chip L293D que es un puente H, ya que los ventiladores funciona a 12 V y a 1.2 , por lo que el microcontrolador no es capaz de suministrar tal energía, se muestra a continuación el ventilador a emplear cuyas dimensiones son [12×12 cm].

Control

Ventilador

Implementación de una maqueta ilustrativa:

Esta se realizo, pensando en ilustrar una edificación que consiste en un cuarto, donde los elementos del circuito de control estén dentro del cuarto, y que el sistema de de procesamiento y el LCD se encentren fuera, con el fin de visualizar de una mejor manera las lecturas obtenidas atreves del sensor. A continuación se muestran algunas fotografías de como se llevo a cabo la construcción de la maqueta.

Control

Maqueta fisica

 

Los resultados obtenidos se muestran en las siguientes imágenes que muestran el proyecto final, ya implementado en su totalidad, y que ya se encentra funcionando, verificando que las lecturas del sensor sean las adecuadas.

Control

Proyecto final

 

Control

Proyecto final

 

Conclusiones.

Méndez Cruz Juan Daniel

El convertidor analógico digital es una herramienta con bastante utilidad para realizar el Control de Temperatura ya que lo que hace es convertir una señal analógica de un Sensor de temperatura en una digital lo útil de esta parte es que sistemas o dispositivos actuales manejan señales digitales, por lo cual son mas fáciles de procesar y de manipular, además de poder ser empleadas la misma información pero ahora para poder emplearla en algún especifico cosa que no se puede hacer con señal analógicas de una manera fácil.

Es decir se puede decidir qué hacer o no atreves de que la señal esta digitalizada, es de esta manera como se tiene el control de temperatura si rebasa ciertos rangos los ventiladores actuaran con el fin de disminuir temperatura.

El PIC tiene este modulo incluido por lo que resulta muy útil para procesar señales de audio, video, se sensores de presión, temperatura, proximidad etc. Gracias a que contiene 14 canales se pueden tener varias señales, las cuales pueden ser monitoreadas, es un dispositivo  útil ya que la modernización es precisamente ya no trabajar con señales analógicas, más bien digitales.

Se puede decir que cualquier dispositivo de control que tenga una entrada analógica digital, y a la salida de este muestre los datos de manera digital ya se da por LCD, o por medio se sonidos o luces contiene forzosamente un convertidor analógico digital.

Pude aplicar mis conocimientos obtenidos a lo largo del curso de circuitos digitales, así de un poco de programación en lenguaje C para poder desarrollar el proyecto, y que resulta ser un sistema que puede llegar  a ser útil para el control de temperatura, obviamente con sensores más precisos ventiladores  con mayor flujo de aire etc., pero el funcionamiento la idea resulto ser funcional e inteligente

 

Chávez  Luna Carlos

El controlador te temperatura  es una aplicación que se puede llevar a cabo con microcontroladores PIC y con un Sensor de temperatura, entre muchas que se pueden desarrollar, ya que estos circuitos son muy versátiles y ofrecen un amplio espectro de posibilidades para poder diseñar circuitos digitales, que pueden llegar a ser muy complejos.

En este proyecto se pudo diseñar satisfactoriamente un sistema de control inteligente y automático que sea capaz de mantener una temperatura no alta para evitar que la temperatura se eleve atreves de la lectura de un Sensor de temperatura y el encendido de ventiladores. Pude aprender a programar los PIC en otro lenguaje en este caso C, que resulta ser más fácil de dominar pero con algunas limitantes frente a ensamblador, también así pude aplicar criterios de diseño que son útiles para poder llevara a cabo diversos productos y aplicaciones, también me resulto interesante es que estos circuitos tiene una respuesta demasiado rápida, por lo que no existen problemas por una respuesta tardía o lenta.

Gracias a lo visto en teoría es que se pudo llevar a cabo el proyecto, implico poner a prueba los conocimientos adquiridos en el curso y así me doy cuenta del aprendizaje que eh tenido.

 

Bibliografía.

 

Ronald J. Tocci. “Sistemas digitales: principios y aplicaciones”,8 edición. México DF 2003.

Datasheet PIC16F887  Microchip Technologic inc  2001

Eduardo García Brejio “Compilador C CCS y simulador Proteus para microcontroladores PIC”, 2 edición Editorial Alfaomega, México DF2008

Apéndice

Código de programación del micrcocontrolador en lenguaje C por medio del compilador CCS

 

//Mendez Cruz Juan Daniel
//Carlos Chavez
//Control de temperatura por medio de dos sensores LM35 controlados por PIC16F887
//Rangos de Temperatura baja>10 grados C,Temperatura media[10,30] grados C
//Temperatura alta> 40 grados C, para temperatura media se acciona un ventilador
//Para Temperatura alta se acciona segundo ventilador se dispara una alarma

#include <16F887.h>
#device ADC=10       //Resolución de 10 bits para ADC
#fuses INTRC_IO,NOCPD,NOWDT,NOPUT,NOLVP,NOBROWNOUT,MCLR
#use delay(clock=2M)
#define use_portd_lcd TRUE
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7) // Pines para establecer comunicación RS232
#include <lcd.c>

#use fast_IO(A)   // Configuración rápida del puerto A
#use fast_IO(B)   // Configuración rápida del puerto B
#use fast_IO(C) // Configuración rápida del puerto C

long temp;     //Variable de tipo long temp
long conversion; //Variable de tipo long conversión
long conversion1;  //Variable de tipo long conversión1
float temo;          // //Variable de tipo flotante temo

unsigned int16 resultado;  //Variable de 16 bits sin signo resultado

float sensor(int8 primero , int8 segundo) //función que controla al sensor de temperatura parametros primero y segunto tipo entero de 8 bits
{
while(true)   //Cliclo siempre activo
{
set_adc_channel(primero);            //Seleccionando canal a primero
delay_us(10);                    // tiempo de espera de 10 us segundos
conversion=read_adc();           //conversión lee el canal analógico
set_adc_channel(segundo);     // definiendo el canal que se va a leer
delay_us(10);                 // tiempo de espera de 10 us segundos

conversion1=read_adc()  ;   //Conversión1 lee el canal analóico
if(conversion>conversion1)   //Condisión conversión> conversió 1
{
temp=conversion-conversion1;

temo=temp*500/1023 ;          //rectifica el sensor de temperatura
lcd_gotoxy(2,1);             // posición 2 en x y 1 en y de LCD
printf(lcd_putc,"Tempera:%f",temo);    //Imprime en el LCD Tempera es temo
printf("%6.2F",temo); //imprime en LCD
delay_ms(200);  //tiempo de espera de 200 msSegundos

lcd_gotoxy(2,2); // posicion 2x y 2 y del LCD
printf(lcd_putc"Grados Celcius"); // imprime en el LCD
delay_ms(200); // tiempo de retardo 200 ms S
if(temo>30)   // consicion de rangos de temp si temo menor a treinta
{
OUTPUT_high(PIN_C3);  // nivel alto pin C3
delay_ms(30);         //espera 50 ms S
OUTPUT_low(PIN_C3);   //apaga C3
delay_ms(20);        //espera 50 ms S
OUTPUT_high(PIN_C3); //nivel alto pin C3
delay_ms(20);           //espera 50 ms S
OUTPUT_low(PIN_C3);   //apaga C3
delay_ms(20);           //espera 50 ms S
OUTPUT_high(PIN_C3);    // nivel alto pin C3
delay_ms(20);           //espera 50 ms S
OUTPUT_low(PIN_C3);   //apaga C3
delay_ms(20);           //espera 50 ms S
OUTPUT_high(PIN_C3);    // nivel alto pin C3
delay_ms(20);           //espera 50 ms S
OUTPUT_low(PIN_C3);   //apaga C3
delay_ms(20);           //espera 50 ms S
OUTPUT_high(PIN_C3);    // nivel alto pin C3
OUTPUT_low(PIN_C4);         //apaga C4
OUTPUT_low(PIN_C5);         //apaga C5
}

if(temo>10 && temo<30 )       //temo esta entre 10 y 30
{
OUTPUT_high(PIN_C4);        //prende CA
delay_ms(100);             //espera 100 ms
OUTPUT_low(PIN_C4);          //apaga C3
delay_ms(100);               //espera 100 ms S
OUTPUT_high(PIN_C4);          //prende C4
delay_ms(100);                //espera 100 ms
OUTPUT_low(PIN_C3);        //apaga C3
OUTPUT_low(PIN_C5);           //apaga C5

}
if(temo>10)   //temo mayor a 18
{
OUTPUT_HIGH(PIN_C0);  //enciende C0
OUTPUT_LOW(PIN_B6);   //enciende Buzzer
}

else
{
OUTPUT_LOW(PIN_C0);    //apaga C0
OUTPUT_LOW(PIN_B6);
}

if(temo>40)            //temo mayor a 40
{
OUTPUT_HIGH(PIN_B7);  //enciende B7
OUTPUT_HIGH(PIN_B6);  //enciende B7
}

else
{
OUTPUT_LOW(PIN_B7);       //apaga B7
OUTPUT_LOW(PIN_B6);  //enciende B7
}

if(temo>0 && temo<10)     //temo mayor a 0
{
OUTPUT_high(PIN_C5);     // enciende C5
delay_ms(100);        //espera 100 ms S
OUTPUT_low(PIN_C5);   // apaga C5
delay_ms(100);           //espera 100 ms S
OUTPUT_high(PIN_C5);    //enciende C5
delay_ms(100);        //espera 100 ms S
OUTPUT_low(PIN_C3);  // apaga C3
OUTPUT_low(PIN_C4);   // apaga C4
}
}

if(conversion1>conversion)  //conversion1>conversion
{
temp=conversion1-conversion;
temo=temp*500/1023 ;
lcd_gotoxy(2,1);   //posición 2x 1y del LCD
printf(lcd_putc,"Tempera:-%f",temo);  //impirme en LCD
lcd_gotoxy(2,2);      //posición 2x 2y del LCD
printf(lcd_putc"Grados Celcius");  //imprime en LCD
delay_ms(200);                      // espera 200 ms
//  printf("\fUNAM MECATRONICA FI\rCircuitos Digitales \rTemperatura: -%6.2f C°",temo);  //Imprime en LCD
delay_ms(200);    //tiempo de 200 ms
if(temo>0)     //temo mayor a 0
{
OUTPUT_high(PIN_C5);     // enciende C5
delay_ms(100);        //espera 100 ms S
OUTPUT_low(PIN_C5);   // apaga C5
delay_ms(100);           //espera 100 ms S
OUTPUT_high(PIN_C5);    //enciende C5
delay_ms(100);        //espera 100 ms S
OUTPUT_low(PIN_C3);  // apaga C3
OUTPUT_low(PIN_C4);   // apaga C4
}
}
delay_ms(800);  //tiempo de espera 800 ms S
}
return temo;  //regresa el valor de temo
}

void main ()
{
set_tris_b(0x0C);  //configurando como salida el puerto B
set_tris_c(0x00);  //configurando como salida el puerto C

setup_adc(ADC_CLOCK_DIV_32);   //EL RELOJ DE CONVERSIÓN  del ADC
setup_adc_ports(sAN0| sAN1| sAN5|sAN6);         //Canales  analógicos a usarse AN0, AN1, AN5,AN6
delay_ms(100);       //tiempo de espera 100 ms
lcd_init();
//printf("\fUNAM MECATRONICA FI\rCircuitos Digitales \rProyecto Final");        // imprimiendo en LCD
delay_ms(500);          //tiempo de espera 500 ms S
//printf("\fCargando......");   // imprimiendo por medio de RS232
delay_ms(200);        //tiempo de espera 200 ms S
printf(lcd_putc,"UNAM INGENIERIA\n MECATRONICA FI");   //imprimiendo en LCD
delay_ms(2000);             //tiempo de espera 1000 ms S
printf(lcd_putc,"\f");  // borrando LCD
printf(lcd_putc,"  Control de  \n  temperatura");  //imprimiendo en LCD
delay_ms(1000);            //tiempo de espera 1000 ms
printf(lcd_putc,"\f");   // borrando LCD
printf(lcd_putc,"  Circuitos\n  Digitales");  //imprimiendo en LCD
delay_ms(1000);         //tiempo de espera 1000 ms
printf(lcd_putc,"\f");   // borrando LCD
printf(lcd_putc," DanielMendez\n Carlos Chavez");  //imprimiendo en LCD
delay_ms(1000);         //tiempo de espera 1000 ms

lcd_init();             //INICIALIZA LCD

while(true)  //bucle infinito
{
if(input(PIN_A2)==0 && input(PIN_A2)==0 )   //si a2 esta apagado
{
printf(lcd_putc,"Presione\n un boton"); // imprime LCD
delay_ms(3000);         //espera 1500 ms
printf(lcd_putc,"\f");    //borrando LCD

OUTPUT_LOW(PIN_B7);   //apaga B7
OUTPUT_LOW(PIN_C0);    //apaga C0
}

if(input(PIN_A2)==1)   // si la entrada A2 se presiona
{
printf(lcd_putc,"Sensor 1");  //impirme en LCD
delay_ms(500);         //espera 1500 ms
printf(lcd_putc,"\f");    //borrando LCD
delay_ms(500);
sensor(5,6);   //activa función sensor con canala analógico 5, 6
DELAY_MS(200);  //espera 200 ms S
}

if(input(PIN_A3)==1)  // si la entrada A3 se presiona
{
printf(lcd_putc,"Sensor 2");  //imprime en LCD
delay_ms(500);         //espera 1500 ms
printf(lcd_putc,"\f");    //borrando LCD
delay_ms(500);
sensor(0,1);  //activa función sensor con canala analógico 0, 1
}
}
}

 

PROGRAMA c#

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace SerialPort
{
public partial class Form1 : Form
{
string RxString;
int y;
public Form1()
{
InitializeComponent();
}
public void timer1_Tick(object sender, EventArgs e)
{
this.tiempo.Text = DateTime.Now.ToString("dddd d MMMM yyyy \n        HH:mm.ss ");
Di();
}

private void button1_Click(object sender, EventArgs e)
{
serialPort1.PortName ="COM3";
serialPort1.BaudRate =9600;
try
{

serialPort1.Open();
if (serialPort1.IsOpen)
{
//recibido.Clear();
btStart.Enabled = false;
btStop.Enabled = true;
textBox1.ReadOnly = false;
lStatus.Text = "CONECTADO";
lStatus.ForeColor = Color.Green;
cbPorts.Enabled = false;

}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Di()
{
if (serialPort1.IsOpen)

do
{
Thread.Sleep(500);
y = Convert.ToInt32(RxString);
if (y >= 40)
{
this.label7.Text = Convert.ToString(y) + ".00 °C";
label7.BackColor = Color.Red;
label7.ForeColor = Color.White;
this.label9.Text = "ALERTA TEMPERATURA ALTA";
label9.BackColor = Color.Red;
label9.ForeColor = Color.Yellow;
this.label12.Text = "MOTORES ACTIVADOS";
}
else
{
if (y < 40 && y >= 10)
{
this.label7.Text = Convert.ToString(y) + " °C";
label7.BackColor = Color.Yellow;
label7.ForeColor = Color.Red;
this.label9.Text = "";
this.label12.Text = "MOTOR 1 ACTIVADO";
}
else
{
if (y < 10 && y >= -10)
{
this.label7.Text = Convert.ToString(y) + " °C";
label7.BackColor = Color.Green;
label7.ForeColor = Color.Yellow;
this.label9.Text = "";
this.label12.Text = "MOTORES DESACTIVADOS";
}
}

}
} while (!serialPort1.IsOpen);
}

private void signalRead()
{
}

private void DisplayText(object sender, EventArgs e)
{
textBox1.AppendText(RxString);
}

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
RxString = serialPort1.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// If the port is closed, don't try to send a character.

if (!serialPort1.IsOpen) return;

// If the port is Open, declare a char[] array with one element.
char[] buff = new char[1];

// Load element 0 with the key character.

buff[0] = e.KeyChar;

// Send the one character buffer.
serialPort1.Write(buff, 0, 1);

// Set the KeyPress event as handled so the character won't
// display locally. If you want it to display, omit the next line.
e.Handled = true;
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close();
}

private void btStop_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
btStart.Enabled = true;
btStop.Enabled = false;
textBox1.ReadOnly = true;
// trackBar1.Enabled = false;
//trackBar1.Value = 1;
// button1.Enabled = false;
cbPorts.Enabled = true;
lStatus.Text = "DESCONECTADO";
lStatus.ForeColor = Color.Red;
}
}

private void button1_Click_1(object sender, EventArgs e)
{
Application.Exit();
}

private void Form1_Load(object sender, EventArgs e)
{

}

}
}

 

AUTOR: Méndez Cruz Juan Daniel

 

Descarga los códigos

26 Comments

  1. Gracias por compartir informacion en español :c fue un gran problema para mi encontrar una pagina tan buena como esta donde expliquen bien cada paso y en español lo facilito muchisimo les doy las gracias 😀
    los use de apoyo espero que no les moleste

    • Claro que no nos molesta Alejandro,

      Para esto tenemos esta información, para ayudar y compartir el trabajo realizado por nosotros. Puedes utilizar la info que encuentres aqui para lo que necesites. Saludos y gracias por tus comentarios.

  2. Buen programa igual soy ingeniero y tengo un problema con este pic que el uart me funciona, pero solo para enviar , en la parte de recibir no me recibe ningun dato, te pido el favor si me puedes ayudar y te comparto la informacion, porque recien volvi a los pic y este es el que se usa en colombia normalmente.

    • Hola que tal, no tengo mas informacion, este tutorial nos lo compartio un cliente, saludos.

      • ah bueno muchas gracias también me gustaría compartir en esta pagina mis trabajos para que mas gente se guíe en la programacion se pic

        • Puedes compartirlo donde tu gustes Reynel. Saludos

  3. Hola buenos días disculpa las molestias, quisiera saber si me podrías facilitar el diagrama para poder crear mi circuito en un protobar por favor es que si lo necesito saludos y gracias y me podrías hacer ese favor es que soy nuevo en esto y aun me cuesta trabajar con los circuitos.

  4. Buenas Tardes

    Me gustaria saber como se llama modulo donde pones el pic16f887 y lo estas conectando por USB

  5. hola como estan quisiera que me ayudaran sobre este proyecto mi consulta es los pulsadores son para activar los sensores en que pin del pic van conectados y los ventiladores ayudeme con ese dato gracias

    • En este ambiente de control grafico tenemos que cuenta tres botones uno de ellos nos conecta al Pic y comienza a recibir datos por medio de la comunicación RS232, el segundo botón nos desconecta de dicha conexión y el tercer botón se utiliza para salir de la aplicación. Saludos

  6. hola , que excelente explicación, soy estudiante, y necesito hacer lo mismo que plasmas, pero con el lenguaje xc8, seria posible que me colaboraran con eso, seria de gran ayuda para mi, espero su pronta respuesta

    • Freddy, ya intentaste portar el codigo de CCS a XC8, debería de ser similar. Te comento por que por lo regular no hacemos tutoriales iguales para diferentes lenguajes.

  7. Hola, muy interesante el articulo, de pronto han considerado los módulos esp8266 o nodeMCU que tienen módulo WIFI? sería muy bueno tener aplicaciones tan claras con esos potentes módulos.

    • Andres, si excelentes módulos. Ahorita están preparando ya un tutorial del ESP8266 para IoT, para que estes al pendiente.

  8. Disculpa de casualidad tendras el diagrama de como va conectado??, espero me puedas ayudar con eso por favor

  9. Hola, Espero tengan buenos días.
    Quisiera saber si me podrían proporcionar el diagrama eléctrico del circuito y si saben si es posible adherirle una resistencia que genere calor cuando la temperatura sea baja.
    Desde ya muchas gracias.

    • Hola gracias y esperamos que usted tengan un buen dia, desafortunadamente no contamos con el diagrama solo con lo quetenemos publicado aqui, saludos

  10. hijos del culo
    chinguen a su madre

  11. disculpa lo compilo en mplab y me aparece este mensaje “Could not spawn language tool. Check command-line options. (740)” no se que hacer espero me puedas ayudar

    • Lo sentimos no contamos con mas informacion respecto a este

  12. Una pregunta que programa uso para el interfaz gráfico?

Post a Reply

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *