Instituto Tecnológico de Colima Departamento de Ingeniería Industrial Ingeniería en Mecatrónica Materia: Programación Avanzada Práctica # 11 y 12 LECTURA DE HUMEDAD Y TEMPERATURA CON EL SENSOR DHT11 CON ARDUINO. LEER DHT11 Y ENCENDER MOTOR CON C#. Alumnos: Saúl Orozco Maldonado José Manuel Hurtado Salinas Christian Emanuel Cuellar Ruvalcaba Colima, Col.; a 23 de Abril de 2015 I. INTRODUCCIÓN Arduino [1] es una herramienta para la fabricación de computadoras que pueden detectar y controlar más del mundo físico que el equipo de escritorio. Es una plataforma de computación física de código abierto basado en una placa electrónica simple, y un entorno de desarrollo para escribir software para la placa. Arduino se puede utilizar para desarrollar objetos interactivos, teniendo las entradas de una variedad de interruptores o sensores, y el control de una variedad de luces, motores, y otras salidas físicas. Proyectos Arduino pueden ser entes individuales, o pueden comunicarse con el software que se ejecuta en el ordenador (por ejemplo, Flash, Processing, MaxMSP.) Las tablas se pueden montar a mano o comprados pre ensamblado; el IDE de código abierto se puede descargar de forma gratuita. El lenguaje de programación de Arduino es una implementación de cableado, una plataforma similar computación física, que se basa en el entorno de programación multimedia de procesamiento. El Mega Arduino (Véase figura 1) es una placa electrónica basada en el ATmega1280 (ficha técnica). Cuenta con 54 pines digitales de entrada / salida (de los cuales 14 se pueden utilizar como salidas PWM), 16 entradas analógicas, 4 UARTs (puertas seriales), un oscilador de 16MHz, una conexión USB, un conector de alimentación, una cabecera ICSP, y un botón de reinicio. Contiene todo lo necesario para apoyar el microcontrolador; basta con conectarlo a un ordenador con un cable USB o el poder con un adaptador de CA o la batería a CC para empezar. C# [2] es un nuevo lenguaje de programación de Microsoft que puede utilizarse en el .NET Framework. Debido a que C# s deriva de C++ y C, los desarrolladores que ya conozcan estos lenguajes no tendrán que aprender VB.NET para programas sus páginas ASP.NET. C# también tiene cierta semejanza con el lenguaje de programación java, por lo que incluso los programadores de este no deberán tener problemas con él. Sensor de humedad DHT11 [3] es un sensor muy básico y lento (solo se pueden obtener datos como mínimo cada 2 segundos), pero es de bajo costo y muy manejable para obtener datos básicos en proyectos caseros. Sus características técnicas más destacables son: se puede alimentar con un voltaje de entre 3V y 5V y 2,5mA como máximo, puede medir un rango de temperatura entre -40 y 125 °C con una precisión de ± 0,5 °C y un rango de humedad entre 0 y 100% con una precisión del -2.5%. Está formado básicamente por un sensor de humedad capacitivo y un termistor como se muestra en la imagen 3. Los motores de corriente directa (DC) [3] transforman la energía eléctrica en energía mecánica. Impulsan dispositivos tales como malacates, ventiladores, bombas, calandrias, prensas y carros, como se muestra en la imagen 4. Figura 1. Tarjeta de desarrollo Arduino MEGA 2560. Figura 2. Imagen Visual C#. Figura 3. Imagen Sensor DHT11. Figura 4. Motor de DC. 1.1 OBJETIVO DE LA PRÁCTICA Desarrollar un programa que pueda realizar las dos prácticas pendientes usando la tarjeta de desarrollo Arduino y usando como activador la comunicación serial por medio de un programa en C#. el programa deberá leer la temperatura y el porcentaje de humedad que se encuentra en el ambiente y se pueda activar y desactivar un motor estableciendo un rango de humedad o manualmente desde la aplicación.. 1.2 MATERIALES DE LA PRACTICA II. Tarjeta Arduino Protoboard LED Motor de DC Resistencia Cables Sensor DHT11 DESARROLLO DE LA PRACTICA Para la realización de esta práctica, se tuvo que llevar a cabo en dos etapas, la primer etapa tuvimos que diseñar la interfaz en Microsoft Visual Studio en lenguaje de programación C#, está interfaz será la que nos permita comunicarnos con el Arduino a través de la comunicación serial. El código de dicho programa de C# se anexará al final de este documento. Haciendo uso de la consola que este programa nos genera, se utilizó dicha consola para tener la interfaz de comunicación entre el Arduino y la computadora. Figura 5. Interfaz de comunicación con Arduino en C#. La segunda parte entonces, fue el generar el código de comunicación con el Arduino, así como el código de lectura del sensor, dicho código se anexa de igual forma al final del documento. La conexión que tuvimos se muestra en la siguiente imagen. Figura 6. Conexión del sensor de humedad con Arduino. Una vez que se realizó la conexión al final únicamente se tuvo que intercalar entre el monitor serial del Arduino y la interfaz generada por nosotros en C# para en uno tener las lecturas mostradas en una u en otra interfaz y poder así por medio de la interfaz generada por nosotros en C# encender o apagar un motor al llegar el censor a medir determinada cantidad fijada por nosotros de humedad. 2.1 RESULTADOS Los resultados fueron los esperados como se plantearon en el objetivo de la práctica, la conexión en físico fue muy sencilla y por medio del programa en C# y el programa de la tarjeta arduino se pudo tener el acceso a la comunicación serial con la cual se mostraron en el computador la temperatura y el porcentaje de humedad del aula de clases. Posterior mente en el programa se acomodó un porcentaje en 53% de humedad, el cual si era superado activaba el motor y si era menor lo apagaba. Si de lo contrario tú deseabas encender el motor de DC manualmente solo desde el computador lo activabas y desactivabas. III CONCLUSIONES Se concluye que con la tarjeta de desarrollo Arduino y Visual Studio usando C#, se pueden diseñar programas y circuitos para la activación y desactivación de un motor de DC por medio de comunicación serial, además con el sensor DHT11 se obtuvieron las medidas de la humedad y la temperatura, dado a que como se mencionó en la introducción este sensor cuanta con un termistor lo cual nos evita poner un sensor de humedad y uno de temperatura complicando más la conexión; de esta manera se tienen costos más bajos al realizar este tipo de prácticas. ANEXOS. /////////////////////////////////// Código de comunicación en C# /////////////////////////////////////////// using System; using System.IO.Ports; using System.Threading; namespace CSharpArduino { class Program { private static void Encabezado() { Console.WriteLine("--------------------------------------"); Console.WriteLine("C# + Arduino usando el System.IO.Ports"); Console.WriteLine("--------------------------------------"); Console.WriteLine("Por Pelumecatronicos"); Console.WriteLine("http://equipoazul.esy.es/"); Console.WriteLine("--------------------------------------"); } private static void Pie() { Console.WriteLine("--------------------------------------"); Console.WriteLine("COM: " + puertoArduino); Console.WriteLine("LED: " + LED); Console.WriteLine("--------------------------------------"); } private static void EsperarParaContinuar() { Console.WriteLine("--------------------------------------"); Console.WriteLine("Espere ..."); Console.WriteLine("--------------------------------------"); Thread.Sleep(2000); } private static void Menu() { Encabezado(); Console.WriteLine("|L| Console.WriteLine("|S| Console.WriteLine("|E| Console.WriteLine("|P| Console.WriteLine("|Q| Pie(); } Listar puertos COM disponibles"); Setear puerto COM del Arduino"); Encender/Apagar MOTOR"); Leer HUMEDAD"); Salir"); private static void ListarPuertos() { Console.Clear(); Encabezado(); string[] v = SerialPort.GetPortNames(); Array.Sort(v); foreach (string s in v) { Console.WriteLine(s); } EsperarParaContinuar(); } private static byte puertoArduino = 0; private static void SetearPuertoArduino() { Console.Clear(); Encabezado(); Console.WriteLine("Indicar solo el número de puerto COM"); Console.WriteLine("al que se encuentra conectado la placa"); Console.WriteLine("--------------------------------------"); Console.Write("Númeropuerto: "); try { Console.CursorVisible = true; puertoArduino = byte.Parse(Console.ReadLine()); Console.CursorVisible = false; if ( Array.Find( SerialPort.GetPortNames(), s => s.Equals("COM" + puertoArduino) ) == null ) throw new Exception(); Console.WriteLine("Puerto " + puertoArduino + " seteado"); } catch (Exception) { Console.WriteLine("(!) Puerto incorrecto"); puertoArduino = 0; } EsperarParaContinuar(); } private static bool LED = false; private static void EncenderLED() { using (SerialPort sp = new SerialPort("COM" + puertoArduino, 9600)) { sp.Open(); sp.Write(LED ? "L" : "H"); sp.Close(); } LED = !LED; } private static void LeerPOT() { Console.Clear(); Console.WriteLine("--------------------------------------"); Console.WriteLine("% HUM: 0"); Console.WriteLine("--------------------------------------"); Console.WriteLine("Presione una tecla para regresar ..."); Console.WriteLine("--------------------------------------"); using (SerialPort sp = new SerialPort("COM" + puertoArduino, 9600)) { sp.Open(); while (!Console.KeyAvailable) { Console.SetCursorPosition(8, 1); sp.DiscardInBuffer(); Console.WriteLine(sp.ReadByte().ToString().PadLeft(2, ' ')); } sp.Close(); } } static void Main() { while (true) { Console.Clear(); Console.ForegroundColor = ConsoleColor.Green; Console.CursorVisible = false; Menu(); char c = Console.ReadKey(true).KeyChar; switch (char.ToUpper(c)) { case 'L': ListarPuertos(); break; case 'S': SetearPuertoArduino(); break; case 'E': if (puertoArduino != 0) EncenderLED(); break; case 'P': if (puertoArduino != 0) LeerPOT(); break; case 'Q': return; break; } } } } } //////////////////////////////////////////////// Código de Arduino /////////////////////////////////////////////////// #include <SoftwareSerial.h> #include "DHT.h" #define DHTPIN 7 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { pinMode(22,OUTPUT); dht.begin(); // se define al Pin2 como RX, Pin3 como TX Serial.begin(9600); } void loop() { int h = dht.readHumidity();// Lee la humedad int t= dht.readTemperature();//Lee la temperatura //////////////////////////////////////////////////Humedad Serial.print("Humedad Relativa: "); Serial.print(h);//Escribe la humedad Serial.println(" %"); delay (2500); ///////////////////////////////////////////////////Temperatura Serial.print("Temperatura: "); Serial.print(t);//Escribe la temperatura Serial.println(" C'"); delay (2500); /////////////////////////////////////////////////// Serial.println (); if(h>=54) pinMode(22,HIGH); if(h<=53) pinMode(22,LOW); } BIBLIOGRAFÍA [1] Roberto Guido, ARDUINO, (2015), Arduino mega 2560, Fecha de consulta 26 de marzo del 2015. http://arduino.cc/en/guide/introduction. [2] Payne, Chris, Aprendiendo ASP.NET en 21 Lecciones Avanzadas, C#, Fecha de consulta 14 de Abril del 2015, https://books.google.com.mx/books?id=iXxI7pB8ntkC&pg=PA96&dq=que+es+c%2 3&hl=en&sa=X&ei=Eq4tVamWOIbQsAXUlIHIBA&ved=0CC8Q6AEwAg#v=onepag e&q=que%20es%20c%23&f=false [3] Torrente Artero, Oscar, Arduino Curso Práctico de Información, Sensor DHT11, fecha 23 de abril del 2015. https://books.google.com.mx/books?id=6cZhDmf7suQC&printsec=frontcover&dq=s ensor+de+humedad+DTH11&hl=es419&sa=X&ei=3oQ5VdeZMcO_sAXkyYG4CA&ved=0CC0Q6AEwAQ#v=onepage &q&f=false