Контроллер полива сада или теплицы своими руками........
Большое спасибо оригинальному разработчику этого действительно полезного проекта.
https://www.thingiverse.com/thing:3875075
Я сделал этот ремикс, поскольку клапан, который я получил из Китая, имел немного другие размеры, чем модель. Кроме того, 2 пальца оригинальной модели, удерживающие клапан на месте, сломались при вставке клапана.
Держатель клапана изменен так, чтобы он больше охватывал клапан (надеюсь, сильнее) и отрезан от сервопривода, чтобы позволить моему клапану вращаться (он соответствует оригинальной конструкции). Я также изменил форму внутреннего корпуса, чтобы избежать необходимости в опорах при печати, поэтому я мог напечатать внутренний корпус с держателем клапана на рабочей пластине, чтобы обеспечить наилучшую ориентацию слоев для обеспечения прочности. Изменение формы внутреннего корпуса означало, что размер внешнего корпуса был немного увеличен, чтобы соответствовать новым размерам внутреннего корпуса, но в остальном он не изменился. Отверстие для вала сервопривода также было удлинено, чтобы его было легче вставить.
Я также увеличил размер ручки клапана в сервоадаптере, так как тот, который я купил, имел большую ширину.
Я буду пользоваться поилкой лишь изредка, поэтому не использовал постоянное USB-соединение, упомянутое в оригинале. Вместо этого я подал напряжение 12 В от аккумулят��ра в теплице и установил небольшой модуль понижения напряжения для подачи 5 В на сервопривод и Wemos D1 mini. D1 mini использовался для управления сервоприводом и был подключен к моему домашнему серверу MQTT для получения команд, указывающих ему открыть (вода) или закрыть (нет воды). Я не использовал RTC в соответствии с исходной конструкцией, поскольку мой сервер домашней автоматизации знает время и когда подавать команды.
Код запоминает и сохраняет положение клапана в файловую систему (spiffs) на D1 mini, это на случай перебоя в питании и должно предотвратить закрытие сервопривода, когда он уже закрыт, или открытие, если он уже в открытом положении — не уверен, что это абсолютно необходимо, но включить его не помешало.
Код, используемый для Wemos D1 mini, приведен ниже.
#include #include #include «Adafruit_MQTT.h» #include «Adafruit_MQTT_Client.h» #include «FS.h» #include
Сервопривод;
/************************* Точка доступа Wi-Fi (ИЗМЕНИТЬ ЭТО) ********************************/ #define WLAN_SSID «YourSSIDHere» #define WLAN_PASS «YourWirelessPasswordHere» /************************ Настройка MQTT (ИЗМЕНИТЬ ЭТО)*********************************/ #define MQTT_SERVER «MQTTServerIP» #define MQTT_SERVERPORT 1883 #define MQTT_USERNAME «MQTTSERVERUSERNAME» #define MQTT_KEY «MQTTSERVERPASSWORD»
/************ (Не изменять)******************/ // Создайте класс ESP8266 WiFiClient для подключения к серверу MQTT. Клиент WiFiClient;
// Настройте класс клиента MQTT, передав клиент WiFi и сервер MQTT, а также данные для входа. Adafruit_MQTT_Client mqtt(&client, MQTT_SERVER, MQTT_SERVERPORT, MQTT_USERNAME, MQTT_KEY); /****************************** Каналы (ИЗМЕНИТЬ)***************************************/ Adafruit_MQTT_Subscribe GreenhouseWateringcommandsub = Adafruit_MQTT_Subscribe(&mqtt, "/GreenhouseWatering/command");
/*************************** Код эскиза************************************/ int state = 0; интервал prevstate = 0;
int Сервопин = D7;
void MQTT_connect () { int8_t ret; если ( WiFi.status() != WL_CONNECTED) { WiFiConnect(); } Если (mqtt.connected()) { return; } Serial.print(«Подключение к MQTT...»); интервал я = 0; while ((ret = mqtt.connect()) != 0) { // соединение вернет 0 для подключенного Serial.println(mqtt.connectErrorString(ret)); Serial.println(«Повторная попытка подключения MQTT через 5 секунд...»); mqtt.disconnect(); задержка(5000); // ждем 5 секунд i++; если (i > 50) {ESP.restart(); } } Serial.println(«MQTT подключен!»); }
void WiFiConnect () {задержка (500);
Serial.print(«Подключение к»); Serial.println(WLAN_SSID); Wi-Fi.режим(WIFI_STA); WiFi.begin(WLAN_SSID, WLAN_PASS); интервал я = 0; while (WiFi.status() != WL_CONNECTED) { задержка (500); Serial.print("."); я++; если (я > 50) { ESP.restart(); } } Serial.println(); Serial.println(«Wi-Fi подключен»); Serial.println(«IP добавить





























