reporte final

19
U P T Universidad Politécnica de Tulancingo CONTROL DE TEMPERATURA MEDIANTE UNA INTERFAZ GRAFICA DE VISUAL C# EN COMUNICACIÓN CON ARDUINO. Por: Luis Eugenio Cabrera Ortega Emmanuel Delgadillo Salazar Enrique González Amador José Carlos Pérez Cruz Jorge Luis Rosales Borjas Reporte Supervisada por: Ing. Arturo Negrete Medellín Tulancingo de Bravo, Hidalgo Agosto 2012 ©UPT 2012 Derechos reservados El autor otorga a UPT el permiso de reproducir y distribuir copias de este reporte en su totalidad o en

Upload: luis-eugenio-cabrera-ortega

Post on 02-Jan-2016

46 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Reporte Final

U

P

T

Universidad Politécnica de Tulancingo

CONTROL DE TEMPERATURA MEDIANTE UNA INTERFAZ GRAFICA DE VISUAL C# EN COMUNICACIÓN CON ARDUINO.

Por:

Luis Eugenio Cabrera Ortega

Emmanuel Delgadillo Salazar

Enrique González Amador

José Carlos Pérez Cruz

Jorge Luis Rosales Borjas

Reporte

Supervisada por:

Ing. Arturo Negrete Medellín

Tulancingo de Bravo, Hidalgo

Agosto 2012

©UPT 2012Derechos reservados

El autor otorga a UPT el permiso de reproducir y distribuir copias de este reporte en su totalidad o en partes.

Page 2: Reporte Final

INTRODUCCIÓN:

La automatización hoy en día es una de las áreas con mayor aplicación debido al amplio campo de aplicación, tanto en la industria como en labores domésticas. Desde las primeras tarjetas operadas con relevadores hasta los procesos controlados mediante circuitos integrados, tales como PLC’s, microprocesadores, micro controladores, entre otros.

En el presente documento se darán a conocer los procedimientos mediante los cuales se desarrolló un sistema de automatización para el control de temperatura de un ambiente dado, esto con ayuda de tres herramientas principales, Arduino, Visual C# y un sensor de temperatura LM35. Aplicando los principios básicos para la automatización.

OBJETIVO:

Crear un sistema de interfaz gráfica en Visual C# que interactúe con el dispositivo Arduino que permita mantener un ambiente en específico en un rango de temperatura asignado por el usuario.

MARCO TEORICO

El Arduino es una plataforma de hardware libre, basada en una placa con un micro controlador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares. Comúnmente consiste en una placa con un micro controlador Atmel AVR con puertos de entrada y salida. El software consiste en un entorno de desarrollo que implementa el lenguaje de programación Processing/Writting. Arduino se puede utilizar para desarrollar objetos interactivos autónomos.

El compilador necesario para programarlo está disponible de forma gratuita en su página oficial y está disponible para Mac OS X, Linux y Windows.

Consta de 14 entradas digitales configurables entrada i/0 salidas que operan a 5 voltios. Cada pin

Page 3: Reporte Final

puede proporcionar o recibir un máximo de 40 mA. Si se conecta cualquier cosa a los pines 0 y 1 eso interferirá con la comunicación USB. Puede convertir valores análogos a digitales con sus seis entradas analógicas que proporcionan una resolución de 10 bits. Por defecto miden de 0 V a 5V, aunque es posible cambiar el nivel más alto utilizando el Pin Aref y algún código de bajo nivel.

LM35

Circuito integrado en el cual se ha encapsulado un sensor de temperatura, el cual su voltaje de salida es cercanamente proporcional a la temperatura en Celsius. Su rango de medición va desde -55 °C hasta 150 °C, su salida es lineal y su respuesta a la salida es de 10mv por grado centígrado.

Esta calibrado directamente en grados Celsius. La tensión de salida es proporcional a la temperatura. Tiene una precisión garantizada de 0.5°C a 25°C. Opera entre 4 y 30 volts de alimentación. Baja impedancia de salida. Baja corriente de alimentación (60uA). Bajo costo.

Visual C#

Es un lenguaje de programación orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET. C# es uno de los lenguajes de programación diseñados para la infraestructura de lenguaje común.

Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET, similar al de Java, aunque incluye mejoras derivadas de otros lenguajes.

Metas del diseño del lenguaje

Lenguaje de programación orientado a objetos simple, moderno y de propósito general.

Inclusión de principios de ingeniería de software tales como revisión estricta de los tipos de datos, revisión de límites de vectores, detección de intentos de usar variables no inicializadas, y recolección de basura automática.

Capacidad para desarrollar componentes de software que se puedan usar en ambientes distribuidos.

Portabilidad del código fuente.

Page 4: Reporte Final

Fácil migración del programador al nuevo lenguaje, especialmente para programadores familiarizados con C, C++ y Java.

Soporte para internacionalización. Adecuación para escribir aplicaciones de cualquier tamaño: desde

las más grandes y sofisticadas como sistemas operativos hasta las más pequeñas funciones.

Aplicaciones económicas en cuanto a memoria y procesado.

DESARROLLO:

Primeramente se procedió a generar la interfaz gráfica mediante el software Visual C#, la cual dentro de sus principales características debe tener un menú de conexión, además de permitir la selección del dispositivo con el cual se desea conectar, un panel frontal que permita al usuario establecer las parámetros de temperatura máxima y mínima a la que debe mantenerse el sistema, así mismo debe ser capaz de obtener datos generados por el Arduino para procesarlos y a su vez comunicarle al mismo si el dato recibido se encuentra o no dentro del rango de temperatura establecido.

INTERFACE VISUAL C#

El menú de conectividad despliega las opciones de conectar, desconectar y seleccionar puerto. La programación de este menú se ha hecho en prácticas pasadas y básicamente el objetivo que tiene es el de poder elegir a que puerto COM queremos conectarnos. La opción de conectar o desconectar, las cuales permiten iniciar la comunicación o terminarla respectivamente.

Page 5: Reporte Final

En la imagen anterior también se puede observar que se tienen dos numericUpDown1, se eligieron debido a que se necesitaba un interface que pudiera aumentar de uno en uno el valor máximo o mínimo de la temperatura. De igual forma se tiene en el menú de ayuda, una interface que nos indica el funcionamiento y manera de operar la aplicación. Y otra que nos indica el “acerca de” de la aplicación.

Para el cálculo de la temperatura se llevó a cabo mediante razones y proporciones, comúnmente llamada regla de 3. Para ello la entrada analógica de Arduino que leía los datos del sensor como funciona con valores de 0V a 5V y te dará 0 para 0V y 1023 para 5. Entonces básicamente la fórmula utilizada fue:

valtemp= temperatura∗501024

Donde el valtemp es el valor de la temperatura en grados Celsius. Temperatura es el valor binario leído del Arduino. Y el valtemp es el valor que se muestra en el textbox de temperatura.

Page 6: Reporte Final

Posteriormente solo se comparaba con los valores mínimos y máximos de temperatura. Y si el valor era mayor al valor máximo con la función serialPort1.Write () se enviaba al Arduino la indicación de que encendiera el ventilador. En este caso

serialPort1.Write("1");//Encender ventilador

Si el valor de temperatura era menor al mínimo entonces:

serialPort1.Write("2");//Encender foco

Si el valor estaba dentro de los valores mínimos y máximos entonces:

serialPort1.Write("3");//Apaga todo.

Esto se ejecutaba cada vez que se recibía un valor de temperatura de Arduino.

PROGRAMA ARDUINO

En el Arduino se utilizó la función Serial.available () y normalmente se utiliza con un if:

If (Serial.available ())

Comúnmente se leería “si hay algo en el puerto entonces” Y lo que se puso dentro del if fue la instrucción que lo que leía en el puerto lo guardara en una variable llamada valor.

Valor=Serial.read ();

Y por último también se comparaban el valor leído con los valores. Es decir si el valor leído era igual a 1 entonces de acuerdo a la lógica tendría que encender el ventilador. Ya que en C# el uno indicaba que el valor de la temperatura era mayor que la temperatura máxima, por lo tanto estaba caliente.

digitalWrite(ventilador,HIGH);

De lo contrario que lo apagara, es decir si el valor era diferente de 1. Si el valor era 2 entonces encendía el foco ya que esto indicaba que estaba frio.

digitalWrite(foco,HIGH);

De lo contrario que apagara el foco. Y todo esto se ejecutaba cada 100 ms.

Page 7: Reporte Final

De acuerdo a las características descritas en la hoja de datos del LM35, la conexión que se utilizó para esta práctica fue la conexión típica como se muestra en la siguiente imagen:

De acuerdo con la hoja de datos del sensor se hizo la conexión en base a la siguiente figura:

El pin VS se conectó a una fuente de alimentación de 5 V el pin GND como su nombre indica se conectó tierra de los 5V, y el pin de salida Vout se conectó en serie con un potenciómetro para calibrar el voltaje de salida del integrado a 10mV por grado centígrado.

La razón del porque se conectó el potenciómetro a la salida del sensor fue para calibrar el sensor, con ayuda de un sensor digital checamos la temperatura en ese momento entonces checamos la salida del sensor con un multímetro y con el potenciómetro aumentábamos o bajábamos la resistencia de acuerdo a lo que queríamos a la salida.

Page 8: Reporte Final

Por ejemplo la temperatura que se leyó desde el termómetro digital fue de 23 °C entonces a la salida del sensor se esperaban 0.230 V, por lo tanto lo que se hizo fue variar la resistencia del potenciómetro hasta obtener el voltaje deseado.

LM741

Para poder acondicionar la señal del sensor a un rango adecuado para conectarlo a un pin analógico de la plataforma Arduino, se utilizó un amplificador operacional para poder amplificar la señal del sensor y llevarla a un rango de 0 a 5V.

Por ejemplo si la temperatura ambiente es de 23°C, la salida del amplificador tendrá que arrojar un voltaje de 2.3V, de esta manera será más fácil procesarla señal del sensor.

Características del amplificador operacional LM741:

Este dispositivo es un amplificador de propósito general bastante conocido y de uso muy extendido. Sus parámetros son bastante regulares, no teniendo ninguno que sea el mejor respecto a los de los demás, pero en conjunto presenta una alta impedancia de entrada, pequeños offset (de corriente y de voltaje) en la entrada y buenos parámetros. La configuración que se utilizó para el amplificador fue la no inversora como se muestra en la siguiente figura:

Rf = 180KΩ

R1 = 18KΩ

A la entrada no inversora se conectó la señal del sensor, que será amplificada con una ganancia de 10. La salida del amplificador se conectó hacia una entrada analógica del Arduino.

Page 9: Reporte Final

Una vez realizados los programas correspondientes de la interfaz y el Arduino, se realizó una maqueta, cuyo propósito es simular el ambiente a controlar y consta de lo siguiente:

Módulo de Calefacción

Ambiente a Controlar

Ventilador de Alta Velocidad para enfriamiento

Page 10: Reporte Final

El módulo de calefacción consta de un Foco y tres ventiladores que hacen circular el aire caliente producido en la zona del foco hacia el ambiente a controlar.

Debido a que los dispositivos trabajan a diferentes voltajes y corrientes fue necesario realizar una etapa de potencia que permitiera la activación de los mismos a partir de las señales emitidas por el Arduino, para ello se realizó un circuito en el cual se utilizaron 3 relevadores, los cuales se energizan a través de un transistor 2n2222 cuya base es excitada por las señales del Arduino como se muestra a continuación.

Page 11: Reporte Final

Una vez realizadas todas las conexiones se realizó la ejecución del programa lo cual arrojo como resultado que si en el ambiente se rebasaba la temperatura máxima se enciende el ventilador de alta velocidad, mientras que al disminuir más del límite de temperatura mínima se encendía el módulo de calefacción y si la temperatura se encontraba entre el rango establecido el sistema permanece en reposo.

Temperatura Normal

Page 12: Reporte Final

Temperatura por debajo de la mínima.

Exceso de temperatura.

Page 13: Reporte Final

PROBLEMAS ENCONTRADOS:

Sincronización de los valores leídos con la interfaz de Windows

Un error que se presentó en la lectura de los datos con la interfaz de Windows fue que cuando el Arduino hacia la lectura del dato que nos presentaba el sensor de temperatura, esta al enviarlo a la interfaz lo hacía en toda una línea y para indicarle que dejara de recibir este dato se le indico que hiciera un salto de línea, entonces al hacer esta lectura la interfaz nos mostraba un error y se salía de la aplicación que se creó, diciéndonos que la cadena no tenía un formato correcto. Este error se corrigió quitando el salto de línea ya que la función que se utilizó en la interfaz read line leía línea por línea sin la necesidad de indicar un espacio entre la líneas.

Otro problema que se nos presento es la oscilación en cuanto al encender y apagar el sistema de enfriamiento y calentamiento, es decir en la aplicación se le modificaba el valor mínimo y máximo de temperatura para activar los sistemas mencionados. Si los valores limites eran muy próximos es decir un valor mínimo de 23 y un máximo de 24, estos valores hacían que los sistemas se encendieran y apagaran de manera oscilatoria

CONCLUSIONES:

LUIS EUGENIO CABRERA ORTEGA: Con la elaboración de este proyecto nos fue posible aplicar varios conocimientos adquiridos a lo largo de la carrera como lo es la parte de control, programación y etapas de potencia, así como la integración de las habilidades obtenidas en el presente curso para la creación de interfaces graficas en programación orientada a objetos de Visual C# y el Uso del componente Arduino, con lo cual se puede concluir que el control de procesos mediante un ordenador y dispositivos periféricos en de gran ayuda, ya que además de facilitar las modificaciones al programa, su factibilidad y campos de aplicación son muy altos.

JORGE LUIS ROSALES BORJAS: En este proyecto aplicamos varios conocimientos adquiridos y a pesar de los problemas surgidos nos fue posible llevar a cabo el proyecto de manera satisfactoria, lo cual permite llegar a la conclusión de que es posible controlar un proceso o sistema desde el ordenador utilizando dispositivos de comunicación con algún puerto de la PC, en este caso el Arduino es el dispositivo que fungió como dispositivo de lectura y procesamiento de datos y C# como la interfaz gráfica de interacción con el usuario.

Page 14: Reporte Final

ENRIQUE GONZÁLEZ AMADOR: Este proyecto me agrado ya que en primer lugar se obtuvo un resultado bueno, el resultado esperado. Si bien hubo algunas broncas, lo bueno es que se lograron resolver, y de igual manera se pudo observar el principio básico para la automatización de un sistema.Me pareció muy agradable el poder entrar al mundo de la programación de esta forma, y el haber logrado la comunicación entre Arduino y máquina y de maquina al Arduino, creo que este tipo de proyectos pueden tener una gran aplicación en la vida diaria. La manera en la que se logra interactuar es muy familiar ya que prácticamente ves resultados en Windows, en su ambiente.En cuanto a la realización de los circuitos para poder lograr la interacción, se podría decir que conjuntamos varios conocimientos de la carrera para la conclusión correcta del proyecto, ya que se usaron de transistores, relevadores, sensores y la programación. Por lo que me quedo con una gran satisfacción de lo hecho en este curso.

JOSÉ CARLOS PÉREZ CRUZ: Gracias a este proyecto se pudo descubrir que el uso de la plataforma Arduino es de gran utilidad ya que resuelve muchos problemas de adquisición de datos y control de componentes externos, los cuales también han permitido llevar al éxito los resultados del proyecto, ya que como se ha mencionado resolvió de manera sencilla la adquisición de señales provenientes de los sensores para controlar los motores que mueven los ventiladores que estabilizan la temperatura de la maqueta. C# fue también de gran utilidad ya que ofrece un ambiente muy amigable y por tanto muy sencillo de programar para el diseñador y muy fácil de operar por cualquier usuario, ya que no necesita de grandes conocimientos para poder operar el sistema. Gracias a las formas programadas en C#, se pudo controlar de manera sencilla la temperatura deseada en la maqueta.

EMMANUEL DELGADILLO SALAZAR: En este proyecto nos pudimos dar cuenta de que hay varias aplicaciones en las cuales podemos hacer la utilización del puerto serie, se realizó la conexión a través de este puerto con la interfaz de lectura y procesamiento de datos como lo es un micro controlador el Arduino y la interfaz gráfica c# donde se mostraron los datos obtenidos de un sensor de temperatura.