Страница 1 из 1

Автоматический смыв унитаза

Добавлено: Пн авг 08, 2016 2:26 am
C_3AXAPOB
Нашел на форуме об Arduino и немного "доработал".

Использовано:
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);
}
Подключение сервопривода к оснастке в бачке (фото Big Oil):

Re: Автоматический смыв унитаза

Добавлено: Пн авг 08, 2016 8:45 am
serghei
Жестко, круто, браво! Только до кучи прикручиваем счетчик воды, вытяжку....в общем полный фарш. Все равно в комп пялимся...в процессе. Вот только не получается использовать прерывания ,если программить из-под IDE - надо использовать родной язык...
Ps А чего смеяться - у соседа кошка ходит в туалет - только смыть не может????

Re: Автоматический смыв унитаза

Добавлено: Пн авг 08, 2016 11:53 am
Sas
обычная серва в таких условиях быстро загнется. а что будет если серва не вернется назад?

Re: Автоматический смыв унитаза

Добавлено: Пн авг 08, 2016 5:44 pm
C_3AXAPOB
Посмотрим сколько продержится. Если серва назад не вернётся вода будет сливаться в унитаз через спецотверстие в оснастке.


Отправлено с моего iPhone используя Tapatalk

Re: Автоматический смыв унитаза

Добавлено: Ср авг 10, 2016 2:30 am
C_3AXAPOB
Поправил ошибку
Исправлена ошибкаПоказать

Код: Выделить всё

#include <ESP8266WiFi.h>
#include <Servo.h>

//Настройки сети
const char* ssid = "............";
const char* password = "...........";
//Указываем пины для ног HC-SR04
const int trigPin = 12;
const int echoPin = 13;

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);
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;
Serial.println(sensor);
}
}
}

if (PreparingToFlush==1){ //Если цель была засечена
if (sensor > 100){ // и если цель ушла
servo.attach(14);    // Указываем что сервопривод висит на 2-м пине
if (sensor > 100){
Serial.println("I show you how deep the rabbit-hole goes...");
servo.write(175); //Смываем
delay(9000);
servo.write(0);
delay(1000);
PreparingToFlush=0;  //Сбрасываем тригер
servo.detach();
}
}  
} 

// Удостоверямся что подключены к WiFi
WiFiClient client = server.available();
if (!client) {return;}

//Ждем когда клиент что-нибудь пришлет
while(!client.available()){delay(1);}

// Читаем запрос
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();

// Возвращаем ответ
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>");

if (request.indexOf("/FLUSH=ON") != -1) {
servo.attach(14);    // Указываем что сервопривод висит на 2-м пине
Serial.println("I show you how deep the rabbit-hole goes...");
servo.write(175); //Смываем
delay(9000);
servo.write(0);
delay(1000);
PreparingToFlush=0;  //Сбрасываем тригер
servo.detach();
}

delay(1);
}

Re: Автоматический смыв унитаза

Добавлено: Пн авг 29, 2016 11:19 am
lanket
Sas писал(а):обычная серва в таких условиях быстро загнется. а что будет если серва не вернется назад?
А не лучше вместо сервопривода активатор от авто.
Во первых им привычнее в среде повышенной влажности.
Во вторых не зависит в открытом состоянии.

Отправлено с моего Redmi Note 3 через Tapatalk

Re: Автоматический смыв унитаза

Добавлено: Пн авг 29, 2016 1:21 pm
eygen
lanket писал(а):
Sas писал(а):обычная серва в таких условиях быстро загнется. а что будет если серва не вернется назад?
А не лучше вместо сервопривода активатор от авто.
Во первых им привычнее в среде повышенной влажности.
Во вторых не зависит в открытом состоянии.

Отправлено с моего Redmi Note 3 через Tapatalk
Не подскажешь что за "зверь" этот активатор?

Re: Автоматический смыв унитаза

Добавлено: Пн авг 29, 2016 1:27 pm
serghei
По запросу в гугле " Активатор для багажника " вылезет куча картинок.Те что с двигателем внутри ,требуют переполюсовки питания.Есть просто на базе электромагнита.

Re: Автоматический смыв унитаза

Добавлено: Пн авг 29, 2016 1:44 pm
eygen
serghei писал(а):По запросу в гугле " Активатор для багажника " вылезет куча картинок.Те что с двигателем внутри ,требуют переполюсовки питания.Есть просто на базе электромагнита.
Спасибо, теперь понял. Что то думается наверное электромагнитный в данном случае будет поинтереснее?

Re: Автоматический смыв унитаза

Добавлено: Пн авг 29, 2016 4:29 pm
Sas
Электромагнит или солиноид будет интересней
Но под него надо городить ключи и питать его уже не от дуины