Craftiarenko
Published © GPL3+

Autonomous irrigation system

The solar powered irrigation system that supports several separate zones, each with a separate water channel and soil moisture sensor.

BeginnerFull instructions provided2 hours413
Autonomous irrigation system

Things used in this project

Hardware components

Neodymium magnet
×4
SG90 Micro-servo motor
SG90 Micro-servo motor
×4
Solenoid valve
×4
Solar panel 20W
×1
Solar charger PWM
×1
LiFePO4 12V battery
×1
Lolin D1 Mini
×1

Software apps and online services

Fusion
Autodesk Fusion

Hand tools and fabrication machines

3D Printer (generic)
3D Printer (generic)
Multitool, Screwdriver
Multitool, Screwdriver

Story

Read more

Custom parts and enclosures

STL files

Schematics

Schematic

Code

ESPHome firmware

YAML
My ESPHome configuration for Lolin D1 Mini
esphome:
  name: esp-irrigation
  friendly_name: esp-irrigation

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "your encryption key"

ota:
  password: "your ota password"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp-Irrigation Fallback Hotspot"
    password: "your hotspot password"

captive_portal:

output:
  - platform: esp8266_pwm
    id: pwm_output_0
    pin: GPIO14
    frequency: 50 Hz

  - platform: esp8266_pwm
    id: pwm_output_1
    pin: GPIO12
    frequency: 50 Hz

  - platform: esp8266_pwm
    id: pwm_output_2
    pin: GPIO13
    frequency: 50 Hz

  - platform: esp8266_pwm
    id: pwm_output_3
    pin: GPIO15
    frequency: 50 Hz

servo:
  - id: servo_0
    output: pwm_output_0
    auto_detach_time: 1s
    # transition_length: 3s
    restore: true

  - id: servo_1
    output: pwm_output_1
    auto_detach_time: 1s
    # transition_length: 3s
    restore: true

  - id: servo_2
    output: pwm_output_2
    auto_detach_time: 1s
    # transition_length: 3s
    restore: true

  - id: servo_3
    output: pwm_output_3
    auto_detach_time: 1s
    # transition_length: 3s
    restore: true

number:
  - platform: template
    id: servo_number_0
    name: Servo Test 0
    min_value: 50
    initial_value: 50
    max_value: 100
    step: 5
    optimistic: true
    set_action:
      then:
        - servo.write:
            id: servo_0
            level: !lambda 'return x / 100.0;'

  - platform: template
    id: servo_number_1
    name: Servo Test 1
    min_value: 50
    initial_value: 50
    max_value: 100
    step: 5
    optimistic: true
    set_action:
      then:
        - servo.write:
            id: servo_1
            level: !lambda 'return x / 100.0;'

  - platform: template
    id: servo_number_2
    name: Servo Test 2
    min_value: 50
    initial_value: 50
    max_value: 100
    step: 5
    optimistic: true
    set_action:
      then:
        - servo.write:
            id: servo_2
            level: !lambda 'return x / 100.0;'

  - platform: template
    id: servo_number_3
    name: Servo Test 3
    min_value: 50
    initial_value: 50
    max_value: 100
    step: 5
    optimistic: true
    set_action:
      then:
        - servo.write:
            id: servo_3
            level: !lambda 'return x / 100.0;'

switch:
  - platform: template
    name: "Valve Switch 0"
    lambda: |-
      if (id(servo_number_0).state != 50) {
        return true;
      } else {
        return false;
      }
    turn_on_action:
      - number.set:
          id: servo_number_0
          value: 100
      - delay: 1s
      - number.set:
          id: servo_number_0
          value: 90 
      - delay: 1s
      - number.set:
          id: servo_number_0
          value: 80       
    turn_off_action:
      - number.set:
          id: servo_number_0
          value: 50  

  - platform: template
    name: "Valve Switch 1"
    lambda: |-
      if (id(servo_number_1).state != 50) {
        return true;
      } else {
        return false;
      }
    turn_on_action:
      - number.set:
          id: servo_number_1
          value: 100
      - delay: 1s
      - number.set:
          id: servo_number_1
          value: 90 
      - delay: 1s
      - number.set:
          id: servo_number_1
          value: 80      
    turn_off_action:
      - number.set:
          id: servo_number_1
          value: 50  

  - platform: template
    name: "Valve Switch 2"
    lambda: |-
      if (id(servo_number_2).state != 50) {
        return true;
      } else {
        return false;
      }
    turn_on_action:
      - number.set:
          id: servo_number_2
          value: 100
      - delay: 1s
      - number.set:
          id: servo_number_2
          value: 90 
      - delay: 1s
      - number.set:
          id: servo_number_2
          value: 80    
    turn_off_action:
      - number.set:
          id: servo_number_2
          value: 50  

  - platform: template
    name: "Valve Switch 3"
    lambda: |-
      if (id(servo_number_3).state != 50) {
        return true;
      } else {
        return false;
      }
    turn_on_action:
      - number.set:
          id: servo_number_3
          value: 100
      - delay: 1s
      - number.set:
          id: servo_number_3
          value: 90 
      - delay: 1s
      - number.set:
          id: servo_number_3
          value: 80      
    turn_off_action:
      - number.set:
          id: servo_number_3
          value: 50  

Credits

Craftiarenko
5 projects • 12 followers
Making simple things difficult :)
Contact

Comments

Please log in or sign up to comment.