Автоматический смыв унитаза
Добавлено: Пн авг 08, 2016 2:26 am
Нашел на форуме об Arduino и немного "доработал".
Использовано:
ESP12 (NodeMCU v3) - 1 шт.
Сенсор HC-SR04 - 1 шт.
Сервопривод Futaba S3003 - 1 шт
Для вызова из Majordomo: http://espip/FLUSH=ON
Немного корявого кода
Подключение сервопривода к оснастке в бачке (фото Big Oil):
Использовано:
ESP12 (NodeMCU v3) - 1 шт.
Сенсор HC-SR04 - 1 шт.
Сервопривод Futaba S3003 - 1 шт
Для вызова из Majordomo: http://espip/FLUSH=ON
Немного корявого кода
КодПоказать
Код: Выделить всё
#include <ESP8266WiFi.h>
#include <Servo.h>
//Настройки сети
const char* ssid = "ИМЯСЕТИ";
const char* password = "Пароль";
//Указываем пины для ног HC-SR04
const int trigPin = 5;
const int echoPin = 4;
Servo servo; // Создаем объект servo для управления сервоприводом
int sensor=0;
int PreparingToFlush=0;
int sample1;
int sample2;
int sample3;
int sample4;
WiFiServer server(80);
void setup() {
Serial.begin(115200);
servo.attach(14); // Указываем что сервопривод висит на 2-м пине
WiFi.begin(ssid, password); // Подключаемся к сети WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
server.begin(); // Запускаем сервер
}
void loop() {
// немного магии
long duration, cm;
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
cm = (duration/2) / 29.1;
Serial.print(cm);//Пишем в консоль результаты заклинания
Serial.println();
sensor=cm;
if (PreparingToFlush==0){
if (sensor < 100){ //Если засекли цель
delay(1000); // Ждём
sample1=cm; //Берем пробы для усреднения
Serial.println("Sensing");
delay(300);
sample2=cm;
delay(300);
sample3=cm;
delay(400);
sample4=cm;
sensor= (sample1 + sample2 + sample3 + sample4)/4; //и усредняемся
if (sensor < 100){ // Убеждаемся что цель на месте
PreparingToFlush=1;
digitalWrite(13, HIGH);
Serial.println(sensor);
}
}
}
if (PreparingToFlush==1){ //Если цель была засечена
if (sensor > 100){ // и если цель ушла
delay(1000);
sensor=cm;
if (sensor > 100){
Serial.println("I show you how deep the rabbit-hole goes...");
servo.write(175); //Смываем
digitalWrite(13, LOW);
delay(9000);
servo.write(3);
delay(1000);
PreparingToFlush=0; //Сбрасываем тригер
}
}
}
// Удостоверямся что подключены к WiFi
WiFiClient client = server.available();
if (!client) {return;}
//Ждем когда клиент что-нибудь пришлет
while(!client.available()){delay(1);}
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// Совпадение
if (request.indexOf("/FLUSH=ON") != -1) {
Serial.println("I show you how deep the rabbit-hole goes...");
servo.write(175); //Смываем
digitalWrite(13, LOW);
delay(9000);
servo.write(3);
delay(1000);
}
// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("FLUSH ");
client.println("<br><br>");
client.println("Click <a href=\"/FLUSH=ON\">here</a> to FLUSH <br>");
client.println("</html>");
delay(1);
}