Агуулгын хүснэгт:

Ухаалаг кофены машины насосыг Raspberry Pi & HC-SR04 хэт авианы мэдрэгч ба Cloud4RPi удирддаг: 6 алхам
Ухаалаг кофены машины насосыг Raspberry Pi & HC-SR04 хэт авианы мэдрэгч ба Cloud4RPi удирддаг: 6 алхам

Видео: Ухаалаг кофены машины насосыг Raspberry Pi & HC-SR04 хэт авианы мэдрэгч ба Cloud4RPi удирддаг: 6 алхам

Видео: Ухаалаг кофены машины насосыг Raspberry Pi & HC-SR04 хэт авианы мэдрэгч ба Cloud4RPi удирддаг: 6 алхам
Видео: Сводные таблицы Excel с нуля до профи за полчаса + Дэшборды! | 1-ое Видео курса "Сводные Таблицы" 2024, Долдугаар сарын
Anonim
Ухаалаг кофены машины насосыг Raspberry Pi & HC-SR04 хэт авианы мэдрэгч ба Cloud4RPi удирддаг
Ухаалаг кофены машины насосыг Raspberry Pi & HC-SR04 хэт авианы мэдрэгч ба Cloud4RPi удирддаг

Онолын хувьд та кофены машин руу өглөөний аягаа уух болгондоо усны сав дүүргэх хорин нэг л боломж байдаг. Гэсэн хэдий ч практик дээр машин ямар нэгэн байдлаар энэ ажлыг үргэлж чамд үүрүүлэх арга замыг олдог бололтой. Та кофе уух тусам "усны савыг дүүргэ" гэсэн аймшигтай мессежийг авах магадлал өндөр болно. Манай хамт олон ч энэ тал дээр ижил бодолтой байдаг. Бид мунхаг хүмүүс учраас үүнд цэг тавих технологийг хэрэгжүүлэхээр шийдсэн.

Хангамж

Манай тоног төхөөрөмж

Бидэнд SAECO Aulika Focus кофены машин байна. Өнөөдрийг хүртэл бид гар насос ашиглан машины усны савыг стандарт 5 галлон (19 л) савнаас дүүргэсэн.

Бидний Зорилго

  1. Реле ашиглан ямар нэгэн хянагч эсвэл микрокомпьютерээр ажилладаг цахилгаан насос ашиглана уу.
  2. Кофены машины савны усны түвшинг хэмжих арга замыг олж аваарай, ингэснээр манай систем хэзээ дахин дүүргэхээ мэддэг болно.
  3. Системийг хөдөлгөөнт төхөөрөмжөөс бодит цаг хугацаанд удирдах боломжтой байх.
  4. Хэрэв системд ямар нэгэн алдаа гарвал мэдэгдэл хүлээн авах (Slack эсвэл үүнтэй төстэй үйлчилгээгээр дамжуулан).

Алхам 1: Тоног төхөөрөмжийг сонгох

Тоног төхөөрөмжийг сонгох
Тоног төхөөрөмжийг сонгох
Тоног төхөөрөмжийг сонгох
Тоног төхөөрөмжийг сонгох
Тоног төхөөрөмжийг сонгох
Тоног төхөөрөмжийг сонгох
Тоног төхөөрөмжийг сонгох
Тоног төхөөрөмжийг сонгох

Насос

Шуурхай вэб хайлт нь таны сонгосон усны саванд зориулагдсан хэд хэдэн цахилгаан насосны загварыг харуулах болно. Ийм шахуургыг ихэвчлэн ON/OFF унтраалгаар удирддаг (жишээлбэл, Hot Frost A12 эсвэл SMixx ХL-D2). Энд бидний төсөлд зориулж сонгосон насос байна.

Хянагчийн төхөөрөмж

Бид хэд хэдэн төхөөрөмжийг туршиж үзсэн боловч дараах давуу талуудын улмаас Raspberry Pi дээр суурилсан.

  • Энэ нь ойролцоох мэдрэгчийг холбох боломжийг олгодог GPIO -тэй
  • Энэ нь Python -ийг дэмждэг

Бид Raspbian Buster Lite -ийн шинэ хувилбар болон Python 3 -ийг ажиллуулахад шаардлагатай бүх зүйлийг суулгасан.

Бид насосыг хэрхэн яаж солих вэ

Эрчим хүчийг хянахын тулд бид хувьсах гүйдэлд тохирсон дунд хүчдэлийн (12V/2A) хатуу төлөвт реле сонгосон бөгөөд реле нь насосыг залгуурт холбож, Raspberry Pi -ийн дижитал зүүгээр удирддаг.

Усны түвшинг хэрхэн шалгах вэ

Бидний хувьд кофены машины бүтцийг өөрчлөхгүй байх нь чухал байсан тул усны түвшинг хэмжихийн тулд HC-SR04 хэт авианы ойролцоо мэдрэгчийг ашиглахаар шийдсэн.

Бид мэдрэгчийг ялгаруулах зориулалттай хоёр цооног бүхий усны савны тагийг 3d хэвлэж, мэдрэгчийн GitHub номын санг хялбархан олсон бөгөөд энэ үед бүх бэлтгэл ажил дууссан.

Алхам 2: Системийн дизайн

Системийн дизайн
Системийн дизайн
Системийн дизайн
Системийн дизайн

Системийн логик

Системийг дараах энгийн логикоор бүтээсэн болно.

  • Систем нь мэдрэгч ба усны гадаргуу хоорондын зайг байнга хянадаг.
  • Алсын зайны босго хэмжээнээс хэтэрсэн тохиолдолд систем нь түүний төлөв байдлын талаархи мэдээллийг үүл рүү илгээдэг.
  • Хэрэв зай нь зөвшөөрөгдсөн дээд хэмжээнээс хэтэрвэл (танк хоосон байна) систем нь насосыг идэвхжүүлж, зай нь зөвшөөрөгдсөн хамгийн бага утгаас бага болсны дараа унтраадаг.
  • Системийн төлөв өөрчлөгдөх бүрт (жишээлбэл, насос идэвхждэг) үүлэнд мэдээлдэг.

Алдаа гарсан тохиолдолд Slack суваг руу мэдэгдэл илгээдэг.

Кофены машин сул зогсоход систем нь минут тутамд нэг удаа үүл үйлчилгээнд оношлогооны өгөгдөл өгдөг. Нэмж дурдахад, энэ нь 5 минут тутамд төлөв байдлаа үүл рүү илгээдэг.

Шахуурга идэвхжсэн үед систем өгөгдлийг илүү олон удаа илгээдэг боловч хагас секунд тутамд нэгээс илүүгүй удаа илгээдэг.

def send (cloud, variables, dist, error_code = 0, force = False): pump_on = is_pump_on () хувь = calc_water_level_percent (dist) хувьсагчид ['Distance'] ['value'] = dist хувьсагчид ['WaterLevel'] [' утга '] = хувьсагчийн хувь [' PumpRelay '] [' утга '] = насосны хувьсагчид [' Статус '] [' утга '] = calc_status (алдаа_ код, хувь, насос_он)

одоогийн = цаг ()

дэлхийн сүүлчийн_ илгээмж_хүч эсвэл одоогийн бол

Насосоор ажиллах

Дараах тогтмолуудыг насосны ажиллах логикийн үндэс болгон тодорхойлдог.

# GPIO зүү (BCM) GPIO_PUMP = 4 GPIO_TRIGGER = 17 GPIO_ECHO = 27

# Насос

START_PUMP = 1 STOP_PUMP = 0 PUMP_BOUNCE_TIME = 50 # миллисекунд PUMP_STOP_TIMEOUT = 5 # сек

ЧУХАЛ: Хэрэв та Pin 4-ийг ашиглах гэж байгаа бол зөрчилдөөнөөс зайлсхийхийн тулд 1-Wire raspi-config сонголтыг идэвхгүй болгохоо бүү мартаарай.

Хөтөлбөрийг эхлүүлэх үед бид буцааж буцааж бүртгүүлж, анхны төлөвийг OFF болгож тохируулна.

Насосыг асаах функцын код энд байна:

def toggle_pump (утга): хэрэв pump_disabled: хэрэв is_pump_on бол буцаана ()! = утга: log_debug ("[x] % s" % ('START' бол өөр утга бол 'STOP')) GPIO.setup (GPIO_PUMP, GPIO. OUT) GPIO.output (GPIO_PUMP, утга) # Цутгахыг эхлүүлэх/зогсоох

Дээрх эхлүүлэх кодод тодорхойлсны дагуу реле асах үед дараах дуудлагыг дуудна.

pump_on = Буруу def pump_relay_handle (pin): global pump_on pump_on = GPIO.input (GPIO_PUMP) log_debug ("Насосны реле % d" % pump_on болж өөрчлөгдсөн)

Дахин дуудлага хийх үед бид насосны одоогийн төлөвийг хувьсагч руу хадгалдаг бөгөөд програмын үндсэн гогцоонд доор үзүүлсэн шиг насос шилжих мөчийг илрүүлж болно.

def is_pump_on (): global pump_on return pump_on

хэрэв GPIO.event_detected (GPIO_PUMP):

is_pouring = is_pump_on () #… log_debug ('[!] Насосны үйл явдал илэрсэн: % s' % (хэрэв асаалттай байгаа бол 'On' өөр 'Off')) илгээх (үүл, хувьсагч, зай, хүч = Үнэн)

Зайг хэмжих

Хэт авианы ойролцоо мэдрэгч ашиглан усны гадаргуу хүртэлх зайг хэмжих нь маш хялбар байдаг. Манай мэдээллийн санд бид мэдрэгчийг турших боломжийг олгодог хэд хэдэн питон скриптүүдийг хуваалцсан.

Бодит хэрэглээнд мэдрэгчийн уналт, усны хэлбэлзлээс шалтгаалан мэдрэгчийн уншилт хэлбэлздэг. Зарим тохиолдолд уншилт бүрэн алга болдог. Бид хамгийн сүүлийн үеийн N утгыг хуримтлуулдаг, оргилуудыг хаяж, үлдсэн хэмжилтийн дундажийг тооцдог BounceFilter ангиллыг хэрэгжүүлсэн. Хэмжлийн процессыг дараах асинхрон алгоритмаар гүйцэтгэдэг.

# Хамгийн сүүлийн мэдрэгчийн хэмжүүрийг уншдаг = BounceFilter (хэмжээ = 6, discard_count = 1)

read_complete = threading. Event ()

def wait_for_distance ():

read_complete.clear () thread = threading. Thread (target = read_distance) thread.start ()

Хэрэв уншихгүй бол хүлээнэ үү (MAX_READING_TIMEOUT):

log_info ('Унших мэдрэгчийн хугацаа хэтэрсэн') буцах Бичигдэхгүй. readings.avg ()

def read_distance ():

оролдох: утга = hcsr04.raw_distance (sample_size = 5): уншиж дууссан.set ()

Та шүүлтүүрийн бүрэн хэрэгжилтийг эх сурвалжаас олж болно.

Алхам 3: Онцгой байдлын үед ажиллах

Онцгой байдлын үед ажиллах
Онцгой байдлын үед ажиллах
Онцгой байдлын үед ажиллах
Онцгой байдлын үед ажиллах
Онцгой байдлын үед ажиллах
Онцгой байдлын үед ажиллах

Мэдрэгч шатсан, унасан, эсвэл буруу хэсгийг зааж өгвөл яах вэ? Гарын авлагын арга хэмжээ авахын тулд бидэнд ийм тохиолдлыг мэдээлэх арга хэрэгтэй байсан.

Хэрэв мэдрэгч нь зайны уншилт өгөх боломжгүй бол систем өөрчлөгдсөн байдлыг үүл рүү илгээж, холбогдох мэдэгдэл гаргадаг.

Логикийг доорх кодоор дүрсэлсэн болно.

distance = wait_for_distance () # Хэрэв зай байхгүй бол одоогийн усны гүнийг уншаарай: log_error ('Distance error!') back_in_ background (calc_alert (SENSOR_ERROR))) илгээх (үүл, хувьсагчид, зай, error_code = SENSOR_ERROR, force = Үнэн)

Бидэнд усны түвшний ашиглалтын хүрээ байдаг бөгөөд үүнийг мэдрэгч байрлаж байх үед хадгалах ёстой. Одоогийн усны түвшин энэ хязгаарт багтах эсэхийг бид шалгадаг.

# Мэдрэгчээс усны түвшин хүртэлх зай

# Зай нь хүлээгдэж буй хүрээнээс хол байна: цутгаж эхлэх хэрэггүй

хэрэв зай> MAX_DISTANCE * 2: log_error ('Зай нь хязгаараас хэтэрсэн: %.2f' % зай) үргэлжилнэ

Алдаа гарсан үед насос идэвхтэй байсан бол бид унтраана.

if is_pump_on () ба prev_distance <STOP_PUMP_DISTANCE + DISTANCE_DELTA: log_error ('[!] Шахуургын яаралтай зогсолт. Алсын мэдрэгчээс дохио байхгүй')

toggle_pump (STOP_PUMP)

Мөн лонхны ус дуусахад бид хэргийг боловсруулдаг. Насос ажиллах үед усны түвшин өөрчлөгдөхгүй эсэхийг шалгадаг. Хэрэв тийм бол систем 5 секунд хүлээгээд насос унтарсан эсэхийг шалгана. Хэрэв тийм биш бол систем яаралтай насосыг унтрааж, алдааны мэдэгдэл илгээдэг.

PUMP_STOP_TIMEOUT = 5 # secsemergency_stop_time = Байхгүй

def set_emergency_stop_time (одоо асгаж байна):

дэлхийн яаралтай тусламжийн_зогсох_ цаг яаралтай_тоглох_ цаг = одоо + өөр PUMP_STOP_TIMEOUT байхгүй бол

def check_water_source_empty (одоо):

Emergency_stop_time, одоо> Emergency_stop_time буцах

# --------- гол давталт -----------

хэрэв GPIO.event_detected (GPIO_PUMP): is_pouring = is_pump_on () set_emercency_stop_time (одоо, асгаж байна) # …

дэлхийн насосыг идэвхгүй болгосон

if check_water_source_empty (now): log_error ('[!] Насосны яаралтай зогсолт. / Усны эх үүсвэр хоосон') toggle_pump (STOP_PUMP) pump_disabled = Үнэн

Дээрх нь яаралтай зогсолтын үед үүсгэсэн мессежийн бүртгэлийн жишээ юм.

Алхам 4: Системийг 24/7 ажиллуулах

Системийг 24/7 ажиллуулж байна
Системийг 24/7 ажиллуулж байна

Төхөөрөмж дээрх кодыг дибаг хийж, асуудалгүй ажилладаг. Бид үүнийг үйлчилгээ болгон эхлүүлсэн тул Raspberry Pi -ийг дахин ачаалвал дахин эхлүүлнэ. Тохиромжтой болгохын тулд бид байршуулах, үйлчилгээг ажиллуулах, бүртгэлийг үзэхэд тусалдаг Makefile -ийг бүтээсэн.

. PHONY: ажиллуулах эхлэх зогсоох статусын бүртгэлийг суулгах MAIN_FILE: = кофе-насос/main.py SERVICE_INSTALL_SCRIPT: = service_install.sh SERVICE_NAME: = кофе-насос.үйлчилгээ

суулгах:

chmod +x $ (SERVICE_INSTALL_SCRIPT) sudo./$(SERVICE_INSTALL_SCRIPT) $ (MAIN_FILE)

гүйх:

sudo python3 $ (MAIN_FILE)

эхлэх:

sudo systemctl эхлэх $ (SERVICE_NAME)

байдал:

sudo systemctl төлөв $ (SERVICE_NAME)

Зогс:

sudo systemctl stop $ (SERVICE_NAME)

бүртгэл:

sudo journalctl -u coffee -pump -өнөөдрөөс эхлэн

байршуулах:

rsync -av кофе шахуургын мэдрэгч-тохиргоо Makefile *.sh pi@XX. XX. XXX. XXX: ~/

Та энэ файл болон шаардлагатай бүх скриптийг манай репозитороос олох боломжтой.

Алхам 5: Клоуд хяналт

Үүл хяналт
Үүл хяналт
Үүл хяналт
Үүл хяналт
Үүл хяналт
Үүл хяналт
Үүл хяналт
Үүл хяналт

Бид Cloud4RPi ашиглан хяналтын самбарыг ашигласан. Бид эхлээд системийн чухал параметрүүдийг харуулахын тулд виджетүүдийг нэмсэн.

Дашрамд хэлэхэд STATUS хувьсагчийн виджет нь түүний үнэ цэнээс хамааран өөр өөр өнгөний схемийг ашиглаж болно (дээрх зургийг үзнэ үү).

Бид динамик өгөгдлийг харуулах диаграмын виджет нэмсэн. Доорх зурган дээр насосыг асаах, унтраах мөч, усны түвшинг харж болно.

Хэрэв та илүү урт хугацаанд дүн шинжилгээ хийвэл оргил үеийг харж болно - тэр үед насос ажиллаж байсан.

Cloud4RPi нь янз бүрийн тэгшлэх түвшинг тохируулах боломжийг олгодог.

Алхам 6: Энэ нь ажиллана

Image
Image

Энэ нь ажилладаг! Хяналтын самбарыг бүхэлд нь доор харуулав.

Одоогийн байдлаар манай автомат шахуурга хэдэн долоо хоног ажиллаж байгаа бөгөөд усны савыг солиход л хангалттай. Манай төслийн бүрэн кодыг манай GitHub репозитороос авах боломжтой.

Зөвлөмж болгож буй: