^ Auteur | Mouhsine ^ ^ Catégories | Électronique, Maison, Robotique, Science & Biologie, Alimentation & Agriculture ^ {{projets:systeme_d_arrosage_automatique_img_20220707_224549.png|Système d'arrosage automatique}} système d'arrosage automatique miniature, connecté sur cloud ou en local. Permets d'arroser de façon autonome une plante en fonction de l'humidité de la terre. > **Licence :** CERN Open Hardware Licence v1.2 Mot(s)-clé(s) : Arrosage, plante, ESP32, IoT, agriculture, programmation, micropython ==== Introduction ==== Ce système permet d'arroser automatiquement une plante et informe l'utilisateur du pourcentage d'humidité. Le matériel est conçu pour être modulaire (trois modules: pompe avec capteur d'humidité, ESP32 C3 et écran monochrome OLED 0.91") facile à implémenter. ==== Liste des matériaux ==== * Un module pompe avec capteur d'humidité intégrer ( = 12 €) * Un microcontrôleur type ESP32 ( = 8 €) * Une afficheur OLED 0.91" I2C ( = 4 €) * connecteur femelle type HY2.0 4P ( = 0.6 €) * Fils souple (coloré) ==== Liste des outils ==== * Une imprimante 3D avec ces outils * Logiciel de conception 3D (CAO) * Ordinateur (PC, Raspberry pi 3 ou 4, ...) avec logiciel IDE Thonny * Fer à souder et étain * pinces de sertissage / dénudage - {{projets:systeme_d_arrosage_automatique_img_20220704_212533.jpg|no-controls}} - {{projets:systeme_d_arrosage_automatique_m5stamp_c3_mate_w_pin_headers_1.jpg|no-controls}} - {{projets:systeme_d_arrosage_automatique_eng_pl_ssd1306_oled_display_0_91_white_i2c_3_5v_arduino_2208_4.jpg|no-controls}} - {{projets:systeme_d_arrosage_automatique_ori_connecteur_grove_cms_hy2_0_b_30351.jpg|no-controls}} ==== Etape n°1 - câblage ==== **Choix des fils:** * Les fils standard de câblage d'électroniques section max 0.3mm² * préférable de choisir les couleurs noir et rouge pour les alimentations et des autres couleur pour GPIO. //NB: ce projet nécessite peu des fils (langueur total max 20 cm)// **Câblage du ESP32 et l'afficheur OLED et connecteur HY2.0-4P** câbler les 3 éléments comme indiquer dans le diagramme (voir figure), utiliser des langueurs des fils la plus court possible, sachant que l'afficheur sera monté juste en haute du ESP32 et le connecteur juste à coté d'antenne (ESP32), cela permet de mettre l'ensemble dans un petit boitier. {{projets:systeme_d_arrosage_automatique_arrosage.jpg|no-controls}} {{projets:systeme_d_arrosage_automatique_img_20220704_212339.jpg|no-controls}} {{projets:systeme_d_arrosage_automatique_img_20220704_212314.png|no-controls}} {{projets:systeme_d_arrosage_automatique_img_20220704_212331.jpg|no-controls}} {{projets:systeme_d_arrosage_automatique_img_20220704_212457.jpg|no-controls}} ==== Etape n°2 - Boitier (impression 3D) et assemblage ==== * Le boitier du système se compose de trois parties (capot supérieur, couvercle inférieur et la partie latérale) cette décomposition facilite l'impression 3D, la maintenance du système et l'accès à ses composantes électroniques. Lien Thingiverse vers le fichier format F3D [[https://www.thingiverse.com/thing:5487673|https://www.thingiverse.com/thing:5487673]] * Le boitier peux être imprimé sans utilisation de mâtereaux support et sans paramètres particuliers. * le boitier est des dimensions (38mm*18.5mm*14mm) permet d'accueillir le M5Stamp C3 l'afficheur OLED et le connecteur HY2.0 4P. **L'assemblage consiste à utiliser la colle à chaud:** //M5Stamp C3 est collé sur le capot inférieur de telle façon soit accessible par USB-C du côté et on fixe de l'autre côté le connecteur HY2.0 4P.// //Enfin l'afficheur OLED et coller sur le couvercle supérieur de tell façon que toute la partie d'affiche soi visible.// {{projets:systeme_d_arrosage_automatique_img_20220704_221436.jpg|Système d'arrosage automatique IMG 20220704 221436.jpg}} {{projets:systeme_d_arrosage_automatique_img_20220704_221336.jpg|Système d'arrosage automatique IMG 20220704 221336.jpg}} {{projets:arrosage_automatique_capture_d_cran_2022_08_29_230406.png|Arrosage automatique Capture d cran 2022-08-29 230406.png}} {{projets:arrosage_automatique_sans_nom_v5.png|Arrosage automatique Sans nom v5.png}} {{projets:arrosage_automatique_capture_d_cran_2022_08_29_231623.png|Arrosage automatique Capture d cran 2022-08-29 231623.png}} ==== Etape n°3 - Programmation ==== [[Step_Content::Micropython code for ESP32 M5Stamp C3 microcontroller OLED dispaly 128*32 with I2C M5STACK Watering Unit - Soil Moisture Sensor and Water Pump import of libraries from machine import Pin, SoftI2C, ADC from time import sleep import ssd1306 import gfx import framebuf Pin for moisture sensor moisure = ADC(Pin(4)) Attenuation of the ADCA gain for analog read moisure.atten(ADC.ATTN_11DB) Pin for pump control pump = Pin(6, Pin.OUT) Threshold irrigation point threshold_point = 45 I2C setup and initialisation i2c = SoftI2C(scl = Pin(9), sda = Pin(8)) OLED object creation and setup oled = ssd1306.SSD1306_I2C(128,32,i2c) bytearray of empty droplet icon droplet = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x80\x00\x00\x03\xc0\x00\x00\x02@\x00\x00\x06`\x00\x00\x0c0\x00\x00\x08\x10\x00\x00\x18\x18\x00\x00\x10\x08\x00\x000\x0c\x00\x00`\x06\x00\x00@\x02\x00\x00@\x02\x00\x00\xc0\x03\x00\x00\x80\x01\x00\x00\x80\x01\x00\x01\x80\x01\x80\x01\x00\x00\x80\x01\x00\x08\x80\x01\x00\x08\x80\x00\x80\t\x00\x00\x80\x19\x00\x00\xc03\x00\x00A\xe6\x00\x000\x0c\x00\x00\x18\x18\x00\x00\x07\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') bytearray of smiley face icon smiley_face = bytearray(b'\x01\xf0\x00\x06\x0e\x00\x18\x01\x00\x10\x00\xc0 \x00@@\x00 C\x08 \x81\x0c \x80\x00\x10\x80\x00\x10\x80\x00\x10\x88\x01\x10\x84\x02 F\x04 A\x9c `@0\x00\x80\x08\x01\x80\x07\x0e\x00\x01\xf0\x00') bytearray of sad face icon sad_face = bytearray(b'\x01\xf8\x00\x06\x06\x00\x18\x01\x80\x10\x00\x80 \x00@@\x00 A\x08 \x83\x0c \x80\x00\x10\x80\x00\x10\x80\x00\x10\x81\xf8\x10\x82\x04 D\x02 L\x02` \x00@0\x00\x80\x08\x01\x80\x07\x0e\x00\x01\xf0\x00') bytearray of filled droplet icon icon = [ [0,0], [0,0], [0,0], [0,0], [0,0], [16,2], [16,2], [15,4], [14,6], [14,6], [13,8], [12,10], [12,10], [11,12], [11,12], [11,12], [10,14], [10,14], [10,14], [10,14], [10,14], [10,14], [10,14], [10,14], [11,12], [11,12], [13,8], [15,4], [0,0], [0,0], [0,0], [0,0], ] Creation of frame buffer from icons frameD = framebuf.FrameBuffer(droplet, 32, 32, framebuf.MONO_HLSB) frameH = framebuf.FrameBuffer(smiley_face, 20, 20, framebuf.MONO_HLSB) frameS = framebuf.FrameBuffer(sad_face, 20, 20, framebuf.MONO_HLSB) defintion of values converting function in range (min, max) def convert(x, in_min, in_max, out_min, out_max): return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min LmoisureLevel = [] AvmoisureLevel = 0 get 50 values of moisture and calculate the average while True: moisureLevel = moisure.read() LmoisureLevel.append(moisureLevel) if len(LmoisureLevel) == 50: AvmoisureLevel = sum(LmoisureLevel)/50 LmoisureLevel.pop(0) AvmoisureLevel = int(AvmoisureLevel) moisure_string = str(AvmoisureLevel) clear OLED display oled.fill(0) display texte oled.text('My plant!',10,0) Convert the analog value to moisture level (0%-100%) AvmoisureLevel = convert(AvmoisureLevel, 1860, 2550, 100, 0) w = int(AvmoisureLevel/3.3) display moisture level oled.text(str(AvmoisureLevel) +"%",4,20) display emplty droplet icon oled.blit(frameD, 100, 0) display droplet level for y,row in enumerate(icon): for p in range(row[1]): if (y < 32 - w): oled.pixel(99+row[0]+p,y,0 ) else: oled.pixel(99+row[0]+p,y,1) Control pump at given threshold point and display emoji if(AvmoisureLevel < threshold_point): pump.value(1) oled.blit(frameS, 60, 12) else: pump.value(0) oled.blit(frameH, 60, 12) oled.show()]] /Fichier:Syst%C3%A8me_d%27arrosage_automatique_Micropython-logo.svg_-768x782.png ===== Notes et références ===== **Références:** [[https://docs.micropython.org/en/latest/esp32/quickref.html|https://docs.micropython.org/en/latest/esp32/quickref.html]] \\ [[https://github.com/adafruit/Adafruit_SSD1306|https://github.com/adafruit/Adafruit_SSD1306]] \\ [[https://docs.m5stack.com/en/unit/watering|https://docs.m5stack.com/en/unit/watering]]