Mục lục:

Pool Pi Guy - Hệ thống cảnh báo điều khiển bằng AI và Giám sát hồ bơi bằng Raspberry Pi: 12 bước (có hình ảnh)
Pool Pi Guy - Hệ thống cảnh báo điều khiển bằng AI và Giám sát hồ bơi bằng Raspberry Pi: 12 bước (có hình ảnh)

Video: Pool Pi Guy - Hệ thống cảnh báo điều khiển bằng AI và Giám sát hồ bơi bằng Raspberry Pi: 12 bước (có hình ảnh)

Video: Pool Pi Guy - Hệ thống cảnh báo điều khiển bằng AI và Giám sát hồ bơi bằng Raspberry Pi: 12 bước (có hình ảnh)
Video: Con gái cám ơn cha dượng #chaduong #congai #sinhnhat 2024, Tháng mười một
Anonim
Pool Pi Guy - Hệ thống cảnh báo điều khiển bằng AI và Giám sát hồ bơi bằng Raspberry Pi
Pool Pi Guy - Hệ thống cảnh báo điều khiển bằng AI và Giám sát hồ bơi bằng Raspberry Pi

Có một hồ bơi tại nhà là một niềm vui, nhưng đi kèm với trách nhiệm lớn. Lo lắng lớn nhất của tôi là giám sát xem có ai ở gần hồ bơi mà không có người giám sát (đặc biệt là trẻ nhỏ) hay không. Khó chịu lớn nhất của tôi là đảm bảo rằng đường nước hồ bơi không bao giờ đi dưới đầu vào của máy bơm, điều này sẽ làm máy bơm bị khô và phá hủy nó, tốn $$$ khi sửa chữa.

Gần đây tôi đã tìm ra cách sử dụng Raspberry Pi với OpenCV và TensorFlow, cùng với cảm biến mực nước và van điện từ để giải quyết cả hai vấn đề - và hãy làm điều đó thật vui vẻ!

Nó cũng là một hệ thống báo động tuyệt vời - kích hoạt chuyển động, điều khiển bằng AI, có thể tùy chỉnh vô hạn.

Hãy đi sâu vào.

Bước 1: Kế hoạch lớn

Trong hướng dẫn này, chúng tôi sẽ chỉ ra cách:

  1. Thiết lập Raspberry Pi với OpenCV và TensorFlow
  2. Kết nối Webcam qua cáp USB dài
  3. Viết thuật toán OpenCV để phát hiện chuyển động
  4. Sử dụng TensorFlow để phát hiện đối tượng
  5. Thiết lập máy chủ web trên Raspberry Pi để hiển thị những hình ảnh thú vị
  6. Tích hợp với IFTTT để kích hoạt cảnh báo di động trong trường hợp phát hiện một người
  7. Gắn một rơ le HAT vào Raspberry Pi và kết nối nó với một van điện từ để thêm nước vào hồ bơi
  8. Gắn cảm biến mực nước vào Raspberry Pi và giao diện với nó bằng GPIO của Pi
  9. Viết một số mã để gắn tất cả lại với nhau

Bước 2: Danh sách mua sắm

Danh sách mua sắm
Danh sách mua sắm

Tất cả các thành phần đều có sẵn từ Amazon. Hãy thoải mái thử nghiệm và trao đổi các thành phần - đó là một nửa thú vị!

  1. Raspberry Pi
  2. Raspberry Pi Power Supply (không tiết kiệm ở đây)
  3. Thẻ nhớ (càng lớn càng tốt)
  4. Hộp đựng (cái này đủ lớn để chứa cả Pi và HAT)
  5. USB Webcam (bất kỳ webcam nào cũng được, nhưng bạn muốn một webcam có hình ảnh đẹp và cân bằng ánh sáng tốt)
  6. Cáp mở rộng USB (nếu cần - đo khoảng cách giữa Pi và nơi bạn sẽ đặt máy ảnh)
  7. Bảng chuyển tiếp HAT (bảng này có 3 rơ le và chúng tôi chỉ cần một rơ le, nhưng bạn sẽ sớm tìm thấy cách sử dụng cho những cái khác!)
  8. Solenoid
  9. Solenoid phù hợp 1 và khớp nối 2 (điều đó thực sự phụ thuộc vào những gì bạn phù hợp với solenoid, nhưng chúng hoạt động đối với tôi)
  10. Nguồn điện từ điện từ (bất kỳ nguồn điện 24V nào cũng được)
  11. Cáp (một lần nữa, hầu như bất kỳ cáp 2 sợi nào cũng vậy - dòng điện là tối thiểu)
  12. Công tắc nổi mực nước (đây chỉ là một ví dụ, hãy kiểm tra xem những gì có thể dễ dàng kết nối với hồ bơi của bạn)
  13. Một số dây Jumper và đầu nối dây

Bước 3: Thiết lập Raspberry Pi của bạn

Thiết lập Raspberry Pi của bạn
Thiết lập Raspberry Pi của bạn

Raspberry Pi là một máy tính nhỏ tuyệt vời. Nó có giá chỉ 35 đô la, chạy ổn định và có nhiều phần mềm và phần cứng tương thích. Thiết lập nó khá dễ dàng:

  1. Định dạng thẻ SD của bạn. Điều này cần được chăm sóc đặc biệt - Raspberry Pi chỉ có thể khởi động từ thẻ SD được định dạng FAT. Làm theo các hướng dẫn này.
  2. Kết nối Raspberry Pi với bàn phím và chuột USB, cùng với màn hình HDMI và làm theo hướng dẫn trong hướng dẫn Raspberry Pi NOOBS. Đảm bảo thiết lập WiFi và bật quyền truy cập SSH. Đừng quên thiết lập mật khẩu cho tài khoản pi mặc định.
  3. Trên mạng gia đình của bạn, hãy thiết lập một IP tĩnh cho Raspberry Pi - điều này sẽ giúp việc SSH vào dễ dàng hơn nhiều.
  4. Đảm bảo rằng bạn đã cài đặt ứng dụng ssh trên máy tính để bàn / máy tính xách tay của mình. Đối với PC, tôi muốn giới thiệu Putty, bạn có thể cài đặt ứng dụng này từ đây.
  5. Rút USB và HDMI khỏi Raspberry Pi, khởi động lại nó và ssh vào nó - nếu tất cả đều hoạt động, bạn sẽ thấy một cái gì đó như sau:

Linux raspberrypi 4.14.98-v7 + # 1200 SMP Thứ Ba ngày 12 tháng 2 20:27:48 GMT 2019 armv7l

Các chương trình đi kèm với hệ thống Debian GNU / Linux là phần mềm miễn phí; các điều khoản phân phối chính xác cho mỗi chương trình được mô tả trong các tệp riêng lẻ trong / usr / share / doc / * / copyright. Debian GNU / Linux đi kèm với TUYỆT ĐỐI KHÔNG CÓ BẢO HÀNH, trong phạm vi luật hiện hành cho phép. Lần đăng nhập cuối cùng: Thứ Hai ngày 13 tháng 5 10:41:40 năm 2019 từ 104.36.248.13 pi @ raspberrypi: ~ $

Bước 4: Thiết lập OpenCV

Thiết lập OpenCV
Thiết lập OpenCV

OpenCV là một bộ sưu tập các chức năng thao tác hình ảnh tuyệt vời cho thị giác máy tính. Nó sẽ cho phép chúng ta đọc hình ảnh từ Webcam, thao tác với chúng để tìm các khu vực chuyển động, lưu chúng và hơn thế nữa. Thiết lập trên Raspberry Pi không khó nhưng đòi hỏi bạn phải cẩn thận.

Bắt đầu bằng cách cài đặt Virtaulenvwrapper: chúng tôi sẽ sử dụng python để thực hiện tất cả các lập trình của mình và virtualenv sẽ giúp chúng tôi giữ các phần phụ thuộc riêng biệt cho OpenCV và TensorFlow so với Flask hoặc GPIO:

pi @ raspberrypi: ~ $ sudo pip cài đặt virtualenvwrapper

Bây giờ bạn có thể thực thi "mkvirtualenv" để tạo một môi trường mới, "workon" để làm việc trên đó và hơn thế nữa.

Vì vậy, hãy tạo một môi trường cho thao tác hình ảnh của chúng tôi, với python 3 làm trình thông dịch mặc định (đó là năm 2019, không có lý do gì để gắn bó với python 2 cũ hơn):

pi @ raspberrypi: ~ $ mkvirtualenv cv -p python3

… (Cv) pi @ raspberrypi: ~

Bây giờ chúng tôi đã sẵn sàng cài đặt OpenCV. Hầu hết chúng ta sẽ làm theo hướng dẫn tuyệt vời trong Tìm hiểu OpenCV. Cụ thể, hãy làm theo bước 1 và 2 của họ:

sudo apt -y updateudo apt -y upgrade ## Cài đặt phần phụ thuộc sudo apt-get -y install build-essential checkinstall cmake pkg-config yasm sudo apt-get -y install git gfortran sudo apt-get -y install libjpeg8-dev libjasper- dev libpng12-dev sudo apt-get -y install libtiff5-dev sudo apt-get -y install libtiff-dev sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev sudo apt-get - y install libxine2-dev libv4l-dev cd / usr / include / linux sudo ln -s -f../libv4l1-videodev.h videodev.h sudo apt-get -y install libgstreamer0.10-dev libgstreamer-plugins-base0. 10-dev sudo apt-get -y install libgtk2.0-dev libtbb-dev qt5-default sudo apt-get -y install libatlas-base-dev sudo apt-get -y install libmp3lame-dev libtheora-dev sudo apt-get -y install libvorbis-dev libxvidcore-dev libx264-dev sudo apt-get -y install libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get -y install libavresample-dev sudo apt-get -y install x264 v4l-utils sudo apt-get -y cài đặt libprotobuf -dev protobuf-compiler sudo apt-get -y install libgoogle-glog-dev libgflags-dev sudo apt-get -y install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen sudo apt-get install libqtgui4 sudo apt-get install libqt4- kiểm tra

Bây giờ chúng ta chỉ có thể cài đặt OpenCV với các liên kết python bên trong cv virtualenv (bạn vẫn ở trong đó, phải không?)

pip cài đặt opencv-Contrib-python

Và đó là nó! Chúng tôi đã cài đặt OpenCV trên Raspberry Pi của mình, sẵn sàng chụp ảnh và quay video, thao tác với chúng và thật tuyệt.

Kiểm tra điều đó bằng cách mở trình thông dịch python và nhập opencv và kiểm tra xem không có lỗi nào:

(cv) pi @ raspberrypi: ~ $ python

Python 3.5.3 (mặc định, ngày 27 tháng 9 năm 2018, 17:25:39) [GCC 6.3.0 20170516] trên linux Nhập "trợ giúp", "bản quyền", "tín dụng" hoặc "giấy phép" để biết thêm thông tin. >>> nhập cv2 >>>

Bước 5: Thiết lập TensorFlow

Thiết lập TensorFlow
Thiết lập TensorFlow

TensorFlow là một khuôn khổ học máy / AI do Google phát triển và duy trì. Nó có hỗ trợ rộng rãi cho các mô hình học sâu cho nhiều tác vụ khác nhau bao gồm phát hiện đối tượng trong hình ảnh và hiện nay việc cài đặt trên Raspberry Pi khá đơn giản. Hiệu suất của các mô hình nhẹ của nó trên Pi nhỏ bé là khoảng 1 khung hình / giây, hoàn toàn đủ cho một ứng dụng như của chúng tôi.

Về cơ bản, chúng ta sẽ làm theo hướng dẫn tuyệt vời của Edje Electronics, với các sửa đổi được thực hiện bởi các bản phân phối TensorFlow gần đây hơn:

pi @ raspberrypi: ~ $ workon cv

(cv) pi @ raspberrypi: ~ $ pip install tensorflow (cv) pi @ raspberrypi: ~ $ sudo apt-get install libxml2-dev libxslt-dev (cv) pi @ raspberrypi: ~ $ pip install gối lxml jupyter matplotlib cython (cv) pi @ raspberrypi: ~ $ sudo apt-get install python-tk

Bây giờ chúng ta cần biên dịch protobuf của Google. Chỉ cần làm theo hướng dẫn ở bước 4 của cùng một hướng dẫn tuyệt vời

Cuối cùng, sao chép và thiết lập các định nghĩa mô hình của TensorFlow - làm theo bước 5 trong hướng dẫn của Edje Electronics

Vui lòng làm theo ví dụ của họ ở bước 6, đây là phần giới thiệu tuyệt vời về phát hiện đối tượng trên Raspberry Pi.

Bước 6: Phát hiện chuyển động bằng OpenCV

Hãy bắt đầu bằng cách kiểm tra xem OpenCV có thể giao tiếp với webcam của chúng ta hay không: ssh vào Raspberry Pi, di chuyển đến cv virtualenv (workon cv), mở trình thông dịch python (chỉ cần nhập python) và nhập các lệnh python sau:

nhập cv2

cap = cv2. VideoCapture (0) cap.set (cv2. CAP_PROP_FRAME_WIDTH, 1920) cap.set (cv2. CAP_PROP_FRAME_HEIGHT, 1080) ret, frame = cap.read () print ('Kích thước khung đọc: {} x {}'.format (frame.shape [1], frame.shape [0])

Nếu may mắn, bạn sẽ thấy rằng OpenCV có thể đọc khung hình HD từ máy ảnh.

Bạn có thể sử dụng cv2.imwrite (đường dẫn, khung) để ghi khung đó vào đĩa và chuyển nó trở lại để có giao diện thực tế.

Chiến lược phát hiện chuyển động khá dễ hiểu:

  1. Làm việc trên các khung hình có độ phân giải thấp hơn - không cần phải hoạt động trên full HD ở đây
  2. Hơn nữa, làm mờ hình ảnh để đảm bảo ít nhiễu nhất có thể.
  3. Giữ mức trung bình hoạt động của N khung hình cuối cùng. Đối với ứng dụng này, trong đó tốc độ khung hình khoảng 1 FPS (chỉ vì TensorFlow mất một khoảng thời gian cho mỗi khung hình), tôi thấy rằng N = 60 trả về kết quả tốt. Và vì việc triển khai cẩn thận sẽ không tốn nhiều CPU hơn với nhiều khung hình hơn là OK (nó chiếm nhiều bộ nhớ hơn - nhưng điều đó là không đáng kể khi chúng tôi làm việc với các khung hình có độ phân giải thấp hơn)
  4. Trừ hình ảnh hiện tại khỏi mức trung bình đang chạy (chỉ cần cẩn thận với việc nhập - bạn cần cho phép các giá trị âm và dương [-255.. 255], vì vậy khung cần được chuyển đổi thành int)
  5. Bạn có thể thực hiện phép trừ trên chuyển đổi thang màu xám của khung hình (và mức trung bình) hoặc thực hiện riêng biệt cho từng kênh RGB và sau đó kết hợp các kết quả (đó là chiến lược tôi đã chọn, làm cho khung hình trở nên nhạy cảm với sự thay đổi màu sắc)
  6. Sử dụng một ngưỡng trên đồng bằng và loại bỏ tiếng ồn do xói mòn và giãn nở
  7. Cuối cùng, hãy tìm đường viền của các khu vực có hình đồng bằng - những khu vực này là nơi chuyển động đã xảy ra và hình ảnh hiện tại khác với mức trung bình của các hình ảnh trước đó. Chúng tôi có thể tìm thêm các hộp giới hạn cho các đường bao này nếu cần.

Tôi đã đóng gói mã để thực hiện việc này trong lớp python DeltaFinder mà bạn có thể tìm thấy trong github của tôi tại đây

Bước 7: Phát hiện đối tượng bằng TensorFlow

Nếu bạn đã làm theo quy trình cài đặt TensorFlow, nghĩa là bạn đã kiểm tra rằng bạn đã cài đặt và hoạt động TensorFlow.

Với mục đích phát hiện người trong cảnh ngoài trời chung, các mô hình được đào tạo trước trên tập dữ liệu COCO hoạt động khá tốt - đó chính xác là mô hình chúng tôi đã tải xuống ở cuối cài đặt TensorFlow. Chúng ta chỉ cần sử dụng nó để suy luận!

Một lần nữa, tôi đã gói gọn quá trình tải và suy luận mô hình trong lớp python TFClassify để làm cho mọi thứ dễ dàng hơn, bạn có thể tìm thấy ở đây.

Bước 8: Thiết lập máy chủ web trên Raspberry Pi

Thiết lập máy chủ web trên Raspberry Pi
Thiết lập máy chủ web trên Raspberry Pi

Cách dễ nhất để truy cập kết quả phát hiện đối tượng là trình duyệt web, vì vậy hãy thiết lập một máy chủ web trên Raspberry Pi. Sau đó, chúng tôi có thể thiết lập nó để phục vụ hình ảnh từ một thư mục nhất định.

Có nhiều tùy chọn cho khung máy chủ web. Tôi đã chọn Flask. Nó cực kỳ dễ cấu hình và dễ dàng mở rộng với Python. Vì "quy mô" mà chúng ta cần là tầm thường, vậy là quá đủ.

Tôi khuyên bạn nên cài đặt nó trong một virtualenv mới, vì vậy:

pi @ raspberrypi: ~ $ mkvirtualenv webserv

(webserv) pi @ raspberrypi: ~ $ pip cài đặt Flask

Lưu ý rằng với thiết lập mạng thông thường, bạn sẽ chỉ có thể truy cập được khi trình duyệt của bạn ở trên cùng một mạng LAN không dây với Raspberry Pi của bạn. Bạn có thể tạo cấu hình ánh xạ cổng / NAT trên bộ định tuyến Internet của mình để cho phép truy cập bên ngoài - nhưng tôi khuyên bạn không nên làm như vậy. Mã tôi đã viết không cố gắng cung cấp bảo mật bạn sẽ cần khi cho phép truy cập Internet chung vào Raspberry Pi của bạn.

Kiểm tra cài đặt của bạn bằng cách làm theo hướng dẫn bắt đầu nhanh Flask

Bước 9: Thông báo di động từ Raspberry Pi bằng IFTTT

Thông báo di động từ Raspberry Pi bằng IFTTT
Thông báo di động từ Raspberry Pi bằng IFTTT

Tôi thực sự muốn nhận thông báo trên thiết bị di động khi sự kiện xảy ra. Trong trường hợp này, khi một người được phát hiện và khi mực nước xuống thấp. Cách đơn giản nhất mà tôi thấy để làm điều đó, mà không cần phải viết một ứng dụng di động tùy chỉnh, là sử dụng IFTTT. IFTTT là viết tắt của "If This Then That" và cho phép nhiều loại sự kiện kích hoạt nhiều loại hành động. Trong trường hợp của chúng tôi, chúng tôi quan tâm đến trình kích hoạt IFTTT Maker Webhook. Điều này cho phép chúng tôi kích hoạt hành động IFTTT bằng cách thực hiện yêu cầu HTTP POST tới máy chủ IFTTT với khóa đặc biệt được chỉ định cho tài khoản của chúng tôi, cùng với dữ liệu chỉ định điều gì đã xảy ra. Hành động chúng tôi thực hiện có thể đơn giản như tạo thông báo trên thiết bị di động của chúng tôi bằng ứng dụng di động IFTTT hoặc bất kỳ điều gì phức tạp hơn thế.

Đây là cách để làm điều đó:

  1. Tạo tài khoản IFTTT trên ifttt.com
  2. Trong khi đăng nhập, hãy truy cập trang cài đặt dịch vụ Webhook và nhập URL vào trình duyệt của bạn (giống như https://maker.ifttt.com/use/. Trang web đó sẽ hiển thị cho bạn khóa của bạn và URL để sử dụng để kích hoạt các hành động.
  3. Tạo một ứng dụng IFTTT sẽ tạo thông báo trên thiết bị di động khi Webhook được kích hoạt với các chi tiết của sự kiện:

    1. Nhấp vào "My Applet" và sau đó "New Applet".
    2. Nhấp vào "+ cái này" và chọn "webhooks". Nhấp vào "Nhận yêu cầu web" để đi đến thông tin chi tiết
    3. Đặt tên cho sự kiện của bạn, ví dụ: "PoolEvent" và nhấp vào "Tạo trình kích hoạt"
    4. Nhấp vào "+ cái đó" và chọn "thông báo". Sau đó, chọn "Gửi thông báo phong phú từ ứng dụng IFTTT"
    5. Đối với "tiêu đề", hãy chọn một cái gì đó như "PoolPi"
    6. Đối với "nội dung", hãy viết "Pool Pi được phát hiện:" và nhấp vào "thêm thành phần".. "Value1".
    7. Quay lại URL bạn đã sao chép ở bước 2. Nó sẽ hiển thị URL để sử dụng để gọi applet mới tạo của bạn. Sao chép URL đó, thay thế trình giữ chỗ {event} bằng tên sự kiện (trong ví dụ là PoolEvent)
  4. Tải xuống, cài đặt và đăng nhập vào ứng dụng IFTTT cho thiết bị di động của bạn
  5. Chạy tập lệnh python này trên Raspberry Pi của bạn để xem nó hoạt động (lưu ý rằng có thể mất vài giây hoặc vài phút để kích hoạt trên thiết bị di động của bạn):

yêu cầu nhập khẩu

request.post ('https://maker.ifttt.com/trigger/PoolEvent/with/key/', json = {"value1": "Hello Notifications"})

Bước 10: Thêm Relay HAT vào Raspberry Pi và kết nối nó với van điện từ

Thêm Relay HAT vào Raspberry Pi và kết nối nó với van điện từ
Thêm Relay HAT vào Raspberry Pi và kết nối nó với van điện từ
Thêm Relay HAT vào Raspberry Pi và kết nối nó với van điện từ
Thêm Relay HAT vào Raspberry Pi và kết nối nó với van điện từ
Thêm Relay HAT vào Raspberry Pi và kết nối nó với van điện từ
Thêm Relay HAT vào Raspberry Pi và kết nối nó với van điện từ

Trước khi tiếp tục bước này, hãy TẮT Raspberry Pi: ssh của bạn vào nó và nhập "sudo shutdown now", sau đó ngắt kết nối khỏi nguồn

Mục tiêu của chúng tôi là bật và tắt nguồn cấp cho van điện từ - một van có thể mở hoặc đóng nguồn nước dựa trên nguồn điện xoay chiều 24V mà nó nhận được từ nguồn điện. Rơ le là các thành phần điện có thể mở hoặc đóng mạch dựa trên tín hiệu kỹ thuật số mà Raspberry Pi của chúng tôi có thể cung cấp. Những gì chúng tôi làm ở đây là kết nối một rơ le với các chân tín hiệu kỹ thuật số này của Raspberry Pi và để nó đóng mạch giữa nguồn điện xoay chiều 24V và van điện từ.

Các chân trên Raspberry Pi có thể hoạt động như đầu vào hoặc đầu ra kỹ thuật số được gọi là GPIO - General Purpose Input / Output và chúng là hàng gồm 40 chân ở cạnh Pi. Tắt Pi và lắp rơ le HAT chặt vào nó. HAT tôi đã chọn có 3 rơ le trong đó và chúng tôi sẽ chỉ sử dụng một trong số chúng. Hãy tưởng tượng tất cả những gì bạn có thể làm với hai cái kia:)

Bây giờ hãy bật lại Raspberry Pi. Đèn LED "nguồn" màu đỏ trên rơ le HAT sẽ bật, cho biết nó đang nhận nguồn từ Pi thông qua GPIO. Hãy kiểm tra xem chúng ta có thể kiểm soát nó không: ssh vào Pi một lần nữa, nhập python và nhập:

nhập gpiozero

dev = gpiozero. DigitalOutputDevice (26, initial_value = True) dev.off ()

Bạn sẽ nghe thấy tiếng "cạch", cho biết rơ le đã được gắn và nhìn thấy đèn LED bật sáng cho thấy rằng rơ le đầu tiên đang ở vị trí được kết nối. Bây giờ bạn có thể gõ

dev.on ()

Điều này sẽ chuyển rơle sang vị trí "tắt" (kỳ lạ, tôi biết…) và thoát () khỏi python.

Bây giờ sử dụng cáp jumper và cáp dài hơn kết nối rơle giữa nguồn điện 24V và van điện từ. Xem sơ đồ. Cuối cùng, kết nối van điện từ với vòi bằng bộ điều hợp và sẵn sàng kiểm tra tất cả bằng cách lặp lại các lệnh ở trên - chúng nên bật và tắt nước.

Gắn một ống mềm vào van điện từ và đặt đầu còn lại vào sâu trong hồ bơi. Bây giờ bạn có một hệ thống khởi động hồ bơi được điều khiển bằng máy tính và đã đến lúc kết nối một bộ cảm biến để cho nó biết khi nào chạy.

Bước 11: Kết nối cảm biến mực nước

Kết nối cảm biến mực nước
Kết nối cảm biến mực nước
Kết nối cảm biến mực nước
Kết nối cảm biến mực nước
Kết nối cảm biến mực nước
Kết nối cảm biến mực nước
Kết nối cảm biến mực nước
Kết nối cảm biến mực nước

Cảm biến mực nước chỉ đơn giản là một chiếc phao nối mạch điện khi phao chìm xuống và đứt khi nổi lên. Nếu bạn lắp nó vào hồ bơi ở độ cao phù hợp, chiếc phao sẽ nâng lên khi mực nước đủ nhưng sẽ rơi xuống khi không đủ nước.

Để Raspberry Pi biết trạng thái của cảm biến mực nước, chúng ta cần Pi để cảm nhận mạch mở hoặc đóng. May mắn thay, điều đó rất đơn giản: các đầu nối GPIO giống nhau mà chúng tôi sử dụng làm đầu ra kỹ thuật số để điều khiển rơ le có thể hoạt động như đầu vào (do đó là I trong GPIO). Cụ thể, nếu chúng ta kết nối một dây của cảm biến với + 3.3V trên đầu nối GPIO và dây cảm biến còn lại với chân mà chúng tôi định cấu hình là đầu vào kéo xuống (có nghĩa là nó sẽ bình thường ở mức điện áp GND), chân đó sẽ đo điện áp kỹ thuật số "cao" hoặc "bật" chỉ khi cảm biến mực nước đóng mạch - khi mực nước thấp. Tôi đã sử dụng chân GPIO 16 làm đầu vào, mà tôi đã đánh dấu trong hình trên.

Mã python để định cấu hình ghim làm đầu vào và kiểm tra trạng thái hiện tại của nó là:

nhập gpiozero

level_input = gpiozero. Button (16) water_low = level_input.is_pressed

Một thách thức tiềm ẩn là khi cảm biến chỉ thay đổi trạng thái, nó sẽ dao động nhanh giữa trạng thái bật và tắt. Giải pháp cho điều đó được gọi là "gỡ lỗi" và tìm kiếm sự thay đổi trạng thái nhất quán trước khi thực hiện hành động. Thư viện GPIOZERO có mã để làm điều đó, nhưng vì một số lý do mà mã đó không hoạt động tốt đối với tôi. Tôi đã viết một vòng lặp đơn giản để kích hoạt cảnh báo IFTTT khi phát hiện thấy sự thay đổi trạng thái nhất quán, bạn có thể tìm thấy điều này trong kho lưu trữ của tôi tại đây.

Bước 12: Viết mã để gắn kết tất cả lại với nhau

Viết mã để gắn kết tất cả lại với nhau
Viết mã để gắn kết tất cả lại với nhau

Đó là nó. Quá trình thiết lập của chúng tôi đã hoàn tất. Bạn có thể viết mã của riêng mình để liên kết mọi thứ lại với nhau thành một hệ thống đầy đủ hoặc sử dụng mã mà tôi cung cấp. Để làm điều đó, chỉ cần tạo cấu trúc thư mục và sao chép kho lưu trữ, như sau:

mkdir poolpi

cd poolpi git clone

Tiếp theo, chỉnh sửa các tệp có tên ifttt_url.txt trong thư mục motion_alert và water_level để có URL cho móc web IFTTT của riêng bạn bằng khóa bí mật của bạn. Bạn có thể sử dụng hai móc web khác nhau cho các hành động khác nhau.

Cuối cùng, chúng tôi muốn mã này chạy tự động. Cách dễ nhất để thực hiện điều đó là thông qua dịch vụ crontab của Linux. Chúng ta có thể thêm một số dòng crontab cho hai tác vụ chính:

  1. Chạy ba chương trình của chúng tôi: máy dò vật thể, cảm biến mực nước và máy chủ web mỗi lần khởi động lại
  2. Dọn dẹp thư mục đầu ra, xóa các ảnh cũ và các tệp video cũ (Tôi đã chọn xóa các tệp cũ hơn 1 ngày và các ảnh cũ hơn 7 ngày - vui lòng thử nghiệm)

Để làm điều đó, hãy nhập crontab -e sẽ mở trình soạn thảo văn bản nano của bạn. Thêm các dòng sau vào cuối tệp:

0 1 * * * find / home / pi / poolpi / output -type f -name "*.avi" -mtime +1 -delete

0 2 * * * find / home / pi / poolpi / output -type f -name "*.jpg" -mtime +7 -delete @reboot python3 /home/pi/poolpi/motion_alert/webserv/webserv.py @reboot python3 /home/pi/poolpi/motion_alert/motion_obj_alert.py @reboot python3 /home/pi/poolpi/water_level/test_water_level.py

Cuối cùng, khởi động lại Raspberry Pi của bạn. Bây giờ nó đã sẵn sàng để giữ cho hồ bơi của bạn luôn đầy và an toàn.

Hãy mày mò thiết lập, mã và đừng quên đánh dấu sao kho lưu trữ github của tôi và nhận xét về hướng dẫn nếu bạn thấy nó hữu ích. Tôi luôn luôn tìm kiếm để học hỏi thêm.

Chúc bạn làm vui vẻ!

Thách thức IoT
Thách thức IoT
Thách thức IoT
Thách thức IoT

Về nhì trong Thử thách IoT

Đề xuất: