Cela fait quelques années que j’ai écris un article sur ma porte de poulailler automatique. J’ai fait tellement de modifications dessus que je suis obligé de faire une mise à jour pour vous donner les dernières informations si vous souhaitez vous en construire un.
Partie Mécanique
La partie mécanique m’a lâché plusieurs fois. Trop de frottement, trop de jeu, pas assez robuste.
J’ai décidé de remplacer mon petit moteur et la tige filetée par un actionneur linéaire en 12V de 200mm de course que l’on peut trouver sur amazon. La comparaison est impressionnante. Cet actionneur développe une force très élevée qui peut fermer la porte sans problème, même s’il y a de la paille ou des copeaux dans le chemin.
J’ai protégé le tout par une petite extension du toit pour être à l’abris de la pluie.
Partie Electrique
Commande
Pour commander l’actionneur, je passe toujours par les deux relais. Deux pins sont utilisés sur l’arduino : une pour dire de fermer la fenetre, et une autre pour dire d’ouvrir. Si les deux sont HIGH, il ne se passe rien. Si les deux sont LOW, il ne se passe rien non plus. Il n’y a donc pas de « conflit » de commande vers l’actionneur.
Par rapport à mon installation précédente, j’ai rajouté un controlleur ethernet (basé sur un chip W5500) pour communiquer en MQTT,
A titre d’information, voici le code de l’arduino :
#include <PubSubClient.h> #include <SPI.h> #include <Ethernet.h> byte mac[] = { 0x00, 0xAA, 0xBB, 0xCD, 0xDF, 0x03 }; IPAddress ip(192, 168, 1, 20); EthernetClient ethClient; PubSubClient client; #define MQTT_USERNAME "" #define MQTT_PASSWORD "" #define MQTT_SERVER "192.168.1.100" #define MQTT_STATUS "/poulailler/state" #define MQTT_OPEN "/poulailler/set" #define MQTT_AVAILABLE "/poulailler/available" unsigned long time2 = (long)0; char buffer[16]; boolean ouvert = false; const int closePin = 43; // pin fermer const int openPin = 41; // pin ouvrir void callback(char* topic, byte* payload, unsigned int length) { String topicStr = topic; if (topicStr == MQTT_OPEN){ if(payload[0] == 49){ // = 1 en char ouvert = true; Serial.println("Door open"); client.publish(MQTT_STATUS, "1"); } else{ ouvert = false; Serial.println("Door close"); client.publish(MQTT_STATUS, "0"); } } } // close the coop door motor void closeDoor() { digitalWrite (closePin, HIGH); digitalWrite (openPin, LOW); } // open the coop door void openDoor() { digitalWrite(closePin, LOW); digitalWrite(openPin, HIGH); } void setup() { Serial.begin(9600); Ethernet.begin(mac,ip); delay(1000); client = PubSubClient(MQTT_SERVER, 1883, callback,ethClient); Serial.println(Ethernet.localIP()); client.setServer(MQTT_SERVER, 1883); pinMode (closePin, OUTPUT); // motor close direction pin = output pinMode (openPin, OUTPUT); // motor open direction pin = output } void loop() { if (!client.connected()) { if (client.connect("poulailler", MQTT_USERNAME, MQTT_PASSWORD)) { client.publish(MQTT_AVAILABLE, "online"); Serial.println("Connected to MQTT"); client.subscribe(MQTT_OPEN); Serial.println("Subscribed"); } else { Serial.println("Could not connect to MQTT"); } } // gestion de la porte if(ouvert) { openDoor(); } else{ closeDoor(); } client.loop(); }
Capteur solaire vers MQTT
La photo-résistance a commencé à se corroder, et le système me posait quelques problèmes à la longue (difficilement paramétrable – on doit mettre à jour le sketch de l’arduino pour changer les valeurs, ou alors rajouter un potentiomètre – une pièce en plus … et je voulais aussi un système de bypass manuel sans devoir mettre des interrupteurs et tout le tralala, pour l’incorporer à ma domotique)
Je suis donc parti sur une commande par réseau MQTT, afin de l’intégrer à ma domotique (avec node-red, home assistant … je vous invite à lire mes autres articles sur le sujet). Il suffit d’envoyer le message « 1 » ou « 0 » sur un topic MQTT pour ouvrir/fermer le poulailler.
Je demande à mon poulailler de se fermer 15 minutes avant le coucher du soleil, et de s’ouvrir 30min après le lever. Et j’ai la possibilité d’avoir un retour d’état sur la fermeture de la porte et faire des petits graphiques de geek 🙂
et je peux du coup aussi commander la porte via Home Assistant en considérant le poulailler comme un switch manuel :
La partie automatique du switch est gérée via Node-Red qui envoie une commande sur le réseau MQTT quand le soleil est à la bonne position (ouvrir quand le soleil se lève, fermer quand le soleil se couche)
[ { "id": "3ef8a5a5.e7ade2", "type": "tab", "label": "Poulailler", "disabled": false, "info": "" }, { "id": "b61dad48.10761", "type": "inject", "z": "3ef8a5a5.e7ade2", "name": "", "topic": "", "payload": "", "payloadType": "date", "repeat": "600", "crontab": "", "once": true, "onceDelay": "60", "x": 211.5, "y": 170, "wires": [ [ "1d21987a.6d22" ] ] }, { "id": "ee72fa1a.81de28", "type": "mqtt out", "z": "3ef8a5a5.e7ade2", "name": "", "topic": "/poulailler/set", "qos": "", "retain": "true", "broker": "21c3ebbb.867574", "x": 1049, "y": 171, "wires": [] }, { "id": "9b4e2eb0.066ea8", "type": "mqtt out", "z": "3ef8a5a5.e7ade2", "name": "", "topic": "/poulailler/available", "qos": "", "retain": "true", "broker": "21c3ebbb.867574", "x": 399.8833312988281, "y": 74.88333129882812, "wires": [] }, { "id": "664dfc21.ed0dec", "type": "inject", "z": "3ef8a5a5.e7ade2", "name": "", "topic": "", "payload": "online", "payloadType": "str", "repeat": "", "crontab": "", "once": true, "onceDelay": 0.1, "x": 191.5499267578125, "y": 74.88333129882812, "wires": [ [ "9b4e2eb0.066ea8" ] ] }, { "id": "1d21987a.6d22", "type": "within-time-switch", "z": "3ef8a5a5.e7ade2", "name": "", "positionConfig": "49242030.270f6", "startTime": "civilDawn", "startTimeType": "pdsTime", "startOffset": "60", "startOffsetType": "num", "startOffsetMultiplier": 60000, "endTime": "civilDusk", "endTimeType": "pdsTime", "endOffset": "0", "endOffsetType": "num", "endOffsetMultiplier": 60000, "propertyStart": "", "propertyStartType": "none", "startTimeAlt": "", "startTimeAltType": "entered", "startOffsetAlt": 0, "startOffsetAltType": "none", "startOffsetAltMultiplier": 60000, "propertyEnd": "", "propertyEndType": "none", "endTimeAlt": "", "endTimeAltType": "entered", "endOffsetAlt": 0, "endOffsetAltType": "none", "endOffsetAltMultiplier": 60000, "tsCompare": "0", "statusOut": 3, "lastMsgOnStartOut": false, "lastMsgOnEndOut": false, "x": 397.5666809082031, "y": 167.90005493164062, "wires": [ [ "ebb18418.2c95a8", "521ee87f.0bd7c8" ], [ "41345e77.75f498", "39d05640.d72c52" ] ] }, { "id": "41345e77.75f498", "type": "change", "z": "3ef8a5a5.e7ade2", "name": "payload 0", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "0", "tot": "num" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 638.566650390625, "y": 205.11666870117188, "wires": [ [ "f8c54705.9c1508" ] ] }, { "id": "ebb18418.2c95a8", "type": "change", "z": "3ef8a5a5.e7ade2", "name": "payload 1", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "1", "tot": "num" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 639.88330078125, "y": 161.88333129882812, "wires": [ [ "f8c54705.9c1508" ] ] }, { "id": "f8c54705.9c1508", "type": "rbe", "z": "3ef8a5a5.e7ade2", "name": "", "func": "rbe", "gap": "", "start": "", "inout": "out", "property": "payload", "x": 811.88330078125, "y": 162.88333129882812, "wires": [ [ "ee72fa1a.81de28" ] ] }, { "id": "39d05640.d72c52", "type": "function", "z": "3ef8a5a5.e7ade2", "name": "global set nuit", "func": "global.set(\"soleil\",\"nuit\");", "outputs": 1, "noerr": 0, "x": 659.88330078125, "y": 240.88333129882812, "wires": [ [] ] }, { "id": "521ee87f.0bd7c8", "type": "function", "z": "3ef8a5a5.e7ade2", "name": "global set jour", "func": "global.set(\"soleil\",\"jour\");", "outputs": 1, "noerr": 0, "x": 656.88330078125, "y": 119.88333129882812, "wires": [ [] ] }, { "id": "21c3ebbb.867574", "type": "mqtt-broker", "z": "", "name": "NAS", "broker": "192.168.1.100", "port": "1883", "clientid": "", "usetls": false, "compatmode": true, "keepalive": "60", "cleansession": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "closeTopic": "", "closeQos": "0", "closePayload": "", "willTopic": "", "willQos": "0", "willPayload": "" }, { "id": "49242030.270f6", "type": "position-config", "z": "", "name": "Limelette", "isValide": "true", "longitude": "0", "latitude": "0", "angleType": "deg", "timezoneOffset": "2" } ]
Vous pouvez aussi partager cet article sur les réseaux sociaux
Une réflexion sur “Porte de poulailler automatique – MAJ”