automatisation d'un puit
Re: automatisation d'un puit
Quelques photos de l'installation:
Le local en bazar: L'armoire électrique en bazar: L'arduino en ... bazar:
Le local en bazar: L'armoire électrique en bazar: L'arduino en ... bazar:
Re: automatisation d'un puit
Afin de détailler un peu, on peut voir sur la photo la cuve tampon de 1m3 et à sa gauche le ballon du surpresseur de 500l.
Dans l'armoire électrique, on a l'interrupteur différentiel pour protéger les personnes, suivit d'un disjoncteur pour la commande et un pour l'alim de la box internet. A leur droite, on a le condensateur pour la pompe du puits.
En dessous, le disjoncteur moteur et le contacteur pour le puits suivis d'un disjoncteur et du contacteur pour la pompe de surpression.
La dernière ligne se sont des borniers et le disjoncteur du groupe électrogène pour la charge des batteries solaires.
Sur la dernière photo, c'est la carte sur laquelle j'ai connecté l'arduino et les relais de commande des contacteurs.
Dans l'armoire électrique, on a l'interrupteur différentiel pour protéger les personnes, suivit d'un disjoncteur pour la commande et un pour l'alim de la box internet. A leur droite, on a le condensateur pour la pompe du puits.
En dessous, le disjoncteur moteur et le contacteur pour le puits suivis d'un disjoncteur et du contacteur pour la pompe de surpression.
La dernière ligne se sont des borniers et le disjoncteur du groupe électrogène pour la charge des batteries solaires.
Sur la dernière photo, c'est la carte sur laquelle j'ai connecté l'arduino et les relais de commande des contacteurs.
- Damien
- Administrateur
- Messages : 3427
- Enregistré le : 15 août 2011, 00:00
- Localisation : Tournai (Belgique)
- Contact :
Re: automatisation d'un puit
Merci Apy. Pas simple pour te suivre pour un néophyte comme moi mais passionnant malgré tout.
Re: automatisation d'un puit
Vas-y, n'hésites pas à poser des questions, c'est avec plaisir que j'y répondrai.
Re: automatisation d'un puit
je n'ai pas trop le temps pour le moment apy, je suis dans le miel et les conserves, je regarde plus tard, mais ca m’intéresse drôlement, j'ai déjà brûler deux groupes à 300 euros car pas de détection cuve vide
autre chose
j'espère que les coffrets que tu place sont plus beau
autre chose
j'espère que les coffrets que tu place sont plus beau
Re: automatisation d'un puit
Heureusement ...
Il faut quand même prendre en compte qu'on est encore en phase de tests. Après, on peu toujours espérer qu'une fois tout mis en place, j'arrangerai tout nickel (l'espoir fait vivre).
-
- Conseiller potager
- Messages : 2247
- Enregistré le : 24 juillet 2011, 00:00
- Localisation : Frasnes-lez-anvaing
Re: automatisation d'un puit
Bj, idem pour moi, cela a l'air formidable mais j'y comprend pas grand chose
La patience et l'observation sont les deux qualités les plus importantes pour le jardinier
Re: automatisation d'un puit
Ca y est,
Je viens de finir de mettre en place mon nouveau système de puits automatisé.
Toujours un arduino pour la gestion du bazar auquel j'ai connecté un nodeMcu qui me permet de piloter le démarrage.
Voici ce que répond le nodemcu quand on se connecte dessus: Je vous mets dans le message suivant le code de l'arduino et celui du nodemcu.
Je viens de finir de mettre en place mon nouveau système de puits automatisé.
Toujours un arduino pour la gestion du bazar auquel j'ai connecté un nodeMcu qui me permet de piloter le démarrage.
Voici ce que répond le nodemcu quand on se connecte dessus: Je vous mets dans le message suivant le code de l'arduino et celui du nodemcu.
Re: automatisation d'un puit
Le code de l'arduino:
// sorties numeriques
byte impulsion = 4;
byte contactPuits = 12;
byte contactCuve = 11;
// entrees analogiques
byte niveauPuits = 0;
byte cuveH = 2;
byte cuveB = 1;
byte lumiere = 3;
byte pressostat = 7;
// seuil de lumiere
int sLum = 850;
int lu;
int puit;
int cH;
int cB;
int pres;
unsigned long tps0;
unsigned long tps;
unsigned long dtps;
void setup()
{
// initialisation des 4 relais ou pas plutot ou plus
// Putain j'arrive pas a trouver la logique avec le nodemcu
// ça m'enerve
// pourtant c'est simple
// un petit coups de The Agonist
// Putaiiiiiiiiiiiiiiiiiin !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Voilà je l'ai
// Ah ben non
pinMode(impulsion,OUTPUT);
digitalWrite(impulsion,LOW);
pinMode(contactPuits,OUTPUT);
digitalWrite(contactPuits,HIGH);
pinMode(contactCuve,OUTPUT);
digitalWrite(contactCuve,HIGH);
pinMode(1,INPUT);
digitalWrite(1,LOW);
pinMode(2,INPUT);
digitalWrite(2,LOW);
// initialisation port série pour l'affichage des valeurs lors des tests
Serial.begin(9600);
Serial.println("Demarrage de l'arduino");
}
void loop()
{
Serial.print("Lumiere \t");
lu = analogRead(lumiere);
Serial.println(lu);
digitalWrite(impulsion, HIGH);
delay(1000);
puit = analogRead(niveauPuits);
cH = analogRead(cuveH);
cB = analogRead(cuveB);
pres = analogRead(pressostat);
Serial.print("puit \t");
Serial.println(puit);
Serial.print("cuve haut \t");
Serial.println(cH);
Serial.print("cuve bas \t");
Serial.println(cB);
Serial.print("pressostat \t");
Serial.println(pres);
delay(1000);
digitalWrite(impulsion, LOW);
// boucle de remplissage de la cuve
if(digitalRead(6) || cB < 500)
{
Serial.println("demarrage puits");
puits();
}
if(digitalRead(5))
{
Serial.println("demarrage cuve");
cuve();
}
if(!digitalRead(5))
{
Serial.println("Arret cuve");
digitalWrite(11,HIGH);
}
delay(30000);
}
void puits()
{
tps0 = millis();
dtps = 0;
while(cH < 250 && dtps < 420000 && puit > 250 && lu > sLum)
{
tps = millis();
dtps = tps - tps0;
Serial.print("tps \t");
Serial.println(dtps);
Serial.println("demarrage pompe puit");
digitalWrite(contactCuve,HIGH);
digitalWrite(contactPuits,LOW);
digitalWrite(impulsion, HIGH);
delay(1000);
cH = analogRead(cuveH);
cB = analogRead(cuveB);
puit = analogRead(niveauPuits);
pres = analogRead(pressostat);
lu = analogRead(lumiere);
Serial.print("puit \t");
Serial.println(puit);
Serial.print("cuve haut \t");
Serial.println(cH);
Serial.print("cuve bas \t");
Serial.println(cB);
delay(1000);
digitalWrite(impulsion, LOW);
delay(20000);
}
digitalWrite(contactPuits,HIGH);
}
void cuve()
{
if(cB > 250 && pres > 500 && lu > sLum)
{
digitalWrite(impulsion, HIGH);
delay(1000);
cB = analogRead(cuveB);
pres = analogRead(pressostat);
lu = analogRead(lumiere);
Serial.print("cuve bas \t");
Serial.println(cB);
delay(1000);
digitalWrite(impulsion, LOW);
Serial.println("demarrage pompe surpresseur");
digitalWrite(11,LOW);
}
else
{
digitalWrite(11,HIGH);
}
}
// sorties numeriques
byte impulsion = 4;
byte contactPuits = 12;
byte contactCuve = 11;
// entrees analogiques
byte niveauPuits = 0;
byte cuveH = 2;
byte cuveB = 1;
byte lumiere = 3;
byte pressostat = 7;
// seuil de lumiere
int sLum = 850;
int lu;
int puit;
int cH;
int cB;
int pres;
unsigned long tps0;
unsigned long tps;
unsigned long dtps;
void setup()
{
// initialisation des 4 relais ou pas plutot ou plus
// Putain j'arrive pas a trouver la logique avec le nodemcu
// ça m'enerve
// pourtant c'est simple
// un petit coups de The Agonist
// Putaiiiiiiiiiiiiiiiiiin !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Voilà je l'ai
// Ah ben non
pinMode(impulsion,OUTPUT);
digitalWrite(impulsion,LOW);
pinMode(contactPuits,OUTPUT);
digitalWrite(contactPuits,HIGH);
pinMode(contactCuve,OUTPUT);
digitalWrite(contactCuve,HIGH);
pinMode(1,INPUT);
digitalWrite(1,LOW);
pinMode(2,INPUT);
digitalWrite(2,LOW);
// initialisation port série pour l'affichage des valeurs lors des tests
Serial.begin(9600);
Serial.println("Demarrage de l'arduino");
}
void loop()
{
Serial.print("Lumiere \t");
lu = analogRead(lumiere);
Serial.println(lu);
digitalWrite(impulsion, HIGH);
delay(1000);
puit = analogRead(niveauPuits);
cH = analogRead(cuveH);
cB = analogRead(cuveB);
pres = analogRead(pressostat);
Serial.print("puit \t");
Serial.println(puit);
Serial.print("cuve haut \t");
Serial.println(cH);
Serial.print("cuve bas \t");
Serial.println(cB);
Serial.print("pressostat \t");
Serial.println(pres);
delay(1000);
digitalWrite(impulsion, LOW);
// boucle de remplissage de la cuve
if(digitalRead(6) || cB < 500)
{
Serial.println("demarrage puits");
puits();
}
if(digitalRead(5))
{
Serial.println("demarrage cuve");
cuve();
}
if(!digitalRead(5))
{
Serial.println("Arret cuve");
digitalWrite(11,HIGH);
}
delay(30000);
}
void puits()
{
tps0 = millis();
dtps = 0;
while(cH < 250 && dtps < 420000 && puit > 250 && lu > sLum)
{
tps = millis();
dtps = tps - tps0;
Serial.print("tps \t");
Serial.println(dtps);
Serial.println("demarrage pompe puit");
digitalWrite(contactCuve,HIGH);
digitalWrite(contactPuits,LOW);
digitalWrite(impulsion, HIGH);
delay(1000);
cH = analogRead(cuveH);
cB = analogRead(cuveB);
puit = analogRead(niveauPuits);
pres = analogRead(pressostat);
lu = analogRead(lumiere);
Serial.print("puit \t");
Serial.println(puit);
Serial.print("cuve haut \t");
Serial.println(cH);
Serial.print("cuve bas \t");
Serial.println(cB);
delay(1000);
digitalWrite(impulsion, LOW);
delay(20000);
}
digitalWrite(contactPuits,HIGH);
}
void cuve()
{
if(cB > 250 && pres > 500 && lu > sLum)
{
digitalWrite(impulsion, HIGH);
delay(1000);
cB = analogRead(cuveB);
pres = analogRead(pressostat);
lu = analogRead(lumiere);
Serial.print("cuve bas \t");
Serial.println(cB);
delay(1000);
digitalWrite(impulsion, LOW);
Serial.println("demarrage pompe surpresseur");
digitalWrite(11,LOW);
}
else
{
digitalWrite(11,HIGH);
}
}
Re: automatisation d'un puit
Celui du nodemcu:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <WiFiServer.h>
#include <WiFiUdp.h>
const char* ssid = "****";
const char* password = "****";
IPAddress ip(192, 168, 1, 76);
IPAddress passerelle(192, 168, 1, 1);
IPAddress masque(255, 255, 255, 0);
WiFiServer server(80);
char crecu[25];
void setup()
{
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
WiFi.config(ip, passerelle, masque);
// Connexion au wifi
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Demarrage du serveur
server.begin();
Serial.println("Server started");
// Initialisation des pins en sortie
pinMode(D0,OUTPUT);
digitalWrite(D0,HIGH);
pinMode(D1,OUTPUT);
digitalWrite(D1,LOW);
pinMode(D2,OUTPUT);
digitalWrite(D2,LOW);
pinMode(D3,OUTPUT);
digitalWrite(D3,LOW);
pinMode(D4,INPUT);
}
void loop()
{
// Declaration des variables pour les boucles
byte i = 0;
byte drapeau = 0;
int lecta = 0;
// Recherche d'un client
WiFiClient client = server.available();
// Si presence d'un client
if(client.connected())
{
// Lecture et affichage sur le port série
while (client.available())
{
char c = client.read();
Serial.print(c);
// Capture des 25 premiers caracteres
if(i < 25)
{
crecu = c;
drapeau = 1;
i++;
}
}
// Analyse des caracteres envoyes et changement d'etat des pins
Serial.println(crecu);
if(crecu[5] == 0x30 && //0
crecu[6] == 0x6F && //o
crecu[7] == 0x6E) //n
{
digitalWrite(D0,LOW);
Serial.println("Rst arduino");
delay(2000);
digitalWrite(D0,HIGH);
Serial.println("Fin du rst");
}
Serial.println(crecu);
if(crecu[5] == 0x31 && //1
crecu[6] == 0x6F && //o
crecu[7] == 0x6E) //n
{
digitalWrite(D1,HIGH);
Serial.println("Demarrage du matin");
}
if(crecu[5] == 0x31 && //1
crecu[6] == 0x6F && //o
crecu[7] == 0x66 && //f
crecu[8] == 0x66) //f
{
digitalWrite(D1,LOW);
Serial.println("Fin du demarrage du matin");
}
if(crecu[5] == 0x32 && //2
crecu[6] == 0x6F && //o
crecu[7] == 0x6E) //n
{
digitalWrite(D2,HIGH);
Serial.println("Demarrage force du puits");
}
if(crecu[5] == 0x32 && //2
crecu[6] == 0x6F && //o
crecu[7] == 0x66 && //f
crecu[8] == 0x66) //f
{
digitalWrite(D2,LOW);
Serial.println("Fin demarrage force du puits");
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 30");
client.println();
client.print("<html><head><title>Commande du puit</title></head><body bgcolor=\"#E6E6FA\" style=\"text-align:center;\"><h1>Commande manuelle du puit");
client.print("</h1><br/> <br/><h1>Rst arduino</h1><a href=\"0on\"> On </a><a href=\"0off\"> Off </a><br/><br/>");
client.print("</h1><br/> <br/><h1>Demarrage du matin</h1><a href=\"1on\"> On </a><a href=\"1off\"> Off </a><br/><br/>");
client.print("</h1><br/> <br/><h1>Demarrage force du puits</h1><a href=\"2on\"> On </a><a href=\"2off\"> Off </a><br/><br/>");
client.print("<h1>");
client.println("</body></html>");
client.println();
}
// Arret du client
client.stop();
delay(500);
}
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <WiFiServer.h>
#include <WiFiUdp.h>
const char* ssid = "****";
const char* password = "****";
IPAddress ip(192, 168, 1, 76);
IPAddress passerelle(192, 168, 1, 1);
IPAddress masque(255, 255, 255, 0);
WiFiServer server(80);
char crecu[25];
void setup()
{
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
WiFi.config(ip, passerelle, masque);
// Connexion au wifi
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Demarrage du serveur
server.begin();
Serial.println("Server started");
// Initialisation des pins en sortie
pinMode(D0,OUTPUT);
digitalWrite(D0,HIGH);
pinMode(D1,OUTPUT);
digitalWrite(D1,LOW);
pinMode(D2,OUTPUT);
digitalWrite(D2,LOW);
pinMode(D3,OUTPUT);
digitalWrite(D3,LOW);
pinMode(D4,INPUT);
}
void loop()
{
// Declaration des variables pour les boucles
byte i = 0;
byte drapeau = 0;
int lecta = 0;
// Recherche d'un client
WiFiClient client = server.available();
// Si presence d'un client
if(client.connected())
{
// Lecture et affichage sur le port série
while (client.available())
{
char c = client.read();
Serial.print(c);
// Capture des 25 premiers caracteres
if(i < 25)
{
crecu = c;
drapeau = 1;
i++;
}
}
// Analyse des caracteres envoyes et changement d'etat des pins
Serial.println(crecu);
if(crecu[5] == 0x30 && //0
crecu[6] == 0x6F && //o
crecu[7] == 0x6E) //n
{
digitalWrite(D0,LOW);
Serial.println("Rst arduino");
delay(2000);
digitalWrite(D0,HIGH);
Serial.println("Fin du rst");
}
Serial.println(crecu);
if(crecu[5] == 0x31 && //1
crecu[6] == 0x6F && //o
crecu[7] == 0x6E) //n
{
digitalWrite(D1,HIGH);
Serial.println("Demarrage du matin");
}
if(crecu[5] == 0x31 && //1
crecu[6] == 0x6F && //o
crecu[7] == 0x66 && //f
crecu[8] == 0x66) //f
{
digitalWrite(D1,LOW);
Serial.println("Fin du demarrage du matin");
}
if(crecu[5] == 0x32 && //2
crecu[6] == 0x6F && //o
crecu[7] == 0x6E) //n
{
digitalWrite(D2,HIGH);
Serial.println("Demarrage force du puits");
}
if(crecu[5] == 0x32 && //2
crecu[6] == 0x6F && //o
crecu[7] == 0x66 && //f
crecu[8] == 0x66) //f
{
digitalWrite(D2,LOW);
Serial.println("Fin demarrage force du puits");
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 30");
client.println();
client.print("<html><head><title>Commande du puit</title></head><body bgcolor=\"#E6E6FA\" style=\"text-align:center;\"><h1>Commande manuelle du puit");
client.print("</h1><br/> <br/><h1>Rst arduino</h1><a href=\"0on\"> On </a><a href=\"0off\"> Off </a><br/><br/>");
client.print("</h1><br/> <br/><h1>Demarrage du matin</h1><a href=\"1on\"> On </a><a href=\"1off\"> Off </a><br/><br/>");
client.print("</h1><br/> <br/><h1>Demarrage force du puits</h1><a href=\"2on\"> On </a><a href=\"2off\"> Off </a><br/><br/>");
client.print("<h1>");
client.println("</body></html>");
client.println();
}
// Arret du client
client.stop();
delay(500);
}
Modifié en dernier par apynala le 26 août 2020, 23:50, modifié 1 fois.