Raspberry Pi Cảm biến độ ẩm đất

Hướng dẫn này sẽ chỉ bạn cách sử dụng cảm biến độ ẩm với Raspberry Pi. Cụ thể, chúng ta sẽ tìm hiểu:

Phần cứng cần chuẩn bị

1×Raspberry Pi 5
1×Capacitive Soil Moisture Sensor
1×mô-đun ADC ADS1115
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Raspberry Pi
1×(Khuyến nghị) Raspberry Pi Prototyping Base Plate & Breadboard Kit
1×(Khuyến nghị) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Cảm biến độ ẩm đất

capacitive moisture sensor vs resistive moisture sensor

Có hai loại cảm biến độ ẩm: cảm biến độ ẩm điện trở và cảm biến độ ẩm điện dung.

Cả hai loại cảm biến đều cung cấp thông tin về độ ẩm đất. Tuy nhiên, phương thức hoạt động của chúng không giống nhau. Chúng tôi đặc biệt khuyến nghị sử dụng cảm biến độ ẩm điện dung vì những lý do sau:

  • Cảm biến độ ẩm đất điện trở dễ bị ăn mòn theo thời gian. Điều này là do dòng điện chạy giữa các đầu dò, dẫn đến ăn mòn điện hóa.
  • Cảm biến độ ẩm đất điện dung bị ăn mòn theo thời gian chậm hơn nhiều so với cảm biến độ ẩm đất điện trở. Điều này là do các điện cực không bị lộ ra ngoài và tương đối kháng ăn mòn.

Đây là hình ảnh của một cảm biến độ ẩm đất điện trở đã bị hỏng do ăn mòn.

resistive cảm biến độ ẩm đất corroded

Phần còn lại của hướng dẫn này sẽ sử dụng cảm biến độ ẩm đất điện dung.

Sơ đồ chân của Cảm biến độ ẩm đất điện dung

Cảm biến độ ẩm đất điện dung có ba chân:

  • Chân GND: Chân này nên được kết nối với GND (0V)
  • Chân VCC: Chân này nên được kết nối với VCC (5V hoặc 3.3v)
  • Chân AOUT: Đây là chân đầu ra tín hiệu analog tạo ra điện áp tỷ lệ với mức độ ẩm của đất. Chân này nên được kết nối với chân đầu vào analog của Raspberry Pi.
capacitive cảm biến độ ẩm đất sơ đồ chân

Nguyên lý hoạt động

Lượng nước trong đất có ảnh hưởng đến điện áp ở chân AOUT; càng nhiều nước thì điện áp càng thấp.

Sơ đồ đấu nối

Raspberry Pi cảm biến độ ẩm đất sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Code Raspberry Pi đọc giá trị từ cảm biến độ ẩm đất

Các bước nhanh

  • Đảm bảo bạn đã cài đặt Raspbian hoặc bất kỳ hệ điều hành tương thích nào khác cho Raspberry Pi.
  • Đảm bảo Raspberry Pi của bạn được kết nối với cùng một mạng cục bộ với PC.
  • Đảm bảo Raspberry Pi được kết nối internet nếu bạn cần cài đặt một số thư viện.
  • Nếu đây là lần đầu tiên bạn sử dụng Raspberry Pi, hãy xem Raspberry Pi - Cài Đặt Phần Mềm
  • Kết nối PC với Raspberry Pi qua SSH bằng SSH client tích hợp trên Linux và macOS hoặc PuTTY trên Windows. Xem cách kết nối PC với Raspberry Pi qua SSH.
  • Đảm bảo bạn đã cài đặt thư viện RPi.GPIO. Nếu chưa, cài đặt bằng lệnh sau:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Cài đặt thư viện Adafruit_ADS1x15 bằng cách chạy các lệnh sau trên terminal Raspberry Pi:
sudo pip install Adafruit-ADS1x15
  • Tạo file Python script soil_moisture.py và thêm code sau:
# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi này được cung cấp để sử dụng công khai, không có ràng buộc. # Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: # https://newbiely.vn/tutorials/raspberry-pi/raspberry-pi-soil-moisture-sensor import time import Adafruit_ADS1x15 # Create an ADS1115 ADC object adc = Adafruit_ADS1x15.ADS1115() # Set the gain to ±4.096V (adjust if needed) GAIN = 1 # Main loop to read the analog value from the soil moisture sensor and print the raw ADC value try: while True: # Read the raw analog value from channel A3 raw_value = adc.read_adc(3, gain=GAIN) # Print the raw ADC value print("Raw Value: {}".format(raw_value)) # Add a delay between readings (adjust as needed) time.sleep(1) except KeyboardInterrupt: print("\nExiting the program.")
  • Lưu file và chạy Python script bằng cách thực hiện lệnh sau trong terminal:
python3 soil_moisture.py
  • Chôn cảm biến trong đất, sau đó đổ nước vào đất. Hoặc từ từ nhúng nó vào cốc nước muối.
  • Kiểm tra kết quả trên Terminal.
PuTTY - Raspberry Pi
Raw Value: 48520 Raw Value: 47235 Raw Value: 46032 Raw Value: 44047 Raw Value: 43195 Raw Value: 42074 Raw Value: 41084 Raw Value: 41072 Raw Value: 40808 Raw Value: 40634 Raw Value: 40800 Raw Value: 40512

※ Lưu ý:

  • KHÔNG sử dụng nước tinh khiết để thử nghiệm vì nó không dẫn điện, có nghĩa là nó sẽ không ảnh hưởng đến kết quả đọc của cảm biến.
  • Giá trị đọc từ cảm biến thường không giảm về zero. Bình thường chúng sẽ nằm trong khoảng 40000 đến 50000, nhưng điều này có thể thay đổi dựa trên các yếu tố như độ sâu đặt cảm biến, loại đất hoặc nước, và điện áp nguồn cung cấp.
  • Không bao giờ chôn phần mạch điện (ở phía trên cảm biến) trong đất hoặc nước, vì điều này có thể làm hỏng cảm biến.

Script chạy trong vòng lặp vô tận liên tục cho đến khi bạn nhấn Ctrl + C trong terminal.

Hiệu chuẩn cho Cảm biến độ ẩm đất điện dung

Giá trị thu được từ cảm biến độ ẩm không phải là giá trị tuyệt đối. Nó thay đổi tùy thuộc vào thành phần và hàm lượng nước của đất. Do đó, cần thiết phải thực hiện hiệu chuẩn để xác định ranh giới giữa điều kiện ướt và khô.

Hướng dẫn hiệu chuẩn cho Cảm biến độ ẩm đất điện dung:

  • Chạy code trên Raspberry Pi
  • Đặt cảm biến độ ẩm vào đất
  • Từ từ thêm nước vào đất
  • Theo dõi các giá trị trên Terminal
  • Ghi nhận giá trị khi bạn cảm thấy đất chuyển từ khô sang ướt, ví dụ: 45000. Đây được gọi là THRESHOLD.

Xác định đất ướt hay khô

  • Tạo file Python script soil_moisture_dry_wet.py và thêm code sau:
# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi này được cung cấp để sử dụng công khai, không có ràng buộc. # Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: # https://newbiely.vn/tutorials/raspberry-pi/raspberry-pi-soil-moisture-sensor import time import Adafruit_ADS1x15 # Create an ADS1115 ADC object adc = Adafruit_ADS1x15.ADS1115() # Set the gain to ±4.096V (adjust if needed) GAIN = 1 # Single threshold for wet/dry classification (adjust as needed) THRESHOLD = 45000 # Function to determine the wet-dry level based on the soil moisture percentage def wet_dry_level(soil_moisture): if soil_moisture > THRESHOLD: return "DRY" else: return "WET" # Main loop to read the analog value from the soil moisture sensor try: while True: # Read the raw analog value from channel A3 raw_value = adc.read_adc(3, gain=GAIN) # Determine the wet-dry level based on the raw ADC value level = wet_dry_level(raw_value) # Print the results print("Raw Value: {} \t Wet-Dry Level: {}".format(raw_value, level)) # Add a delay between readings (adjust as needed) time.sleep(1) except KeyboardInterrupt: print("\nExiting the program.")
  • Cập nhật giá trị THRESHOLD đã ghi nhận trong quá trình hiệu chuẩn vào code.
  • Lưu file và chạy Python script bằng cách thực hiện lệnh sau trong Terminal:
python3 soil_moisture_dry_wet.py

Kết quả hiển thị trên Terminal.

PuTTY - Raspberry Pi
Raw Value: 48520 Wet-Dry Level: DRY Raw Value: 47235 Wet-Dry Level: DRY Raw Value: 46032 Wet-Dry Level: DRY Raw Value: 44047 Wet-Dry Level: WET Raw Value: 41072 Wet-Dry Level: WET Raw Value: 40634 Wet-Dry Level: WET Raw Value: 40512 Wet-Dry Level: WET

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.