Couveuse pilotée par pc

Bbonjour,
Alors voilà le projet qui va permettre enfin je l'espère de mettre toutes les chances notre coté pour des naissances de canetons.
Ce projet peut servir à d'autres animaux, il suffira d'adapter les températures mini maxi et hygrométrie en fonction des besoins.

Etape 1
Prenez le four à micro onde de madame, courrez très vite dans la nature afin de la distancer :slight_smile:
Désossez le entièrement

Mettez une alimentation de pc, un ventilo pulseur d'air

De l'autre coté un autre ventilo pour extraire l'air si la température est trop chaude

Installez une sonde de température et hygrmétrie ainsi qu'une résistence chauffante de 50w suivant besoin

Un arduino avec un lcd 16*2 ainsi que des relais pour piloter la résistance et le ventilo

Disposez le tout sur un emplacement ou madame ne s'apercevra de rien à son retour

Vous avez désormais une couveuse maison que vous pourrez piloter via votre pc.

Evidemment, vous risquez de dormir sur le canapé pendant quelques jours ou filer chez le marchand d'électroménager le plus proche assez rapidement pour vous faire pardonner du larcin. :grin:

je mettrai les codes dans le week end

Ha ha, merci pour cette installation, et bon courage avec madame ! C'est sûr que là ça risque de moins bien cuire !

peut tu mettre ton code ( ou pas) afin de voir toutes les interactions.
le projet est superbe.

voila le pde, j'ai rajouté la détection de présence en cas d'éclosion, mais le bout de code n'y figure pas encore :slight_smile:

#include <EEPROM.h>
#include <SPI.h> // needed for Arduino versions later than 0018
#include <Ethernet.h>
#include <Client.h>
#include <LiquidCrystal.h>
#include <Udp.h> // UDP library from: bjoern@cs.stanford.edu 12/30/2008
#include "DHT.h"
#define DHTPIN A0
int ventilo = 8; // led
int resistance = 9; // led

const int buttonPin = A1; // the number of the pushbutton pin
const int ledPin = 12; // the number of the LED pin
long previousMillis = 0; // will store last time LED was updated
long interval = 10000; // interval at which to blink (milliseconds)
int i=0;
int buttonState = 0; // variable for reading the pushbutton status

LiquidCrystal lcd1(7, 6, 5, 4, 3, 2);

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
192,168,2,200 };
unsigned char gateway[] = {
192,168,2,2 };
unsigned char mask[] = {
255,255,255,0};
byte serverdist[] = { 192,168,2,17 };
Server server(80);
Client client(serverdist, 80);
unsigned int localPort = 80; // local port to listen on
float tempmini;
float tempmaxi;

// the next two variables are set when a packet is received
byte remoteIp[4]; // holds received packet's originating IP
unsigned int remotePort; // holds received packet's originating port

// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char packetBuffer1[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char ReplyBuffer[] = "acknowledged"; // a string to send back
char ReplyBuffer1[] = "acknowledged"; // a string to send back
const char toto[]="123";
#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);

int address = 0;
byte value;
float tempminimem;
float tempmaximem;

// Utilities for writing and reading from the EEPROM
float readFloat(int address) {
union floatStore {
byte floatByte[4];
float floatVal;
}
floatOut;

for (int i = 0; i < 4; i++)
floatOut.floatByte = EEPROM.read(address + i);

  • return floatOut.floatVal;*
    }
    void writeFloat(float value, int address) {
  • union floatStore {*
  • byte floatByte[4];*
  • float floatVal;*
  • }*
  • floatIn;*
  • floatIn.floatVal = value;*
  • for (int i = 0; i < 4; i++)*
    _ EEPROM.write(address + i, floatIn.floatByte*);_
    _
    }_
    void setup() {
    _
    // start the Ethernet and UDP:_
    _
    Ethernet.begin(mac, ip, gateway, mask);_
    _
    Udp.begin(localPort);_
    _
    dht.begin();_
    _
    Serial.begin(9600);_
    _
    pinMode(ventilo, OUTPUT);_
    _
    pinMode(resistance, OUTPUT);_
    _
    server.begin();_
    _
    lcd1.begin(16, 2);_
    _
    tempminimem = readFloat(address);_
    _
    Serial.print("tempminimem :");_
    _
    Serial.println(tempminimem);_
    _
    tempmini=tempminimem;_
    _
    tempmaximem = readFloat(address+4);_
    _
    Serial.print("tempmaximem :");_
    _
    Serial.println(tempmaximem);_
    _
    tempmaxi=tempmaximem; *_

* pinMode(ledPin, OUTPUT); *
* // initialize the pushbutton pin as an input:*
* pinMode(buttonPin, INPUT);*
}
void loop() {
* // read the state of the pushbutton value:*
* buttonState = digitalRead(buttonPin);*
* // check if the pushbutton is pressed.*
* // if it is, the buttonState is HIGH:*
* if (buttonState == HIGH) { *
* unsigned long currentMillis = millis(); *
* // turn LED on: *
* digitalWrite(ledPin, HIGH);*
* Serial.println("intrusion");*
* i++;*
* Serial.println(i);*
* if(i>500){*
* digitalWrite(ledPin, HIGH);*
* }*
* }*
* else {*
* // turn LED off:*
* digitalWrite(ledPin, LOW);*
* }*
* if (i>520){i=0;}*

* float h = dht.readHumidity();*
* float t = dht.readTemperature(); *
* t=t-1;*
* // if there's data available, read a packet*
* int packetSize = Udp.available(); // note that this includes the UDP header*
* if(packetSize)*
* {*
* if (client.connect()) {*
* delay(2000);*
* Serial.println("connected");*
* Serial.print(t);*
* client.print("GET /recup.php?temp=");*
* client.print(t);*
* client.print("&humid=");*
* client.print(h);*
* client.print("\n");*

* client.stop();*

* } *
* packetSize = packetSize - 8; // subtract the 8 byte header*
* Serial.print("Received packet of size ");*
* Serial.println(packetSize);*
* memset(packetBuffer, 0, UDP_TX_PACKET_MAX_SIZE);
memset(packetBuffer1, 0, UDP_TX_PACKET_MAX_SIZE);
_
// read the packet into packetBufffer and get the senders IP addr and port number*_
* Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);
_
Serial.println("Contents:");_
_
Serial.println(packetBuffer);_
Udp.readPacket(packetBuffer1,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);
_
Serial.println("Contents1:");_
_
Serial.println(packetBuffer1);*_

* //tempmini = float (atoi(packetBuffer));*
* //tempmaxi = float (atoi(packetBuffer1));*
* tempmini = atof(packetBuffer);*
* tempmaxi = atof(packetBuffer1);*
* writeFloat(tempmini,address);*
* writeFloat(tempmaxi,address+4); *
* Serial.print("tempmini : ");*
* Serial.println(tempmini);*
* Serial.print("tempmaxi : ");*
* Serial.println(tempmaxi); *
* analogWrite(11, atoi(packetBuffer)); //utiliser la valeur reçu pour allumer la led*
* analogWrite(12, atoi(packetBuffer1)); //utiliser la valeur reçu pour allumer la led*
* //Udp.sendPacket(ReplyBuffer1, IP, localPort);*
* //Udp.sendPacket(toto, remoteIp, localPort );*

* }*
* delay(2);*
// float h = dht.readHumidity();
*// float t = dht.readTemperature(); *
// t=t-1;
* if (t < tempmini){*
* digitalWrite(ventilo,1);*
* digitalWrite(resistance,1);*
* }*
* else if(t > tempmaxi){*
* digitalWrite(ventilo,1);*
* digitalWrite(resistance,0);*
* }*
* else{*
* digitalWrite(ventilo,0);*
* digitalWrite(resistance,0); *
* }*
* if (isnan(t) || isnan(h)) {*
* Serial.println("Failed to read from DHT");*
* }*
* else {*
* Serial.print("Humidity: ");*
* Serial.print(h);*
* Serial.print(" %\t");*
* Serial.print("Temperature: ");*
* Serial.print(t);*
_ Serial.println(" C");_
_
Serial.print("Tempmini: ");_
_
Serial.print(tempmini);_
_ Serial.println(" C");_
_
Serial.print("Tempmaxi: ");
_
* Serial.print(tempmaxi);*
_ Serial.println(" C");_
_
lcd1.setCursor(0, 0);_
_
lcd1.print("H:");_
_
lcd1.print(h);_
_
lcd1.print("%");_
_
lcd1.print("Mi:");_
_
lcd1.print(tempmini);_
_
; _
_
lcd1.setCursor(0, 1);_
_
lcd1.print("T:");_
_
lcd1.print(t);_
_
lcd1.print("C");_
_
lcd1.print("Ma:");_
_
lcd1.print(tempmaxi); _
_
}_
_
}_
_
[/quote]*_

voici le control.php afin de modifier à distance le mini et maxi ainsi que de voir la tem et hygro de la couveuse qui renvoie les données dans un fichier

<?php if (isset($_POST['envoyer']) OR isset($_POST['led1']) OR isset($_POST['led11']) OR isset($_GET['toto'])){ $valeur_led = $_POST["led1"]; // récupération de la valeur transmise en méthode POST $valeur_led1 = $_POST["led11"]; // récupération de la valeur transmise en méthode POST $ip = $_POST['ip']; $host=$ip; // Adresse ip défini dans le code arduino $port=80; // Port défini dans le code arduino $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_sendto($socket, $valeur_led , strlen($valeur_led), 0, $host, $port); socket_sendto($socket, $valeur_led1 , strlen($valeur_led1), 0, $host, $port); // socket_recvfrom($socket, $toto , strlen($toto), 0, $host, $port); socket_close($socket); echo "Tempmini envoyée : ".$valeur_led." Tempmaxi envoyée : ".$valeur_led1; //} //if (isset($_GET['toto'])){ //$toto = $_GET['toto']; //echo "temp : ".$toto; include("recup.php"); } ?> Control couveuse infobarquee

Controle programme couveuse

<?php //include("recup.php");?> Sélectionner une ip

Temp mini

Temp maxi

et le recup.php

<?php echo"Recuperation temp "; if (isset($_GET['temp']) OR isset($_GET['humid'])){ $temp = $_GET['temp']; $humid = $_GET['humid']; $temp="temp actuelle =".$temp."C\n"; $humid="humid actuelle =".$humid."%\n"; $fp=fopen("test.txt","w"); fputs($fp,$temp); fputs($fp,$humid); fclose($fp); } sleep(2); echo"Fichier enrigistré "; $lines = file_get_contents('test.txt'); echo nl2br($lines); ?>

Super, merci pour ton retour d'expérience, en espérant que tes canetons se sentent bien là dedans jusqu'à leur venue au monde :slight_smile:

Par contre, un point à préciser peut être: ne pas enclencher la fonction micro-onde !!! :smiley:

allez un petit point sur tout le projet, je suis papa 6 fois depuis hier matin dont 3 ce matin en 1h :grin:

Bravo les conditions sont toutes remplies. Du travail de pro.

Merci beaucoup pour le partage, vous êtes un génie.

j'avais fait exactement le meme projet en plus chip. puisque qu'il n'etait pas connecté a un pc, mais juste un afficheur local.
on pouvait mettre les parametre de températures....

et pour le chauffage, j'avais pris une lampe qui chauffait en mode clignotant sur une base de temps de 1 min...

j'avais mis tout ca dans un petit placard.
le plus dur est de gerer l'hydro...

et j'ai fait quelques naissance avec ca...