Está en la página 1de 32

INSTALACIÓN

DE ARDUINO
LM35 & DIMMER
ROBOTDYN
MSC. ING JUAN APESTEGUIA
ARDUINO UNO

 DESCARGAR DE LA PAGINA OFICIAL DE ARDUINO EL PROGRAMA (ARDUINO IDE 2.03)


https://downloads.arduino.cc/arduino-ide/arduino-ide_2.0.3_Windows_64bit.exe
 UNA VEZ INSTALADO CONFIGURAR EL ARDUINO UNO Y EL PUERTO COM CORRESPONDIENTE EN
MI CASO COM3
ARDUINO UNO (LM35)

 VAMOS A PROBAR UN PROGRAMA CON EL SENSOR DE TEMPERATURA LM35


 EL SENSOR TIENE 3 PINES LOS CUALES HAY QUE CONECTAR AL ARDUINO UNO (3.3V , A0 y GND)

ES RECOMENDABLE
SOLDAR LOS CABLES
AL SENSOR
DIRECTAMENTE Y
LUEGO PORTEGER LOS
TERMINALES CON
CINTA AISLANTE O
TERMOCONTRAIBLE
ARDUINO UNO (LM35)

/* LECTOR DE TEMPERATURA CON ARDUINO*/


// Declaración de variables globales
float tempC; // Variable para almacenar el valor obtenido del sensor (0 a 1023)
int pinLM35 = 0; // Variable del pin de entrada del sensor (A0)

void setup() { // Configuramos el puerto serial a 9600 bps


Serial.begin(9600);
}

void loop() { // Con analogRead leemos el sensor, recuerda que es un valor de 0 a 1023
tempC = analogRead(pinLM35);
tempC = (5.0 * tempC * 100.0)/1024.0; // Calculamos la temperatura con la fórmula
Serial.print(tempC); // Envía el dato al puerto serial
Serial.println(""); // Salto de línea también es valido Serial.print(“\n");
delay(1000); // Esperamos un tiempo para repetir el loop |1000 MILISENGUNDOS| (1 segundo)

}
ARDUINO UNO (LM35)

AHORA PASAMOS EL CODIGO AL ARDUINO , LO COMPILAMOS Y LO GUARDAMOS EN UNA CARPETA , ARDUINO IDE ES
LENGUAJE C++, EL ARDUINO DEBE SER RECONOCIDO COMO ARDUINO UNO Y PUERTO COM1, COM2 ó COM3~COM7
EN PREFERENCIAS LE PODEMOS CAMBIAR EL IDIOMA A ESPAÑOL.
ARDUINO UNO (LM35)

LO COMPILAMOS Y LO SUBIMOS AL ARDUINO , SI HAY ERRORES ES SEGURO POR QUE NO ESTA CONECTADO
CORRECTAMENTE O POR QUE SE COMETIERON ERRORES AL TIPEAR EL CODIGO , CORREGIRLO Y SUBIR EL PROGRAMA
ARDUINO UNO (LM35)

EL ICONO CON CHECK ES PARA COMPILAR


Y LA FLECHA ES PARA SUBIR EL CODIGO AL
ARDUINO
ARDUINO UNO (LM35)

VAMOS A PROBAR NUESTRO CODIGO CON EL MONITOR SERIE QUE TRAE EL ARDUINO VER LOS DATOS RECOLECTADOS
ARDUINO UNO (LM35)

VAMOS A PROBAR NUESTRO CODIGO CON EL PLOTTER SERIE QUE TRAE EL ARDUINO VER LOS DATOS GRAFICADOS
ARDUINO UNO (LM35)

VAMOS A EXPORTAR LOS DATOS DEL PUERTO SERIAL PARA PODER GRAFICARLO EN EXCEL :
• COPIANDO LOS DATOS DIRECTAMENTE DE LA VENTANA DE ARDUINO IDE (NO MUY EFICIENTE CUANDO SON MUCHOS DATOS)
• RECOMENDABLE USAR UN SOFTWARE DE TERCEROS QUE DESCARGA TODO EN UN ARCHIVO TXT (MONITOR SERIAL)
ARDUINO UNO (LM35)

(MONITOR SERIAL) PARA ESTO NECESITAMOS QUE EL ARDUINO IDE NO ESTE EJECUTANDO EL MONITOR SERIE YA QUE NO PUEDE HABER 2
APLICACIONES USANDO EL MISMO PUERTO
AL ABRIR EL PROGRAMA DEBEMOS CONFIGURAR EL PUERTO SERIAL QUE USA NUESTRO ARDUINO EN MI CASO EL COM3 Y 9600 BAUDIOS,EN
LOGGING DEBE ESTAR CONFIGURADO DE ESTA MANERA PARA QUE ME GENERE AUTOMATICAMENTE EL ARCHIVO TXT QUE SE LLAMARA
MONITOR SERIAL.LOG , CUANDO ESTE LISTO TODO GUARDAMOS NUESTRA CONFIGURACION EN SAVE “ DEFAULTS SETTINGS
ARDUINO UNO (LM35)

(MONITOR SERIAL) FINALMENTE LE DAMOS OPEN Y NOS MOSTRARA ESTO; UNA VENTANA CON LOS DATOS QUE SE ESTAN GENERANDO EN EL
ARDUINO Y SE HABRA CREADO UN ARCHIVO LLAMADO MONITOR SERIAL.LOG CUANDO TERMINEMOS DE CAPTURAR LOS DATOS
SIMPLEMENTE CERRAMOS LA VENTANA Y AL ABRIR EL ARCHIVO VEREMOS TODAS LAS LECTURAS , CADA VEZ QUE REPITAMOS LA CAPTURA DE
DATOS SE SOBREESCRIBIRA EL ARCHIVO MONITOR SERIAL.LOG
ARDUINO UNO (LM35)

EL CONTENIDO DE MONITOR SERIAL.LOG LO EXPORTAMOS A EXCEL, COMO SABEMOS QUE CADA EVENTO ES UN SEGUNDO LE COLOCAMOS
UNA COLUMNA CON LOS SEGUNDOS DESDE EL SEGUNDO CERO. ESCOGEMOS EL GRAFICO DE LINEAS Y OBTENEMOS ALGO ASI.
ARDUINO UNO (DIMMER ROBOTDYN)

EL DIMMER ROBOTDYN NECESITA DE UNA LIBRERÍA PARA FUNCIONAR EN ARDUINO LA CUAL SE LLAMA RBDdimmer.h PARA INSTALARLA HAY
QUE SEGUIR LOS SIGUIENTES PASOS :
• DESCARGARA LA LIBRERÍA ROBOTDYN.ZIP Y COLOCARLA EN EL ESCRITORIO
• ABRIR ARDUINO Y EN SKETCH LA OPCCION INCLUIR BIBLIOTECA Y FINALMENTE AÑADIR BIBLIOTECA.ZIP Y SELLECIONAMOS LA BIBLIOTECA
ROBOTDYN.ZIP QUE ESTA EN NUESTRO ESCRITORIO , UNA VEZ INSTALADA APARECERA UN MENSAJE QUE DICE LIBRERÍA INSTALADA,
FINALMENTE CERRAMOS ARDUINO Y LO VOLVEMOS A ABRIR. LA ENCONTRAREMOS AL FINAL DE LAS BIBLIOTECAS APORTADAS.
ARDUINO UNO (DIMMER ROBOTDYN)

EL DIMMER ROBOTDYN PERMITE CONTROLAR EL BRILLO DE UN FOCO ATRAVEZ DE LA SEÑAL PWM DE ARDUINO , PARA ELLO SE CONECTARA
EL ARDUINO CON EL DIMMER ATRAVEZ DE LOS PINES DIGITALES 2 Y 8 DEL ARDUINO PARA EL ZC Y EL PWM RESPECTIVAMENTE , ASI COMO LA
ALIMENTACION DE 5V Y GND Y FINALMENTE LA CONEXIÓN DE 220 VOLTIOS A UN TOMACORRIENTE Y A UN FOCO DE 100 WATTS.
ARDUINO UNO (DIMMER EJEMPLO 1)

/*TEMPORIZADO Y CONTROL DE BRILLO DE FOCO CON DIMMER ROBOTDYN*/


#include <RBDdimmer.h> //Librería RobotDyn
#define USE_SERIAL Serial //Definir el puerto Serial USB
#define outputPin 8 //El Pin 8 es para el PWM
#define zerocross 2 // El Pin 2 es exclusivo para Cruce por Cero
dimmerLamp dimmer(outputPin); //Inicializar el Dimmer RobotDyn
int outVal = 95; //Valor que tomara la lampara al inicio 20%(apagado)~95%(encendido)
//Se puede colocar valores entre 25 y 95 compilar y subir y ver el brillo del foco
void setup() {
USE_SERIAL.begin(9600);
dimmer.begin(NORMAL_MODE, ON); //Inicialización del Dimmer: name.begin(MODE, STATE)
}

void loop() {
delay(10000); //Tiempo de espera hasta que prenda el foco en milisegundos (en este caso 10 seg)
int preVal = outVal; //la variable preVal activa el PWM
dimmer.setPower(outVal); // setPower(0-100%); el valor de la potencia 20~95
}
ARDUINO UNO (DIMMER EJEMPLO 2)

/*CONTROL DEL BRILLO DE UN FOCO ATRAVEZ DEL PUERTO SERIE DE ARDUINO*/


#include <RBDdimmer.h>
//#define USE_SERIAL SerialUSB //Serial for boards whith USB serial port
#define USE_SERIAL Serial
#define outputPin 8
#define zerocross 2 // for boards with CHANGEBLE input pins

//dimmerLamp dimmer(outputPin, zerocross); //initialase port for dimmer for ESP8266, ESP32, Arduino due boards
dimmerLamp dimmer(outputPin); //initialase port for dimmer for MEGA, Leonardo, UNO, Arduino M0, Arduino Zero

int outVal = 20; //Valor inicial del Foco 20% (apagado)

void setup() {
USE_SERIAL.begin(9600);
dimmer.begin(NORMAL_MODE, ON); //dimmer initialisation: name.begin(MODE, STATE)
USE_SERIAL.println("El Dimmer se encuentra activo...");
USE_SERIAL.println("Coloque un valor mayor a 24 y menor a 96");
}
ARDUINO UNO (DIMMER EJEMPLO 2)
void printSpace(int val)
{
if ((val / 100) == 0) USE_SERIAL.print(" ");
if ((val / 10) == 0) USE_SERIAL.print(" ");
}
void loop() {
int preVal = outVal;
if (USE_SERIAL.available())
{
int buf = USE_SERIAL.parseInt();
if (buf != 0) outVal = buf;
delay(200);
}
dimmer.setPower(outVal); // setPower(0-100%);

if (preVal != outVal)
{
USE_SERIAL.print("Porcentaje de Brillo -> ");
printSpace(dimmer.getPower());
USE_SERIAL.print(dimmer.getPower());
USE_SERIAL.println("%");
}
delay(50);
}
ARDUINO UNO (LM35 & DIMMER ROBOTDYN)

AHORA HAREMOS UN PROYECTO EN ARDUINO UTILIZANDO LOS 2 ELEMENTOS EN SIMULTANEO Y DESCARGAREMOS LA INFORMACION PARA
ENCONTRAR LA FUNCION DE TRANSFERENCIA DE UN SISTEMA DE PRIMER ORDEN
ARDUINO UNO (LM35 & DIMMER ROBOTDYN)

PARA ELLO ARMAREMOS EL CIRCUITO COMO EL MOSTRADO DONDE INCORPORAMOS EL LM35 EN EL PUERTO A0 Y EL DIMMER EN LOS PUERTOS
D2 Y D8 EN EL ARDUINO CON SUS ALIMENTACIONES DE 3.3V Y 5V RESPECTIVAMENTE
ARDUINO UNO (LM35 & DIMMER ROBOTDYN)

COLOCAR EL CIRCUITO EN UN BASE DE MADERA Y FIJAR LOS COMPONENTES PARA QUE NO SE MUEVAN , COLOCAR EL SENSOR LM35 LO MAS
CERCA DEL FOCO DE 100 WATTS PERO SIN TOCARLO PARA ELLOS UTILIZAR UN ALAMBRE Y SUJETARLO A LA MADERA.
*OPCCIONAL COLOCAR UN VENTILADOR DE PC PARA HACER QUE ENFRIE MAS RAPIDO EL SENSOR LM35.
ARDUINO UNO (PROGRAMA PARTE 1)

/*-------------------DIMMER ROBOTDYN--------------------------------------*/ #include <RBDdimmer.h>


//Libreria RobotDyn
#define outputPin 8 //El Pin 8 es para el PWM
#define zerocross 2 // El Pin 2 es exclusivo para Cruce por Cero
dimmerLamp dimmer(outputPin); //Inicializar el Dimmer RobotDyn
const int ledPin = 8; // Pin D8 activa el PWM
int ledState = LOW; // ledState usado por el LED
unsigned long previousMillis = 0; // esto guarda el ultimo estado del led
const long interval = 10000; // intervalo en que el foco encenderá(10000 milisegundos)
/*-------------------SENSOR LM35------------------------------------------*/
float tempC; // Variable para almacenar el valor obtenido del sensor (0 a 1023)
int pinLM35 = 0; // Variable del pin de entrada del sensor (A0)
/*------------------------------------------------------------------------*/

void setup() {
Serial.begin(9600); // Puerto serial en 9600 Baudios
dimmer.begin(NORMAL_MODE, OFF); //dimmer initialisation: name.begin(MODE, STATE)
pinMode(ledPin, OUTPUT); // set the digital pin as output

}
ARDUINO UNO (PROGRAMA PARTE 2)

void loop() {
/*-------------------SENSOR LM35------------------------------------------*/
tempC = analogRead(pinLM35); //Leemos el Sensor Lm35 valores entre 0 y 1023
tempC = (5.0 * tempC * 100.0)/1024.0; //Calculamos la temperatura en grados °C
delay(1000); //Tiempo entre lecturas 1000 milisegundos ( 1 segundo)
Serial.print(tempC); // Envia el dato al puerto serial
Serial.println(""); // Salto de línea
/*----------------------DIMMER ROBOTDYN----------------------------------*/
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = HIGH;
}
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}
ARDUINO UNO (LM35 & DIMMER ROBOTDYN)

EL PROGRAMA NOS PERMITIRA


MONITOREAR LA TEMPERATURA DEL
LM35 CUANDO EL FOCO SE ENCIENDA
A LOS 10 SEGUNDOS Y REGISTRAR EL
AUMENTO GRADUAL DE LA
TEMPERATURA QUE SE COMPORTA
COMO UN SISTEMA DE PRIMER ORDEN

𝒕

𝒚 𝒕 = 𝑲 ∗ ∆𝒖(𝟏 − 𝒆 ) 𝝉
ARDUINO UNO (LM35 & DIMMER ROBOTDYN)

CUANDO VEAMOS QUE LA TEMPERATURA ALCANZA UN VALOR CONSTANTE EL CUAL YA NO VARIA PROCEDEMOS CERRAR EL MONITOR SERIAL
Y PASAMOS A ABRIR LOS DATOS CAPTURADOS EN EXCEL
ARDUINO UNO (LM35 & DIMMER ROBOTDYN)

EN EXCEL PROCEDEMOS A AGREGAR UNA COLUMNA A QUE CONTENDRA LO SEGUNDOS INICIANDO DESDE 0 HASTA EL ULTIMO VALOR LUEGO
PROCEDEMOS A GRAFICAR LOS DATOS PARA OBTENER UNA PRIMERA APROXIMACION QUE COMO VEMOS ES DE PRIMER ORDEN
ARDUINO UNO (LM35 & DIMMER ROBOTDYN)

AHORA AGREGAREMOS UNA NUEVA COLUMNA DONDE ESTARA EL VALOR DE LA RESTA DE LA COLUMNA B ( TEMPERATURAS) MENOS EL VALOR
MINIMO DE LA TEMPERATURA PARA HACER QUE NUESTRO NUEVO ORIGEN NO SEA EN 26 GRADOS COMO RESULTO EN MIS MEDICIONES, SINO
EN 0 GRADOS CENTIGRADOS. ( ESTO SE HACE PARA PASARLO A VARIABLES DE DESVIACION
FINALMENTE MOVEMOS NUESTRA GRAFICA A LA SERIE DE DATOS DE LA COLUMNA A Y LA COLUMNA C
ARDUINO UNO (LM35 & DIMMER ROBOTDYN)

AHORA PROCEDEMOS A AGREGAR 2 VALORES K Y TAU


EL VALOR DE K OSEA LA GANANCIA VENDRIA A HACER LA TEMPERATURA MAXIMA ALCANZADA QUE SERIA EN MI CASO 70 GRADOS ENTRE EL
VALOR ESCALON ▲u = 100 – 0 = 100 (0 = OFF 100 = ON) 70/100 = 0.70
K = 70 ▲u = 100
LA CONSTANTE DE TIEMPO ES CUANDO TENGO EL 0.632 DEL TIEMPO ( SEGÚN FORMULA ) OSEA EL 63% DE LA GANANCIA 0.623 * 70 = 44.24
ENTONCES BUSCAMOS ENTRE LAS LECTURAS EL TIEMPO QUE COINCIDA CON ESA TEMPERATURA 44 °C APROXIMADAMENTE

EN MI CASO ESA TEMPERATURA SE DIO A LOS 50 SEGUNDOS ENTONCES ESE SERIA MI TAU = 50

AHORA CALCULAMOS LA FUNCION K * ▲u( 1 – EXP –T/TAU) Y LO APLICAMOS EL RESULTADO


EN UNA NUEVA COLUMNA
ALGO ASI SERIA LA FORMULA =0.7*100*(1-EXP(-A1/$I$26))
$I$26 (EN EXCEL ESTO SIGNIFICA QUE ESTE VALOR DE ESA CELDA SE MANTIENE INALTERABLE)
ARDUINO UNO (LM35 & DIMMER ROBOTDYN)

AHORA PROCEDEMOS A GRAFICAR ESA SEGUNDA SERIE DE DATOS Y COMO VEMOS ESA ES NUESTRA FUNCION DE TRANSFERENCIA
ARDUINO UNO (LM35 & DIMMER ROBOTDYN)

FINALMENTE PODEMOS MINIMIZAR EL CUADRADO DEL ERROR ENTRE LA TEMPERATURAS DE LA COLUMNA C Y D


LA FORMULA SERIA EN EXCEL =(C1-D1)^2
ARDUINO UNO (LM35 & DIMMER ROBOTDYN)

FINALMENTE PODEMOS SUMAR LOS VALORES OBTENIDOS


DEL CUADRADO DEL ERROR Y ESTO NOS DARA UN VALOR EN
MI CASO DE 2273.52

ESTE ERROR SE PUEDE MINIMIZAR USANDO LA FUNCION


SOLVER EN EXCEL LA CUAL ME DARA UN VALOR DE TAU
PARA QUE LA CURVA TENGA MENOS ERROR.
ESA FUNCION SE TIENE QUE INSTALAR YA QUE NO VIENE
POR DEFECTO EN EXCEL ES UN COMPLEMENTO

ESTABLECER OBJETIVO $E$240 ES EL VALOR DE LA SUMA DE


LOS ERRORES
CAMBIANDO LAS CELDAS DE VARIABLES $I$26 (TAU)

FINALMENTE LE DAMOS RESOLVER Y NOS DARA UN VALOR


CORREGIDO PARA NUESTRO ERROR

EN MI CASO EL VALOR CORREGIDO ES 56 PARA TAU


ARDUINO UNO (LM35 & DIMMER ROBOTDYN)

ESE VALOR DE TAU CORREGIDO 56 HACE QUE MI


FUNCION DE TRANSFERENCIA SE ACERQUE MUCHO MAS
A LOS DATOS REALES, QUE CON EL VALOR DE TAU EN 50

También podría gustarte