Bonsoir à Tous,
Avec les différents projets similaires sur le forum, j'ai pompé des parties de code, ce qui me permet d'apprendre la programmation (un vrai débutant de quelques semaines), mais j'avance à petits pas.
Mon projet est de faire fonctionner l'aération d'une serre en fonction de la T° et de la position du toit (ouvert / fermé ) piloté par des capteurs fin de course, avec un affichage de la T° sur un Oled.
Avec des leds, je vois bien le fonctionnement de l'ensemble.
Je fais appel à vos lumières car je butte sur la programmation d'une temporisation de fonctionnement du moteur (en ouverture ou en fermeture) au cas où il y ait un dysfonctionnements mécanique ( arbre de transmission cassé) ou électrique (défaut des capteurs fin de course)
J'ai bien essayé plusieurs option mais sans succès, la dernière version est à la ligne 137 du code
Je vous joins mon fichier .ino
Merci par avance de vos propositions
Bonjour
Demandes au modérateur le déplacement du message a l'endroit défini dans les règles du forum. (lien Report to Moderator, en bas à gauche)
Tu n'auras pas beaucoup de réponses dans l'espace dédié aux choses FINIES
// Arret Fermeture avec capteur bas
if ((T <= 25 && etatcapteurbas == HIGH && etatcapteurhaut == LOW) ||
(MotFerme == HIGH && millis() - tempsdebutferme >= 20000)
digitalWrite(MotFerme, LOW); // le moteur est arreté en fermeture
Au besoin, le code entier :
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 // Broche de données du bus oneWire connécté sur la broche 2
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
unsigned long tempsdebutouv = 0;
unsigned long tempsdebutferme = 0;
OneWire oneWire_DS18B20(ONE_WIRE_BUS);// Créer une instance d'objet oneWire pour communiquer avec tous les périphériques OneWire
//OneWire oneWire(ONE_WIRE_BUS); // Instanciation de l'objet ‘oneWire’
DallasTemperature sensors(&oneWire_DS18B20);//Transmettre notre référence oneWire au
//capteur de température Dallas
#define Trans 8
float T;
int MotOuvre = 8; // moteur ouverture
int MotFerme = 9; // moteur fermeture
int fin_coursebas = 10; // bouton pin 2 !!!!
int fin_coursehaut = 4; // bouton pin 4
int ledbas = 6;
int ledhaut = 5;
int etatcapteurbas = LOW; // etat du capteur bas
int etatcapteurhaut = LOW; // etat du capteur haut
int buzzer = 7;
int etatmoteur = 0; // 0=MoteurArret, 1= MoteurFerme,2= MoteurOuvre
boolean toit_ferme ;
boolean toit_ouvert;
boolean toit_milieu_course;
void setup() {
Serial.begin(115200);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
delay(2000);
Serial.begin(9600);//Connection série à 9600 baud
sensors.begin(); //Initialiser le capteur DS18B20
pinMode(MotOuvre, OUTPUT);
pinMode(MotFerme, OUTPUT);
pinMode(fin_coursebas, INPUT);
pinMode(fin_coursehaut, INPUT);
pinMode(ledbas, OUTPUT);
pinMode(ledhaut, OUTPUT);
pinMode(buzzer, OUTPUT);
}
void loop() { //boucle principale
/*5-Mesure de température avec le capteur DS18B20*/
sensors.requestTemperatures(); // Demande de mesure de température
/*6-Affichage des mesures de température */
Serial.print("temperature DS18b20: ");
Serial.print(sensors.getTempCByIndex(0)); //Afficher la température mesurée par DS18B20,
//vous pouvez avoir plus d'un capteur sur le même bus. 0 se réfère au premier capteur
//(DS18B20) sur le bus
Serial.println(" °C");
Serial.println(" ");
delay(1000);
getTemp(); //Apelle de la fonction ‘getTemp’ mesurer la température
AfficherTlcd(); //Apelle de la fonction ‘AfficherTlcd’ pour afficher la température sur le LCD
etatcapteurbas = digitalRead(fin_coursebas);
etatcapteurhaut = digitalRead(fin_coursehaut);
delay (400);
//---------------------------------------------------// VERIF de l'état du Toit
// verif si toit fermé
if (etatcapteurbas == HIGH && etatcapteurhaut == LOW) {
toit_ferme = true;
digitalWrite(ledbas, HIGH);
} else { // le toit est fermé
digitalWrite(ledbas, LOW);
toit_ferme = false;
}
// Vérif si toit ouvert
if (etatcapteurhaut == HIGH && etatcapteurbas == LOW) {
toit_ouvert = true;
digitalWrite(ledhaut, HIGH);
} else { // le toit est ouvert
digitalWrite(ledhaut, LOW);
toit_ouvert = false;
}
// si le toit se trouve à mi-course
if (etatcapteurhaut == LOW && etatcapteurbas == LOW) {
toit_milieu_course = true;
digitalWrite (buzzer, HIGH); // buzzer en route
delay (1000);
digitalWrite (buzzer, LOW);
delay (10);
}
//____________________________________________________// ACTIONNEMENT DU MOTEUR en Ouverture ou en Fermeture
// SI il fait FROID et le toit est ouvert
if ((T <= 25) && etatcapteurbas == LOW && etatcapteurhaut == HIGH)
digitalWrite(MotFerme, HIGH); // le moteur est actionné en fermeture
// Arret Fermeture avec capteur bas
if ((T <= 25 && etatcapteurbas == HIGH && etatcapteurhaut == LOW) ||
(MotFerme == HIGH && millis() - tempsdebutferme >= 20000))
digitalWrite(MotFerme, LOW); // le moteur est arreté en fermeture
// SI il fait CHAUD et le toit est fermé
if ((T > 28) && etatcapteurhaut == LOW && etatcapteurbas == HIGH)
digitalWrite(MotOuvre, HIGH); // le moteur est actionné en ouverture
// Arret Ouverture avec capteur haut
if ((T > 28) && etatcapteurhaut == HIGH && etatcapteurbas == LOW)
digitalWrite(MotOuvre, LOW); // le moteur est arreté en ouverture
//____________________________________________________ GESTION PROBLEME MOTEUR
// blocage pendant la fermeture
/* if ((MotFerme == HIGH) && (( millis() - tempsdebutferme) >= 20000))
{
digitalWrite(MotFerme, LOW);
}
*/
}
/*5-Définition de la fonction ‘getTemp’ qui mesure la température */
void getTemp() {
sensors.requestTemperatures(); // Demande de mesure de température
T = sensors.getTempCByIndex(0); //Stocker la valeur de mesure dans la variable ’T’, vous
//pouvez avoir plus d'un capteur sur le même bus. 0 se réfère au premier capteur (DS18B20)
//sur le bus
}
void AfficherTlcd() {
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(0, 5);
// Display static text
display.print(T);
display.print(" ");
display.setTextSize(1);
display.write(167);
display.setTextSize(2);
display.print("C");
display.display();
}