Підключення водолічильника itelma до контролера

ST-LINK-GA

STM32F030F4P6

Все почалося з проржавілого рушникосушки. Продірявився, треба міняти. Ну сказано, зроблено. Сходив на ринок, купив, приніс. Викликав сантехніка Васю. Той зацінили все це добро одним очам і сказав що скоро прийде. Через годину повернувся з газовим пальником, трубою, болгаркою і колегою Федей. Години три вони оперували заунітазье і нарешті покликали мене. Ось мовляв ті два крана, а далі мовляв е. Сь сам. З тим і пішли. Ну думаю, треба подивитися в інеті як че далі робити. Один розумний чоловік порадив зварити поліпропіленові труби і ними з'єднати сушилку. В "ОБІ" мені допомогли з вибором труб і різних куточків, муфт і сгонов. Все це добро я привіз додому і почав варити. Після вдало-невдалої зварювання, сушарка виявилася на своєму місці. Подав воду і почав радіти. І ось тут у мене впав погляд на два незрозумілих дроти виходять з водолічильників і акуратно скручених. О. Навіщо водолічильників провід? Явно він щось може передавати. Якщо так, то що за протокол? Пошук в інтернеті був дуже швидким. Я моментально знайшов опис цього девайса. Протокол мене просто порадував своєю складністю :) А працює він так: 10 літрів протекло, геркон замкнулося, розімкнувся. Єдина зміна яке було присутнє, ток це період замкнутого стану. Довжина його залежала від швидкості потоку води, ну або на скільки сильно відкритий кран. Щомісяця дружина залазить туди для зняття показань. І тут я вирішив полегшити їй це завдання. Кажу мовляв зроблю я тобі такий девайс, який сам буде тікати з водолічильником і показувати дані на дисплей.
А ось вони на фото.

Далі сіл обмірковувати алгоритм. Думав, думав і надумав.
Разом ми маємо два подвійних клемника для герконів і 6 кнопок. Ось така у мене вийшла схема. Жах, так? На швидку руку етіт.

Тепер картинки режимів.
Перший старт, лічильник по нулях. Буква "W" говорить про те що він в роботі.

Жмакаем на кнопку "Корекція" і входимо в режим введення даних. Буква "S" говорить про те що ми в режимі введення даних, а буква "H" може зміниться на "С" і означає гаряча / холодна вода.

Жмаки по кнопці "Розряд" вибираємо відповідно розряд. Для наочності поряд з буквою "H" або "C" з'явиться буква.
Кнопками "Корекція +" і "Корекція -" виставляємо значення за лічильником для холодної і гарячої води.

Далі проробляємо ту ж роботу з холодною водою помінявши поточне значення кнопкою "Гаряча / Холодна". Після введення даних натискаємо на кнопку "Корекція" для підтвердження вводяться даних. Контролер перейде в режим роботи про що покаже буквою "W" і почне вважати витрата води.

Головне не забути що дані виводяться до десяток. Одиниці літрів води він не враховує. Тобто значення виводяться без крайнього правого розряду водолічильника.
Кнопка "Підсвічування" потрібна для того щоб включити або вимкнути підсвічування. Але якщо все ж після включення підсвічування забути її вимкнути, вона сама вимкнеться через певний проміжок часу. Період включення підсвічування можна міняти змінивши значення змінної "t". Робота затримки проста. Поки виконується умова if змінна збільшується при кожному пробігу по програмі. Це зручно тим що затримка є, але при цьому програма виконується.
У залозі я не реалізовував, так як хочу прибрати дисплей, а передачу показань замутити по RS-485 прям на комп і там дивитися. Так що якщо хто захоче зробити з дисплеєм то ласкаво просимо. Проект для CodeVisionAVR і проект для Proteus можна скачати нижче.
Фьюз біти для ATmega8

От і все. Успіхів!
Внесено невеликі зміни в програму:
1 - Змінено візуалізація введення началних значень.
2 - долучення український варіант для ЖК з кирилицею.
Дмитро 04.04.14
раптом відключили електрику. і? значення не збереглися?
Олексій 04.04.14
Дані пишуться в EEPROM. Дивіться исходник, 41 рядок.
Андрій 28.09.14
По хорошому на дисплей потрібно виводити тільки цілі куби, платимо адже по кубів. До речі, можна програмно організувати тест "затурканості грязевиков" Якщо міряти прохід води на час.
Олексій 28.09.14
Все в ваших руках :) Надішліть мені на пошту ваш варіант і я його опублікую.
[email protected] 02.03.15 14:24
Добридень! Буду дуже вдячний якщо Ви поділитеся інформацією по fuse-бітам? Заздалегідь вдячний! З повагою!
Олександр 20.10.15 23:31
Добрий день! Як тактується контролер, чи потрібен в схемі кварц? У исходнике є про нього згадка. Скидання, запитка контролера? Чи вдалося реалізувати передачу показань по RS-485?
Олексій 21.10.15 7:31
Олександр, дружина сказала що така приблуда їй не потрібна. Тому все заглохло. Якщо використовувати RS-485, то необхідно ставити кварц кратний бітрейту. Наприклад 7,3728 МГц. Харчування подається по паралельній парі UTP. Протокол для передачі свідчення досить простий, даємо старт байт потім 4 байта даних і стоп байт. Начебто і все.
Павло 02.11.15 11:42
Олексій, добрий день! Прочитавши Вашу статтю я загорівся реалізувати даний варіант зчитування даних з лічильника і перенесення їх на дисплей. Сам працюю в ІТ, тому з програмуванням проблем виникнути не повинно, але ось з "залізом" не пов'язаний ніяк, тому самостійно спаяти схему не зможу. Скажіть, може бути є якісь варіанти готових схем? Наприклад Arduino або що-небудь в цьому дусі? Дивився на сайті Чіп і Діп - там мільйон варіантів і готових плат з контролерами і кварцом і самих дисплеїв, але як зібрати все воєдино я просто не уявляю. Можете що-небудь порекомендувати? Заздалегідь дякую! Павло
Олексій 02.11.15 15:32
Спочатку потрібно вирішити на якому МК буде реалізована схема. Наприклад Якщо все робити з нуля, то можна піти ще далі і наприклад використовувати мою плату з STM32F030F4P6 + купити TFT дисплей ST7735. Оформити всі це в красивому боксі і радувати око. Або можна купити arduino mini і стерши завантажувач, просто залити прошивку скачавши її звідси і так само користуватися пристроєм. Тут важливий не підхід до готової плати, а під який МК є бажання писати програму. Та ж Arduino це всього лише ATmega8 і самопісний завантажувач. Так що вибирайте МК, а я направлю куди краще копати.
Павло 02.11.15 16:19
Олексій, спасибі велике за відповідь! Насправді для мене не дуже принциповий сам МК, оскільки я і припускав використовувати саме Вашу прошивку (за неї Вам окреме спасибі!). У мене проблема саме в тому, щоб зібрати все це. Оскільки, навіть розуміючи ідею і призначення всього цього, я не маю жодного уявлення куди і що підключати і що з чим поєднувати. Тому, щоб зменшити кількість маніпуляцій зі складанням, я припускав використовувати Arduino Uno R3 на базі ATmega328, купивши до нього дисплей, кнопки і джерело живлення. Спаяти плату сам я точно не зможу. Скажіть, така комбінація підійде для Вашої прошивки? Заздалегідь дякую!
Олексій 02.11.15 16:35
Підійде. Але краще mini. Там той же МК, а плата менше.
Павло 02.11.15 16:41
Я виходив з того, що Uno спочатку має вбудований USB порт і роз'єм живлення, щоб знову ж було менше маніпуляцій зі складанням, розмір плати також не має значення, оскільки місця достатньо. Також в якості кнопок я підібрав восьмікнопочную матрицю. Але як поєднати це поки не уявляю. Скажіть, Ви зможете допомогти рекомендаціями по збірці?
Олексій 02.11.15 18:33
Ну з під Arduino я навіть і не знаю, а от якщо на чистий МК, то кнопки потрібно посадити на один порт і опитувати. Решта як в статті. Взагалі це цілий проект і його потрібно буде збирати повністю з нуля.
Павло 03.11.15 12:16
Олексій, вітаю! Скажіть, а Ви готові були б взятися за такий проект? Якщо так, то може бути обговоримо варіанти нашої подальшої взаємодії? Або, можливо, Ви могли б мені кого-небудь порекомендувати? Як з Вами можна зв'язатися?
Олексій 03.11.15 17:18
Якщо в планах це комерційний проект, то потрібно розробляти плату з нуля.))) Якщо для себе, то яка потрібна допомога?
Max 22.11.15 17:28
Збираю свій проект під чотири лічильника з LCD 4x20 в тестовому варіанті.
Олексій 22.11.15 21:31
Це на 2 гарячих і 2 холодних лічильника?