220 V ahelasse on lisatud valgusallikas (toide näiteks välisukse kellanupult)
Ülalnimetatud valgusallika lähedal paikneb (kontakivabalt) LDR (Light Decreasing Resistance) ja tolle juhtme otsas tolkneb mikrokontroller.
Kui 220V ahela lamp süttib siis LDR takistus väheneb ja mikrokontrolleri analogsisendi pinge kasvab ning
selle signaaliga võib juba ohutult edasi toimetada, näiteks saata telefoni (Telegram, Blynk vmi) teate, et keegi kolistab ukse taga isegi siis kui Teid ise kodus ei ole.
Sellist lahendust saab rakendada ka mis tahes muu valgussignaali püüdmiseks juhul kui Te ei tohi või ei taha kontrollitava seadme sisusse tungida: suitsuandur, valvesignalisatsioon, televiisor jne.
Kood ESP8266 peale
// ***************************
// valvesüsteemi led kontroll versioon 2
// Kasutades ESP8266 vesr 2.6.3 lisa setup() client.setInsecure();
// Downgrade the "ArduinoJson" library to 5.x through the library manager,
// ***************************
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
char ssid[] = "fffffffff"; // your network SSID (name)
char password[] = "cccccccc"; // your network key
#define BOTtoken "xxxxxxxx:yyyyyyyyy--zzzzzzzzzzzzzzzzzzz"
#define chid "11111111" // chat id
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
String msge = "-- xxxxxx --"; // teade telegram ei ole valves
String msgv = "** VALVES **"; // teade telegram valves
int tase = 600; // fototransistori lülituse tase
int m = 0; // staatuse flag
int rm = 0; // staatuse flag
uint32_t tim; // timer
int c = 0; // counter
int v = 0; // valves couner
int e = 0; // ei-valves counter
int k = 3; // count level x sama signaal
int f; // def LDR
int t = 10 * 1000; // def void() tsükli sagedus (s)
void setup() {
Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was Previously connected
WiFi.mode(WIFI_STA);
client.setInsecure();
WiFi.disconnect();
delay(100);
//Serial.print("Connecting Wifi: ");
//Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(F("."));
delay(500);
}
bot.longPoll = 60;
Serial.println(F(""));
Serial.println(F("WiFi connected"));
Serial.print(F("IP address: "));
Serial.println(WiFi.localIP());
Serial.println(F("=> Restart"));
bot.sendMessage(chid, "=> Restart", "");
kontr();
}
void kontr() {
for (int i = 0; i < k; i++) {
ldr();
delay(t/5);
//Serial.println(i);
if ((f < tase) && ((m == 2) || (m == 0))) {
v = v + 1;
}
if ((f >= tase) && ((m == 1) || (m == 0))) {
e = e - 1;
}
c++;
if (c == k) {
if (v == k) {
valve();
}
if (e == -k) {
ei();
}
c = 0;
v = 0;
e = 0;
}
}
}
void valve() {
//msgv = "** ok ** // " + String(f);
bot.sendMessage(chid, msgv, "");
Serial.println(msgv);
m = 1;
}
void ei() {
//msge = "-- ei -- // " + String(f);
bot.sendMessage(chid, msge, "");
Serial.println(msge);
m = 2;
}
void ldr() {
f = analogRead(A0);
delay(100);
if (isnan(f)) {
//Serial.println(F("Failed to read photoresistor!"));
return;
}
}
void vota() {
int x = bot.getUpdates(bot.last_message_received + 1);
while (x) {
for (int i = 0; i < x; i++) {
String text = bot.messages[i].text;
text.toUpperCase();
if (text == "ah") {
rm = 1; // rst staatus
m = 0;
kontr();
}
if ((text == "restart") && (rm == 1)) {
ESP.restart();
}
}
x = bot.getUpdates(bot.last_message_received + 1);
}
}
void loop() {
if ((millis() > tim) ) {
vota();
kontr();
tim = millis() + t;
}
}