Paso 7: Descripción del código
Declaración de variables:
En primer lugar se incluye la biblioteca de la manera que se ha descrito antes. Como resultado la siguiente línea se incluyen en el código.
#include "sensorflare/sensorflare.h"
Para cada pin que queremos declarar un PWM, salida y control remoto a través de Sensorflare se dará un "PWMout" objeto y asociados el pin específico. En el ejemplo que se conecta un led en A0, entonces el objeto llamado pwm recibe como parámetro A0. La intensidad de luz es controlada remotamente por una generación de una señal PWM con el ciclo de trabajo entre 0 y 255.
SensorFlare::PWMOut pwm(A0);
Ahora es necesario declarar un objeto para cada variable que valor queremos poder acceder a través de la plataforma Sensorflare. Las variables pueden ser publicadas en la nube del núcleo de la chispa como privado (sólo usted podrá acceder a sus valores) o público (todos los usuarios de chispa pueden acceder a sus valores desde la nube). Entonces en el ejemplo se declara 2 varTem objeto y varPin que hacen referencia a 2 variables que se publicarán como público de chispa y acceso de su cuenta de Sensorflare por la temperatura de nombres y pir respectivamente. Otro varLight de un objeto que hará referencia a una variable privada en la nube de la chispa y se accede desde tu cuenta de Sensorflare por el nombre de luz.
//Both methods initialized the variable that will be published as PUBLIC <br>SensorFlare::VarPublish varTem("temperature"); SensorFlare::VarPublish varPir("pir","PUBLIC"); //Initialized the variable that will be published as PRIVATE SensorFlare::VarPublish varLight("light","PRIVATE");
Debe declarar las variables que se publicarán más adelante.
float temperature; float light; int status;
Finalmente debe ser declarar cualquier otra variable que quería utilizar en el programa.
int tem_pin=A3; int light_pin=A4; int pir_pin=D0; int new_status; bool change;
Setup():
La función de configuración sólo ejecuta uno y generalmente se utiliza para inicializar variables, funciones y modos de pin. Es necesario llamar al método "begin()" de cada objeto que se ha definido antes.
pwm.begin(); varTem.begin(temperature); varLight.begin(light); varPir.begin(status);
Eje suplementario que no es control remoto y será el Pin de entrada digital para el sensor de PIR.
pinMode(pir_pin,INPUT);
Loop()
La función loop() bucles consecutivamente, lo que permite el programa cambiar y responder.
El sensor analógico incluido (temperatura y foto resistor) ofrece, en sus respectivas entradas analógicas de un núcleo, un voltaje entre 0 a 3, 3V que es proporcional a la variación de la temperatura y la luz en el medio ambiente. La base utiliza un convertidor analógico digital de 12 pedacitos que una señal de 0 a 3, 3V en valores de 0 a 4095 cuando se llama a la función "analodRead()". En primer lugar, se debe calcular la tensión que corresponde al valor de la lectura.
El sensor de temperatura LM335 específico da una tensión proporcional a la temperatura en grados Kelvin con una sensibilidad de 10mV/K. Entonces la temperatura en Kelvin se logrará convertir el voltaje a las unidades de mV y dividido entre la sensibilidad. Para la expresión final de la temperatura en la esperada unidad (° C) realiza la conversión de Kelvin restar 273.15 (el 0 correspondiente en grados Kelvin).
La luminosidad, la intensidad de la luz, se puede calcular mediante las relaciones del sensor que ha sido proporcionado en el antes de la sección del manual. En primer lugar el foto resistor valor en KΩ y luego la equivalente luminosidad en Lux.
// Temperature sensor float tem= analogRead(tem_pin); // read the value from the sensor // The returned value from the Core is going to be in the range from 0 to 4095 // Calculate the voltage from the sensor reading float voltage = (tem * 3.3) / 4095; float deg =voltage* 100; // multiply by 100 to get degrees in K temperature = deg - 273.15; // subtract absolute zero to get degrees Celsius //Luminosity float photocell= analogRead(light_pin); // read the value from the sensor // The returned value from the Core is going to be in the range from 0 to 4095 // Calculate the voltage from the sensor reading float Vphotocell = ((photocell * 3.3) / 4095); float rl=(Vphotocell*10)/(3.3-Vphotocell);//Photoresistor value in KΩ float value=500/rl;//luminosity light= (int) value;
El PIR proporciona una señal digital (1 cuando se detecta un movimiento y 0 si no se mueve actualmente) que se lee a través de la entrada digital correspondiente de la base. El evento de interés en este caso es cuando el sensor detecta un movimiento, representan por una transición de 0 a 1 (el estado de la variable va a cambiar su valor a 1) en la entrada respectiva cuando comienza el movimiento y una transición de 1 a 0 cuando la parada (el estado de la variable será 0). Entonces un evento se publicará cada vez que una transición en el pin específico. El código detecta la transición de PIR y publicar cada vez que eso sucedió. Para esto se ha utilizado el método "Publish(Variable,period)" en el que la variable a publicar es el estado y se publica inmediatamente cuando el método es llamado por seleccionar un período de 0.
//Find the change of state of the PIR sensor. Recognize move new_status=digitalRead(pir_pin); if (status!=new_status){ status=new_status; change=TRUE; } //Publish every time that exist a change in the pin on which is connect the PIR output if (change==TRUE) { varPir.Publish(status,0);//Publish the variable at the called method time change=FALSE; }
La temperatura y la luminosidad deben publicarse periódicamente - en este caso cada 15 segundos es suficiente. El "Publish(Variable,period)" se llamará método para todos los objetos que representan cada variable que quieres que sea publicado por asociada la Variable respectiva para publicar y un período de 15 segundos.
varTem.Publish(temperature,15); varLight.Publish(light,15);