Een plantenwachter voor de vensterbank

Vandaag wil ik jullie voorstellen aan nieuwe mehrteiliges een interessant project met de efficiënt ESP pluriform en 32. Wij ons baseren plant een bewaker voor onze planten thuis. Dit moet richten onze aandacht tijdens ons bij onze spannende Electronicaprojecten water die toezicht houden op de bezoldiging van de planeet aarde en ons informeren over het vocht als de grond zinkt. Bovendien plant heeft onze bewaker een LED licht dat schijnt het verkeer met vochtige aarde Groen en rood wordt met droge aarde over Geel. Voordat we beginnen, echter met het project, maar wij moeten nog voor onszelf, voor het echte begin van het project enkele suggesties. Het gaat daarbij met name om de toepassing van de bewaker plant. Omdat onze fabriek bewaken bepaalt de vochtigheid van de aarde over een nauwe kapazitive veldmetingen, is het noodzakelijk dat de luchtvochtigheid wordt opgeslagen in nabijheid van de sensor. Bij, naar gelang van het vervullen van een normale regel (bloemen) van de planeet aarde op de vastgoedmarkt, de supermarkt of deze voorwaarde, gebeurt dit niet met onder meer substraat of hydrocultuur substraat orchidee het geval. Zo is:

Dit project is voor planten of hydrocultuur Vanuit de lucht herb koopman planten (zoals orchideeën bijvoorbeeld) niet op een passende manier.

Bovendien planten hebben heel andere eisen je voor irrigatie. Tijdens een duurzame vocht fundamentele (meestal geen file maakt planten vocht) gaven de voorkeur aan zijn tegen, maakt het nogal droge-loving en wil gegoten worden nog maar zelden. Omdat de specifieke eisen van de plant onze fabriek weet garde, de interpretatie van de nodige maatregelen ligt (pour of niet gieten) op de (verkeerslichten) weergave van de plant uitsluitend bewaker in de hand van de gebruiker botanische expert 😊. 

Daarom plant is de bewaker geen vervanger met een passende verantwoordelijk verzorging die passen voor je bedrijf van planten.

In de loop van het project en met meer zal worden in de mate die we andere sensoren en toevoegen van functies ook troost. Zijn verrast!
Maar we beginnen met de basis. Als we de onderdelen die we nodig hebben voor onze fabriek guard bij het begin:

  • 1 x groene kleur leidde (560 nm); 5 mm
  • 1x gele kleur leidde (605 nm); 5 mm
  • 1x leidde rode kleur (633 nm); 5 mm
  • Ω tolerantie 6x130k oppositie 1%;
  • 6x Ω tolerantie 47K oppositie 1
  • 3x Ω tolerantie 150 oppositie 1%;
  • 1x vochtige Kapazitiver sensor
  • 1x generieke esp32 38pin variatie; type NodeMCU maatje 32; Benen 38;
  • 1x elektrisch YwRobot spanning uit

Afluisteren de componenten als volgt:

Circuit

 

150 oppositie Ohm worden gebruikt als voor de preopposition LEDs. Van 130 KOhm spanning vormen een deler samen met 47 KOhm oppositie op de analoge uitgang van de vochtigheidsmeter.

We stoppen de volgende codes voor 32 onze ESP hoog:

 

# include <Bestuurder/adc.H>

//Portedefinierung Led's
# define LED_Rot     5     //Red leidde 
# define LED_Gelb    14    //Yellow leidde
# define LED_Gruen   15    //Green leidde

//Settings leidde PWM
# define PWMfreq 5000  Base //5 kHz frequentie
# define PWMledChannelA  0
# define PWMledChannelB  1
# define PWMledChannelC  2
# define PWMresolution  8 Resolutie //8 stukjes
# define ADCAttenuation ADC_ATTEN_DB_11  //ADC_ATTEN_DB_11 = ADC 0-3.6V Dämpung Einstzellung
# define MaxSensors 1


struct MoistureSensorCalibrationData
{   int Gegevens[MaxSensors * 2] = {0, 0}; Gegevens voor //calibration vochtigheidsmeter. Volg tekst aanpassen project en waarden ensprechend
};

struct MoistureSensorData
{   byte Procent[MaxSensors] = {0};  //Humidity sensordata in procent
};

//Worldwide variabele
MoistureSensorCalibrationData MCalib;
MoistureSensorData MMeasure;
byte AttachedMoistureSensors; Actieve //detected vocht van de sensor (graaf)

Leegte Valstrik() {   //initialize seriële communicatie op bits tweede 9600 door:   pinMode(LED_Rot, OUTPUT);   pinMode(LED_Gelb, OUTPUT);   pinMode(LED_Gruen, OUTPUT);   Serie.beginnen(115200);   ledcSetup(PWMledChannelA, PWMfreq, PWMresolution);   ledcSetup(PWMledChannelB, PWMfreq, PWMresolution);   ledcSetup(PWMledChannelC, PWMfreq, PWMresolution);   ledcAttachPin(LED_Rot, PWMledChannelA);   //attach het kanaal naar het GPIO te controleren   ledcAttachPin(LED_Gelb, PWMledChannelB);   ledcAttachPin(LED_Gruen, PWMledChannelC);   SetLedConfig(20, 20, 20);   AttachedMoistureSensors = DetectMoistureSensors();   Serie.println(En de volgende("Systeemconfiguratie:"));   Serie.Afdrukken(AttachedMoistureSensors);   Serie.println(En de volgende("Bodenfeuchtigkeitsensor (en)"));
}

byte DetectMoistureSensors ()
{
# define MinSensorValue 100   byte Ontdekt = 0;   Voor (int Ik = 0; Ik < MaxSensors; Ik++)   {     int MSensorRawValue = ReadMoistureSensorVal(Ik);     Als ( MSensorRawValue > MinSensorValue) {       Ontdekt++;     } Anders {       breken;     }   }   Als (Ontdekt < 1)   {     Serie.println(En de volgende("Nee Bodenfeuchtigkeitssesoren erkend. Systeem gestopt. "));     esp_deep_sleep_start();     Terwijl (1) {}   }   Terugkeer Ontdekt;
}

bool SetLedConfig(byte Rode, byte Geel, byte Groen)
{   ledcWrite(PWMledChannelA, Rode); //Red leidde   ledcWrite(PWMledChannelB, Geel); //Yellow leidde   ledcWrite(PWMledChannelC, Groen); //Green leidde   Terugkeer Waar;
}

int ReadMoistureSensorVal(byte Sensor)
{   int ReturnValue, Ik;   lang Som = 0;
# define NUM_READS 6   adc1_config_width(ADC_WIDTH_BIT_12);   Rang //to 4095 0   Schakelaar (Sensor)   {     Zaak 0:       {         adc1_config_channel_atten(ADC1_CHANNEL_0, ADCAttenuation);         Voor (Ik = 0; Ik < NUM_READS; Ik++) { //Averaging algoritme           Som += adc1_get_raw( ADC1_CHANNEL_0 ); //Read analoog         }         ReturnValue = Som / NUM_READS;         breken;       }   }   Terugkeer ReturnValue;
}

bool GetMoistureData()
{   bool ReadisValid = Waar;   Voor (int Ik = 0; Ik < AttachedMoistureSensors; Ik++)   {     Als ((MCalib.Gegevens[Ik] == 0) || (MCalib.Gegevens[Ik + 1] == 0)) //MinADC waarde ADC maxADC waarde     {       ReadisValid = Valse;       Terugkeer ReadisValid;     }     int RawMoistureValue = ReadMoistureSensorVal(Ik);     RawMoistureValue = MCalib.Gegevens[Ik + 1] - RawMoistureValue;     RawMoistureValue = MCalib.Gegevens[Ik] + RawMoistureValue;     MMeasure.Procent[Ik] = Kaart(RawMoistureValue, MCalib.Gegevens[Ik], MCalib.Gegevens[Ik + 1], 0, 100);     Als (MMeasure.Procent[Ik] > 100 ) {       ReadisValid = Valse;     }   }   Terugkeer ReadisValid;
}

Belangrijkste //the lus
Leegte Lus()
{   Als (GetMoistureData())   {     Serie.Afdrukken(En de volgende("Vochtigheid waarde sensor 1 in procenten:"));     Serie.Afdrukken(MMeasure.Procent[0]);     Serie.println(En de volgende(" %"));     Als (MMeasure.Procent[0] > 50)     {       SetLedConfig(0, 0, 20);     }     Anders Als (MMeasure.Procent[0] > 10)     {       SetLedConfig(0, 255, 0);     }     Anders     {       SetLedConfig(255, 0, 0);     }   }   Anders   {     Serie.Afdrukken(En de volgende("Bodemvocht sensor niet kalibreren. Alsjeblieft, kalibreren. Ruwe gegevens van de sensor 1: "));     Serie.println(ReadMoistureSensorVal(0));     SetLedConfig(20, 20, 20);   }   Vertraging(1000);        Tussen //delay leest voor stabiliteit
}

 

 

Nu als de laatste stap in de goede richting moeten we de ijking uitvoeren van onze vochtigheidsmeter. De ijking van de sensor wat de erkend wordt als een droge aarde (water salaris 0%) en natte aarde wat (water 100% salaris). Bovendien is het een loopje nemen met de vochtigheidsmeter absoluut als eerste in droge aarde ruwe sensor en laat de gegevens over de serie ellepijp snijden te geven:

Waarde 1 (doodleuk):

Grond is vochtig sensor niet kalibreren

We halen de waarde (2276) en nu de aarde water zolang voor hen volkomen! doordrenkt is, kan uitsluiten en geen water. We sleurende waarde 2: (klei) (1648)

Waarde met vocht

 

We immers in het eerste waarde, in 2276 10 bovendien en vertrek van 1648, 10. De waarden daarvan het gevolg en 1638 in 2286

Leggen we de waarden van onze code:

struct MoistureSensorCalibrationData

{
int-gegevens voor [MaxSensors* *] = {1638,2286};
};

De code en de branding.

Krijgen we de volgende vraag:

Kwestie vochtige grond

 

Tegelijkertijd onder leiding geeft aan dat onze "stoplicht" groen. Naast Bedoel De kleuren:

GroenVochtigheid: hoog.

GeelVochtigheid. gemiddeld:

RodeDoodleuk:.

Veel plezier bij het kopiëren en met het volgende deel van de serie.

Esp-32Projekte für fortgeschritteneSensorenSmart home

17 Kommentare

Patrick

Patrick

Super, dass du mit uns dein Projekt teilst. Vielen Dank dafür!

Ich habe eine Frage bezüglich der Spannungsversorgung: Würde die Spannungsversorgung vom ESP32 auch alleine ausreichen? Wie hoch darf der maximale Laststrom sein? Ich finde dazu leider keine Angaben.

Viele Grüße
Patrick

Tobias Kuch

Tobias Kuch

Hallo Clajo,
Die Antwort auf die Frage wie lange die Zuleitungen zu dem Sensor sein dürfen ist nicht trivial und hängt von einigen Faktoren ab. Diese ergeben sich aus dem Grundsatz bzw. der Formel des Spannungsabfalls auf elektrischen Leitungen. Die Antwort auf deine Frage ergibt sich aus den Formeln R (Leitung)=2L/κ (Kupfer κ = 56,0)* A und ΔU=R⋅I Davon ausgehend, das die Betriebsspannung Ub Nom. 5 Volt des NE555 Timers nicht mehr als 0,5 Volte abfallen sollte bei 0,2 A angenommenen Strombezug ergibt sich durch einsetzen ein max. R von 2,5 Ohm. Umgestellt nach Leitungslänge bei ang. materialabhängige Leitfähigkeit von Kupfer und angenommenen 1mm Querschnitt des Kabels ergibt sich durch Umstellung eine Maximallänge von L = 70 Meter. Die parasitäre Kapazität der Leitung ist irrelevant, da diese erst bei hohen Freuenzen von belang ist.. Ich hoffe, dein Frage zufriedenstellend beantwortet zu haben

Clajo

Clajo

Hallo,

wie lang darf die Leitung vom Sensor bis zum Board sein?
Jörg

Tobias

Tobias

Hallo Jörg,

Die Idee mit der Ansteuerung für eine automatische Bewässerung währe zwar eine konsequente Erweiterung , würde jedoch den Rahmen des Projektes hier sprengen. Falls du weitergehende Tipps dazu bekommen möchtest, schreibe bitte an AZ-Delivery mit bitte um Weiterleitung an mich. Dann gehe ich gerne zu diesem Thema noch auf Details ein.

Jörg

Jörg

Hi Tobias,
dein Hinweis auf ein gewisses Grundwissen der Programmierung ist schon nicht falsch.
Zumindest weiß ich in der Zwischenzeit auch wie das mit der Belegung der Pins in der Programmierung zu erkennen ist. Wenigstens ein kleiner Lichtblick für mich…..
Denn in meinem Alter will ich nicht mehr großartig anfangen irgend welche Programmiersprachen zu lernen, das Grundlegende des Code verstehe ich soweit ich weiß um was es sich dabei handeln soll….
Jetzt aber gleich noch eine ganz einfache Frage:
Ich habe ein ähnliches Projekt aber das läuft auf einer separaten Hardware und nennt sich: Gies-O-Mat mit AVR
Vom Prinzip her das gleiche Grundprinzip, kapazitive Feuchtigkeitssensoren zur Ermittlung der Erdfeuchte. Nur kann dieses Projekt nun auch noch Relais ansteuern und somit die Pflanzen selbständig gießen…….
Denkst du dass du das vielleicht auch noch implementieren könntest, dann wäre das ganze Projekt ja absolut unschlagbar ?!?!?

Tobias

Tobias

Hallo Jörg,

Erst einmal vielen Dank für die Beantwortung der Fragen bzgl. des Treibers. Du liegst natürlich direkt richtig. Der Treiber wird automatisch eingebunden. Bezüglich des Schaltbildes würde ich dich bitten, etwas Geduld zu haben. Ich werde dieses bei Gelegenheit dann auf meiner GIT-Hub Seite auf https://github.com/kuchto auf der ich die Projekte ebenfalls einstelle, veröffentlichen. Dieses Projekt setzt aber Erfahrung in der Technik an sich als auch in der Programmierung voraus.

Knut Dorendorff

Knut Dorendorff

Hallo Jörg. Vielen Dank für die Hinweise. Ich habe zwar noch nicht die einzelnen Teile zusammen gesteckt, aber zunächst hatte ich auch mit der Ansicht Probleme. Allerdings muss du berücksichtigen, dass auf dieser Seite nur ein Sensor angeschlossen ist, aber die Vorbereitung für weitere 5 Sensoren schon verbaut sind, aber noch nicht genutzt werden. Siehe am unteren Bild die Widerstände. Wenn Du in den dritten Teil gehst sollte es sich erklären.
Schauen wir mal .
Gruß Knut

Jörg

Jörg

Hallo Knut,
das Problem mit dem Treiber hat sich, denk ich mal von selbst erledigt.
Sobald man nämlich das Board ESP32xxxxx verwendet, wird auch automatisch der richtige Treiber bereit gestellt.
Zumindest habe ich das bisher bei der Überprüfung beim Kompilieren festgestellt.
Falls das nicht stimmen sollte:
Bitte nicht gleich alle mit dem Vorschlaghammer auf mich einschlagen ;-))))
Und in einem anderem Thread habe ich lesen können dass dieser Sketch nicht mit dem Lolin V3 kompatibel ist, somit hat sich diese Frage auch schon von selbst aufgelöst.
Das Einzige:
Ich kann die Schaltung nach wie vor nicht richtig erkennen….
Gibt es hierfür einen schöneren Steckplan oder gar Schaltplan?

Jörg

Knut Dorendorff

Knut Dorendorff

Halli Hallo,
eine tolle Sache. Wie komme ich an Library Driver/adc.h ?

Gruss Knut.

Knut Dorendorff

Knut Dorendorff

Große Klasse. Allerdings habe ich auch das Problem wie Jörg, dass die Library Driver/adc.h nicht gefunden wird. Wo bekomme ich die als Zip?

Gruß Knut

Jörg

Jörg

Hallo, eine sehr schöne Schaltung welche ich gerne auch nachbauen möchte.
Leider bin ich nicht gerade der Programmierprofi und habe auch mit der Beschaltung an sich ein kleines Problem. Ein paar Fragen hierzu:
1.: Gibt es eine Art Schaltplan für diese Schaltung, ich kann das Bild sehr schlecht erkennen ?
2.: Kann man diese Schaltung auch mit einem Lolin NodeMcu V3 nachbauen ?
3.: Wo finde ich den Treiber <driver/adc.h> ?

Jörg

Tobias Kuch

Tobias Kuch

Hallo Thorsten,

In dem von dir genannten Datasheet wird eine Minimalbertriebsspannung von 3,0 volt genannt. Bei einer Betriebsspannung des Sensors von 3,0 Volt ist die Ausgangsspannung tatsächlich Betriebsbedingt 3 volt. Der Sensor funktionierte bei mir in Tests jedoch erst zuverlässig mit 5 Volt. Im Schaltbild siehst du auch das er auf der 5 Volt Schiene liegt. GEMESSENE Ausgangsspannung war bei trockenem Sensor bei mir dann 4 Volt. Also zu hoch für den ESP. Daher ist und bleibt der Spannungsteiler notwendig ;)

Thorsten

Thorsten

Das mit dem Spannungsteiler ist mir nicht ganz logisch. Der Sensor hat einen Ausgangsspannungsbereich von 0V bis 3.0V (https://media.digikey.com/pdf/Data%20Sheets/DFRobot%20PDFs/SEN0193_Web.pdf) und damit innerhalb der Spec vom ESP.

Wäre nett, wenn du das noch mal klarstellen würdest.

Thorsten

Tobias

Tobias

Hallo Joe,

Es werden keine kapazitiven Werte durch den ESP gemessen, sondern, bedingt durch die interne Funktionsbeschaltung des Feuchtesensors, analoge Gleichspannungswerte. Da der Messbereich des ESP jedoch unterhalb der max. . analogen Spannungswerte des Feuchtesensors sind , ist der Spannungsteiler notwendig.

Tobias

Tobias

Hallo Paulaner,

Die Beschaltung der Wiederstände ist nicht mangelhaft, sondern im Gegenteil Absicht sind, da diese , und auch der Code bereits Vorbereitungen für die Anbindungen weiterer 5 Sensoren des Typs Feuchtesensoren enthalten bzw. sind.

paulaner

paulaner

Hallo,
ihr Fritzing Bild ist mangelhaft, 5 Widerstände hängen in der Luft, nix Spannungsteiler.
H. Winkler

joe

joe

Ganz logisch erscheint mit die Beschaltung des Spannungsteiler und Feuchtesensor nicht.
Das ich bei Messung kapazitiver Werte ein Wechselspannung mit einer, entsprechen dem kapazitiven Wert des Sensor, Frequenz betreiben muß. Das sehe ich dort nicht.

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Aanbevolen blog berichten

  1. Installeer ESP32 nu van de raad van bestuur
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmeren via Wi-Fi