Descripción
Esta vez paso a explicar como realicé este mecanismo de aviso acústico-luminoso, compuesto por tres partes fundamentales.
- Un sensor de lluvia de intemperie (parte exterior de la ventana).
- Un emisor de RF con indicador luminoso (interior de la ventana).
- Un receptor de RF con indicador sonoro-luminoso y programable (en otra habitación).
La idea surgió cuando mi esposa cansada de los días primaverales en los que el tiempo atmosférico está como loco, acababa enfadada porque la ropa del tendedero se le mojaba y prefería recogerla para tenderla más tarde cuando el pequeño chaparrón hubiera pasado.
Lógicamente, el asunto sería más fácil sin usar señales de radio frecuencia pues así solo se necesitaría un sensor y un aparato receptor, pero como mi naturaleza es aventurera pensé que este sería un gran reto y además mejoraría la estética del artefacto pues el receptor podría colocarse en cualquier parte o habitación sin necesidad de estar junto a la ventana. Además se eliminarían cables antiestéticos.
[ngd-single-post-view]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
/********************************** Juan Carlos Pedrajas del Molino 20/02/2021 Termómetro de pared /********************************** */ #include <Wire.h> #include <Adafruit_MLX90614.h> #include <TM1637.h> TM1637 pantalla(4, 5); Adafruit_MLX90614 termometro = Adafruit_MLX90614(); int rojo = 7; int verde = 8; int buzz = 2; int ir = 12; int pinpresencia = 3; int brillo = 4; float tempe; float ambiente; boolean presencia = 0; boolean activado = 0; float maxima; float errormaximo = 45; float errorminimo = 30.0; float fiebre = 36.3; void setup() { pinMode (rojo, OUTPUT); pinMode (verde, OUTPUT); pinMode (buzz, OUTPUT); pinMode (ir, OUTPUT); pinMode (pinpresencia, INPUT); Serial.begin(9600); delay (1500); termometro.begin(); Serial.println("Inicio"); //Serial Serial.println("Testeando..."); delay (150); tone (buzz, 1500); // sonido delay (100); noTone (buzz); pantalla.begin(); //Pantalla 7 segmentos pantalla.setBrightness(brillo); pantalla.display("HOLA"); delay(1500); pantalla.clearScreen(); digitalWrite (verde, HIGH); // Luces indicadoras digitalWrite (rojo, LOW); delay(200); digitalWrite (verde, LOW); digitalWrite (rojo, HIGH); delay (200); digitalWrite (rojo, LOW); digitalWrite (ir, HIGH); pantalla.display(00.00); tone (buzz, 1500); // sonido delay (100); noTone (buzz); } void loop() { // ambiente = termometro.readAmbientTempC(); // tempe = termometro.readObjectTempC(); presencia = digitalRead (pinpresencia); while (presencia == 0) { activado = 1; digitalWrite (ir, LOW); delay (200); tempe = termometro.readObjectTempC(); pantalla.display(tempe); if (tempe > maxima) { maxima = tempe; } digitalWrite (ir, HIGH); delay (500); presencia = digitalRead (pinpresencia); } if (presencia == 1 && activado == 1) { activado = 0; // Serial.println("maxima:"); // Serial.println(maxima); pantalla.display(maxima); delay (200); if (maxima <= errorminimo || maxima >= errormaximo) { // cuando la medida sea demasiado baja o demasiado alta tone (buzz, 250); delay (400); noTone (buzz); digitalWrite (verde, HIGH); digitalWrite (rojo, HIGH); delay(150); digitalWrite (verde, LOW); digitalWrite (rojo, LOW); delay (150); digitalWrite (verde, HIGH); digitalWrite (rojo, HIGH); delay(150); digitalWrite (verde, LOW); digitalWrite (rojo, LOW); delay (150); digitalWrite (verde, HIGH); digitalWrite (rojo, HIGH); tone (buzz, 250); delay (1000); noTone (buzz); digitalWrite (rojo, LOW); digitalWrite (verde, LOW); pantalla.clearScreen(); } if (maxima <= fiebre && maxima > errorminimo) { //cuando la medida sea correcta digitalWrite (verde, HIGH); tone (buzz, 1250); delay (100); noTone (buzz); delay (1500); digitalWrite (verde, LOW); pantalla.clearScreen(); } if (maxima <= errormaximo && maxima > fiebre) { //cuando la medida sea de fiebre digitalWrite (rojo, HIGH); tone (buzz, 250); delay (150); noTone (buzz); delay (150); digitalWrite (rojo, LOW); delay (150); digitalWrite (rojo, HIGH); tone (buzz, 250); delay (150); noTone (buzz); delay (150); digitalWrite (rojo, LOW); delay (150); digitalWrite (rojo, HIGH); tone (buzz, 250); delay (1000); noTone (buzz); delay (550); digitalWrite (rojo, LOW); pantalla.clearScreen(); } maxima = 0; } } |