Mục lục:
- Quân nhu
- Bước 1: Chọn thiết bị
- Bước 2: Thiết kế hệ thống
- Bước 3: Xử lý các tình huống khẩn cấp
- Bước 4: Chạy hệ thống 24/7
- Bước 5: Giám sát đám mây
- Bước 6: Nó hoạt động
Video: Máy bơm máy pha cà phê thông minh được điều khiển bằng cảm biến siêu âm Raspberry Pi & HC-SR04 và Cloud4RPi: 6 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
Về lý thuyết, mỗi khi bạn đến máy pha cà phê để lấy cốc buổi sáng, chỉ có một trong hai mươi cơ hội là bạn sẽ phải đổ đầy nước vào bình. Tuy nhiên, trong thực tế, có vẻ như máy móc bằng cách nào đó đã tìm ra cách để luôn đặt việc vặt này cho bạn. Bạn càng muốn uống cà phê, bạn càng có nhiều khả năng nhận được thông báo đáng sợ “đổ đầy bình nước”. Các đồng nghiệp của tôi cũng cảm thấy như vậy về điều này. Chúng tôi là những kẻ mọt sách, chúng tôi quyết định triển khai công nghệ có thể chấm dứt điều này.
Quân nhu
Thiết bị của chúng tôi
Chúng tôi có máy pha cà phê SAECO Aulika Focus. Cho đến ngày nay, chúng tôi đã sử dụng một máy bơm tay để đổ đầy nước vào bình chứa nước của máy từ một bình nước tiêu chuẩn 5 Gallon (19L).
Mục tiêu của chúng tôi
- Sử dụng một máy bơm điện được điều khiển bởi một số loại bộ điều khiển hoặc một máy vi tính thông qua một rơ le.
- Có một cách để đo mực nước trong bình chứa của máy pha cà phê để hệ thống của chúng tôi biết khi nào cần đổ đầy nước vào bình.
- Có phương tiện để điều khiển hệ thống, tốt nhất là trong thời gian thực từ thiết bị di động.
- Nhận thông báo (thông qua Slack hoặc một dịch vụ tương tự) nếu có bất kỳ sự cố nào xảy ra với hệ thống.
Bước 1: Chọn thiết bị
Máy bơm
Tìm kiếm nhanh trên web sẽ hiển thị một số mẫu máy bơm điện được thiết kế cho chai nước mà bạn lựa chọn. Các máy bơm như vậy thường được điều khiển bằng công tắc BẬT / TẮT (ví dụ: Hot Frost A12 hoặc SMixx ХL-D2). Đây là máy bơm chúng tôi đã chọn cho dự án của mình.
Thiết bị điều khiển
Chúng tôi đã thử một số thiết bị nhưng vẫn ổn định trên Raspberry Pi do những ưu điểm sau:
- Nó có GPIO cho phép chúng tôi kết nối cảm biến tiệm cận
- Nó hỗ trợ Python
Chúng tôi đã cài đặt phiên bản mới của Raspbian Buster Lite và mọi thứ cần thiết để chạy Python 3.
Cách chúng tôi chuyển đổi máy bơm
Để kiểm soát nguồn điện, chúng tôi đã chọn một rơle trạng thái rắn công suất trung bình (12V / 2A) phù hợp với dòng điện xoay chiều. Rơle kết nối máy bơm với ổ cắm và được điều khiển bằng chân kỹ thuật số của Raspberry Pi.
Cách chúng tôi kiểm tra mực nước
Điều quan trọng đối với chúng tôi là không làm thay đổi cấu trúc của máy pha cà phê, vì vậy chúng tôi quyết định sử dụng cảm biến tiệm cận Siêu âm HC-SR04 để đo mực nước.
Chúng tôi đã in 3d một nắp thùng nước tùy chỉnh với hai lỗ cho bộ phát của cảm biến. Chúng tôi dễ dàng tìm thấy thư viện GitHub cho cảm biến.
Bước 2: Thiết kế hệ thống
Logic của hệ thống
Hệ thống được thiết kế với logic đơn giản sau:
- Hệ thống liên tục theo dõi khoảng cách giữa cảm biến và mặt nước.
- Bất cứ khi nào thay đổi về khoảng cách vượt quá giá trị ngưỡng, hệ thống sẽ gửi thông tin về trạng thái của nó lên đám mây.
- Nếu khoảng cách vượt quá giá trị tối đa cho phép (bồn chứa rỗng), hệ thống sẽ kích hoạt máy bơm và tắt nó khi khoảng cách nhỏ hơn giá trị tối thiểu cho phép.
- Bất cứ khi nào trạng thái của hệ thống thay đổi (ví dụ: máy bơm kích hoạt), nó sẽ thông báo cho đám mây.
Trong trường hợp xảy ra lỗi, thông báo sẽ được gửi đến kênh Slack.
Khi máy pha cà phê không hoạt động, hệ thống sẽ gửi dữ liệu chẩn đoán đến dịch vụ đám mây mỗi phút một lần. Ngoài ra, nó gửi trạng thái của nó lên đám mây cứ sau 5 phút.
Khi máy bơm hoạt động, hệ thống sẽ gửi dữ liệu thường xuyên hơn nhưng không quá một lần sau mỗi nửa giây.
def send (đám mây, biến, dist, error_code = 0, force = False): pump_on = is_pump_on () phần trăm = biến calc_water_level_percent (dist) ['Khoảng cách'] ['value'] = biến dist ['WaterLevel'] [' giá trị '] = biến phần trăm [' PumpRelay '] [' value '] = biến pump_on [' Trạng thái '] [' value '] = calc_status (error_code, phần trăm, pump_on)
hiện tại = thời gian ()
global last_sending_time if force or current - last_sending_time> MIN_SEND_INTERVAL: readings = cloud.read_data () cloud.publish_data (readings) last_sending_time = current
Làm việc với máy bơm
Chúng tôi xác định các hằng số sau đây làm cơ sở cho logic hoạt động của máy bơm.
# Ghim GPIO (BCM) GPIO_PUMP = 4 GPIO_TRIGGER = 17 GPIO_ECHO = 27
# Bơm
START_PUMP = 1 STOP_PUMP = 0 PUMP_BOUNCE_TIME = 50 # mili giây PUMP_STOP_TIMEOUT = 5 # giây
QUAN TRỌNG: Nếu bạn định sử dụng Pin 4, đừng quên tắt tùy chọn 1-Wire raspi-config để tránh xung đột.
Khi khởi động chương trình, chúng tôi đăng ký một cuộc gọi lại và đặt trạng thái ban đầu thành TẮT.
Đây là mã cho chức năng bật tắt máy bơm:
def toggle_pump (value): if pump_disabled: return if is_pump_on ()! = value: log_debug ("[x]% s"% ('START' if value else 'STOP')) GPIO.setup (GPIO_PUMP, GPIO. OUT) GPIO.output (GPIO_PUMP, giá trị) # Bắt đầu / Dừng đổ
Như đã định nghĩa trong mã khởi động ở trên, khi rơle BẬT, lệnh gọi lại sau được gọi:
pump_on = False def pump_relay_handle (pin): global pump_on pump_on = GPIO.input (GPIO_PUMP) log_debug ("Rơ le máy bơm đã thay đổi thành% d"% pump_on)
Trong lệnh gọi lại, chúng tôi lưu trạng thái hiện tại của máy bơm vào một biến. Trong vòng lặp chính của ứng dụng, chúng tôi có thể phát hiện thời điểm máy bơm chuyển đổi như hình dưới đây:
def is_pump_on (): global pump_on return pump_on
nếu GPIO.event_detected (GPIO_PUMP):
is_pouring = is_pump_on () #… log_debug ('[!] Đã phát hiện sự kiện bơm:% s'% ('Bật' nếu is_pouring khác 'Tắt')) send (đám mây, biến, khoảng cách, lực lượng = True)
Đo khoảng cách
Khá dễ dàng để đo khoảng cách đối với mặt nước bằng cảm biến tiệm cận siêu âm. Trong kho lưu trữ của mình, chúng tôi đã chia sẻ một số tập lệnh python cho phép bạn kiểm tra cảm biến.
Trong các ứng dụng thực tế, các chỉ số cảm biến có thể dao động do hiệu ứng nảy của cảm biến và dao động nước. Trong một số trường hợp, các bài đọc có thể bị thiếu hoàn toàn. Chúng tôi đã triển khai một lớp BounceFilter tích lũy N giá trị gần đây, loại bỏ các đỉnh và tính giá trị trung bình của các phép đo còn lại. Quá trình đo được thực hiện bởi thuật toán không đồng bộ sau.
# Giữ số đo cảm biến cuối cùng = BounceFilter (size = 6, discard_count = 1)
read_complete = threading. Event ()
def wait_for_distance ():
read_complete.clear () thread = threading. Thread (target = read_distance) thread.start ()
nếu không read_complete.wait (MAX_READING_TIMEOUT):
log_info ('Hết thời gian chờ của cảm biến đọc') trả về Không trả về các bài đọc.avg ()
def read_distance ():
try: value = hcsr04.raw_distance (sample_size = 5) round = value nếu giá trị là Không có gì khác làm tròn (giá trị, 1) readings.add (làm tròn) ngoại trừ Exception as err: log_error ('Internal error:% s'% err) cuối cùng: read_complete.set ()
Bạn có thể tìm thấy triển khai đầy đủ của bộ lọc trong các nguồn.
Bước 3: Xử lý các tình huống khẩn cấp
Điều gì sẽ xảy ra nếu cảm biến bị cháy, rơi ra hoặc chỉ vào một khu vực sai? Chúng tôi cần một cách để báo cáo những trường hợp như vậy để chúng tôi có thể thực hiện hành động thủ công.
Nếu cảm biến không cung cấp các kết quả đo khoảng cách, hệ thống sẽ gửi trạng thái đã thay đổi lên đám mây và tạo ra thông báo tương ứng.
Logic được minh họa bằng đoạn mã dưới đây.
khoảng cách = wait_for_distance () # Đọc độ sâu nước hiện tại nếu khoảng cách là Không: log_error ('Lỗi khoảng cách!') thông báo_in_background (calc_alert (SENSOR_ERROR)) gửi (đám mây, các biến, khoảng cách, error_code = SENSOR_ERROR, force = True)
Chúng tôi có một phạm vi mực nước hoạt động cần được duy trì khi cảm biến ở đúng vị trí của nó. Chúng tôi kiểm tra xem mực nước hiện tại có giảm trong phạm vi này không:
# Khoảng cách từ cảm biến đến mực nước # dựa trên ngăn chứa nước của máy pha cà phê MIN_DISTANCE = 2 # cm MAX_DISTANCE = 8 # cm
# Khoảng cách nằm ngoài phạm vi dự kiến: không bắt đầu đổ
nếu khoảng cách> MAX_DISTANCE * 2: log_error ('Khoảng cách nằm ngoài phạm vi:%.2f'% khoảng cách) tiếp tục
Chúng tôi tắt máy bơm nếu nó hoạt động khi xảy ra lỗi.
if is_pump_on () and prev_distance <STOP_PUMP_DISTANCE + DISTANCE_DELTA: log_error ('[!] Máy bơm dừng khẩn cấp. Không có tín hiệu từ cảm biến khoảng cách')
toggle_pump (STOP_PUMP)
Chúng tôi cũng xử lý trường hợp bình hết nước. Chúng tôi kiểm tra xem mực nước không thay đổi khi máy bơm chạy. Nếu vậy, hệ thống đợi trong 5 giây và sau đó kiểm tra xem máy bơm đã tắt chưa. Nếu không, hệ thống thực hiện tắt máy bơm khẩn cấp và gửi thông báo lỗi.
PUMP_STOP_TIMEOUT = 5 # secsemergency_stop_time = Không có
def set_emergency_stop_time (bây giờ, is_pouring):
global khẩn cấp_stop_time khẩn cấp_stop_time = bây giờ + PUMP_STOP_TIMEOUT nếu / is_pouring khác Không có
def check_water_source_empty (bây giờ):
trả lại khẩn cấp_stop_time và bây giờ> khẩn cấp_stop_time
# --------- vòng lặp chính -----------
if GPIO.event_detected (GPIO_PUMP): is_pouring = is_pump_on () set_emergency_stop_time (now, is_pouring) #…
global pump_disabled
if check_water_source_empty (now): log_error ('[!] Máy bơm dừng khẩn cấp. / Nguồn nước cạn') toggle_pump (STOP_PUMP) pump_disabled = True
Trên đây là một ví dụ về nhật ký thông báo được tạo trong khi dừng khẩn cấp.
Bước 4: Chạy hệ thống 24/7
Mã trên thiết bị được gỡ lỗi và chạy mà không gặp vấn đề gì. Chúng tôi đã khởi chạy nó như một dịch vụ, vì vậy nó sẽ khởi động lại nếu Raspberry Pi được khởi động lại. Để thuận tiện, chúng tôi đã tạo một Makefile giúp triển khai, chạy dịch vụ và xem nhật ký.
. PHONY: cài đặt nhật ký trạng thái dừng chạy bắt đầu triển khai MAIN_FILE: = coffee-pump / main.py SERVICE_INSTALL_SCRIPT: = service_install.sh SERVICE_NAME: = coffee-pump.service
Tải về:
chmod + x $ (SERVICE_INSTALL_SCRIPT) sudo./$(SERVICE_INSTALL_SCRIPT) $ (MAIN_FILE)
chạy:
sudo python3 $ (MAIN_FILE)
bắt đầu:
sudo systemctl start $ (SERVICE_NAME)
trạng thái:
trạng thái sudo systemctl $ (SERVICE_NAME)
ngừng lại:
sudo systemctl stop $ (SERVICE_NAME)
nhật ký:
sudo journalctl -u coffee-pump - kể từ hôm nay
triển khai:
rsync -av coffee-pump sensor-setup Makefile *.sh pi@XX. XX. XXX. XXX: ~ /
Bạn có thể tìm thấy tệp này và tất cả các tập lệnh được yêu cầu trong kho lưu trữ của chúng tôi.
Bước 5: Giám sát đám mây
Chúng tôi đã sử dụng Cloud4RPi để triển khai bảng điều khiển. Đầu tiên, chúng tôi đã thêm các widget để chỉ ra các thông số thiết yếu của hệ thống.
Nhân tiện, tiện ích cho biến TRẠNG THÁI có thể sử dụng các sơ đồ màu khác nhau dựa trên giá trị của nó (xem hình ảnh ở trên).
Chúng tôi đã thêm một tiện ích biểu đồ để hiển thị dữ liệu động. Trong hình ảnh bên dưới, bạn có thể thấy thời điểm máy bơm BẬT và TẮT và mực nước tương ứng.
Nếu bạn phân tích khoảng thời gian dài hơn, bạn có thể thấy các đỉnh - đó là khi máy bơm đang chạy.
Cloud4RPi cũng cho phép bạn thiết lập các mức độ làm mịn khác nhau.
Bước 6: Nó hoạt động
Nó hoạt động! Toàn bộ bảng điều khiển trông như hình dưới đây.
Hiện tại, máy bơm tự động của chúng tôi đã chạy được vài tuần và tất cả những gì chúng tôi cần làm là thay bình nước. Mã đầy đủ cho dự án của chúng tôi có sẵn trong kho lưu trữ GitHub của chúng tôi.
Đề xuất:
Máy pha cà phê thông minh - Một phần của Hệ sinh thái Nhà thông minh: 4 bước
Máy pha cà phê thông minh - Một phần của Hệ sinh thái SmartHome: Máy pha cà phê bị tấn công, biến nó thành một phần của Hệ sinh thái nhà thông minh Tôi sở hữu một Máy pha cà phê Delonghi cũ tốt (DCM) (không phải là một chương trình khuyến mãi và muốn nó “thông minh”. Vì vậy, tôi đã hack nó bằng cách cài đặt ESP8266) mô-đun có giao diện với bộ não / bộ vi điều khiển của nó sử dụng
Ô tô được điều khiển từ xa - Được điều khiển bằng Bộ điều khiển Xbox 360 không dây: 5 bước
Ô tô được điều khiển từ xa - Được điều khiển bằng Bộ điều khiển Xbox 360 không dây: Đây là các hướng dẫn để tạo ô tô được điều khiển từ xa của riêng bạn, được điều khiển bằng bộ điều khiển Xbox 360 không dây
ESP8266 RGB LED STRIP Điều khiển WIFI - NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi - Điều khiển điện thoại thông minh RGB LED STRIP: 4 bước
ESP8266 RGB LED STRIP Điều khiển WIFI | NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi | Điều khiển bằng điện thoại thông minh RGB LED STRIP: Xin chào các bạn trong hướng dẫn này, chúng ta sẽ học cách sử dụng gật đầu hoặc esp8266 làm điều khiển từ xa IR để điều khiển dải LED RGB và Nodemcu sẽ được điều khiển bằng điện thoại thông minh qua wifi. Vì vậy, về cơ bản bạn có thể điều khiển DÂY CHUYỀN LED RGB bằng điện thoại thông minh của mình
Bảng điều khiển cầm tay với bộ điều khiển và cảm biến không dây (Arduino MEGA & UNO): 10 bước (có hình ảnh)
Bảng điều khiển cầm tay với bộ điều khiển và cảm biến không dây (Arduino MEGA & UNO): Những gì tôi đã sử dụng: - Arduino MEGA- 2x Arduino UNO- Adafruit 3.5 " Màn hình cảm ứng TFT 320x480 HXD8357D- Buzzer- Loa 4Ohm 3W- Đèn LED 5mm- Máy in Ultimaker 2+ w / Black PLA Filament- Lasercutter w / MDF wood- Phun sơn đen (cho gỗ) - 3x nRF24
Bộ điều khiển kỹ thuật số cho hệ thống treo khí bằng Arduino và Điều khiển từ xa trên điện thoại thông minh: 7 bước (có hình ảnh)
Bộ điều khiển kỹ thuật số cho hệ thống treo khí bằng Arduino và Điều khiển từ xa trên điện thoại thông minh: Xin chào tất cả mọi người. đây cũng là lần hướng dẫn đầu tiên của tôi nên gấu w