Рефералки запрещены, см. правила. Исправь или ветка будет удалена. Срок 1 час
Из китайского комплекта создал простое устройство для мониторинга уровня радиации.
Суть его - передача данных на любой агрегатор умного дома (OpenHab, Domoticz, etc), что принимает данные по протоколу mqtt.
Одна неделя на даче и в городе, чет неуютно:
Устройство состоит из:
1. Указанного выше счетчика Гейгера.
2. Очень странной платы ESP32.
3. I2C двустрочного дисплея. Подойдут абсолютно любые от наших восточных братьев.
4. (Для этой моей неудачной ESP32) любой подходящий стабилизатор напряжения. Если берем нормальную еспшку - стабилизатор не нужен, об этом чуть позже.
Провода, разъемы, платы для пайки, корпус - по вкусу.
Пару слов о выборе МК. Не слишком вдаваясь в детали, заказал десяток плат недорого и не заметил, что на плате не наблюдается приличного стабилизатора.
По прибытии плат успешно прошил их, загрузил скриптик, попытался завести в сетку и получил ошибку, которую никогда не встречал. Недолгое гугление показало целый ворох причин, среди которых не первой значилась недостаток питания. Трехвольтовый стабилизатор, напаянный прямо на еспшку, решил все проблемы. По сей причине, любви у меня к модулю не возникло и решил разогнать его по разным малополезным устройствам, типа этого.
Что касается желающих повторить, годится любой модуль ESP32 с нормальным стабилизатором. Можно делать устройство и на ESP-8266, но модуль дисплея и кое-что про wifi придется править.
Соединение:
Перечень ног:
26 - SDA Дисплея
27 - SCL Дисплея
18 - Счетчик Гейгера.
Питание:
На счетчик Гейгера подавать 5 вольт.
На дисплей подавать - зависит от вашего дисплея! В моем случае 3.3 вольта, но так не обязательно у вас.
Код устройства, в целом, элементарный, несколько слов об общей логике.
Устройство просто считает количество "щелчков", что прилетают с платы счетчика Гейгера в течение одной минуты, отнимает число 12 и отправляет на брокер.
12 = собственный фон 0,2 импульса в секунду (даташит) х 60 секунд.
Из этого получается указанный выше график.
Устройство, также, имеет кольцевой буфер, где усредняются значения со счетчика, эти данные выводятся на дисплей.
Полагаю, на дисплее лучше видеть усредненное значение, ибо как бы там ни было, мы на него постоянно не пялимся, а в агрегаторе удобнее иметь мгновенные значения в виде графика.
Ниже видна работа кольцевого фильтра. в 20 часов фильтр был выключен:
На брокер идет и полученное значение, и усредненное и еще много чего.
Также устройство может по команде от брокера переходить в режим программирования по сети, что позволяет реализовывать любые замыслы, что-то подправлять в коде, etc.
Код устройства написан на языке Lua, который позволяет неучам без специального образования и со средним соображением, к коим я отношусь, делать проекты самостоятельно.
Логика работы находится в файле main.lua, который ниже с комментариями.
Начнем загружать код в устройство.
1. Прошиваем esp32 при помощи Flash Download Tools.
2. Скачиваем и запускаем программу ESPlorer:
3. Правим в текстовом редакторе типа notepad++, sublime, etc. и загружаем в модуль файл wifi32.lua:
1. Выбрать и загрузить файл.
2. Обновить список файлов.
3. Исполнить файл wifi32.lua
4. Увидеть полученный ip в сети.
5. Перегрузить ESP32.
4. Правим еще несколько файлов и загружаем все оставшееся.
Грузим все остальные файлы, делаем две проверки:
исполняем main.lua:
Идем дальше ===>.
Суть его - передача данных на любой агрегатор умного дома (OpenHab, Domoticz, etc), что принимает данные по протоколу mqtt.
Одна неделя на даче и в городе, чет неуютно:
Устройство состоит из:
1. Указанного выше счетчика Гейгера.
2. Очень странной платы ESP32.
3. I2C двустрочного дисплея. Подойдут абсолютно любые от наших восточных братьев.
4. (Для этой моей неудачной ESP32) любой подходящий стабилизатор напряжения. Если берем нормальную еспшку - стабилизатор не нужен, об этом чуть позже.
Провода, разъемы, платы для пайки, корпус - по вкусу.
Пару слов о выборе МК. Не слишком вдаваясь в детали, заказал десяток плат недорого и не заметил, что на плате не наблюдается приличного стабилизатора.
По прибытии плат успешно прошил их, загрузил скриптик, попытался завести в сетку и получил ошибку, которую никогда не встречал. Недолгое гугление показало целый ворох причин, среди которых не первой значилась недостаток питания. Трехвольтовый стабилизатор, напаянный прямо на еспшку, решил все проблемы. По сей причине, любви у меня к модулю не возникло и решил разогнать его по разным малополезным устройствам, типа этого.
Что касается желающих повторить, годится любой модуль ESP32 с нормальным стабилизатором. Можно делать устройство и на ESP-8266, но модуль дисплея и кое-что про wifi придется править.
Соединение:
Перечень ног:
26 - SDA Дисплея
27 - SCL Дисплея
18 - Счетчик Гейгера.
Питание:
На счетчик Гейгера подавать 5 вольт.
На дисплей подавать - зависит от вашего дисплея! В моем случае 3.3 вольта, но так не обязательно у вас.
Код устройства, в целом, элементарный, несколько слов об общей логике.
Устройство просто считает количество "щелчков", что прилетают с платы счетчика Гейгера в течение одной минуты, отнимает число 12 и отправляет на брокер.
12 = собственный фон 0,2 импульса в секунду (даташит) х 60 секунд.
Из этого получается указанный выше график.
Устройство, также, имеет кольцевой буфер, где усредняются значения со счетчика, эти данные выводятся на дисплей.
Полагаю, на дисплее лучше видеть усредненное значение, ибо как бы там ни было, мы на него постоянно не пялимся, а в агрегаторе удобнее иметь мгновенные значения в виде графика.
Ниже видна работа кольцевого фильтра. в 20 часов фильтр был выключен:
На брокер идет и полученное значение, и усредненное и еще много чего.
Также устройство может по команде от брокера переходить в режим программирования по сети, что позволяет реализовывать любые замыслы, что-то подправлять в коде, etc.
Код устройства написан на языке Lua, который позволяет неучам без специального образования и со средним соображением, к коим я отношусь, делать проекты самостоятельно.
Логика работы находится в файле main.lua, который ниже с комментариями.
JavaScript:
do
----------------------------------
-- Чтобы можно было запустить файл для настройки и проверки работы отдельно
-- от всей программы, создаем необходимые таблицы и константы.
-- В процессе работы программы в целом код ниже не выполняетя.
if not wth then wth = {} end
if not dat then
dat = {}
dat.pin = 18
dat.ringbuf = 10
end
----------------------------------
-- Счетчик импульсов с платы Гейгера
counter = 0
-- Создаем два кольцевых буфера для устреднения
ringCPM = dofile'_ciclecount.lua'(dat.ringbuf)
ringMKR = dofile'_ciclecount.lua'(dat.ringbuf)
-- Конфигурируем ногу счетчика на вход
gpio.config( { gpio=dat.pin, dir=gpio.IN}) --, pull=gpio.PULL_UP })
-- Функция счета импульсов от Гейгера
function pin1cb(level)
counter = counter + 1
--print(counter)
end
-- Завешиваем функцию счета на прерывание соответствющей ноги
gpio.trig(dat.pin, gpio.INTR_UP, pin1cb)
-- Создаем рабочий таймер, что будет читать показания счетчикараз в минуту
worktmr = tmr.create()
-- Определяем функцию чтения
worktmr:alarm(60000, 1, function(t)
-- Заносим в таблицу результаты счетчика и обнуляем его
wth.rad = counter - 12 -- 12 - Собственные CPM
counter = 0
-- Если собственных СРМ меньше 12, то все равно ноль
wth.rad = wth.rad > 0 and wth.rad or 0
-- Здесь помещаем СРМ в кольцевой буфер и извлекаем среднее,
-- одновременно форматируем в целое число
wth.radRing = string.format('%d',ringCPM(wth.rad))
-- Здесь считаем и форматируем микрозиверты.
-- Возможны ваши уточнения, как считаете нужным
wth.uS = string.format('%.2f', 0.00812 * wth.rad)
-- Здесь усредняем микрозиверты.
wth.uSRing = string.format('%.2f', ringMKR(0.00812 * wth.rad))
-- Гоним в консоль результаты
print("\nRadioactivity:\n"..wth.rad.." and Ring ".. wth.radRing .." cpm\n"..wth.uS.." and Ring ".. wth.uSRing.." uSv/h\n")
-- Отправляем данные на дисплей, причем СРМ - усредненные.
-- Для проверки и настройки в части счетчика все что касается hd44780 следует закомментировать, иначе ошибка.
hd44780.setCursor(0,1)
hd44780.printString(' ')
hd44780.setCursor(0,1)
hd44780.printString(wth.radRing..'cpm '..wth.uSRing..'uSv/h')
-- Отправляем данные на брокер
if dat then dofile('mqttpub.lua') end
end)
-- Первая строка дисплея
hd44780.setCursor(0,0)
hd44780.printString(' ')
hd44780.setCursor(0,0)
hd44780.printString(' Radiation:')
end
Начнем загружать код в устройство.
1. Прошиваем esp32 при помощи Flash Download Tools.
3. Правим в текстовом редакторе типа notepad++, sublime, etc. и загружаем в модуль файл wifi32.lua:
1. Выбрать и загрузить файл.
2. Обновить список файлов.
3. Исполнить файл wifi32.lua
4. Увидеть полученный ip в сети.
5. Перегрузить ESP32.
4. Правим еще несколько файлов и загружаем все оставшееся.
Грузим все остальные файлы, делаем две проверки:
исполняем main.lua:
Идем дальше ===>.
Вложения
-
632.1 KB Просмотры: 14
Изменено: