Подключение исполнительных устройств, датчиков, контроллеров.
Модератор: immortal
-
C_3AXAPOB
- Сообщения: 510
- Зарегистрирован: Ср июн 08, 2016 4:17 pm
-
Благодарил (а):
124 раза
-
Поблагодарили:
101 раз
Сообщение
C_3AXAPOB » Пн авг 08, 2016 2:26 am
Нашел на форуме об 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):
-
Вложения
-
- 2.jpg (53.95 КБ) 7989 просмотров
-
- 1.jpg (45.7 КБ) 7989 просмотров
-
serghei
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
-
Благодарил (а):
303 раза
-
Поблагодарили:
282 раза
Сообщение
serghei » Пн авг 08, 2016 8:45 am
Жестко, круто, браво! Только до кучи прикручиваем счетчик воды, вытяжку....в общем полный фарш. Все равно в комп пялимся...в процессе. Вот только не получается использовать прерывания ,если программить из-под IDE - надо использовать родной язык...
Ps А чего смеяться - у соседа кошка ходит в туалет - только смыть не может????
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
Sas
- Сообщения: 207
- Зарегистрирован: Вт июл 12, 2016 6:16 pm
-
Благодарил (а):
2 раза
-
Поблагодарили:
14 раз
Сообщение
Sas » Пн авг 08, 2016 11:53 am
обычная серва в таких условиях быстро загнется. а что будет если серва не вернется назад?
-
C_3AXAPOB
- Сообщения: 510
- Зарегистрирован: Ср июн 08, 2016 4:17 pm
-
Благодарил (а):
124 раза
-
Поблагодарили:
101 раз
Сообщение
C_3AXAPOB » Пн авг 08, 2016 5:44 pm
Посмотрим сколько продержится. Если серва назад не вернётся вода будет сливаться в унитаз через спецотверстие в оснастке.
Отправлено с моего iPhone используя Tapatalk
-
C_3AXAPOB
- Сообщения: 510
- Зарегистрирован: Ср июн 08, 2016 4:17 pm
-
Благодарил (а):
124 раза
-
Поблагодарили:
101 раз
Сообщение
C_3AXAPOB » Ср авг 10, 2016 2:30 am
Поправил ошибку
Код: Выделить всё
#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);
}
-
lanket
- Сообщения: 1168
- Зарегистрирован: Вт окт 14, 2014 11:27 pm
- Откуда: Санкт-Петербург
-
Благодарил (а):
260 раз
-
Поблагодарили:
163 раза
Сообщение
lanket » Пн авг 29, 2016 11:19 am
Sas писал(а):обычная серва в таких условиях быстро загнется. а что будет если серва не вернется назад?
А не лучше вместо сервопривода активатор от авто.
Во первых им привычнее в среде повышенной влажности.
Во вторых не зависит в открытом состоянии.
Отправлено с моего Redmi Note 3 через Tapatalk
-
eygen
- Сообщения: 393
- Зарегистрирован: Чт сен 25, 2014 5:37 pm
- Откуда: Екатеринбург
-
Благодарил (а):
25 раз
-
Поблагодарили:
52 раза
Сообщение
eygen » Пн авг 29, 2016 1:21 pm
lanket писал(а):Sas писал(а):обычная серва в таких условиях быстро загнется. а что будет если серва не вернется назад?
А не лучше вместо сервопривода активатор от авто.
Во первых им привычнее в среде повышенной влажности.
Во вторых не зависит в открытом состоянии.
Отправлено с моего Redmi Note 3 через Tapatalk
Не подскажешь что за "зверь" этот активатор?
-
serghei
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
-
Благодарил (а):
303 раза
-
Поблагодарили:
282 раза
Сообщение
serghei » Пн авг 29, 2016 1:27 pm
По запросу в гугле " Активатор для багажника " вылезет куча картинок.Те что с двигателем внутри ,требуют переполюсовки питания.Есть просто на базе электромагнита.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
eygen
- Сообщения: 393
- Зарегистрирован: Чт сен 25, 2014 5:37 pm
- Откуда: Екатеринбург
-
Благодарил (а):
25 раз
-
Поблагодарили:
52 раза
Сообщение
eygen » Пн авг 29, 2016 1:44 pm
serghei писал(а):По запросу в гугле " Активатор для багажника " вылезет куча картинок.Те что с двигателем внутри ,требуют переполюсовки питания.Есть просто на базе электромагнита.
Спасибо, теперь понял. Что то думается наверное электромагнитный в данном случае будет поинтереснее?
-
Sas
- Сообщения: 207
- Зарегистрирован: Вт июл 12, 2016 6:16 pm
-
Благодарил (а):
2 раза
-
Поблагодарили:
14 раз
Сообщение
Sas » Пн авг 29, 2016 4:29 pm
Электромагнит или солиноид будет интересней
Но под него надо городить ключи и питать его уже не от дуины