Porte de poulailler connectée

A la fin du confinement, on a fait l’acquisition de deux poules pondeuses. Elles logent dans un poulailler avec une porte coulissante.

J’ai vu pas mal de tutos pour gérer des portes de types « guillotines » mais rien de vraiment concrets pour les portes coulissantes.

J’ai donc pas mal réfléchis aux solutions possibles et le poulailler ne me permettant pas de monter la porte, j’ai gardé le système coulissant.

Pour cela j’ai utilisé un nodeMCU, un pont en H et un actionneur linéaire.

Le nodeMCU va servir une page web avec deux liens, un pour l’ouverture, l’autre pour la … fermeture. Il remontera l’info à Domoticz via un appel de l’API. Le pont en H sert a inverser la polarité pour faire avancer ou reculer le moteur.

Les connexions

Le code arduino à pousser sur le nodeMCU


#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPClient.h>

int ENA = 4; //4;
int IN1 = 0; //0;
int IN2 = 2; //2;
int BUTTON_PIN = D1;
int buttonState;
int lastButtonState = LOW;
unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled
unsigned long debounceDelay = 50;    // the debounce time; increase if the output flickers
int statedoor = 1;
#ifndef STASSID
#define STASSID "WIFI_SSID"
#define STAPSK  "WIFI_PASSWORD"
#endif

const char* ssid     = STASSID;
const char* password = STAPSK;

ESP8266WiFiMulti WiFiMulti;
ESP8266WebServer server(80);
void handleRoot() {

Serial.println("Got a Request");
if (server.arg(0)[0] == '1') {
  opendoor();
  urlopen();
  statedoor = 1;
}
if (server.arg(0)[0] == '2') {
  closedoor();
  urlclose();
  statedoor = 0;
}
String msg = "";
msg += "<html><body>\n";
msg += "<h1>Relay Remote</h1>";
msg += "<h2><a href='?a=1'/>Open</a></h2>";
msg += "<h2><a href='?a=2'/>Close</a></h2>";
msg += "</body></html>";
server.send(200, "text/html", msg);
}
void setup() {
  HTTPClient http;
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP(ssid, password);
  Serial.print("Wait for WiFi... ");
  while (WiFiMulti.run() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  delay(500);
  server.on("/", handleRoot);
  server.begin();
  Serial.println("HTTP server started");
}

void opendoor() {
  digitalWrite(ENA, HIGH);  // set speed to 200 out of possible range 0~255
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
}
void closedoor() {
  digitalWrite(ENA, HIGH);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
}
void urlopen() {
  HTTPClient http;
  http.begin("http://192.168.1.248:8080/json.htm?type=command&param=switchlight&idx=475&switchcmd=On");
  int httpCode = http.GET();
  http.end();
}
void urlclose() {
  HTTPClient http;
  http.begin("http://192.168.1.248:8080/json.htm?type=command&param=switchlight&idx=475&switchcmd=Off");
  int httpCode = http.GET();
  http.end();
}
void loop() {
  HTTPClient http;
  server.handleClient();
  int reading = digitalRead(BUTTON_PIN);
  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }
   if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;
      if (buttonState == LOW) {
        Serial.println("Button Low");
        if (statedoor == 1) {
          closedoor();
          urlclose();
          Serial.println("Close door");
          statedoor = 0;
        } else {
          opendoor();
          urlopen();
          Serial.println("Open door");
          statedoor = 1;
        }
      }
    }
  }  
 lastButtonState = reading;
}

Il faudra modifier le ssid de votre wifi, ainsi que son mot de passe aux lignes 18 & 19.

Dans Domoticz, il faudra créer deux interrupteurs virtuels, un pour l’ouverture et la fermeture et l’autre pour avoir le statut de la poste.

Il faut récupérer l’IDX de la porte pour le renseigner aux lignes 84 & 90 à la place du mien qui est 475. Oui je sais, c’est crade mais j’ai fais vite.

Lors de l’ouverture ou de la fermeture de la porte, le statut de Porte poulailler sera mis à jour par le nodeMCU.

Pour la passer en mode Porte, il faut l’éditer et changer type par Door Contact :

Pour l’interrupteur Poules, qui commande la porte, il faut l’éditer et renseigner les deux urls suivante :

Action On : http://xxx.xxx.xxx.xxx/?a=1

Action Off : http://xxx.xxx.xxx.xxx/?a=2

En remplacent l’adresse IP par celle de votre nodeMCU, il faudra donc lui attribuer une IP fixe.

L’actionneur linéaire est dans le PVC de 80, avec un fond de bouteille pour la pluie.
De la récup’,
J’en ai profité pour mettre une caméra IP pour les surveiller !