La segunda fase constara de optimizar todos los comandos instalados, poder manipular la mayoría de estos mediante el celular,tablet o computadora.
Ayer logramos realizar la primera prueba, en la cual podemos manipular la intensidad del foco, en este caso un Led.
Nuestro código fue el el siguiente:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int LED = 11; | |
int PB = 10; | |
int Pot = 0; | |
int intensidad; | |
int estadoBotonIncremento; | |
int estadoBotonAnteriorIncremento; | |
const int tiempoAntirebote = 10; | |
boolean bandera = false; | |
boolean banderaPot; | |
boolean antirebote(int pin){ | |
int contador = 0; | |
boolean estado; | |
boolean estadoAnterior; | |
do{ | |
estado = digitalRead(pin); | |
if(estado != estadoAnterior){ | |
contador = 0; | |
estadoAnterior = estado; | |
} | |
else{ | |
contador = contador + 1; | |
} | |
delay(1); | |
} | |
while(contador < tiempoAntirebote); | |
return estado; | |
} | |
void setup(){ | |
pinMode(LED, OUTPUT); | |
pinMode(PB, INPUT); | |
pinMode(Pot, INPUT); | |
Serial.begin(9600); | |
} | |
void loop(){ | |
estadoBotonIncremento = digitalRead(PB); | |
if(estadoBotonIncremento != estadoBotonAnteriorIncremento){ | |
if(!antirebote(PB)){ | |
if(bandera==true){ | |
digitalWrite(LED, HIGH); | |
bandera=false; | |
banderaPot=true; | |
} | |
else{ | |
digitalWrite(LED, LOW); | |
bandera=true; | |
banderaPot=false; | |
} | |
} | |
} | |
if(banderaPot ==true){ | |
intensidad = analogRead(Pot)/4; | |
analogWrite(LED,intensidad); | |
Serial.print("POT: "); | |
Serial.println(intensidad); | |
delay(10); | |
} | |
} |
En la lógica el anti rebote nos da un poco de problemas, muy pocas veces no enciende el LED a la primera pulsación.
Para el control de temperatura se utilizo un sensor LM335, y un LED RGB. Cuando la temperatura desciende el LED enciendo de color Azul, cuando aumenta de color Rojo.
El código es muy simple, declaramos el sensor como Entrada Analógica, y los LED's igual pero como salidas. Nuestras variables milivots y temperatura serán declaradas como tipo "long" por las operaciones que realizaremos.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const int sensor = 0; // entrada del sensor analogico | |
const int ledRojo = 11; //LED rojo | |
const int ledAzul = 10; //LED azul | |
long miliVolts; | |
long temperatura; | |
int brillo; | |
void setup() { | |
Serial.begin(9600); //iniciamos la comunicacion serial | |
pinMode(ledRojo,OUTPUT); | |
pinMode(ledAzul,OUTPUT); | |
} | |
void loop (){ | |
miliVolts = (analogRead(sensor)*5000L) / 1023; //calculamos los mV en la entrada | |
temperatura = (miliVolts / 10)-273.15; // calculamos la temperatura del sensor | |
brillo = map(temperatura,10, 40, 0, 255); //Ajustamos la escala de temperatura para poder usar analogRead | |
brillo = constrain(brillo, 0,255); //Limitar el rango de brillo de 0 a 255; | |
analogWrite(ledRojo, brillo); | |
analogWrite(ledAzul, 255 - brillo); //Ajustamos el color del LED | |
Serial.print ("Temperatura: "); //Enviamos la temperatura por | |
Serial.print (temperatura); //puerto serial | |
Serial.println(" grados"); | |
delay(200); ////Esperamos para no saturar el monitor | |
} |
Con map ajustaremos la escala de temperatura para poder usar analogRead y con "constrain" limitar el rango del brillo.
Por ultimo y opcional usamos el serial.print para poder visualizar los los Grados °C.
Por ultimo y opcional usamos el serial.print para poder visualizar los los Grados °C.
No hay comentarios:
Publicar un comentario