Dateien nach "/" hochladen
This commit is contained in:
@@ -0,0 +1,232 @@
|
||||
/**
|
||||
* SALATMASCHINE
|
||||
*
|
||||
* Microcontroller
|
||||
|
||||
* ESP32 NodeMCU Module WLAN WiFi Development Board mit CP2102 (Nachfolgermodell zum ESP8266)
|
||||
* ESP32 NODEMCU Module WiFi Development Board with CP2102 (successor model for the ESP8266) Compatible with Arduino
|
||||
* Zusätzliche Boardverwalter URL eintragen:
|
||||
* https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json <- klappt nicht!
|
||||
* https://dl.espressif.com/dl/package_esp32_index.json <- alte Version
|
||||
* Open Boards Manager from Tools > Board menu and install esp32 platform (and do not forget to select your ESP32 board from Tools > Board menu after installation).
|
||||
* ESP32 Dev Module
|
||||
* Das ist aber ein ESP32-WROOM-DA Module
|
||||
* Partition Scheme "No OTA(1MB APP/3MB SPIFFS")
|
||||
*
|
||||
* Es braucht scheinbar auch noch den CP201x Universal Driver (09.06.2023)
|
||||
* https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tab=downloads
|
||||
* Installieren über Gerätetreiber -> Treiber aktualisieren -> auf Computer suchen
|
||||
*
|
||||
* Relais
|
||||
* HW-383 2-Channel-Relais
|
||||
*
|
||||
* OLED
|
||||
* AZ-Delivery 1.3" I²C OLED Display
|
||||
*
|
||||
* Temperatur
|
||||
* Dallas DS18B20
|
||||
*/
|
||||
int version = 20240927;
|
||||
|
||||
#include <Arduino.h>
|
||||
#include "arduino_secrets.h"
|
||||
#include "pins.h"
|
||||
|
||||
// ----------------------------------------------------------------------------------------------------------------
|
||||
// alle variablen hier als unsigned long
|
||||
// mit int gab es bei langen Perioden Überläufen
|
||||
unsigned long std_duration_interval = 1200000; // in ms
|
||||
unsigned long std_max_water = 6000; // in ms
|
||||
|
||||
bool useTemperature = false; // gibt es Sensoren bzw. sollen die ausgelesen werden?
|
||||
bool useHumidity = false; // gibt es Sensoren bzw. sollen die ausgelesen werden?
|
||||
bool useButtons = true; // gibt es Sensoren bzw. sollen die ausgelesen werden?
|
||||
bool useSalatserver = true; // gibt es Sensoren bzw. sollen die ausgelesen werden?
|
||||
bool useSalatdisplay = true; // gibt es Sensoren bzw. sollen die ausgelesen werden?
|
||||
|
||||
bool useDryWetTrigger = false;
|
||||
// int
|
||||
int minMoisture = 25; // bei weniger Feuchtigkeit wird gewässert
|
||||
|
||||
// der häufigere Intervall für die vom MoistureSensor gesteuerte (Wert ist unter minMoisture) dry-Phase
|
||||
// wird aus std_duration_interval errechnet
|
||||
unsigned long moisture_interval_divider = 3; // Zeit seit der letzten Wässerung in ms
|
||||
|
||||
unsigned long dry_since = 0; // Zeit seit der letzten Wässerung in ms
|
||||
unsigned long first_water = 0; // Zeitpunkt Start Waesserung in ms
|
||||
unsigned long last_water = 0; // Zeitpunkt letzte Waesserung in ms
|
||||
unsigned long max_water; // Dauer Wasser in ms
|
||||
unsigned long duration_interval; // Interval in ms
|
||||
bool pump_on = false; // Pumpe an
|
||||
|
||||
|
||||
unsigned long dry_time_left; // vebleibende Zeit bis Start Waesserung in ms
|
||||
unsigned long wet_time_left; // Vebleibende Zeit bis Ende Waesserung in ms
|
||||
// ----------------------------------------------------------------------------------------------------------------
|
||||
float uptime;
|
||||
|
||||
// Messzyklus für alle Sensoren
|
||||
unsigned long duration_interval_measure = 5000; // Interval in ms
|
||||
unsigned long last_measure = 0; // Zeitpunkt letzte Messung in ms
|
||||
|
||||
// Zyklus Display
|
||||
unsigned long duration_interval_display = 1000; // Interval in ms
|
||||
unsigned long last_display = 0; // Zeitpunkt letzte Messung in ms
|
||||
|
||||
const char* message = ""; // Meldungen für DB und Webseite
|
||||
// ----------------------------------------------------------------------------------------------------------------
|
||||
bool firstStep = true;
|
||||
String trigger = "wet";
|
||||
// ---------------------------------------------------------------------------------------------------------------
|
||||
#include "temperature.h"
|
||||
#include "humidity.h"
|
||||
#include "buttons.h"
|
||||
#include "salatserver.h"
|
||||
#include "display.h"
|
||||
#include "salatclient.h"
|
||||
// ----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
void pumpOn() {
|
||||
// pumpe anschalten
|
||||
digitalWrite(relais, LOW);
|
||||
pump_on = true;
|
||||
|
||||
first_water = millis();
|
||||
last_water = 0;
|
||||
dry_since = 0;
|
||||
Serial.println("pumpON-Pumpe via Relais 1 an");
|
||||
// Pumpe an - LED aus
|
||||
digitalWrite(LED, LOW);
|
||||
|
||||
// Daten an serverExt senden via salatclient
|
||||
sendDataToExtern();
|
||||
}
|
||||
void pumpOff() {
|
||||
|
||||
digitalWrite(relais, HIGH);
|
||||
pump_on = false;
|
||||
|
||||
first_water = 0;
|
||||
last_water = millis();
|
||||
Serial.println("pumpOFF-Pumpe via Relais aus");
|
||||
// Pumpe aus - LED an
|
||||
digitalWrite(LED, HIGH);
|
||||
}
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
Serial.println("Salatmaschine startet");
|
||||
|
||||
// LED
|
||||
// LED geht nach dem ERSTEN MAL pumpen an ... vorher ist pump_on NULL
|
||||
pinMode(LED, OUTPUT);
|
||||
|
||||
// Relais
|
||||
pinMode(relais, OUTPUT);
|
||||
digitalWrite(relais, HIGH);
|
||||
// pinMode(relais_2, OUTPUT);
|
||||
// digitalWrite(relais_2, HIGH);
|
||||
pump_on = false;
|
||||
|
||||
// Initialwerte setzen
|
||||
max_water = std_max_water; // millis
|
||||
duration_interval = std_duration_interval; // millis
|
||||
last_water = millis(); // millis
|
||||
if (useButtons) {
|
||||
setupButtons();
|
||||
}
|
||||
if (useTemperature) {
|
||||
setupTemperature();
|
||||
}
|
||||
if (useHumidity) {
|
||||
setupHumidity();
|
||||
}
|
||||
if (useSalatdisplay) {
|
||||
setupDisplay();
|
||||
}
|
||||
if (useSalatserver) {
|
||||
setupSalatserver();
|
||||
}
|
||||
}
|
||||
void loop() {
|
||||
|
||||
|
||||
if (useButtons) {
|
||||
loopButtons();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Time is up - dies ist der große Intervall - Pumpe wird angeschaltet
|
||||
// Wässern auf jeden Fall, wenn der Intervall abgelaufen ist
|
||||
if ((millis() > (last_water + duration_interval)) && pump_on == false) {
|
||||
// pumpe anschalten
|
||||
pumpOn();
|
||||
}
|
||||
|
||||
|
||||
// Pumpe läuft ....
|
||||
if (pump_on == true) {
|
||||
wet_time_left = max_water - (millis() - first_water);
|
||||
// Pumpe abschalten, wenn genug gewässert
|
||||
if (millis() > (first_water + max_water)) {
|
||||
wet_time_left = 0;
|
||||
// Pumpe aus
|
||||
pumpOff();
|
||||
}
|
||||
} else {
|
||||
dry_time_left = (duration_interval - (millis() - last_water));
|
||||
dry_since = millis() - last_water;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sensoren auslesen
|
||||
*/
|
||||
if (millis() > (last_measure + duration_interval_measure)) {
|
||||
uptime = millis() / 1000;
|
||||
if (useTemperature) {
|
||||
getTemperature();
|
||||
}
|
||||
if (useHumidity) {
|
||||
getHumidity();
|
||||
}
|
||||
Serial.println("xxxxx");
|
||||
|
||||
Serial.print("uptime ");
|
||||
Serial.println(uptime / 1000);
|
||||
Serial.print("last_water ");
|
||||
Serial.println(last_water / 1000);
|
||||
Serial.print("duration_interval ");
|
||||
Serial.println(duration_interval / 1000);
|
||||
Serial.print("max_water ");
|
||||
Serial.println(max_water / 1000);
|
||||
Serial.print("dry_since ");
|
||||
Serial.println(dry_since / 1000);
|
||||
Serial.print("message ");
|
||||
Serial.println(message);
|
||||
|
||||
// je nach Feuchtigkeit - im kleinen Intervall (immer 1/3 vom großen Intervall)
|
||||
if ((moistureValuePercent < minMoisture) && useDryWetTrigger) {
|
||||
trigger = "dry";
|
||||
// duration_interval = std_duration_interval / moisture_interval_divider;
|
||||
|
||||
Serial.println("triggerDRY");
|
||||
} else {
|
||||
|
||||
Serial.println("triggerWET");
|
||||
trigger = "wet";
|
||||
// duration_interval = std_duration_interval;
|
||||
}
|
||||
|
||||
last_measure = millis();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if (millis() > (last_display + duration_interval_display)) {
|
||||
if (useSalatdisplay) {
|
||||
loopSalatdisplay();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user