GSM сигнализация на Arduino и SIM800L и датчиком движения
Делаем охранную систему своими руками. Оповещать о тревоге "хозяина", а так же принимать команды устройство будет по СМС, так как это надежно и просто. Еще важно, чтобы устройство не зависело от постоянного наличия напряжения в сети, для питания.
Чтобы устройство могло пару дней работать автономно, в нем предусмотрен аккумулятор и модуль заряда. GSM модуль - штука капризная к питанию, ему подавай напряжение в диапазоне от 3.6 до 4.2, что означает, что от ардуиновского выхода 3.3 вольта он работать не будет. Зато использование аккумулятора и модуля заряда избавляет от необходимости использовать дополнительный модуль стабилизации напряжения для GSM модуля, так как напряжения будет какраз от 4.2 и при разряде снижается до 3.7.
Управление очень простое: отправляем СМС с текстом "1" на номер симки, что установлена в устройстве, в ответ устройство отправляет "хозяину" СМС с подтверждением "Postanovka na ohranu", при первом обнаружении движения (датчиком движения), устройство отправит СМС с текстом "Wnimanie, dvijeniye na objekte!", и при повторном обнаружении движения, устройство включает сирену и отправляет "хозяину" текст "Sirena vluchena!". Чтобы снять с охраны достаточно отправить команду "0", в ответ устройство пришлет подтверждение о том, что снято с охраны.
Это устройство является одной из частей моей системы "умный дом", но работает совершенно не зависимо от системы, по этому может использоваться самостоятельно. Остальные WIFI-блоки системы "умный дом" я опишу чуть позже.
Устройство может рассылать СМС нескольким абонентам, в том числе охранному агентству, команды управления и тексты ответов легко редактируются в приведенном ниже скетче, который Вы можете скачать по ссылке: https://yadi.sk/d/15_arnirzxzds
А вот и видео по этой статье!
Arduino & Pi1.1K постов 18.5K подписчиков
Правила сообществаВ нашем сообществе запрещается:
• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)
• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском
• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)
• Рассуждать на темы политики
сразу куча слов:
1. Засветили номер телефона на видео, в итоге его замазывать в тексте программы не было смысла)
2. Поправте, если ошибаюсь в нюансах. Получается идет цикл проверки получения данных с порта по датчику движения и цикл проверки смс. И можно завести хоть 100 телефонных номеров с разным назначением. Вплоть до того что будет список номеров для оповещения, номер с которого будут приходить управляющие команды, а остальные будут отсекаться как спам. Комманды "0" и "1" мы можем произвольно заменить на что угодно (в рамках латиницы и цифр).
3. Интересен вариант обратной связи с датчиком, чтобы при постановке на охрану - датчик "знал" что у него низкий заряд или нормальный, соответственно "отвечал". То есть должен быть простой список датчиков. Если нет ответа при постановке - идет уведомление, что есть проблема "не рабочий датчик". То есть нужно что то добавлять в схему между основной ардуинкой и датчиком или каким то образом вешать еще циклы проверки состояния заряда у датчика, а также тестовые проверки датчика (например на сопротивление). Серьезную проверку на работоспособность не сделаешь, так как без механики уже не обойдешься и это уже перебор).
4. Сколько вычитывал по подобным модулям - не совсем понятно где хранятся смс и сколько их может быть в принятых (например пришло одновременно много смс)
Если ваше устройство работает от 1000мА аккума всего пару дней, то вы в корне неверно используете режимы энергосбережения, то есть вы их вообще не используете. Из даташитов я прочитал, что датчик ест 1.6mА, SIM800 в режиме сна, в котором он всё ещё может получать смс, ест 1.2mА. Atmega328 в режиме Power-Down при частоте 1MHz ест 0.1uA, я не знаю какие там ещё микросхемы используются питании, ну пусть в сумме всё устройство ест 3-4mА. Это до двух недель автономной работы от одного заряда.
Ваша ардуина всегда должна быть в режиме глубокого сна, и включаться только для обработки прерываний пина датчика и UART порта.
Серьёзно? Чувак, вылези из моей головы! Я только вчера думал, а не замутить ли сигнализацию на даче с ардуино, датчиком движения, и так, чтобы она смску присылала? И тут ты, шайтан.
окей дву сделали, из чего будешь делать вв?
Автор, жду поста про умный дом! Специально подписался! Не подведи!
А что расположено выше звучалки? Кстати, если поискать, то можно найти схемы для дип трейса данных элементов?
ребята подскажите пожалуйста как залить это все в ардуино? вот сам скетч я знаю как залить а вот эти файлы как залить что нахотся в GSM-GPRS-GPS-Shield-GSMSHIELD_ .
Может ли 3 датчика движения работать на одном пине?
Можете подсказать команды для исходящих звонков?
(хочется, чтоб сигналка звонила)
А если вместо датчик движения HC-SR501 использовать датчик движения RCWL-0516 будет работать.
Здравствуйте.Sim800 мигает, НО сигнализация не работает.
SMS принимает ,но не отвечает и не становиться на охрану.
Здравствуйте.Sim800 мигает, НО сигнализация не работает.
SMS принимает ,но не отвечает и не становиться на охрану.
SIM800L умеет обрабатывать DTMF (опробовано, обкатано, лежит на столе).
По-моему, проще и дешевле звонить и тыкать кнопки, чем слать СМС.
А системы умного дома с ардуино связаны? Вероятно через вайфай заведены?
Транслитерацию повторите, чтобы не было ошибок
Ну да, все хорошо у этой идеи, и я почти вчиталась в статью. но потом на колени запрыгнул кот, и до меня дошло, что для моей квартиры смысла в датчике движения нет х)
Тема модуля питания/заряда аккумулятора не раскрыта!
Какова стоимость компонентов и их название? Где на схеме цепь заряда?
"Sirena vluchena"!
гениальная идея, которая подрывает любого граммар-наци к немедленному действию и активному покаранию виновников в самой извращенной форме!
"GSM модуль - штука капризная к питанию, ему подавай напряжение в диапазоне от 3.6 до 4.2, что означает, что от ардуиновского выхода 3.3 вольта он работать не будет."
А почему не прицепить к ардуино цап, и подавать через него требуемое напряжение?
Косячный Arduino CNC Shield v4. Полное восстановление работоспособности
Купил я себе Arduino CNC Shield v4. Как оказалась данный шилд косячный, и про эту проблему известно давно, а китайские производитель так и продают их с данным браком. Но я решил не выбрасывать данную плату, а реанимировать.
Первое что нужно сделать, это настроить прошивку, так как при разводке платы перепутаны местами контакты step и dir.
Второе что не работает это деление шага. Чтобы сделать максимальное деление шага можно припаять 3 перемычки. Внимание джамперы ставить в данном случае нельзя, ЗАМКНЕТ!
Если вам нужно выставлять деление шага можно перерезать дорожки и припаять 5 перемычек. Подробнее про данный способ читайте на сайте.
Что меня удивляет это факт того, что CNC Shield v4 стоит дороже чем его не бракованный брат Arduino CNC Shield v3. Почему так?
Если что то не понятно смотрите тут.
Надеюсь моя информация будет полезной.
Спасибо! Всем добра!
Часы с сенсорным экраном своими руками
Несмотря на то, что сегодня никого не удивить интересной самоделкой, электроника развивается очень быстро, и с каждым годом для любителей собрать что-то своими руками все больше возможностей. Сегодня не составит труда купить сенсорный экран и сделать на нем часы с плеером, которые будут воспроизводить музыку с карты памяти.
Корпус часов напечатан на 3D принтере и покрашен в белый цвет.
Часы так же выводят температуру и влажность в помещение, за эту функцию отвечает установленный датчик SHT31. Все компоненты подключаться вот по такой схеме.
Мозгом часов является Arduino NANO, одна из самых недорогих и распространённых плат.
Что же часы умеют?
- Отображают дату и время, но это умеют все часы =)
- Выводят температуру и влажность.
- Возможность воспроизведения музыки с карты памяти.
- Распределение музыки по плейлистам.
- Случайное воспроизведение композиций или воспроизведение из выбранного плейлиста.
- Регулировка громкости и стандартные настройки часов.
Уроки по дисплею Nextion:
Часы – матрица своими руками
Недавно задумался о покупке часов, хотелось что-то простое и минималистичное. Ничего для себя интересного найти не смог, решил, что буду делать их сам. Пересмотрел множество материала на эту тему, но ничего.
Моим спасением было когда я нашел для себя привлекательный вариант.
Автор подробно рассказал, как и что устроено. Его часы меня привлекли, в них не было ничего лишнего. Решил я повторить, в его же статье нашел перечень компонентов, код для Arduino и полную схему, по которой всё и паял.
Если вы хотите себе простые часы с возможностью выбирать цвет циферблата, рекомендую и вам ознакомиться с данной статьей: Часы – матрица на Arduino и адресных светодиодах WS2812B.
Надеюсь моя информация будет полезной.
Спасибо! Всем добра!
Игра - Мини тетрис на макетке Arduino
Борьба с bluetooth модулями HC-05 и HC-06 + Arduino
Много букв, постарался чуток с юмором. Записки начинающего ардуинщика.Понадобилось мне для одной самоделки с arduino прикрутить bluetooth. Погуглив, выбор пал на модули bluetooth HC-06. Купил, успешно прикрутил, но захотелось мне сменить имя и пароль. В общем то в гугле валом инфы по этому поводу. Да не тут то было. На youtube и в блогах у людей все прекрасно, меняют имена и пароли, смотрят версию, меняют скорость, а на деле не работает!Не воспринимает AT команды ни HC-05 и HC-06 через ардуину. Сначала я купил HC-06, потом купил HC-05, перепробовал многое, описанное в статьях. В итоге понял что мои китайские ардуинки не работают правильно, а именно RX и TX не передается. Это можно понять замкнув их на ардуине и попробовать в мониторе порта отослать что угодно, при замкнутых RX и TX отосланное вернется. А вот у меня не вернулось. (Должен быть залит пустой скетч в ардуинку)В статьях и на форумах народ мучился вопросом почему через аруинку нельзя сменить пароль и название bluetooth модуля. Да и вообще AT команды не работают. Одни ставили крест на CH340G мол он плохой и надо что то другое итд.
Многие выходили из положения покупая отдельно модуль USB- UART на другой микросхе которую они хвалили, и у них все получалось, другие писали мост с сериал порта на цифровые выходы, пробовал, но не работало. Может получилось бы и у меня с модулем, но я купил не тот модуль!) А это и к лучшему, потому что я раскопал почему не работает RX и TX в китайских Arduino. В моем древнем компе есть физический COM порт, и я решил шить через него, и купил переходник с преобразователем уровней MAX3232, а не UART!
Ну с arduino я недавно, и про UART я знал мало, да и сейчас еще не знаю всего) Я еще тот динозавр который помнит AT команды диалаповских модемов.Я не понимал, почему в терминале (отдельная программа) на мои AT - команды возвращается кириллица, в виде букв - "я" "яя " итд "яя дас ист фантастиш" подумал я, мне модуль стал отвечать! Я очень обрадовался что он жив! Да, но почему на "немецком" и в кириллице он отвечает?)) .. или [00] [01] итд. В общем ответы были, да не те, да потому что это не UART! это я понял позже. Ехать еще раз на другой конец города за правильным модулем USB- UART я не хотел. Начал гуглить глубже, почему не работает RX и TX в ардуине? и нашел! Один разработчик в своей самоделке докопался почему нет ответа через ардуинку, оказалось китайцы мать их, запаяли резисторы большего номинала, по 1кОм. Если заменить их на 220 Ом, все начинает прекрасно работать! Фото прилагаются. Это Arduino Uno (китайская копия)Необходимо заменить резисторы R8 и R9 на 220 Ом.
А это мои запаянные резисторы на 220 Ом, правда не смд но у меня Uno в пластиковой коробке, и деформация с замыканием исключены.
Вот где эти резисторы на Arduino Nano многие на форумах как раз мучаются с этой версией ардуинки. В итоге я прошил HC-05 и HC-06, правда AT команды для них немного различаются, но это все легко гуглится.
Надеюсь что эта информация поможет кому-то сэкономить время и нервы.
GSM модуль управления ворот
Добрый день. Хотел поделиться опытом создания модуля управления воротами через мобильную сеть. Нам понадобиться:
Для начала перемычки RX/TX на GSM модуле ставим в положение D7/D8.
Переключатель питания переключаем на питание от внешнего источника, т.к. GSM модуль очень требователен к качеству питания. Для нормальной работу нужен источник питания не менее 2А.
Можно разъемы питания запараллелить (как это сделал я) и подключать питание лишь к одному разъему.
Питание для реле берем с ардуины. Сигнал управления с аналогового выхода А2.
Собираем бутерброд из ардуины и GSM модуля.
Должно получиться примерно так:
В прошивке все достаточно подробно прокомментировано. Для отладки можно раскомментировать строчки Serial.println и мониторить через терминал.
Ссылка на прошивку. Текст необходимо скопировать и вставить в Arduino IDE.
Подключаем к компьютеру через USB и заливаем прошивку.
Данный модуль управления работает как часики уже более 4 лет.
Подключение PIR(датчика движения) к RaspberryPi.
В одном из своих постов я описывал как сделать умное зеркало. В комментариях поступило предложение подключить датчик движения. Опишу процесс подключения датчика,может быть кому-то будет полезна эта информация
Контакты на датчике:
В моем случае слева направо расположены контакты земли, управления и 5В. В датчиках разных производителей эти контакты могут быть расположены в другом месте или порядке.
Подключение датчика к GPIO:GND-2 пин GPIOOUT-11 пин GPIO+5V-6 пин GPIO
Создание скрипта на питоне:
Теперь мы делаем скрипт python.Создаем файл в каталоге MagicMirror с расширением .py(я назвал pir.py ). Открываем этот файл любым текстовым редактором и прописываем туда следующие строки :
import sysimport timeimport RPi.GPIO as io import subprocess
io.setmode(io.BOARD)SHUTOFF_DELAY = 600 # секундыPIR_PIN=11
def main(): io.setup(PIR_PIN, io.IN) turned_off = False last_motion_time = time.time() while True: if io.in put(PIR_PIN): last_motion_time = time.time() sys.stdout.flush() if turned_off: turned_off = False turn_on() else:if not turned_off and time.time() > (last_motion_time + SHUTOFF_DELAY): turned_off = True turn_off() if not turned_off and time.time() > (last_motion_time + 1): time.sleep(.1)def turn_on(): subprocess.call ("sh /home/pi/MagicMirror/monitor_on.sh", shell=True)
def turn_off(): subprocess.call ("sh /home/pi/MagicMirror/monitor_off.sh", shell=True)
if __name__ == '__main__': try: main() except KeyboardInterrupt: io.cleanup()
/.config/lxsession /, открываем LXDE-pi в текстовом редакторе и добавляем эту строку :@sudo / usr / bin / python /home/pi/MagicMirror/ pir.py Сохраняем изменения, выходим и перезагружаем raspberry pi. Мои посты:
GSM PPP протокол для ESP32 под Arduino IDE
Большинство GSM модулей могут работать с интернетом не только через AT команды, а и через PPP (Point-to-Point Protocol). Стандартные GSM модемы для компьютеров работают именно по PPP. Когда вы поключаете модем к компьютеру, то он стандартными AT командами переходит в режим PPP и потом вешается на сетевой протокол через PPPOS (PPP over serial) и таким образом может использоваться как нормальное подключение к интернету (как WiFi или Ethernet). Но библиотеки для работы с PPP довольно большие и перенести их так просто на любой контроллер типа Arduino, STM не получится. Поэтому на контроллерах обычно используют AT команды.
Для чего он мне понадобился:
Когда я захотел добавить возможность на ESP32 обновлять прошивку с сервера через GSM, то столкнулся с тем, что загрузить файлы больше десятков килобайт через AT команды просто не удается. Тогда я сделал закачку файла по кусочкам с проверкой целостности каждого пакета. Таким образом конечно можно закачивать прошивку, но очень медленно это происходит (на загрузку 700кБ у меня уходило от 40 минут до несколько часов) и очень часто происходи сбой работы AT команд, а если еще в этот момент будет кто-то звонить или придет SMS, то вобще все плохо.
Порывшись в интернете я нашел очень мало примеров реализаций PPP под контроллеры, вот ссылки:
для ESP32 под esp-idf:
Получается, что в ESP32 есть готовые библиотеки для работы с PPP, но все примеры под esp-idf. Конечно же я проверил эти примеры, но я привык в Arduino IDE работать. Поэтому я просто взял эти исходники и адаптировал под Arduino IDE. Я использовал версию arduino-esp32 1.02. Не все функции с esp-idf работали так как надо в arduino, но все получилось. Я специально убрал автоматическую обработку и отправку AT команд для входа в PPP и сделал ручной ввод, чтоб потом можно было добавить свой стэк AT команд или прикрутить библиотеку TinyGSM
Что еще можно сделать:
1) Для обновления прошивки нужно при скачивание файла (отрезав Header) записывать его в SPIFFS и по окончании скачивание делать обновление (в Arduino IDE есть такой пример)
2) Можно попробовать соединить WiFi точку доступа с PPPOS - получится что-то вроде WiFi GSM роутера.
Пишите ваши идеи
Ардуинщики . Сэкономьте своё время . Пусть приложение делает за Вас всю рутинную работу с кодом. ArduBlock | Technologies
Ardublock – это графический язык программирования для Ардуино, предназначенный для начинающих профи! Записал быстрый видео курс из 5 уроков для ознакомления с программой ArduBlock. Может кому то и пригодится этот материал!
Инструкции по работе с программой ArduBlock
1. Установка библиотек ArduBlock - Первая программа - Мигаем светодиодом на Arduino - Загрузка - Прошивка
2. Ardublock - Кнопка - Если то иначе - Монитор порта - Светодиод - Сигнал вход/выход/цифра/аналог
3. Ardublock - Подключение Реле - Потенциометр - Фоторезистор - Мотор - Лампа - Диодная лента
4. Ardublock - Ик приёмник - Инкодер - Ультрозвуковой дальномер - Термомитер - Сервомотор - Датчик линии
5. Ardublock - I2S - LCD Дисплей 16х2 20х4 - Джойстик - Драйвер моторов - L293D - L293N - L298N
GSM/GPRS/Wi-Fi+Blynk сигнализация на Arduino
Приветствую всех. В предыдущих частях я рассказал, как сделать GSM сигнализацию на ардуино. Затронул тему изготовления беспроводных датчиков для неё. Обещал сделать датчик, работающий по Wi-Fi. И в итоге так увлёкся, что переработал весь проект.
Итак, я решил, что мобильный GPRS это конечно хорошо, но будет ещё лучше, если сигнализация сможет подключаться к домашней Wi-Fi сети и общаться со смартфоном через интернет и мобильное приложение. Для этого мне понадобилась отдельная плата с Wi-Fi модулем. Я подключил к ардуине плату NodeMcu v3 с чипом esp8266. Управление сигнализацией реализовал со смартфона в приложении Blynk.
Для новой сигнализации спроектировал печатную плату, на которой могут разместиться:
- Arduino Nano V3.0
- NodeMcu v3 для выхода в интернет.
- SIM800L для мобильной связи.
- Радиомодуль NRF24L01 для приёма сигналов от беспроводных датчиков.
- Датчик температуры DS18B20.
- Микроволновый датчик движения RCWL-0516.
- MOSFET транзисторы AO3400A для включения платы NodeMcu и внешних маломощных устройств.
- Разъёмы для подключения других датчиков
- Переключение на резервный источник питания
Кроме того, к свободным пинам могут подключаться любые другие ардуиновские датчики и модули.
Т.к. сигнализация модульная, можно выбрать ту конфигурацию, которая нужна именно Вам.
Связь может осуществляться через SIM800L или NodeMcu на выбор, либо с обоими модулями одновременно (рекомендуется). В последнем случае имеет два независимых канала связи, что более надёжно.
Ардуино и NodeMcu общаются по шине I2C. На плате выведены разъёмы для подключения датчиков по этой шине.
После сборки получаем неприметную коробочку, которую можно спрятать в недоступном месте. Идеально в сочетании с беспроводными датчиками.
Распиновка новой платы немного отличается от схемы предыдущего проекта. Поэтому я решил вынести прошивки в отдельный проект. Дальше будут выходить обновления только для этой платы. Новая версия скетча Signalka.ino подходит и для старого проекта. Ею можно обновляться. Необходимо лишь привести в соответствие номера зарезервированных пинов в файле https://github.com/wisenheimer/Signaling-Blynk/blob/master/l.
Прошивка для NodeMcu написана в среде Arduino IDE. Чтобы собрать проект, необходимо установить библиотеку для esp8266. Как это сделать, можете почитать, например, здесь https://habr.com/ru/post/371853/
Хочу обратить внимание, что с последней версией библиотеки у меня проект не заработал. Плата не хотела подключаться к серверам Blynk. Пришлось откатиться на версию 2.4.2. И проблема исчезла.
Для управления сигнализацией через плату NodeMcu нам надо создать в телефоне приложение Blynk. Это такой конструктор, в котором собирается мобильное приложение из готовых визуальных элементов - виджетов. За каждый виджет нужно платить местной валютой - энергией. Бесплатно даётся 2000 энергии. Если не уложиться в эту сумму, то дополнительную энергию можно докупить за реальные деньги. Мы же из соображений бережливости соберём приложение, которое стоит ровно 2000 энергии.
В статье я не буду затрагивать технические детали по созданию приложения Blynk, настройке и работе сигнализации. Всё это я изложил в файле описания проекта
Перейдите туда, и следуя инструкции, создайте вот такое приложение:
После запуска и подключения к серверу Blynk увидим следующее:
В терминал будут выводиться сообщения сигнализации. Так же из него можно отправлять в сигнализацию команды управления (AT, СМС и DTMF команды).
Кнопки ALARM, GUARD и EMAIL в данной конфигурации означают флаги управления сигнализацией. Любой флаг можно включить и отключить из приложения нажатием на кнопку.
ALARM - флаг тревоги. Устанавливается в 1 при срабатывании одного из датчиков. Сбрасывается самостоятельно при завершении режима тревоги.
GUARD - флаг постановки на охрану.
EMAIL - флаг отправки сообщений сигнализации на указанную электронную почту. Так же включается и отключается из приложения.
Далее следует перечисление датчиков и их текущее показание. В данном примере у нас подключено два датчика:
18B20 - это датчик температуры DS18B20, распаянный на плате.
RADAR - микроволновый датчик движения RCWL-0516.
При срабатывании датчика на экране телефона появится сообщение тревоги
Если плата NodeMcu потеряет связь с сервером Blynk, то на телефон так же придёт сообщение.
Эти же сообщения отправятся на указанный вами в настройках e-mail.
Как видите, интерфейс очень простой. И при этом полностью функционален. Позволяет осуществлять полный контроль над сигнализацией. И при этом полностью бесплатен!
Можно было бы добавить графики и дополнительные визуальные плюшки. Для этого понадобилось бы докупить энергии. Каждый в праве доработать проект под себя. Я же ограничусь бесплатной версией.
Теперь несколько слов о том, как создать и подключить беспроводной Wi-Fi датчик.
В предыдущей своей статье я описал беспроводной датчик на ардуино с ИК-передатчиком.
Wi-Fi датчик представляет из себя тоже самое, только для связи мы используем радиомодули nRF24L01. Передающий в датчике, принимающий в сигнализации. Под этот модуль уже предусмотрено место на плате сигнализации. Учтите, что при его использовании будут заняты 9, 10, 11, 12 и 13 пины платы ардуино. По этой причине не возможно одновременное использование ИК и Wi-Fi приёмников.
Схема соединения выглядит следующим образом
Скетч проекта лежит по этой ссылке
Там необходимо будет указать свои датчики, подключенные к ардуино.
В скетче задано два датчика. Вам нужно только вписать свои.
Первый датчик это геркон, второй - датчик движения.
Пин DOOR_PIN зарезервирован под геркон и соответствует 4 пину ардуины.
При срабатывании любого из этих датчиков по Wi-Fi будет отправлено сообщение RF_CODE, которое примет сигнализация, и включит режим тревоги.
Соответственно в скетче сигнализации нужно аналогично прописать беспроводной датчик
#if RF_ENABLE // Датчик с Wi-Fi модулем nRF24L01Sensor( RF24_SENSOR, "Koridor",RF0_CODE),Sensor( RF24_SENSOR, "Zal",RF1_CODE)
#endif>;В примере заданы два беспроводных Wi-Fi датчика, где
RF24_SENSOR - тип датчика
"Koridor" и "Zal" - имена датчиков, которые будут выводиться в сообщениях
RF0_CODE и RF1_CODE - индивидуальные коды RF_CODE, которые отправляют датчики при срабатывании.
В будущем постараюсь добавить поддержку Blynk в прошивку ардуино с модемом SIM800L. Чтобы можно было обойтись без NodeMcu. Пока на всё это не хватает времени.
Проект GSM/GPRS сигнализации на Arduino ч.3
Всех с праздником. Продолжаем совершенствовать нашу сигнализацию. Согласитесь, что ей очень не хватает беспроводных датчиков. Один из подписчиков попросил добавить в сигнализацию ИК-передатчик для управления кондиционером. Мы решили этот вопрос несколько иначе, но сама идея передачи данных по ИК-каналу мне понравилась. Комплектующие стоят копейки. Имеется уже готовая библиотека IRremote, позволяющая принимать и отправлять данные по ИК-каналу. Минусом данной технологии можно считать только необходимость прямой видимости между передатчиком и приёмником. При этом ИК-приёмник отлично принимает отражённый от стен и потолка инфракрасный свет. Та что не обязательно, чтобы ик-диод был направлен непосредственно на него. Таким образом, если датчики и сигнализация расположены в одной комнате, можно неплохо сэкономить на комплектующих.
Для того, чтобы сигнализация могла принимать ИК-команды, в неё нужно добавить ИК-приёмник. Я использовал TSOP31238 на 38 кГц . Можно взять любой другой, желательно этой же частоты, т.к. она применяется чаще всего.
Первая ножка модуля - земля, вторая +5В, третья - информационный выход. Его соединяем с 11 пином Ардуины в сигнализации. У других ИК-приёмников распиновка может отличаться.
Далее открываем файл настроек проекта libraries/main_type/settings.h
Подключаем библиотеку ИК-датчика через дефайн, записав в него 1.
Затем добавляем ИК-датчик в массив датчиков:
IR_SENSOR - тип датчика
"IR_0" - уникальное имя датчика. Будет выводиться в отчётах. Пишите любое своё, например "OKNO" или "KOMNATA".
0x41038C7 - 32 разрядное кодовое слово, передаваемое беспроводным датчиком при срабатывании. Можно указать любое другое. Оно будет отправляться датчиком при тревоге. Соответственно это же слово нужно зашить в датчик.
Если ИК-датчиков несколько, можно настроить их на передачу разных слов, тогда в массиве каждый датчик нужно прописать отдельно. Это позволит их различать.
Теперь настало время собрать беспроводной ИК-датчик.
Для этого нам понадобится Ардуино Нано, ИК-диод, чем мощнее, тем лучше. Его нужно подключить к 3 пину Ардуины через ограничивающий резистор 33-220 Ом. Далее начиная с 4 пина подсоединяем любые датчики. Точно так же, как мы это делали в сигнализации. Оба проекта используют одни и те же библиотеки.
Затем открываем файл настроек settings.h
Задаём код, который будет отправляться на ИК-приёмник. Мы уже указывали его при настройке датчиков сигнализации. Код должен совпадать, чтобы сигнализация могла понять, кто сработал.
Далее указываем размер отправляемого слова в битах
В примере проекта к беспроводному датчику подключено два сенсора, геркон и датчик движения. Поэтому мы сначала задаём номера пинов для сенсоров, начиная с 4 (4 и 5 в данном случае). Затем записываем в массив сенсоров два датчика.
На этом настройка проекта завершена. Можно прошиваться.
При срабатывании подключенного сенсора Ардуина ИК-датчика начнёт отправлять указанное нами слово по ИК-каналу. Количество повторов отправки определено дефайном
Отправка слова производится раз в секунду.
Сигнализация примет это слово, сравнит с заданным в своих настройках, и при совпадении сработает режим тревоги.
Иногда мощности питания от порта Ардуины не хватает ИК-диоду, чтобы послать сигнал на большое расстояние. Тогда следует питать его напрямую от источника питания через транзистор. Например по такой схеме.
Обновлённая прошивка с проектом для ИК-датчика IRsensor лежит здесь
Так же необходимо установить через Arduino IDE библиотеку IRremote
В проекте добавилась новая библиотека для работы с датчиками температуры на основе термистора. Все необходимые коэффициенты задаются в самой библиотеке.
В следующей части постараюсь показать беспроводной датчик c Wi-Fi модулем.
Проект GSM/GPRS сигнализации на Arduino ч.2
Приветствую моих читателей. В первой части https://pikabu.ru/story/proekt_gsmgprs_signalizatsii_na_ardu. я рассказал вам, как сделать простую GPRS сигнализацию на Ардуино. Проект продолжает развиваться. Сигнализация эксплуатируется около месяца, и уже можно подводить некоторые итоги. За это время не было ни одного случая отказа или зависания, как модуля SIM800L, так и самой Ардуины. Напомню, в моём проекте микроконтроллер питается напрямую от аккумулятора пониженным напряжением 4 В. К каким-то отказам, как опасались многие читатели, это не приводит. Мною был проведён эксперимент, чтобы узнать, как поведёт себя сигнализация при постепенном разряде батареи.
Так как Ардуина разряжала аккумуляторы очень медленно, я подключил её вместе с модемом к лабораторному источнику питания, выставил ограничение по току 2А, и проверил работу на различных значениях напряжения.
Что удалось выяснить. При 3,5 В и выше SIM800L работает штатно. С питанием 3,4 В иногда начинаются перезагрузки при входящих звонках. При снижении напряжения ниже 3,4 В отваливается сеть, могут начаться перезагрузки, но на AT команды модуль продолжает отвечать. Так он работает в плоть до 3В, после чего выключается.
Ардуина работает даже при напряжении 2,7 В, ниже которых отключается. Никаких сбоев отмечено не было.
Но этого нам не достаточно. Нужно было проверить работу при длительной разрядке аккумулятора. Так сказать в условиях, близких к боевым. Я отключил режим сна Ардуины, подключил дополнительную нагрузку к аккумулятору, включил Serial монитор, и отслеживал поведение сигнализации, периодически проверяя её работоспособность. Эксперимент продолжался более суток. Аккумулятор разрядился до 3,6 В. Сбоев замечено не было. Схема полностью работоспособна. Ставьте ёмкий аккумулятор и не о чём не думайте.
Для справки. Номинальное напряжение питания чипа зависит от частоты его работы. Если программно понизить частоту до 10МГц или ниже, то питание напряжением от 2,7 до 5,5В для Atmega328p будет стандартным. Если кого-то не убедили результаты эксперимента, то они могут поиграться с настройками частоты.
С этим разобрались, теперь поговорим о доработках проекта.
За прошедшие две недели проект претерпел некоторые изменения. Геркон теперь подтянут через резистор не к +5В, а к +4,2В батареи (см. фото). Что позволит сохранить на пине высокий уровень при отключении внешнего питания без программной подтяжки. Мне кажется это более надёжным решением. Резисторы можно использовать любого номинала, начиная с 2,2 кОм и выше.
Остальные доработки касаются программной части. Файл настроек settings.h получил новые опции. https://github.com/wisenheimer/Arduino/blob/master/libraries.
По рекомендации читателей, в проект был добавлен watchdog (WTD), который перезагрузит Ардуину в случае её зависания. Включен по умолчанию следующим дефайном:
Т. к. стандартный загрузчик Ардуино Нано не поддерживает watchdog, и в случае его срабатывания уходит в бесконечную перезагрузку, для его работы нужно либо сменить загрузчик на другой, либо поступить проще. Прошить Ардуину через программатор. В этом случае на Ардуине больше не будет загрузчика. И watchdog будет работать. Но вы уже не сможете прошивать Ардуину по USB. Если вас это не устраивает, не используйте watchdog.
В качестве программатора я применил Ардуино УНО с прошивкой ArduinoISP из примеров.
Следующее изменение касается способа доставки отчётов. Теперь сигнализация поддерживает SMS отправку сообщений. Ранее мы отправляли ответы сигнализации на e-mail при помощи GPRS. Теперь можно выбирать способ отправки. Для этого добавлен следующий дефайн:
По умолчанию включены оба варианта.
SET_FLAG_ONE(GPRS_ENABLE) разрешает отправку e-mail по GPRS.
SET_FLAG_ONE(SMS_ENABLE) разрешает отправку отчётов по SMS.
GPRS имеет более высокий приоритет. Если сигнализации не удалось установить GPRS соединение, и SMS режим разрешён, то сообщения будут отправлены по SMS, флаг GPRS_ENABLE выключен, и в дальнейшем будет задействована только SMS отправка. Включить или выключить оба режима можно так же в ручную DTMF командой.
Если мы хотим всегда использовать один режим, то дефайн нужно отредактировать, удалив лишнее.
Следующим нововведением стало изменение списка DTMF команд:
Команды, не вошедшие в список, будут подставлены в USSD запрос и отправлены сотовому оператору. Так что можете в режиме DTMF напирать любые USSD команды. Например запрос баланса. В случае успеха ответ оператора вернётся в виде отчёта.
Админ так же может управлять модемом SIM800L при помощи АТ команд из его даташита http://www.mt-system.ru/sites/default/files/documents/sim800. .
Например, добавлять и удалять номера из телефонной книги. Для этого достаточно с телефона Админа отправить сигнализации SMS с текстом АТ команды.
Дальше хочу подробно рассказать, как добавлять в проект датчики.
Для начала необходимо определиться с количеством пинов, требуемых для ваших датчиков. Датчики у нас подключаются, начиная с 4 пина. Первым желательно выбрать геркон, т.к. он будет будить Ардуину, если она войдёт в режим энергосбережения при отключении внешнего питания.
DIGITAL_SENSOR - любой датчик с одним цифровым выходом, на котором может быть только два состояния, 0 или 1.
CHECK_DIGITAL_SENSOR - тоже самое, только с проверкой от ложного срабатывания. Если через 10 секунд датчик сбросил своё значение, то срабатывание считается ложным. Применяется для тех датчиков, которые удерживают логическое значение на выходном пине при сохранении внешнего воздействия. Например датчик пламени.
ANALOG_SENSOR - любой датчик с аналоговым выходом. Например датчик газа MQ-2.
DHT11, DHT21, DHT22 - датчики температуры и влажности.
Конструктор класса имеет следующий вид:
В нашем файле настроек имеется целый массив таких классов для каждого датчика:
Очень важно указать точный размер массива, иначе проект не соберётся. В данном случае у меня имеется 6 датчиков, конструктор для каждого описан отдельно.
означает, что для датчика двери (геркона) задействован пин Ардуино DOOR_PIN (задан в том же в файле), тип датчика DIGITAL_SENSOR, название датчика, которое будет выводиться в отчётах - "DOOR" (можно заменить на любое другое слово), обычное состояние пина HIGH (DOOR_PIN у нас подтянут к 4,2В), время подготовки датчика при включении питания в секундах, через которое он начнёт показывать правильные значения - 0 секунд.
Для аналогового датчика газа MQ-2:
пин A0, тип датчика ANALOG_SENSOR, имя "GAS", значение на пине LOW, на прогрев датчика и выход на номинальный режим работы отводится 120 секунд. До истечения этого времени после включения датчик не опрашивается, что бы не получать неверные значения.
Для датчика температуры DHT11
в конце появилась цифра 35, которая означает уровень в градусах, при превышении которого считается, что датчик сработал. В помещении стало слишком жарко.
Внимательный читатель уже заметил, что для разных датчиков описано разное количество параметров. Дело в том, что в языке С++ можно не писать все параметры функции, если в заголовке функции указаны их значения по умолчанию. Мы пишем только то, что не имеет значения по умолчанию, или мы хотим задать другое значение. Однако никто не запрещает указать все параметры конструктора класса.
Вы можете подключать к сигнализации любые датчики, не требующие отдельной библиотеки, лишь заполнив конструктор класса, и добавив его в массив Sensor sensors[]. И это будет работать. Если для датчика требуется отдельная библиотека, то её можно добавить точно так же, как в проект была добавлена библиотека stDHT.h для датчика DHT11, который имеет свой протокол для обмена данными. Или напишите мне, я добавлю.
На этом всё, спасибо за внимание.
Скачать проект можно как всегда по ссылке: https://github.com/wisenheimer/Arduino
Проект GSM/GPRS сигнализации на Arduino
Предлагаю вашему вниманию проект охранно-пожарной GSM/GPRS сигнализации на ардуино с резервным питанием от батареи. Мною ставилась цель создать простую в изготовлении сигнализацию для дома, состоящую из недорогих ардуиновских модулей и датчиков, управляемую с телефона. При этом затраты на обслуживание должны быть минимальными. А лучше чтобы их вообще не было! И мне удалось этого добиться.
Для вожделенной халявы пришлось отказаться от традиционных смс оповещений, и освоить отправку писем на электронную почту. При правильно подобранном тарифе, сигнализация не тратит денег с баланса. При этом мы получаем по e-mail всю информацию о работе сигнализации, сработавших датчиках, действиях пользователей. Такой роскоши не добиться с помощью платных смс. Управление сигнализацией реализовано на основе DTMF команд. Если у вас один оператор связи на основном телефоне и на сигнализации, с бесплатными звонками внутри сети, или имеется пакет бесплатных минут, то управление сигнализацией тоже будет бесплатным. В противном случае всегда можно отправить команду в течении первых 3-х секунд. И так же не платить. Заинтриговал? Тогда прошу под кат.
Первым делом составим техническое задание:
1) Оповещение звонком Админа при срабатывании датчика.
2) Отправка e-mail с подробностями.
3) Отправка e-mail о действиях пользователей.
3) Наличие резервного питания на случай отключения основного.
4) Управление сигнализацией при помощи DTMF команд и смс.
Для этого нам понадобится плата ардуино и недорогой, но функциональный GSM-модем SIM800L. Любой литиевый аккумулятор с модулем заряда. Датчики по вкусу.
Я использовал широкий набор различных датчиков, чтобы показать возможности сигнализации. Проект позволяет добавлять любые другие датчики.
В данном реализации были применены следующие сенсоры и модули:
1. Геркон NC типа, как датчик открытия двери.
2. Пироэлектрический инфракрасный датчик движения HC-SR501.
3. Датчик газа и дыма MQ-2.
4. Микроволновый датчик движения RCWL-0516. Видит сквозь препятствия и стены. Хорош для охраны дачи или частного дома. В квартире будут частые ложные срабатывания на соседей за стенкой или бегающих собачек и котиков.
5. Датчик пламени.
6. Датчик температуры и влажности DHT11.
7. Для подачи звуковых сигналов при выполнении команд использована пищалка (зуммер). В готовом изделии не обязателен.
8. Плата контроля заряда-разряда лития на основе микросхемы TP4056 с защитой от перезаряда и разряда.
9. Ардуино Nano V3. Можно заменить 5 вольтовой Ардуино pro mini.
10. В качестве GPRS GSM модема выбран недорогой, но хороший модуль SIM800L. Он имеет небольшие размеры. Умеет работать с DTMF командами, звонить, отправлять смс и e-mail. Смс дороги, а вот электронные письма можно слать практически бесплатно. Чем мы в дальнейшем и воспользуемся!
Датчиком открытия двери (окна) у нас служит нормально закрытый (NC тип) геркон. В случае отсутствия электричества наша ардуина будет отправлена в сон, и разбудить её смогут три вещи: сработавший геркон, появление внешнего питания (сеть), или сигнал RING с модема в случае звонка. Но это мы уже забежали вперёд.
Допустим мы всё собрали как надо. Чтобы сигнализация заработала, первым делом надо заполнить файл настроек, находящийся по следующему пути libraries/main_type/settings.h
за место 115200 необходимо указать скорость, на которой работает ваш модем. Как определить скорость работы модема, можно найти в интернете. Не буду на этом заострять внимание.
Далее перечисляются используемые датчики. Вам нужно оставить только те, которые вы используете. Остальные строчки сделать комментариями при помощи двойного слеша //
Можно оставить всё как есть. Не подключенные датчики на работу не повлияют.
Далее перечисляются пины, на которых висят наши модули. Первым у нас будет пин RING модема. Он соответствует пину 2 ардуино. Т.к. это обычное перечисление, номер следующего пина будет на один больше предыдущего, т. е. 2, 3, 4 и т. д. Если вы закомментировали какие-то модули выше, то их пины не будут учитываться в перечислении.
При сборке схемы модули подключаются начиная со 2-го пина друг за другом в том порядке, что указан в перечислении.
Далее нам надо настроить отправку e-mail.
Первым делом задаём SMTP сервер почты, к которой будет подключаться наш модуль SIM800L. Он прекрасно работает с яндекс почтой, с другими не тестировал. Советую завести там почтовый ящик, и слать через него. В этом случае настройки изменять не нужно.
Для яндекса у нас такие параметры сервера и порта:
Далее за место слов login и password впишите логин и пароль от вашей почты
Затем укажите полное название вашей почты и имя отправителя. В данном случае у нас указан отправитель SIM800L. Можете написать что-то своё.
Теперь впишите название почты получателя и его имя. На этот ящик будут приходить письма. Для отправки и получения можно указать один и тот же ящик. Тоже будет работать.
Если вы хотите отправлять письма сразу на два или три ящика , раскомментируйте вот эти дефайны, и впишите имя почты
Поздравляю! На этом настройки закончены. Можно прошивать ардуину.
Как работает сигнализация.
Внимание! Сигнализация управляется только с номеров, записанных в телефонную книгу симкарты.
Если на симкарте уже есть номера, то их владельцы являются пользователями, которые могут включать и отключать сигнализацию. Перед использованием удалите ненужные номера. Администратором считается номер с именем ADMIN. Если на симкарте нет такого номера, то первый позвонивший незарегистрированный пользователь станет Администратором. Его номер будет занесён в телефонную книгу.
Администратор — единственный пользователь, который может отправлять DTMF и смс команды.
Для удалённого добавления пользователя в телефонную книгу Администратор должен отправить смс вида
Модем настроен на поднятие трубки при звонке с номера Админа. Это сделано для возможности использовать DTMF команды. Звонки с других номеров будут сбрасываться.
Администратор может отправлять DTMF команды из списка ниже. Если команда принята, сигнализация сбросит звонок. Отчёт о выполнении команды придёт на почту. Любая команда представляет собой цифру и знак #, который означает завершение ввода. После этого модем завершит звонок и выполнит полученную команду.
Команды, не вошедшие в список, считаются USSD запросами. Например, мы хотим узнать баланс телефона. USSD запрос баланса нашего оператора *xxx#
Отправляем DTMF команду xxx#. Она будет подставлена в USSD запрос. Ответ оператора будет переслан на почту.
Порядок включения.
Подать питание на сигнализацию.
Дождаться прихода e-mail. Сигнализация загрузилась.
По умолчанию режим охраны выключен. При звонке любого зарегистрированного номера (кроме админа) сигнализация будет ставить/снимать с охраны и отправлять отчёт на почту. Звонок будет сброшен. При звонке с номера Администратора модем поднимает трубку и ждёт DTMF команду. Админ может поставить/снять с охраны сигнализацию командой 1# и 2# соответственно. После ввода команды звонок завершится сам.
Режимы работы:
Тревога.
При срабатывании одного из датчиков включится режим тревоги. На телефон Админа поступит звонок. Его надо сбросить. На почту будут отправлены показания сработавшего датчика. Продолжительность режима тревоги задана в файле настроек дефайном ALARM_MAX_TIME. По умолчанию 60 секунд. В течение этого времени идёт сбор статистики о сработавших датчиках. Когда время истечёт, информация будет отправлена на почту, а счётчики срабатываний обнулятся. Если датчики снова сработают, всё повторится.
Выключение сетевого питания. Режим низкого энергопотребления.
При пропадании электричества на 3 пине ардуины появится низкий уровень. Сигнализация переключится на питание от батареи. На почту придёт сообщение, что свет пропал Svet OFF. После этого, для экономии энергии батареи, ардуина уйдёт в сон, модем будет переведён в режим низкого энергопотребления.
Все датчики, питающиеся от сети, будут обесточены и перестанут работать. В моей реализации датчики питаются от внешнего источника. Все кроме геркона. Он не требует питания, поэтому работает всегда. При срабатывании геркона в режиме сна ардуины, она проснётся и перейдёт в режим тревоги. После того как режим тревоги завершится, ардуина снова уснёт.
При появлении электричества ардуина проснётся, переведёт модем в обычный режим работы, и отправит сообщение на почту Svet ON.
Поддерживаемые операторы.
Прошивка поддерживает основных российских операторов:
МТС, Билайн, Мегафон, Теле2. Если у вас другой оператор, и не отправляется e-mail, пишите в комментариях. Будем добавлять.
На этом всё. Скачать прошивку можно здесь https://github.com/wisenheimer/Arduino
Вопросы пишите в комментариях :)
Мини GPRS принтер для печати заказа в столовую
Всем привет, мы с коллегой расскажем вам как мы мучились 4 месяца сделали своими руками принтер, который печатает то что вы от него хотите, без лишних проводов (только питание)
Небольшая предыстория (и зачем это вообще нужно)
После переезда в новый офис мы были рады наличию столовой на первом этаже здания, но места в ней было немного, и все желающие отобедать там не умещались. Андрей предложил свою кандидатуру на роль курьера.
Как это работало:
- Ребята пишут заказ на бумажке с подписью- Андрей собирает бумажки и относит их в столовую с деньгами- Через 30 минут возвращается и забирает заказ- Ребята располагаются на кухне в офисе и дружно обедают
Итого 4 итерации, 2 из которых - поход в столовую.
Андрей, как прирожденный программист, решил это дело оптимизировать - сделал сайт где можно оформить заказ обеда, который он в дальнейшем распечатает и отнесет в столовую. Система оплаты была заменена на депозиты, баланс можно посмотреть в личном кабинете также на сайте.
(единственный обед который я могу себе позволить)
Позднее Олегом было предложено сделать «штуку которая будет печатать заказ в столовой», Андрей поделился со мной этой идеей, в дальнейшем мы пришли к выводу что нужна нам все-таки не штука, а принтер, желательно с мобильным интернетом, т.к. в столовой не было wifi (безумие).
Непосредственно сам процесс начался с прототипирования, все необходимое было закуплено за один раз на али, а именно:- Принтер JP-QR701-TTL
- Arduino uno 328
- GSM/GPRS модуль sim800l + дополнительная антенна для него
И мое скромное вложение:
- Блок питания от монитора (14в 2а)
- Понижающие DC-DC модули
- Конденсаторы и прочая мелочь
Немного поясню по выбору железа:
- Выбрали именно этот принтер т.к. у него в описании значилась поддержка русской кодировки CP866, что показалось нам убедительным
- Миллионы раз в процессе разработки мы пожалели о том что выбрали Arduino, но в последствии лично для меня это превратилось в челлендж "впихнуть не впихуемое", ибо памяти очень не хватало
- GSM модуль взяли самый дешевый и распространенный — чем востребованнее железка, тем больше топиков и готовых проектов с ней
Примеров реализации sim800 + принтер + Arduino в сети не оказалось, но не смотря на это - руками мы написали лишь
20% кода для проекта, в остальном - использовали библиотеки где все уже было сделано за нас.
Общение с модулем sim800l происходит с помощью AT-команд через Serial-port, в ответ, если все в порядке - отвечает OK, если нет - ERROR, использовали мы документацию которая гуглится по названию SIM800HL_Hardware_Design_V2.01 (есть много разных, но эта на мой взгляд самая полная)
Модуль крайне привередлив к питанию, ему необходимо 3.5 - 4.4в, иначе работать будет не стабильно, или может вообще выключится, предварительно написав предупреждение.
(картинка с сайта codius.ru)
Для получения данных из всемирной, пока еще не заблокированной сети - есть несколько способов:
Мы будем использовать второй вариант, т.к. библиотека которую мы используем работает именно по этому принципу (ее пришлось немного доработать, об этом в части про спаривание принтера и модуля)
С модулем можно общаться напрямую через Serial-порт компьютера, используя программатор, но у нас есть ардуино, и мы использовали скетч для отладки что бы немного с ним пообщаться (идет в комплекте с библиотекой, появляется в Examples Arduino IDE).
Шаг первый: получить данные с api.
С момента подключения питания до успешного получения данных прошло 2 часа (но потом мы потерли скетч и примерно 2 дня пытались повторить то что мы сделали).
Сложности с sim800l которыми мы столкнулись, перед тем как у нас это получилось:
- Недостаточное питание: подавали 3.3в вместо 3.5, модуль обманчиво мигал, но сеть не находил
- Пришлось настраивать прокси, т.к. модуль не может в ssl (или может, уже позже мы нашли документацию SIM800 Series_SSL_Application Note_V1.00), и большинство адресов вообще не открывалось
- Мегафон ни в какую не хотел открывать адрес api, даже через прокси, сменили оператора - все заработало
Принтер JP-QR701-TTL - самая распространенная модель, цифры/буквы в названии могут быть другие, главное что бы был TTL а не RS232, иначе придется подключать схему MAX3232 для конвертирования RS232 -> TTL. когда мы распечатали тестовую страницу (нужно зажать на нем кнопку и подать питание) то в начале мы получили половину страницы, где нет кириллицы.
Дело как и в случае с GSM-модулем было в питании, подавали мы меньше 5в, ему же требуется 5-9в, увеличили напряжение - все заработало, но кириллицы не появилось.
Потратив несколько часов на поиски "как печатать на русском" мы наткнулись на статью 2013 года (не могу вставить ссылку из-за рекламы на сайте), где человечище с ником zhevak выложил ссылки на файл для прошивки принтера другими кодировками. Ссылки оказались не рабочими, но мы поняли куда рыть, и нашли свежую версию программы которой я делюсь с вами. Просто выбираем нужную - CP866, нажимаем ОК, и ждем ОК от программы, печатаем тестовую страницу - и все, вы восхитительны.
Для общения с принтером использовали библиотеку Adafruit
Шаг второй: отправить полученные данные на печать
Итак, самая интересная часть, имеем:
- Полностью рабочий принтер, печатает то что мы хотим
- Полностью рабочий gprs модуль
Нам нужно их спарить между собой.
Создаем 2 Software Serial для прокидывания команд примерно по такой схеме:Принтер <= Arduino <=> sim800l
Действуем по этим шагам:
- Получаем данные уже с переносами строк
- Конвертируем данные из UTF-8 в CP866
- Отдаем данные на принтер
И тут мы сталкиваемся с несколькими проблемами:
- Памяти у Arduino не хватит что бы сохранить список заказов который мы получаем с сервера, как вариант - получать и отправлять данные частями, но это приводит нас к следующему:
- Модуль sim800 передает данные не пакетами, мы имеем поток который нужно успеть прочитать, перекодировать и отправить на печать прежде чем он пришлет нам новые данные, и последняя проблема:
- Мы понимаем что количество ненумерованных списков в этой статье почти переваливает за десяток
Решение (второй проблемы) оказалось гениальным и простым - уменьшаем скорость потока данных при инициализации до 300 (хотя в документации сказано что ниже 900 нельзя) и все работает. Пожалуйста не спрашивайте меня как и почему, главное что оно работает.
Несколько вещей которые обязательно нужно сделать для библиотеки GSM-модуля:
- В файле sim800.h который лежит в библиотеке для GSM-модуля смотрим на значения пинов (например SIM800_TX_PIN), тут 2 варианта - меняем их на те что нам нужны, либо просто подключаемся к тем что указаны
- Рядом, в файле gprs.h меняем baudRate = 9600 на baudRate = 300 не могу вспомнить сколько дней у нас ушло на то, что бы понять что данные передаются потоком, и что принтер просто не успевает их напечатать на более высокой скорости
Перед печатью данных с сервера мы вновь забыли проверить напряжение, результат нас одновременно обрадовал и удивил, т.к. мы получили печать страницы на башкирском языке (по крайней мере очень похоже)
Вот так выглядит печать в нормальном виде
Шаг третий: монтаж и сборка
С получением данных и печатью все, далее печать платы для повышающих модулей и подключение блока питания. БП кстати должен выдавать минимум 1.5 - 1.7а, из-за высокого потребления принтера в момент печати.
(шутка про фронтенд и бэкенд)
Изначально корпус решили напечатать на 3d принтере, но около месяца это все оставалось на уровне "надо-бы сделать", тогда я решил сделать корпус из пвх пластика, за идею спасибо @OgnennoeTV, а за пластик - Юре.
Предварительно был сделан корпус из картона - что в дальнейшем очень помогло, указало на косяки при высчитывании размеров.
Далее были вырезаны детали из пластика и после подгонки - покрашены, хотели предварительно выровнять неровности но мы понимали что тогда это затянется еще на несколько дней (а мы уже очень хотели закончить)
Крепления были куплены в строительном магазине и с боков посажены на клей (потом все-таки поменяли на болты)
В момент сборки, на фото ниже - я представлял себя Робертом Фордом из мира дикого запада, который кряхтит над своим творением.
Предварительно согласовали с девушками из столовой формат печати, получили ОК и окончательно собрали принтер.
С момента выпуска принтера в "продакшн" прошло около месяца, в начале девушки в столовой были крайне удивлены черной коробке которая печатает им заказы, но потом привыкли, и даже выделили ей место.
Весь процесс занял примерно 4 месяца, но мы выделяли время только в выходные, и изредка - после работы.
По стоимости проект вышел примерно в 2.5к, с учетом наличия расходников, паяльника и прочего, и без учета человеко-часов.
Спасибо всем кто как-либо помог в разработке принтера, словом и делом, и вам что дочитали, надеюсь вдохновить кого-нибудь собрать что-то свое.
Ссылка на скетч который использовали для Arduino: https://github.com/andrew72ru/remote_print
СЕНСОРНЫЙ ПЕЙДЖЕР НА ARDUINO
Продолжаю свое знакомство с электроникой и наступила очередь для работы с GSM модулем. Перерыл много документации и пришел к выводу что SIM800L оптимален по функционалу и стоимости. Поэтому реализовал на нем простейший пейджер для приема и отображения SMSок. Для управления в проекте используется классный цветной сенсорный экран со встроенным картридером. Все входящие SMS сохраняются на карту памяти. Еще есть обработка принятых команд. Создание проекта можно посмотреть в этом видео:
Прошивка и ссылки на комплектующие доступныа на гитхабе: https://github.com/voltnik/GSM-Pager
Файлы для 3Д печати корпуса:
Ну и сама схема простейшая, по питанию сделано кольцо. Поэтому пейджер работает и от USB и от аккумулятора 18650:
Сначала проект был реализован на Arduino Nano и кириллическом экране 2004
Все работало, но по мере написания кода я столкнулся с нехваткой оперативной памяти микроконтроллера. Начали глючить обработки, терялись символы в строках.
Поэтому перевел проект на Arduino Mega и сенсорный экран TFT от Open Smart. С кириллицей тоже не прикольно работать, русский символ занимает два байта в памяти и поэтому строковые функции Arduino некорректно работают.
Проектирую и печатаю корпус
И собирают пейджер
Из-за того что экран представляет из себя shield модуль который одевается на Arduino Mega, соединительных проводов минимум
Готовое устройство потребляет 250ма, при этом 100ма идет на зарядку АБК.
Попросил подписчиков накидать SMSок, за пару часов получил больше 150 штук
Все удалось расположить очень компактно, напечатал еще крышку корпуса
И вот так это выглядит на моем столе:
В итоге данный проект позволил пощупать работу с GSM модулем, SMS и написать код управления при приеме команд. SIM800L также позволяет легко добавить голосовые функции и сделать полноценный сотовый телефон. Пробовал это на тестовых прошивках, исходящий и входящий вызовы работают. Даже мелодию звонка сам играет :) В общем классный модуль - рекомендую. Экран тоже простой и многофункциональный. Тачскрин позволяет полностью отказаться от кнопок управления, а встроенный кардридер расширяет возможности для хранения информации.
SMS-контроллер на базе SIM800L
SIM800L V2.0 GSM/GPRS - это четырехдиапазонный GSM/GPRS модуль, совместимый с Arduino. Модуль используется для реализации функций GSM (звонки и SMS) и GPRS. Преимуществом этого модуля являются интерфейс TTL, имеющие вольтаж равный 5В, что позволяет напрямую подключить его к Arduino или любой другой системе с напряжением питания 5В.
Большинство GSM/GPRS модулей на рынке требуют подключений регулятора или преобразования уровня, в то время как в SIM800L V.2 GSM/GPRS не требует дополнительных цепей преобразования уровней интерфейсов. Приведем пример проекта, использующего SIM800L V.2 GSM/GPRS. Смысл проекта в управлении переключателей с помощью SMS-контроллера. Вы с легкостью сможете включать и выключать большинство предметов бытовой техники в доме, как например ламу, вентилятор и так далее. Характеристики модуля SIM800L V.2 GSM/GPRS
Ниже приведены все технические характеристики модуля SIM800L V.2 GSM/GPRS:
- Серийный интерфейс TTL совместимый с 3,3В и 5В микроконтроллерами, совместимыми с Arduino.
- Модуль SIM800L имеет серийный интерфейс TTL.
- Штекер подключения антенны. Поддержка сети: четыре диапазона 850/900/1800/1900 МГц, способные осуществлять звонки, SMS и передачу данных со значительно уменьшенным расходом заряда.
- Интерфейс VDD TTL UART, так что вы сможете напрямую подключить MCU такой, как 51MCU, ARM или MSP430. Штекер VDD используется для соответствия вольтажу TTL.
- Модель: SIMCOM SIM800L
- Рабочий вольтаж: от 3,7В до 5В;
- Размеры: 40мм х 28мм х 3мм
- GPRS мультислот-класс 12/10
- GPRS пакетных сервис класс B
- Соответствует GSM фазе 2/2+
- Класс 4 (2 Ват @ 850/900 МГц)
- Класс 1 (1Ват @ 1800/1900Мгц)
Необходимые материалы
Вам понадобиться (ссылки на Алиэкспресс в файле):
1. Модуль SIM800L V.2 GSM/GPRS.
3. 4-канальный 5-вольтовый модуль реле.
4. Провода - перемычки.
5. Источник питания 5 В.
Сборка и настройка
Как только вы подключили все компоненты, создайте программу, после чего загрузите ее в свой Arduino. Но сначала, вы должны установить библиотеку GPRS, которую вы можете скачать:
Программный код для Arduino
После того, как вы подключили ваш SIM800L, 4-канальное модуль реле и Arduino к вашему компьютеру, впишите код и все готово.
Проверка устройства
Инструмент работает с помощью отправки SMS на SIM800L с определенной последовательностью символов. Например, чтобы включить реле 1 используйте команду «Relay 1 ON», а для того чтобы выключить используйте команду «Relay 1 OFF». Для остальных реле почти такие же команды, за исключением порядкового номера каждого реле, на которое вы хотите воздействовать. После автоматической отправки сообщения, SIM800 отправит ответ в виде сообщения о статусе каждой SIM-карты.
Видео сборки, настройки и и проверки устройства
Управление обогревом на даче через GSM
Ну, собственно, никогда не писал на сях, ни разу не видел ардуину.
Но пора открывать дачный сезон, а приезжать на дачу в холодный дом очень неприятно.
Решили поставить 2 электрообогревателя, один на 2 киловатта, один, соответственно, на 1КВт. Чтобы ими управлять пошел в "мегафон" чтобы купить gsm розетку. От цены офигел.
Пошел тогда на aliexpress и купил там: neoway m590e в разобранном виде, ардуину, блок реле и i2c экранчик (в принципе он не нужен).
Блок питания взял от дохлого коммутатора (5В 1А). Поскольку мощности БП явно недостаточно на модем, экранчик и реле (ток иногда подскакивает до 2А) было добавлено пару конденсаторов.
Чтобы коммутировать силовую нагрузку был куплен еще магнитный пускатель. (выбрал с креплением на din рейку - масштабировать мне не надо, а колхоза и так хватает).
Всю тряхомуть собрал в щитке и присопливил на стену. Вот прошла неделя, полет вроде нормальный. Сейчас вот специально снял чтобы похвастаться :)
Ну и еще - вот чего я тут писькой навилял - чтобы если кто будет начинать - им было от чего отталкиваться:
Постарался все распихать по функциям, щедро разбавив комментариями.
Все удовольствие, включая экранчик, щиток и начинку щитка обошлось в 2 тысячи.
Экранчик для работы не нужен, вообще-то.
А теперь вопрос сообществу:
Есть ардуина, есть блок питания на 5 вольт. Нужно подключить дымовой извещатель:
Подскажите, как это сделать с наименьшим геморроем?
Управление автомобилем по СМС. Arduino + SIM800L
Задача - завести автомобиль дистанционно и вне прямой видимости, очевидное решение - GSM. Собрал модуль, который будет подключен бортовому компу автомобиля и на любом расстоянии стартонет движок. Для этого замкнет реле, которое идет на кнопку запуска на 2 секунды.
Использовал GSM-модуль SIM800L и Arduino nano, так же 2 стабилизатора (общий 12->5В) и 5->4В - для GSM-модуля.
В режиме энергосбережения устройство немного (самую малость) чудит, это чисто программная проблема, сейчас её решаю и в скором времени опубликую новый скетч!
А вот и схема подключений:
А вот и видео по этой статье!
ARDUINO это просто краткие познавательные видео
Наткнулся на интересный канал, новичкам смотреть обьязательно
Если у вас возникли сложности с восстановлением пароля, то прочитайте эту статью. Или напишите в службу поддержки на [email protected] .
В письме укажите данные вашего профиля: никнейм, почта, номер телефона, какие посты вы оценивали. Это ускорит восстановление пароля :)