Paso 4: El código
Tenemos toda la electrónica lista para usar ahora, así que vamos a cargar el código. He puesto un enlace de más abajo que te llevará a un público esencial en GitHub donde puede ver todos mi código en un formato perfecto, porque el código mantenido cambiante y desordenado un poco cuando directamente pegarlo como código aquí, pero lo he hecho dos maneras. También debe haber un archivo ".ino" en este paso que se descargará como un archivo IDE para abrir con el programa de código de Arduino.
Como habrás dado cuenta, al principio del código incluyo algunas bibliotecas, por lo que he subido todos los que he utilizado y que no vienen ya con el programa de Arduino para este paso. Si no sabes cómo instalar bibliotecas revisa este tutorial de Arduino que lo explica muy bien: bibliotecas LiquidCrystal la Instalación de bibliotecasy el alambre están ya vienen con el programa.
Si desea cambiar el tiempo de para que la pantalla permanece encendida luego cambiar el valor que tiene que llegar en el estado mientras que en la línea 60. O si desea cambiar el tiempo entre cada actualización de las lecturas de entonces cambiar el delay() en línea 127.
Y si la lectura de EMF siempre es alta o no alta, entonces puede jugar con if declaraciones a partir de la línea 99, cambiando los valores según el problema.
Por favor lea los comentarios para entender el código. La parte entera de la EMF se complica bastante, si desea una explicación más detallada sobre esta parte revisa este enlace: http://www.aaronalai.com/emf-detector
#include <dht.h> //Here we include all the libraries that we downloaded...#include <BMP085.h>#include <Wire.h>#include <LiquidCrystal.h> #define dht_apin A2 //saying what pin the DHT module should read the info.#define NUMREADINGS 15 // here we are defining NUMREADINGS as 15 data values; raise this number to increase data smoothing. This is for the EMF. int senseLimit = 15;int probePin = A0; //setting probePin as analog 0.int val = 0; // reading from probePin dht DHT; BMP085 bmp; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //starting the lcd with the pins we assigned. const int inUse = 8; //this will be the pin where the tilt switch is connected to.int i = 0;const int screen = 6; int readings[NUMREADINGS]; // the readings from the analog inputint index = 0; // the index of the current readingint total = 0; // the running totalint average = 0; void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); Serial.begin(9600); bmp.begin(); // Print a message to the LCD. pinMode(inUse, INPUT); pinMode(screen, OUTPUT); for (int i = 0; i < NUMREADINGS; i++) readings[i] = 0;} void loop() { i = 0; if (digitalRead(inUse) == HIGH) { lcd.clear(); digitalWrite(screen, LOW); } else { while (i < 30) { digitalWrite(screen, HIGH); DHT.read11(dht_apin); // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): //Print a message to second line of LCD lcd.clear(); lcd.setCursor(8, 0); lcd.print((bmp.readPressure() + 2000) / 100); Serial.println(bmp.readPressure()); lcd.print("hPa"); lcd.setCursor(1, 1); lcd.print(DHT.humidity); Serial.println(DHT.humidity); lcd.print("%"); lcd.print(" "); lcd.print(DHT.temperature); lcd.print("C"); val = analogRead(probePin); // take a reading from the probe lcd.setCursor(0, 0); lcd.print("IE"); if (val >= 1) { // if the reading isn't zero, proceed val = constrain(val, 1, senseLimit); // turn any reading higher than the senseLimit value into the senseLimit value val = map(val, 1, senseLimit, 1, 1023); // remap the constrained value within a 1 to 1023 range total -= readings[index]; // subtract the last reading readings[index] = val; // read from the sensor total += readings[index]; // add the reading to the total index = (index + 1); // advance to the next index if (index >= NUMREADINGS) { // if we're at the end of the array... index = 0; // ...wrap around to the beginning } average = total / NUMREADINGS; Serial.println(average); if (average > 150) { //checking the value of the average and printing a ">" if it's significant. lcd.print(">"); } if (average > 350) { //checking again, but this time for a higher value. lcd.print(">"); } if (average > 550) { // and so on... lcd.print(">"); } if (average > 750) { lcd.print(">"); } if (average > 950) { lcd.print(">"); } } i += 1; delay(1000); } }}