Raspberry Pi Cảm Biến Nước

Hướng dẫn này sẽ chỉ bạn cách sử dụng Raspberry Pi với cảm biến nước. Cụ thể, chúng ta sẽ học:

Linh Kiện Cần Thiết

1×Raspberry Pi 5
1×Module ADC ADS1115
1×Cảm biến mức nước
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ức Nước

Sơ Đồ Chân Cảm Biến Mức Nước

Cảm biến mức nước có 3 chân:

  • Chân S (Signal): Đây là ngõ ra analog cần được kết nối với một trong các ngõ vào analog trên Raspberry Pi của bạn.
  • Chân + (VCC): Cấp nguồn cho cảm biến và được khuyến nghị sử dụng trong khoảng 3.3V – 5V.
  • Chân - (GND): Đây là kết nối mass.
water sensor sơ đồ chân

※ Lưu ý:

Chân tín hiệu của cảm biến tạo ra ngõ ra analog phụ thuộc vào điện áp cung cấp cho chân VCC.

Nguyên Lý Hoạt Động Của Cảm Biến Mức Nước

Tóm lại, điện áp ngõ ra trên chân tín hiệu tăng khi lượng nước mà cảm biến được nhúng vào tăng.

Hãy xem xét kỹ hơn.

Phần này chứa thông tin nâng cao có thể gây quá tải. Nếu bạn chưa chắc về nội dung, hãy bỏ qua và chuyển sang phần tiếp theo.

Cảm biến có mười đường đồng lộ thiên, với năm đường là đường cấp nguồn và năm đường còn lại là đường cảm biến. Những đường này được sắp xếp song song, với một đường cảm biến nằm giữa hai đường cấp nguồn. Trừ khi chúng được nối thông qua nước khi bị nhúng, những đường này vẫn không được kết nối.

Các đường hoạt động như một điện trở biến đổi, tương tự như chiết áp, có điện trở phụ thuộc vào mức nước:

  • Điện trở được xác định bởi khoảng cách từ đỉnh cảm biến đến bề mặt nước.
  • Điện trở tỷ lệ nghịch với lượng nước hiện có:
  • Khi nhiều nước hơn được nhúng vào cảm biến, độ dẫn điện tăng và điện trở giảm.
  • Khi ít nước hơn được nhúng vào cảm biến, độ dẫn điện giảm và điện trở tăng.
  • Điện áp ngõ ra của cảm biến dựa trên điện trở.

Việc xác định mức nước có thể được thực hiện bằng cách đo điện áp.

Sơ Đồ Kết Nối

Raspberry Pi water sensor 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 Nước

Các Bước Thực Hiện

  • Đả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 với Raspberry Pi trên Pi của bạn.
  • Đảm bảo Raspberry Pi của bạn được kết nối với cùng mạng cục bộ với PC của bạn.
  • Đảm bảo Raspberry Pi của bạn đượ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, xem Raspberry Pi - Cài Đặt Phần Mềm
  • Kết nối PC của bạn với Raspberry Pi qua SSH bằng SSH client tích hợp sẵn 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, hãy 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 của bạn:
sudo pip install Adafruit-ADS1x15
  • Tạo file script Python water_sensor.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-water-sensor import time import Adafruit_ADS1x15 # Create an ADS1115 ADC instance ADC = Adafruit_ADS1x15.ADS1115() # Specify the ADC channel (0-3) based on your connection ADC_CHANNEL = 3 # A3 of ADS1115 module # Set the gain (input voltage range) for your application GAIN = 1 # Gain of 1 corresponds to +/-4.096V # Define the conversion factor for water level calculation MIN_ADC_VALUE = 0 # Replace with the minimum ADC value for your sensor MAX_ADC_VALUE = 32767 # Replace with the maximum ADC value for your sensor try: while True: # Read the raw ADC value adc_value = ADC.read_adc(ADC_CHANNEL, gain=GAIN) # Convert the raw ADC value to a water level percentage water_level = (adc_value - MIN_ADC_VALUE) / (MAX_ADC_VALUE - MIN_ADC_VALUE) * 100 print(f"ADC Value: {adc_value} | Water Level: {water_level:.2f}%") time.sleep(1) # Wait for a second before the next reading except KeyboardInterrupt: print("\nScript terminated by user.")
  • Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
python3 water_sensor.py
  • Nhẹ nhàng hạ cảm biến vào cốc nước.
  • Kiểm tra kết quả trên Terminal; nó sẽ là 0 khi cảm biến không tiếp xúc với bất cứ thứ gì.
PuTTY - Raspberry Pi
ADC Value: 0 | Water Level: 0.00% ADC Value: 8192 | Water Level: 10.00% ADC Value: 8192 | Water Level: 10.00% ADC Value: 13503 | Water Level: 22.30% ADC Value: 13503 | Water Level: 22.30% ADC Value: 18714 | Water Level: 34.59% ADC Value: 18714 | Water Level: 34.59% ADC Value: 23925 | Water Level: 46.89% ADC Value: 29136 | Water Level: 59.18% ADC Value: 29136 | Water Level: 59.18%

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

※ Lưu ý:

Cảm biến không được thiết kế để nhúng hoàn toàn; chỉ các đường đồng lộ thiên trên bo mạch in mới được tiếp xúc với nước. Hãy thận trọng khi lắp đặt nó.

Cách Phát Hiện Rò Rỉ Nước

Để phát hiện rò rỉ nước, mưa và tràn bể, chúng ta chỉ cần so sánh giá trị đọc được với giá trị ngưỡng được xác định trong phần hiệu chuẩn của hướng dẫn này.

Hãy xem xét một ví dụ cụ thể. Nếu phát hiện nước, Raspberry Pi sẽ kích hoạt LED. Để biết cách kết nối, xem Raspberry Pi - LED

Code Raspberry Pi - Phát Hiện Rò Rỉ Nước

Các Bước Thực Hiện

  • Tạo file script Python water_sensor_led.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-water-sensor import time import Adafruit_ADS1x15 import RPi.GPIO as GPIO # Create an ADS1115 ADC instance ADC = Adafruit_ADS1x15.ADS1115() # Specify the ADC channel (0-3) based on your connection ADC_CHANNEL = 3 # A3 of ADS1115 module # Set the gain (input voltage range) for your application GAIN = 1 # Gain of 1 corresponds to +/-4.096V # Define the conversion factor for water level calculation MIN_ADC_VALUE = 0 # Replace with the minimum ADC value for your sensor MAX_ADC_VALUE = 32767 # Replace with the maximum ADC value for your sensor # Define the threshold ADC value for triggering the LED LED_THRESHOLD = 20000 # Replace with your desired threshold # Define the LED GPIO pin LED_PIN = 16 # Replace with the GPIO pin number you're using # Set up the GPIO mode and LED pin GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN, GPIO.OUT) try: while True: # Read the raw ADC value adc_value = ADC.read_adc(ADC_CHANNEL, gain=GAIN) # Convert the raw ADC value to a water level percentage water_level = (adc_value - MIN_ADC_VALUE) / (MAX_ADC_VALUE - MIN_ADC_VALUE) * 100 print(f"ADC Value: {adc_value} | Water Level: {water_level:.2f}%") # Turn on the LED if the water level is greater than the threshold if adc_value > LED_THRESHOLD: GPIO.output(LED_PIN, GPIO.HIGH) else: GPIO.output(LED_PIN, GPIO.LOW) time.sleep(1) # Wait for a second before the next reading except KeyboardInterrupt: print("\nScript terminated by user.") GPIO.cleanup() # Clean up GPIO settings on exit
  • Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
python3 water_sensor_led.py
  • Nhẹ nhàng hạ cảm biến vào cốc nước.
  • Kiểm tra trạng thái LED trên kết quả

Hiệu Chuẩn Cảm Biến Mức Nước

Ngõ ra của cảm biến không chỉ bị ảnh hưởng bởi mức nước mà còn bởi độ dẫn điện của nước. Nước tinh khiết không dẫn điện, trong khi nước có khoáng chất và tạp chất thì có. Độ dẫn điện của nước càng cao thì cảm biến càng nhạy. Ngoài ra, giá trị ngõ ra cũng phụ thuộc vào điện áp cung cấp cho chân VCC của cảm biến.

Để đảm bảo độ chính xác khi đọc cảm biến nước, chúng tôi đề xuất hiệu chuẩn cảm biến cho loại nước cụ thể cần được giám sát.

Hướng dẫn hiệu chuẩn:

  • Sử dụng script được cung cấp ở trên để đọc giá trị cảm biến.
  • Nhúng cảm biến vào nước ở mức độ mong muốn để đặt ngưỡng.
  • Ghi lại giá trị mà cảm biến hiển thị trong Terminal.
  • Sử dụng giá trị này làm ngưỡng để kích hoạt một hành động.

Thử nghiệm cũng có thể được sử dụng để khám phá:

  • Giá trị MIN_ADC_VALUE, khi cảm biến không được nhúng trong chất lỏng
  • Giá trị MAX_ADC_VALUE, khi cảm biến được nhúng hoàn toàn trong chất lỏng

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.

Thử Thách Bản Thân

  • Khi phát hiện rò rỉ nước:
  • Gửi email
  • Gửi tin nhắn SMS
  • Kích hoạt chuông báo động