Uso de hardware y software libre en laboratorios de Ingeniería Química G. Luzón González, A. Fernández-Arteaga, D. Altmajer Vaz, A.I. García López, M. Fernández Serrano Dpto. Ingeniería Química Universidad de Granada Proyecto Proyecto financiado por el Vicerrectorado de Ordenación Académica y Profesorado de la Universidad de Granada: “13-202: Uso de hardware y software libre en la instrumentalización de prácticas de Ingeniería Química” • Participantes: – – – – – – – G. Luzón González D. Altmajer Vaz A. Fernández-Arteaga M. Fernández Serrano A.I. García López M. García Román A. Burgos Cara Objetivos del proyecto • Identificar las prácticas más adecuadas para la instalación de sistemas de monitorización y/o control y seleccionar los equipos adecuados para llevarlos a cabo. • Diseñar los sistemas de control y monitorización. • Buscar y acoplar dispositivos de bajo coste adecuados para las prácticas seleccionadas. • Programar el sistema de monitorización/control. • Programar un interfaz de visualización/control para sistemas android. • Elaborar de materiales docentes para compartirlos y que puedan ser aprovechados y mejorados por otros departamentos interesados. Objetivos del proyecto De cara al alumnado, el proyecto permitirá alcanzar los siguientes objetivos: • Identificar las variables a controlar en las prácticas y el rango en el que debe realizar el control. • Trabajar con sistemas de control y monitorización de sistemas, aplicando los conocimientos teóricos. • Integrar conocimientos de distintas materias. • Conocer y utilizar software y hardware libre, participando en las comunidades que lo forman para difundir su filosofía. OSL-UGR Problemas • Prácticas antiguas que funcionan bien pero con baja instrumentalización • Toma manual de datos experimentales • Bajo presupuesto para renovar prácticas • Alto coste de equipos de medida y control • Limitados conocimientos en electrónica y comunicación Software libre • Free Software Foundation: el software libre se refiere a la libertad de los usuarios para ejecutar, copiar, distribuir, y estudiar el mismo, e incluso modificar el software y distribuirlo modificado. • Paquete ofimático: Open Office • Cálculo numérico: Octave, Freemat, Scilab • Paquetes estadísticos: R, PSPP • Tratamiento de imágenes: Gimp • … Software libre Hardware libre (open source hardware) • Dispositivos de hardware cuyas especificaciones y diagramas esquemáticos son de acceso público. • Aplicable la filosofía del software libre. • Ambos corresponden a las partes tangibles de un sistema informático. • Ejemplos: – Arduino: plataforma libre de computación física basada en una tarjeta de I/O y un entorno de desarrollo – Cámaras digitales reconfigurables de red: Elphel, Inc. – BUG, plataforma abierta de dispositivos electrónicos de consumo – SquidBee: basado en Arduino para desarrollar redes de sensores – SHPEGS: generación eléctrica de bomba de calor solar libre Arduino • Placa con un microcontrolador y puertos de entrada/salida. • Software: entorno de desarrollo (lenguaje de programación Processing/Wiring) y cargador de arranque, ejecutado en la placa. Arduino • Características: – 16-84 MHz, según modelo/procesador – Entradas analógicas 6-12 (según modelo) – 14-54 entradas/salidas digitales, 6-12 pueden ser salidas de ancho de pulso modulado y usadas como salidas analógicas con circuitería mínima – Cada placa puede operar independientemente, utilizando solo su compilador incorporado Arduino: medida de caudal // Code adapted by C. Gantt from PC Fan code written by Crenn @thebestcasescenario.com // http:/themakersworkbench.com http://thebestcasescenario.com http://seeedstudio.com volatile int NbTopsFan; //medida del pico alto de la señal int Calc; int flowmess = 2; //Pin donde se localiza el sensor void rpm () //Función llamada por la interrupción { NbTopsGiro++; //Mide subida y bajada de la señal del sensor } // El metodo setup() se ejecuta una vez al principio del programa void setup() { pinMode(flowmess, INPUT); //inicializa el pin digital 2 como entrada Serial.begin(9600); //Se inicializa el puerto de transmisión attachInterrupt(0, rpm, RISING); //se adjunta la interrupcion } // El ciclo loop() se ejecuta mientras el Arduino esté encendido void loop () { NbTopsGiro = 0; //Se pone a cero el contador de giros sei(); //Activa la interrupcion delay (1000); //Espera 1 segundo cli(); //Desactiva la interrupcion Calc = (NbTopsGiro * 60 / 7.5); //(Frecuencia x 60) / 7.5Q, = caudal en L/min Serial.print (Calc, DEC); //Muestra el caudal calculado Serial.println (" L/min"); //Muestra las unidades /retorno de linea Arduino: medida de temperatura (NTC) //define variables int ntc=0; // sonda conectada a la entrada 0 int temperatura=0; //asigna a la variable temperatura el valor 0 //comienza la configuración void setup() { Serial.begin(9600); // inica la comunicación con el puerto serie (pantalla de salida) } //bloque principal del programa, se repite continuamente void loop() { temperatura=analogRead(ntc); // lee el valor de la entrada analógica entre 0 y 1024 temperatura= 224.55 - 28.9*log(temperatura); Serial.print(“T/°C = "); Serial.println(temperatura3); delay(1000); } Arduino: medida de temperatura //TMP36 Pin Variables int sensorPin = 0; //el pin analogico se conecta al voltaje de salida de la sonda //resolucion 10 mV // grado centigrado con 500 mV de offset para permitir temperaturas negativas // El metodo setup() se ejecuta una vez al principio del programa void setup() { Serial.begin(9600); //Se inicializa el puerto de transmisión } // El ciclo loop() se ejecuta mientras Arduino esta encendido void loop() { //getting the voltage reading from the temperature sensor int reading = analogRead(sensorPin); float voltage = reading * 5.0/1024.0; // muestra el voltaje leido, eliminar para solo lectura temperatura Serial.print(voltage); Serial.println(" V"); // muestra la temperatura float temp = (voltage - 0.5) * 100 ; //convierte de 10mV/°C con 500 mV de offset Serial.print(temp); Serial.println(" °C"); Delay(1000); //espera 1 segundo } Arduino: medida de la temperatura (infrarrojos) #include <i2cmaster.h> void setup() { Serial.begin(9600); i2c_init(); //Initialise the i2c bus Serial.println("Return from i2c_init"); PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups } void loop() { int dev = 0x5A<<1; int data_low = 0; int data_high = 0; int pec = 0; double temp=0; int rep=5; //Number of data to read for calculate the average for (int i=0;i<rep;i++) { i2c_start_wait(dev+I2C_WRITE); i2c_write(0x07); i2c_rep_start(dev+I2C_READ); data_low = i2c_readAck(); //Read 1 byte and then send ack data_high = i2c_readAck(); //Read 1 byte and then send ack pec = i2c_readNak(); i2c_stop(); //This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps double tempFactor = 0.02; // 0.02 degrees per LSB double tempData = 0x0000; // This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte. tempData = (double)(((data_high & 0x007F) << 8) + data_low); tempData = (tempData * tempFactor)-0.01; tempData = tempData - 273.15; temp=temp+tempData; delay(100/rep); } temp=temp/rep; Serial.println(temp); //Print temp in degrees C to serial } Miniautómata PLC Arduino Winkhel • Basado en un microprocesador ATMega328 • Bootloader de Arduino: se programa desde el IDE Arduino Miniautómata PLC Arduino Winkhel • Características: – – – – – – – – – – – – – – 2 salidas a relé 16 A 6 salidas a relé 10 A 2 salidas 24 V aisladas. Configurables mediante jumper como salidas TTL (5V) 3 entradas digitales 12..24 V DC 3 pines GPIO. Configurables como entradas/salidas analógicas/digitales Puerto RS 485. Conexión de hasta 128 equipos en un mismo bus sin repetidor Puerto USB Puerto I2C con conector RJ11 Alimentación: 24 V DC. Para programar, admite alimentación mediante USB (no se activan los relés) Resistencia terminadora en placa mediante jumper Montaje en carril DIN normalizado Bornas enchufables. Conector para expansión I/O Conectando dispositivos móviles • Modo de conexión: wifi/bluetooth • Sistema operativo: • ¿Dificultad técnica? • Grandes posibilidades