Мазмұны:

Raspberry Pi & HC-SR04 ультрадыбыстық сенсоры мен Cloud4RPi басқаратын ақылды кофеқайнатқыш сорғы: 6 қадам
Raspberry Pi & HC-SR04 ультрадыбыстық сенсоры мен Cloud4RPi басқаратын ақылды кофеқайнатқыш сорғы: 6 қадам

Бейне: Raspberry Pi & HC-SR04 ультрадыбыстық сенсоры мен Cloud4RPi басқаратын ақылды кофеқайнатқыш сорғы: 6 қадам

Бейне: Raspberry Pi & HC-SR04 ультрадыбыстық сенсоры мен Cloud4RPi басқаратын ақылды кофеқайнатқыш сорғы: 6 қадам
Бейне: Arduino Tutorial 27 - Measuring Distanc with Ultrasonic Sensor | SunFounder's ESP32 IoT Learnig kit 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 -ті іске қосу үшін қажет нәрсенің бәрін орнаттық.

Сорғыны қалай қосамыз

Қуатты басқару үшін біз ауыспалы токқа сәйкес келетін орташа қуатты (12В/2А) қатты күй релесін таңдадық, реле сорғыны розеткаға қосады және Raspberry Pi сандық түйреуішімен басқарылады.

Су деңгейін қалай тексереміз

Бізге кофеқайнатқыштың конструкциясын өзгертпеу маңызды болды, сондықтан біз су деңгейін өлшеу үшін HC-SR04 ультрадыбыстық жақындық сенсорын қолдануды шештік.

Біз сенсор шығаратын екі саңылауы бар арнайы су ыдысының қақпағын 3d басып шығардық. Біз сенсорға арналған GitHub кітапханасын оңай таптық. Осы кезде барлық дайындық аяқталды.

2 -қадам: Жүйені жобалау

Жүйені жобалау
Жүйені жобалау
Жүйені жобалау
Жүйені жобалау

Жүйе логикасы

Жүйе келесі қарапайым логиканы ескере отырып жасалған:

  • Жүйе сенсор мен су бетінің арасындағы қашықтықты үнемі бақылап отырады.
  • Қашықтықтағы өзгеріс шекті мәннен асып кеткенде, жүйе бұлтқа оның күйі туралы ақпаратты жібереді.
  • Егер қашықтық рұқсат етілген максималды мәннен асып кетсе (резервуар бос), жүйе сорғыны іске қосады және арақашықтық рұқсат етілген ең төменгі мәннен аз болған кезде оны өшіреді.
  • Жүйенің күйі өзгерген сайын (мысалы, сорғы іске қосылады) бұлтқа хабарлайды.

Қате болған жағдайда хабарлама Slack арнасына жіберіледі.

Кофеқайнатқыш жұмыс істемей тұрған кезде жүйе бұлтты қызметті диагностикалық деректермен минутына бір рет қосады. Сонымен қатар, ол бұлтты әр 5 минут сайын жібереді.

Сорғы белсенді кезде жүйе деректерді жиі жібереді, бірақ жарты секундта бір реттен жиі емес.

def send (бұлт, айнымалылар, дист, error_code = 0, force = False): pump_on = is_pump_on () процент = calc_water_level_percent (dist) айнымалылар ['Distance'] ['value'] = dist distables ['WaterLevel'] [' мән '] = айнымалылардың пайызы [' PumpRelay '] [' мән '] = сорғы_оның айнымалылары [' Күй '' ['мән'] = calc_status (қате_код, пайыз, сорғы_он)

ағымдағы = уақыт ()

жаһандық last_sending_time егер күш болса немесе ағымдағы - last_sending_time> MIN_SEND_INTERVAL: оқулар = cloud.read_data () cloud.publish_data (оқылымдар) last_sending_time = ағымдағы

Сорғымен жұмыс

Біз келесі тұрақтыларды сорғы жұмысының логикасының негізі ретінде анықтаймыз.

# 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 опциясын өшіруді ұмытпаңыз.

Бағдарлама іске қосылған кезде біз кері шақыруды тіркейміз және бастапқы күйді ӨШІРУ күйіне орнатамыз.

Міне сорғыны ауыстыратын функцияның коды:

def toggle_pump (мән): егер pump_disabled болса: return is_pump_on ()! = мәні: log_debug («[x] % s» % («START» болса, басқа мән «STOP»)) GPIO.setup (GPIO_PUMP, GPIO. OUT) GPIO.output (GPIO_PUMP, мән) # Құюды бастау/тоқтату

Жоғарыдағы іске қосу кодында анықталғандай, реле ҚОСУ кезінде келесі кері байланыс шақырылады:

pump_on = жалған анықталған pump_relay_handle (pin): global pump_on pump_on = GPIO.input (GPIO_PUMP) log_debug («Сорғы релесі % d» % сорғы_онына өзгертілді)

Қайта шақыру кезінде біз сорғының ағымдағы күйін айнымалыға сақтаймыз. Қолданбаның негізгі циклінде төменде көрсетілгендей сорғы ауысатын сәтті анықтай аламыз:

def is_pump_on (): жаһандық сорғы_қайту сорғыда

егер GPIO.event_detected (GPIO_PUMP):

is_pouring = is_pump_on () #… log_debug ('[!] Сорғы оқиғасы анықталды: % s' % («Қосылған» болса, басқа құю 'Өшірулі')) жіберу (бұлт, айнымалылар, қашықтық, күш = Ақиқат)

Қашықтықты өлшеу

Ультрадыбыстық жақындық сенсорының көмегімен су бетіне дейінгі қашықтықты өлшеу өте оңай. Біздің репозиторийде біз сенсорды тексеруге мүмкіндік беретін бірнеше питон сценарийлерімен бөлістік.

Нақты қосымшаларда сенсордың әсерінен және судың тербелісінен сенсор көрсеткіштері өзгеруі мүмкін. Кейбір жағдайларда көрсеткіштер мүлдем жоғалып кетуі мүмкін. Біз 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) дөңгелектенген = егер мән Ешқайсысы болмаса дөңгелек (мән, 1) readings.add (дөңгелектелген) қатені қоспағанда: log_error ('Ішкі қате: % s' % қате): read_complete.set ()

Сүзгінің толық орындалуын көздерден таба аласыз.

3 -қадам: төтенше жағдайларды жою

Төтенше жағдайларды жою
Төтенше жағдайларды жою
Төтенше жағдайларды жою
Төтенше жағдайларды жою
Төтенше жағдайларды жою
Төтенше жағдайларды жою

Егер сенсор жанып кетсе немесе құлап кетсе немесе дұрыс емес жерді көрсетсе ше? Қолмен әрекет ету үшін бізге мұндай жағдайларды хабарлау әдісі қажет болды.

Егер сенсор қашықтықтан оқуды қамтамасыз етпесе, жүйе өзгертілген күйді бұлтқа жібереді және сәйкес хабарлама шығарады.

Логика төмендегі кодпен суреттелген.

distance = wait_for_distance () # Егер қашықтық жоқ болса, ағымдағы су тереңдігін оқыңыз: log_error ('Distance error!') notify_in_ background (calc_alert (SENSOR_ERROR)) send (бұлт, айнымалылар, қашықтық, error_code = SENSOR_ERROR, force = True)

Бізде сенсор өз орнында болған кезде сақталуы керек су деңгейінің жұмыс диапазоны бар. Біз судың ағымдағы деңгейі осы диапазонға түсетінін тексереміз:

# Сенсордан су деңгейіне дейінгі қашықтық # кофеқайнатқыштың су ыдысына негізделген MIN_DISTANCE = 2 # см MAX_DISTANCE = 8 # см

# Қашықтық күтілетін диапазоннан тыс: құюды бастамаңыз

егер қашықтық> MAX_DISTANCE * 2: log_error ('Қашықтық диапазонда: %.2f' % қашықтық) жалғастыру

Егер қате пайда болған кезде сорғы белсенді болса, оны өшіреміз.

егер is_pump_on () және prev_distance <STOP_PUMP_DISTANCE + DISTANCE_DELTA: log_error ('[!] Сорғының апаттық тоқтауы. Қашықтық сенсорынан сигнал жоқ')

toggle_pump (STOP_PUMP)

Біз бөтелкеде су таусылған кезде де істі өңдейміз. Біз сорғы жұмыс істеп тұрған кезде су деңгейі өзгермейтінін тексереміз. Олай болса, жүйе 5 секунд күтеді, содан кейін сорғы өшірілгенін тексереді. Егер ол болмаса, жүйе апаттық сорғыны өшіреді және қате туралы хабарлама жібереді.

PUMP_STOP_TIMEOUT = 5 # secsemercency_stop_time = Жоқ

def set_emergency_stop_time (қазір, құйылады):

global Emergency_stop_time 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_emergency_stop_time (қазір, құйылады) #…

жаһандық сорғы_өндірілген

if check_water_source_empty (қазір): log_error ('[!] Сорғының апаттық тоқтауы. / Су көзі бос') toggle_pump (STOP_PUMP) pump_disabled = True

Жоғарыда авариялық тоқтату кезінде жасалатын хабарламалар журналының мысалы келтірілген.

4 -қадам: жүйені тәулік бойы іске қосу

Жүйені тәулік бойы іске қосу
Жүйені тәулік бойы іске қосу

Құрылғыдағы код жөнделген және еш қиындықсыз жұмыс істейді. Біз оны қызмет ретінде іске қостық, сондықтан 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 start $ (SERVICE_NAME)

күй:

sudo systemctl күйі $ (SERVICE_NAME)

Тоқта:

sudo systemctl stop $ (SERVICE_NAME)

журнал:

sudo journalctl -u кофе сорғы -бүгіннен бастап

орналастыру:

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

Сіз бұл файлды және барлық қажетті сценарийлерді біздің репозиторийден таба аласыз.

5 -қадам: бұлтты бақылау

Бұлтты бақылау
Бұлтты бақылау
Бұлтты бақылау
Бұлтты бақылау
Бұлтты бақылау
Бұлтты бақылау
Бұлтты бақылау
Бұлтты бақылау

Біз басқару тақтасын енгізу үшін Cloud4RPi қолдандық. Біз алдымен жүйенің маңызды параметрлерін көрсету үшін виджеттерді қостық.

Айтпақшы, STATUS айнымалысы үшін виджет оның мәніне байланысты түрлі түсті схемаларды қолдана алады (жоғарыдағы суретті қараңыз).

Біз динамикалық деректерді көрсету үшін диаграмма виджетін қостық. Төмендегі суретте сіз сорғыны қосу және өшіру сәтін және судың тиісті деңгейін көре аласыз.

Егер сіз ұзақ уақытқа талдау жасасаңыз, сіз шыңдарды көре аласыз - бұл сорғы жұмыс істеп тұрған кезде.

Cloud4RPi сонымен қатар әр түрлі тегістеу деңгейін орнатуға мүмкіндік береді.

6 -қадам: Бұл жұмыс істейді

Image
Image

Ол істейді! Басқару тақтасы толығымен төменде көрсетілгендей көрінеді.

Қазіргі уақытта біздің автоматты сорғы бірнеше аптадан бері жұмыс істеп тұр, бізге су бөтелкелерін ауыстыру қажет. Біздің жобаның толық коды GitHub репозиторийінде бар.

Ұсынылған: