Сообщество - Arduino & Pi
Добавить пост

Arduino & Pi

1 378 постов 20 571 подписчик

Популярные теги в сообществе:

Пъезоизлучатель и Arduino

Пьезоизлучатель это по сути обычная пищалка. Его можно использовать для генерации различных звуков на разных частотах, а также в качестве звуковой напоминалки, сигнализации и прочего. Звук этот элемент издает благодаря механическим колебаниям под действием электрического поля, причем звуковые волны эти только на тех частотах, которые будут услышаны человеком (никакого ультразвука и прочего)

Данный модуль стоит очень дешево, имеет два вывода для подключение. Черный контакт подключают к заземлению ( то есть контакт gnd на плате) А другой подключают к цифровому пину на панели digital вот с волнистой черточкой рядом. Это означает, что данный контакт поддерживает функцию ШИМ ( то есть широтно-импульсной модуляции)

Пъезоизлучатель и Arduino Arduino, Уроки по ардуино, Микроконтроллеры, Радиоэлектроника, Пьезоэлемент, Видео, Длиннопост

Сегодня я вам покажу два кода, для работы с этим модулем. Первый – это обычное издавание звука на частоте 980 герц, в качестве сигнализации или напоминалки. А второй код позволит нам менять частоту и тем самым можно экспериментировать со звуками и даже написать собственную музыку.


Итак давайте рассмотрим первый скетч.

Пъезоизлучатель и Arduino Arduino, Уроки по ардуино, Микроконтроллеры, Радиоэлектроника, Пьезоэлемент, Видео, Длиннопост

Сначала мы задаем номер пина, к которому подключаем этот модуль. Например, номер 3. Далее в функции void setup мы прописываем сигнал с излучателя как выход. Это нужно в первую очередь для подачи питания на модуль. Далее следует вторая функция void loop Там с помощью команды analogwrite мы можем присвоить значение нашей пищалки, изменяя тем самым ее громкость звучания. Ввести число можно от 0 до 255. 0 соответствует выключенному состоянию пьезоизлучателя.


Изменять время вы можете с помощью функии delay , указывая в скобках значение в миллисекундах.


Теперь загрузим скетч в нашу плату и послушаем, что будет. Все работает и ровно через каждую секунду у нас повторяется один и тот же звуковой сигнал. Кстати функция analogwrite имеет по умолчанию частоту в 980 герц, которую нельзя изменить.


А вот уже менять частоту и генерировать самую настоящую музыку вы можете с помощью команды tone. С помощью нее можно настроить нашу пищалку на определенную частоту.


Все это будет во втором нашем скетче. Давайте рассмотрим его внимательнее.

Пъезоизлучатель и Arduino Arduino, Уроки по ардуино, Микроконтроллеры, Радиоэлектроника, Пьезоэлемент, Видео, Длиннопост

Начало такой же как и в первом коде, то есть подключаем наш модуль к контакту номер 3, подаем на него питание и связываем с платой. А вот функция Void Loop получит уже некоторые изменения. В частности, analogwrite полностью заменяется функцией тон. Она принимает значения от 31 до максимальной для человеческого слуха. команда noTone() нужна чтобы выключить звук. Функция delay также разграничивает их по времени. Я установил, как 0,1 секунду


Ссылка на программный коды и все необходимое для повторения видеоурока:

https://yadi.sk/d/fr9Ebg_O3LkPvU


Спасибо за внимание!

Показать полностью 3

8 БИТ #12 Arduino как UART-USB

Проигрыватель на базе Raspberry Pi 3 модель B (часть 5)

Вот ещё пара небольших доработок.


Это продолжение, начало здесь: часть 1, часть 2, часть 3, часть 4.


Сегодня прототип имеет следующий вид:
Проигрыватель на базе Raspberry Pi 3 модель B (часть 5) Raspberry pi, Kodi, Osmc, Длиннопост

1) Окончательный вариант разъёмов для вывода аналогового звука/изображения.

Разъём Jack, диаметр 3,5 мм, 4 контакта c клеммой колодкой:

Проигрыватель на базе Raspberry Pi 3 модель B (часть 5) Raspberry pi, Kodi, Osmc, Длиннопост

розетки RCA:

Проигрыватель на базе Raspberry Pi 3 модель B (часть 5) Raspberry pi, Kodi, Osmc, Длиннопост

Рамку для вставки Keystone я убрал и закрепил через втулки М3.

Проигрыватель на базе Raspberry Pi 3 модель B (часть 5) Raspberry pi, Kodi, Osmc, Длиннопост

Для соединения использовал кабель многожильный МКЭШ 3*0.75. к сожалению 3*0.5 найти не смог...


2) Ещё я добавил Wi-Fi USB-адаптер TL-WN822N v.3

Он определяется так:

0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter

Он крепится к корпусу DVD привода на самоклеящиеся магниты.

Проигрыватель на базе Raspberry Pi 3 модель B (часть 5) Raspberry pi, Kodi, Osmc, Длиннопост

Подробная техническая информация доступна здесь.

Показать полностью 5

Домашние вкусняшки на Raspberry PI. Веб-морда робота /окончание/

Продолжение. Начало здесь. Для тех кто не читал первую часть - в ней речь шла о том, как на основе raspberry pi создать блок управления, скажем, роботом, задействуя в качестве выходных сигналов 4 дискретных выхода GPIO и с управляющим алгоритмом на языке SFC.


6. Теперь, собственно, сам веб-интерфейс.

Для начала разработки скачайте архив Inkscape и распакуйте его в любой удобной папке. Это портабельный, не требующий инсталляции редактор SVG-графики. Запускать надо файл inkscape.exe, для удобства можно сделать ярлык на рабочем столе.

Скачайте также библиотеку виджетов, при помощи которых будем оживлять нашу мнемосхему. Распакуйте в любом удобном месте.

Создайте целевую папку (назовём её web), в которой будет лежать вся веб-начинка, содержимое этой папки и будет заливаться в ПЛК в виде zip- архива. И скопируйте туда содержимое папки web из архива виджетов.


7. Запускаем inkscape:

Домашние вкусняшки на Raspberry PI. Веб-морда робота /окончание/ Raspberry pi, Программирование, Веб-разработка, Длиннопост
Теперь открываем (Файл->Открыть) файл mns.svg папки web:
Домашние вкусняшки на Raspberry PI. Веб-морда робота /окончание/ Raspberry pi, Программирование, Веб-разработка, Длиннопост

Кнопками + и - выставляем масштаб. На экране появилось что-то несуразное. Но это только заготовка с тремя виджетами - кнопка(button), лампочка(led) и рамка(border). Каждый из этих виджетов находится внутри своей группы, или слоя. Их три:

- слой ввода (inp) - кнопки и поля ввода;

- слой динамических элементов (dyn) - лампочки, индикаторы;

- слой статики (stat) - рамки, шкалы плюс всё что нарисуете сами в качестве заднего плана;


Чтобы эти слои сразу обозначить, начальная страница-заготовка и содержит три этих элемента/виджета, вместо которых нужно будет разместить что-то своё. Чтобы войти в нужный слой, выбираем левой кнопкой элемент, затем по правой кнопке выбираем в выпадающем меню "Войти в группу #inp, #dyn или #stat".

В правой части экрана inkscape фрейм xml-редактора. Если у вас он не появился, жмите shift+ctrl+x или поищите соотв.кнопку на правом поле экрана. Редактор показывает содержимое SVG-файла, который в xml формате. И не только показывает, но и позволяет менять свойства виджетов, так что без него никуда.

8. Итак, заходим в слой inp и размещаем кнопки управления. Кнопки берём из папки виджетов, для этого не выходя из inkscape открываем файл buttons.mns.svg (он откроется в новом окне):

Домашние вкусняшки на Raspberry PI. Веб-морда робота /окончание/ Raspberry pi, Программирование, Веб-разработка, Длиннопост

Берём так - в окне buttons.mns.svg заходим в слой inp, выделяем кнопку и копируем её в буфер (ctrl+c), в окне mns.svg заходим в слой inp и пастим (ctrl+v).

После копирования кнопки можно расставить и выровнять:

Домашние вкусняшки на Raspberry PI. Веб-морда робота /окончание/ Raspberry pi, Программирование, Веб-разработка, Длиннопост
Для выравнивания пользуемся вот этим инструментом:
Домашние вкусняшки на Raspberry PI. Веб-морда робота /окончание/ Raspberry pi, Программирование, Веб-разработка, Длиннопост

Здесь кроме выравнивания кнопок я удалил ненужную старую кнопку и добавил четыре стрелки, которые будут светиться зелёным цветом при движении. Стрелки берутся из arrows.mns.svg аналогично кнопкам, только вставлять их нужно в слой #dyn. Для поворачивания стрелок есть соотв. команда в меню Объект, либо это можно делать изменяя свойство transform через xml-редактор:

Домашние вкусняшки на Raspberry PI. Веб-морда робота /окончание/ Raspberry pi, Программирование, Веб-разработка, Длиннопост

9. Теперь подпишем кнопки, делается это так:

Домашние вкусняшки на Raspberry PI. Веб-морда робота /окончание/ Raspberry pi, Программирование, Веб-разработка, Длиннопост

А самое главное - изменить у кнопок свойство click так, чтобы мы потом в javascript-е смогли идентифицировать кнопку при её нажатии:

Домашние вкусняшки на Raspberry PI. Веб-морда робота /окончание/ Raspberry pi, Программирование, Веб-разработка, Длиннопост

Соответственно, остальным кнопкам также нужно задать свойства onclick:

- кнопка ВЛЕВО: buttonclick('left')

- кнопка ВПРАВО: buttonclick('right')

- кнопка НАЗАД: buttonclick('revers')

- кнопка ВПЕРЁД: buttonclick('forward')

- кнопка СТОП: buttonclick('stop')

10. Теперь второстепенные дела - вместо прежней панели берём другую (взята из panels.mns.svg и немного растянута) и передвигаем лампочку на панель. Вот что получилось:

Домашние вкусняшки на Raspberry PI. Веб-морда робота /окончание/ Raspberry pi, Программирование, Веб-разработка, Длиннопост

Проверьте - динамические виджеты (стрелки и лампочки) должны находиться с слое (группе) dyn. Прописываем следующие идентификаторы (св-во id виджета) :

- лампочка - led1

- стрелка вправо - ar

- стрелка влево - al

- стрелка назад - ab

- стрелка вперёд - af


По этим id мы будем обращаться к ним из программы javascript.

11. Осталось бросить последний камень в огород визуализации - оживить полученную мнемосхему. Код javascript (js) должен отправлять команды от кнопок на ПЛК и забирать оттуда данные - булевские переменные do_left, do_right, do_up, do_down и по их состоянию зажигать соответствующие стрелки.

11.1 Откроем текстовым редактором файл index.js . Именно в нём сосредоточена логика визуализации. Этот файл дан для примера и его нужно подправить под наше ТЗ. Начнём с начала:


var PlcIP = "http://192.168.0.179:1200";


// массив структур для ajax-запроса чтения

var InBuf = [

{"name": "ana1", "rw":"r"},

{"name": "prg1.bool1", "rw":"r"},

{"name": "prg2.msg1", "rw":"r"}

];


// массив структур для ajax-запроса записи

var OutBuf = [

{"name": "ana2", "rw":"w"},

{"name": "prg2.msg2", "rw":"w"},

{"name": "prg1.bool1", "rw":"w"}

];


// переменные для чтения из ПЛК

var glob_ana, prg1_bool, prg2_msg;


Скорректируем это под нашу задачу, переименовав фиктивные переменные в реальные:


var PlcIP = "http://192.168.0.179:1200";


// массив структур для ajax-запроса чтения

var InBuf = [

{"name": "do_left", "rw":"r"},

{"name": "do_right", "rw":"r"},

{"name": "do_down", "rw":"r"},

{"name": "do_up", "rw":"r"}

];


// массив структур для ajax-запроса записи

var OutBuf = [

{"name": "main.cmd", "rw":"w"}

];


// переменные для чтения из ПЛК

var do_up, do_down, do_left, do_right;


Как видите, доступ к локальным переменным изаграфа тоже возможен, только нужно указать имя программы main. IP-адрес ПЛК нужно будет поставить реальный, не изменяя порт 1200.

11.2 Далее:


// считывает ответ ПЛК

// эту функцию следует указать как аргумент f_ok для PlcIO()

function on_plc_read(data) {

InBuf = data; // не удаляйте эту строку, это сохранит кэш низкоуровневых адресов тэгов и

// ускорит их поиск на стороне ПЛК

glob_ana = data[0]["value"];

prg1_bool = data[1]["value"];

prg2_msg = data[2]["value"];

}


Это функция-обработчик события успешного чтения данных. Вытаскивает из ответа нужные данные и кладёт их в соотв.переменные. Снова прописываем реальные имена:


function on_plc_read(data) {

InBuf = data; // не удаляйте эту строку, это сохранит кэш низкоуровневых адресов тэгов и

// ускорит их поиск на стороне ПЛК

do_left = data[0]["value"];

do_right = data[1]["value"];

do_down = data[2]["value"];

do_up = data[3]["value"];

}

11.3 Вот этот код необходимо пояснить:


// точка входа программы

$(function() {

Mns.setup({

onRdy: init,

onBtnClick: click, // обработчик ввода от кнопок

onInput: input // обработчик ввода от InputText

});

});


// запускается из mns.js при завершении загрузки mns.svg

function init() {

setInterval(function() {cycle();}, 1000);

}

// срабатывает по нажатию кнопки

function click(id) {

alert("You press button " + id);

}

// срабатывает по вводу в inputText

function input(id) {

alert("You input '" + Mns.inp[id].get() + "' into " + id);

}


// рабочий чикл программы, настраивается в init()

function cycle() {

// опросить ПЛК

PlcIO(PlcIP, InBuf, on_plc_read, f_error);

// записать в ПЛК

OutBuf[0]["value"] = 123;

OutBuf[1]["value"] = "ok";

OutBuf[2]["value"] = true;

PlcIO(PlcIP, OutBuf, on_plc_write, f_error);

}


Строка $(function() {}) это точка входа в данный скрипт и отсюда всё начинает крутиться: вызывается библиотечная функция Mns.setup(), та вызывает init(), init() создаёт нить, запускающую функцию cycle() с интервалом 1000мС.

Немного модифицируем этот код, начиная с init():


// запускается из mns.js при завершении загрузки mns.svg

function init() {

setInterval(function() {cycle();}, 100);

}


// срабатывает по нажатию кнопки

function click(id) {

var cmd;

switch(id) {

case 'stop':

cmd = 0;

break;

case 'left':

cmd = 3;

break;

case 'right':

cmd = 4;

break;

case 'forward':

cmd = 2;

break;

case 'revers':

cmd = 1;

break;

default:

return;

}


OutBuf[0]["value"] = cmd;

PlcIO(PlcIP, OutBuf, on_plc_write, f_error);

}


// срабатывает по вводу в inputText

function input(id) {

alert("You input '" + Mns.inp[id].get() + "' into " + id);

}


// рабочий чикл программы, настраивается в init()

function cycle() {

// опросить ПЛК

PlcIO(PlcIP, InBuf, on_plc_read, f_error);

}


Во-первых, увеличили частоту вызова cycle(), которая производит опрос ПЛК. Во-вторых, сделали обработку нажатия кнопок. Помните свойство onclick в виджете button, мы прописали там аргументы "left","right" и т.д? Теперь эти строковые значения прилетают сюда, мы преобразовываем их в код команды и посылаем в ПЛК. Ну и в-третьих, убрали из cycle() запись данных, т.к. запись в ПЛК будет теперь производиться по факту нажатия кнопок в функции click().

11.4 Ну и осталась только функция update_screen(), которая вызывается при успешном чтении:

Чтобы в целях отладки отвязаться от ПЛК, давайте приведём функции cycle() и update_screen() к такому виду:


// рабочий чикл программы, настраивается в init()

function cycle() {

// опросить ПЛК

PlcIO(PlcIP, InBuf, on_plc_read, f_error);


/* отладка ...*/

update_screen();

do_up = (OutBuf[0]["value"]==2)? true:false;

do_down = (OutBuf[0]["value"]==1)? true:false;

do_left = (OutBuf[0]["value"]==3)? true:false;

do_right = (OutBuf[0]["value"]==4)? true:false;

/* ... отладка */

}


function update_screen() {

Mns.dyn["led1"].set({f: do_left|do_right|do_up|do_down ? "green" : "black"} );

Mns.dyn["ar"].set({f: do_right? "green" : "gray"} );

Mns.dyn["al"].set({f: do_left? "green" : "gray"} );

Mns.dyn["ab"].set({f: do_down? "green" : "gray"} );

Mns.dyn["af"].set({f: do_up? "green" : "gray"} );

}


Строки между  /* отладка */ временные, для отладки, затем их нужно будет поудалять. Отладочный код устанавливает значения переменных do_* в соответствии с нажатой кнопкой, чтобы увидеть это на мнемосхеме без подключения ПЛК.


Теперь щёлкните по файлу index.html и убедитесь в работоспособности интерфейса:

Домашние вкусняшки на Raspberry PI. Веб-морда робота /окончание/ Raspberry pi, Программирование, Веб-разработка, Длиннопост

Если этого не произошло, то скорее всего по причине несовместимости браузера. Это точно не будет работать под ms explorer-ом. Я пользуюсь мозиллой, но тестировал также Opera и Chrome, всё работало. Если у вас и под ними не работает, то причиной может быть только устаревшая версия браузера. Если же и с новой версией что-то пошло не так, можно попытаться локализовать ошибку в отладчике браузера.


Теперь по содержимому update_screen().

Разработчик библиотеки все обращения к виджетам привёл к одному виду:

Mns.<слой>[].set({<свойство>: <значение>});

Свойства такие:

t - текст

v - числовое значение

f - цвет заливки


Если вам не понятны конструкции вида

do_left|do_right|do_up|do_down ? "green" : "black", то вместо таковых в своей работе можете использовать аналоги:

if(do_left==true || do_right==true || do_up==true || do_down==true ) {

Mns.dyn["led1"].set({f:"green"});

else

Mns.dyn["led1"].set({f:"black"});

}


Как видите, громоздко получается, поэтому лучше всё-таки продвинуть свой жабаскрипт.

12. Вот теперь веб-проект, можно сказать, готов. Уберите отладочные строки в index.js и загружайте проект изаграфа в контроллер, как это показано здесь. И не забудьте грузить в ПЛК не только tic-код, но и символы приложения, эта информация нужна html-шлюзу таргета для разрешения имён запрашиваемых тегов.

IP-адрес в index.js должен соответствовать вашему ПЛК. Кстати, таргет можно запустить и на ПК!

Если всё пошло по маслу, щёлкнув по index.html вы увидите полностью рабочий проект, пользуйтесь на здоровье!


13. Теперь осталось только запаковать папку web в zip-архив (в архиве должно быть содержимое каталога web, но не каталог web с содержимым!) и присоединить его в проекту nScada как ресурс. Делается это так:


- копируем web.zip в папку проекта nScada (например c:\IsaWin\Apl\nScada)

- открываем Создать->Ресурсы окна программ и вводим

BinaryFile 'web_zip'

BEGIN

AnyTarget

From 'web.zip'

To 'web.zip'

End

- создаём и загружаем проект в ПЛК


Ну вот и всё. Теперь набрав в браузере IP нашего ПЛК, получим то что видели в предыдущем шаге, но уже полностью размещённое в контроллере и доступное с любого другого подключенного устройства сети (включая wifi), будь то планшет или мобильник.

Если для наглядности подключать к задействованным каналам GPIO светодиоды, то желательно делать это через ограничивающие ток резисторы номиналом 200...300 ом.


P.S. Всё вышеописанное доступно в виде похожего готового проекта "nScada", входящего в состав архива библиотеки для ISaGRAF Workbench (архив здесь, описание здесь), т.е. скачав эту библиотеку можно вытащить оттуда данный проект. Веб-составляющие файлы находятся в архиве web.zip директории проекта.


P.S.2 Данный пример ни в коем случае не претендует на какую-либо практическую завершённость, просто здесь показан в действии иструмент, позволяющий разрабатывать вполне полезные вещи на базе вполне доступного железа и софта.


P.S.3 В следующем посте постараюсь изыскать и привести пример более близкий к тематике умного дома.

Показать полностью 10

Регулятор оборотов двигателя от стиральной машинки, на Arduino

Схема:

Регулятор оборотов двигателя от стиральной машинки, на Arduino Arduino, Радиолюбители, Регулятор оборотов, Двигатель, Александр Шенрок, Видео

Исходники проекта:

https://drive.google.com/open?id=0B6x0JsiBUva0NnBtRVZGZUV5a1...

За видео благодарим автора канала "Александр Шенрок"

https://www.youtube.com/channel/UCmVPYYyc1E0gaCoyXQdNmTA

Показать полностью 1

Когда у тебя есть датчик радиации и время

Как обещал в комменте к предыдущему посту, расскажу про наблюдения за радиационным фоном в течение года.

В общем сразу после начала работы датчика, стал наблюдать редкие всплески радиационного фона в 1,5 - 5 раз выше обычных 10мкЗв/ч. Сначала списал на какие-нибудь космические лучи или солнечную радиацию (в чем совсем не смыслю, потому допускаю возможность :) ), но через пару-тройку месяцев заметил некоторые закономерности. Субъективно всплески были в основном в четверг и в районе 14 часов дня. Ну что ж, база данных со значениями за год есть, надо как-то выяснять в чем дело.

Для анализа выбрал значения показаний датчика от 17  мкЗв/ч (в 1,7 раза выше фона) и выше за год, получилось 100 значений. Выгрузил значения в Excel и сделал графики:

График суммарных значений всплесков по времени суток

Когда у тебя есть датчик радиации и время Raspberry pi, Arduino, Радиация, Длиннопост

Казалось бы, вроде, похоже на влияние Солнца - четко дневное время. Однако, не тут-то было.

График суммарных значений по дням недели

Когда у тебя есть датчик радиации и время Raspberry pi, Arduino, Радиация, Длиннопост

Вряд ли Солнце позволяло себе отдыхать по воскресеньям и особо усердствовало по четвергам. Т.е. получается, что в дело вступает человеческий фактор. Ну, а тут уж можно дать волю фантазии:

- радиоактивный пенсионер-сосед выходит в течение дня покурить на соседний балкон;

- передвижная рентген-установка катается по улице;

- э/м наводки на схему датчика;

- скачки напряжения в сети;

Но и тут не все гладко: с февраля всплесков больше не было :). Сомневаюсь, что кончились наводки или скачки напряжения.

И бонус: пузырьковая диаграмма. Размер круга - сила всплеска, по горизонтали время, по вертикали день недели.

Когда у тебя есть датчик радиации и время Raspberry pi, Arduino, Радиация, Длиннопост

Кто разгадает причину всплесков - тому плюсик!


ПС: Попытался выложить статью на geektimes, оказалось она не достаточно интересна.() Как-нибудь через годик-другой еще раз попробую.

Показать полностью 3

Мониторим радиацию

Все, наверное, помнят Фукусиму 2011-го. Как пишут о ней в Вики, "крупная радиационная авария максимального 7-го уровня по Международной шкале ядерных событий". Многие, возможно, помнят гифки с картами распространения радиоактивного облака типа таких

Мониторим радиацию Arduino, Радиация, Raspberry pi, Длиннопост, Гифка

Ну и я, собственно, об этом как-то не забыл и в итоге год-два назад купил Raspberry Pi 3, Arduino-к, всяких еще железок, почитал про программирование, создание сайтов и ОС Linux и замутил свою метеостанцию-тире-систему-оповещения с маджонгом и гейшами. О чем и речь. :)

Мониторим радиацию Arduino, Радиация, Raspberry pi, Длиннопост, Гифка

Кота нет, поэтому сервер (в старой стойке)

Часть первая, теоретическая

Позволю себе процитировать Вики еще раз.

Радиоактивное заражение происходит при:
- выпадении радиоактивных веществ из облака ядерного взрыва и наведённой радиации, обусловленной образованием радиоактивных изотопов в окружающей среде под воздействием мгновенного нейтронного и гамма-излучений ядерного взрыва; поражает людей и животных главным образом в результате внешнего гамма- и (в меньшей степени) бета-облучения, а также в результате внутреннего облучения (в основном альфа-активными нуклидами) при попадании радиоизотопов в организм с воздухом, водой и пищей.
- техногенных авариях (утечках из ядерных реакторов, утечках при перевозке и хранении радиоактивных отходов, случайных утерях промышленных и медицинских радиоисточников и т. д.) в результате рассеяния радиоактивных веществ; характер заражения местности зависит от типа аварии.

В итоге имеем реальную возможность получения дозы, даже не находясь в непосредственной близости от места аварии. Шансов - копейки, конечно, (сам их оцениваю как крайне маловероятные) но сами понимаете, практика показывает, что все же они существуют (ссылка на статью на ria.ru). Потому будем считать, что сподвиг меня на создание сего хозяйства спортивный интерес и немножко - желание быть в курсе. В первых рядах, так сказать.

А всем скептикам и уверенным в собственной безопасности - просьба выслать мне контакт того, с кем они договорились, что с ними уж точно такого не произойдет.:)

Часть вторая, железная

Для реализации нам понадобится 2 устройства: 1. датчик, установленный в месте, подверженном стихиям (т.н. "балкон"); 2. сервер в более миролюбивой обстановке -  дома, на шкафу, куда пока не могут добраться дети и не хочет добираться жена. Датчик должен быть установлен в месте, омываемом дождями и обдуваемом ветрами - чтобы собирать на себя все, что находится в атмосфере.

Датчик

Состоит из

- счетчика Гейгера на трубке M4011, как пишут о нем в сети:

Both beta and gamma radiation detetion.
Working Voltage: 380-450V
Working Current: 0,015-0,02 mA
Sensivity to Gamma Radiation: 0.1 MeV
Working Temperature Range: -50 +60 С
Length: 88mm
Diameter: 10mm

- Датчика температуры и влажности DHT-21

- Беспроводного модуля nRF24l01

- Китайской Arduino UNO

- Канализационной трубы

Мониторим радиацию Arduino, Радиация, Raspberry pi, Длиннопост, Гифка
Мониторим радиацию Arduino, Радиация, Raspberry pi, Длиннопост, Гифка

Фото вместо тысячи слов

Конструкцию нельзя назвать полностью герметичной. Место выхода кабеля залито герметиком, но, думаю воздух проходит. Проблем не было. Полностью герметичная труба, возможно в какой-нибудь жаркий (ха) летний день вытолкнула бы заглушку.

Сервер

Состав сервера

- Raspberry Pi 3 с ОС Raspbian

- Беспроводной модуль nRF24l01

- Датчик давления BMP 280

Фотка сервера уже была.

Логическая схема такая

Мониторим радиацию Arduino, Радиация, Raspberry pi, Длиннопост, Гифка

Часть третья, софтовая

Софт:

- Скрипт, принимающий данные с беспроводного модуля

- Скрипты, формирующие картинки для сайта

- Сайт с историческими данными и текущими показаниями датчиков

- OpenHAB

- notifyMyAndroid (платная, на Андроид смартфоне)

Листингов программ здесь не будет. То, что все это у меня работает - это счастливая случайность, а не результат вдумчивого написания кода профессионалом.)) (Ну если кому-то нужен говнокод, лично вышлю).

Расскажу общую логику работы.

Счетчик Гейгера выдает импульсы при пробое в трубке. Чем больше высокоэнергетических частиц попадает в трубку, тем больше пробоев в трубке. Импульсы поступают в Adruino UNO. Adruino UNO считает импульсы в течении 5 минут. По прошествии 5 минут отсылает количество импульсов вместе с текущей температурой и влажностью через беспроводной модуль nRF24l01 (кстати, знаете почему я так уверенно каждый раз пишу этот набор букв и цифр? потому что я ЗАТРАХАЛСЯ с модулем, простите). Скрипт на сервере принимает количество импульсов трубки, температуру, влажность и пишет в MySQL.

Далее OpenHAB путем периодического запуска скрипта чтения из БД, мониторит базу данных и если последнее значение радиации больше 0,5 мкЗв/ч, то через сервер notifyMyAndroid отправляется сообщение на смартфон. Смартфон пищит, я боюсь. Это то, что касается системы предупреждения о БП.

И все-таки пару скриптов OpenHAB'a - с чем пришлось помучаться, т.к. вообще не понимал как это работает.

Итем:

Number weather_rad "Радиация: [%.2f мкЗв/ч]" <temperature> (weather, radiation) {exec="<[php@@/path/to/php/script/script.php:10000:JSONPATH($.rad)]"}

Правило:

rule "Radiation alarm"
when
Item weather_rad received update
then
if (weather_rad.state > 0.5)
{
notifyMyAndroid("xxxxxxxxxxxxxxxxxxx", "Квартира", "Повышенный уровень радиации")
}
end

Что касается вывода информации для просмотра всеми.

Специальный php-скрипт генерит картинки для сайта:

Мониторим радиацию Arduino, Радиация, Raspberry pi, Длиннопост, Гифка

И для (когда-то) автоматической публикации в Instagram (старая картинка):

Мониторим радиацию Arduino, Радиация, Raspberry pi, Длиннопост, Гифка

На сайте также есть возможность посмотреть исторические данные - уровень радиации, влажность, температуру, давление. Реализовано на Highstock.

Мониторим радиацию Arduino, Радиация, Raspberry pi, Длиннопост, Гифка

Данные о радиации кстати, занятные. Если интересно - могу замутить небольшой пост о том, как я проводил анализ.

Всем спасибо, мирного неба, стабильного коннекта и мягких котиков.

Показать полностью 7

Как выбрать паяльник (для пайки)

Как выбрать паяльник (для пайки)
Отличная работа, все прочитано!