48

Arduino. Первый опыт. Школьный звонок и недоwebserver.

Добрый день. Хочу поделиться с вами первым горьким (или не очень) опытом. Было решено изучить что-же такое arduino и как его практически можно было использовать. Естественно решил сделать замену школьному звонку, с возможностью управления по локальной сети без поднятия web сервера и с записью расписания звонков на microsd карту.
Что использовалось:

- arduino mega 2560;
- ethernet модуль enc28j60;
- модуль MicroSD Card Adapter на базе LVC125A;
- твердотельное реле на базе G3MB-202P;
- модуль часов реального времени DS3231M;
- макетная плата 70*90;
- кривые руки;
- нулевые знания в arduino и С++;
- боль и слезы.

Что в итоге вышло:

Arduino. Первый опыт. Школьный звонок и недоwebserver. Arduino, Arduino Mega, Длиннопост

Теперь по порядку.

Поскольку познания в C++ у меня были совершенно никакие, поэтому было решено брать arduino mega 2560, для того чтобы был запас памяти, ввиду работы со строками (массивами). Модули взял какие были в продаже, не изучив возможные проблемы работу с ними (первая ошибка). По отдельности все модули, кроме модуля реального времени работали нормально, RTC модуль потом пришлось заменить на DS3231. В целом с данным модулем проблем дальше не было, ибо он подключается к шине (интерфейсу I2C).

Этап слез и боли.

Когда уже где-то на горизонте замаячил финал и сладостное предвкушение от результата работы, жизнь вновь окунула меня в жесткие реалии. Ethernet модуль и microsd ну никак не хотели работать вместе. Данные модули подключаются к шине (интерфейсу) ICSP и вроде как все должно работать сразу и без проблем. Изучение теории интерфейса ICSP и поиск по форумам ничего не дал. Я грешил на модуль microsd, купил второй такой же, и ничего.....
Работа полностью встала, но решение все же нашлось, даже два: 1. купить модуль другого производителя на другом чипе; 2. исправить недоразумение инженерной мысли создателя сего модуля. Решение заключалось в том, что нужно было кинуть перемычку с 13 ноги LVC125A на резистор R1 и всё. Иначе данный модуль не давал возможность работать другим модулям на данном интерфейсе (это если утрировать).

Arduino. Первый опыт. Школьный звонок и недоwebserver. Arduino, Arduino Mega, Длиннопост

Вытираем слезы и радуемся, мы не настолько плохи.

Чтобы все это дело не паять к arduino было решено сделать шилд для выноса шины ICSP, I2C и кнопки ресет. Купил макетную плату, отпилил лишнее, припаял пины в местах выводов интерфейсов и кнопки ресет. Любителей качественной пайки и перфекционистов прошу не смотреть.

Arduino. Первый опыт. Школьный звонок и недоwebserver. Arduino, Arduino Mega, Длиннопост

Справа внизу подключен модуль RTC.

Еще подсказка для новичков, твердотельное реле нельзя проверить мультиметром и говоря русским языком твердотельное реле работает только под нагрузкой (я использовал обычную лампу накаливая). И еще, ногу DC+ реле я подключил через тумблер, для возможности отключения звонка.

Все это дело отлично вписалось в корпус роутера D-Link DIR-400.

На этом я аппаратной частью можно и закончить.

Программная часть.

Поскольку памяти у нас достаточно, я решил не экономить и использовать строки, вместе с глобальными переменными, да это плохо, но с моими скудными знаниями это было неплохое решение.
Используемые библиотеки:

- EtherCard.h;

- SD.h;

- DS3231.h;.

Почему именно они.

DS3231.h - может показывать в

ремя в unixtime и в виде hh:mm:ss в формате string. Также умеет работать с днями недели.

SD.h - ничего особенного, просто с ней получилось сразу подружиться.

EtherCard.h - выбор библиотеки для работы с сетью стал для меня камнем преткновения. Поскольку мне хотелось отсылать расписание по сети, получать ответ, синхронизацию по NTP и все это делать со своего сайта (или приложения), а также не хотелось поднимать web сервер (как многие рекомендуют), выбор пал на данную библиотеку. Суть решения свелась к тому, что я отсылаю запрос вида http://ip/?command=команда, arduino парсит запрос и ищет нужные вхождения в строке. После чего шлет http ответ, либо 200 OK, либо 404 not found, это в упрощенной версии. (этот момент более подробно описан в скетче). А в нормальной реализации arduino возвращает json строку и сайт обрабатывает её. В Json строке может быть получено текущее время на arduino, логи за определенный период, текущий урок и пр. информация. Данная реализация находится в стадии допиливания и поэтому пока её не выкладываю.

В основном используется пока что три команды:

http://ip/?3bells=now - дает тройной звонок;

http://ip/?acttim=timenow - принудительная синхронизация с NTP сервером

http://ip/?nwrasp=08:00:00=08:45:00=... (макс. 20 звонков) - передаем новое расписание по сети и сохраняем его на карту.


Прилагаю ссылку на код скетча на ваш суд, код старался максимально комментировать.

Ссылка


p.s. какие проблемы выявлены:
1. иногда запрос не доходит до arduino и приходиться повторно отправлять команду.
2. при проблемах с локальной сетью, не всегда корректно загружается.


Отдельное спасибо @pangoleen.

Найдены возможные дубликаты

+4

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

И вот наконец вы подарите школоте шанс через компьютерную сеть похулиганить со звонками... Прям мечта всего детства. =)

раскрыть ветку 1
+1
Иллюстрация к комментарию
+3

Не вникая в пост, просто восхитила фраза "Естественно решил сделать замену школьному звонку". Это прям самое естественное и очевидное, мы все с этого начинали...

раскрыть ветку 1
0

))) ну это да )) я просто упустил что я в школе работаю.

+2

Плюс за ссылку на код,а то многие херят,думают,что похвастал и збсь.

+2
Что так все сложно, esp + rtc + транзистор или реле и все, причем подключиться к mqtt и хоть из дома в час ночи вклбючай, что бы охраники не спали, а если еще парсить время с интернета, то можно и без rtc сделать
раскрыть ветку 6
+1

Зачем mqtt когда можно напрямую запросы слать?

Это все планируется запихнуть в arduino uno, а там возможно уже не будет памяти подключить лишнюю библиотеку.

раскрыть ветку 5
0

Потому что железка у вас может быть за NATом и напрямую к ней не подключиться. Потому что MQTT надежнее. Если прямой запрос у вас не пройдет - придется вручную заново отправялять, что у вас и происходит. А MQTT легко позволит организовать повторную передачу автоматом в случае ошибки.

А и еще ESP8266 стоит дешевле UNO, а имеет тонну ресурсов. Около 80Кб оперативки и целых 4Мб флэша. Разве что пинов там немного, надо для ваших задач с головой.

раскрыть ветку 4
+1
Мегу 2560 на звонок для школы? Я в шоке.
раскрыть ветку 3
0

Ну я вроде пояснил почему, когда смогу нормально в массивы и без строк, тогда и можно будет переселить все на uno или nano.

раскрыть ветку 2
0
У вас ресурсов кот наплакал, esp пользуйте.
0

Попробуйте для программирования ардуино использовать flprog.

+1

Данные модули подключаются к шине (интерфейсу) ICSP и вроде как все должно работать сразу и без проблем. Изучение теории интерфейса ICSP и поиск по форумам ничего не дал

Не удивительно, ведь интерфейс называется SPI. А ICSP - это In-Circuit System Programming, т.е. внутрисистемное программирование, нужно для прошивки МК, а никак не для подключения датчиков. Да, в AVR оно использует протокол SPI, да, пины для аппаратного SPI и ICSP будут совпадать, но это разные вещи, поэтому и не нашли ничего.


Решение заключалось в том, что нужно было кинуть перемычку с 13 ноги LVC125A на резистор R1 и всё. Иначе данный модуль не давал возможность работать другим модулям на данном интерфейсе (это если утрировать).

А если бы изучили интерфейс SPI, то узнали бы как там реализовано несколько ус-в на шине и про пин CS/SS, которым и выбирается текущее ус-во.


А вообще для расписания звонков вам должно было хватить и внутренних 4Кбайта EEPROM, и можно было бы без флешки обойтись, если через веб расписание отправлять.

раскрыть ветку 5
0
А если бы изучили интерфейс SPI, то узнали бы как там реализовано несколько ус-в на шине и про пин CS/SS, которым и выбирается текущее ус-во.

Я изучил, но проблема оказалась не в моем плохом понимании SPI, а в самом модуле.

Про CS/SS я знаю, с них я и начал проверять.

А вообще для расписания звонков вам должно было хватить и внутренних 4Кбайта EEPROM, и можно было бы без флешки обойтись, если через веб расписание отправлять.
Это так, но хотелось охватить сразу несколько модулей для изучения.
раскрыть ветку 4
0

Тогда почему называете его ICSP? :)

LVC125A - просто буфер. 13ая нога включить-выключить 4ый порт. Подтянув её через R1 вы просто вырубили его на какое-то время. Куда сам порт к флешке идет - другой вопрос.

раскрыть ветку 3
0
Как тут уже написали, вам нужно изучать интерфейс SPI, а про ICSP забудьте, он нужен только для внутрисхемного программирования МК. И хотя ICSP технически можно использовать в качестве SPI, но делать этого не нужно, да и про сигналы CS забывать не стоит. Контроллер Ethernet на базе enc28j60 достаточно глючный. Мне не удалось заставить стабильно работать ни одну из десятка таких плат - спорадическая потеря единичных пакетов. А вот платы на базе W5100 показали себя отлично. Но у них тоже есть недостаток - сильно греются.
И ещё. Для вашей задачи вам лучше посмотреть в сторону esp8266, в частности, плату NodeMcu esp8266. Путём простых действий можно программировать их прямо из Arduino IDE. Примеров в сети полно. За исключением задач с WiFi, программирование почти не будет отличаться от ардуино. Но обязательно! нужно учесть, что у esp8266 логический уровень, как и напряжение питания - 3.3в, вместо 5в у ардуино, поэтому нужно будет подумать об источнике питания 3.3в и о согласовании уровней esp и остальных модулей.
0

> а также не хотелось поднимать web сервер (как многие рекомендуют)

А как вы http запросы без веб-сервера обрабатываете?

раскрыть ветку 3
0

Принимаем входящие пакеты, парсим их, ищем нужное, шлем ответ. Это вкратце. Посмотрите в скетче, там более подробно.

раскрыть ветку 2
0

Я к тому, что открытие порта и реализация http-протокола для обработки входящих запросов - это и есть веб-сервер.

раскрыть ветку 1
0

Есть более простые решения со школьными звонками.

0

Освоил бы сначала мигание светодиодом, а потом уже за такие поекты брался =). Тоже занимаюсь понемногу, в частном доме огромный потенциал для таких вещей.

раскрыть ветку 4
+1
вот только мамкины тру-мкшники силовую часть сливают по деньгам или хуевыми пайками и гидроизоляцией, а потом вся эта умная срань начинает гореть вместе с частным домом. из последних случаев - сгоревшая веранда из-за коротыша в ступенчатой подсветке садовой дорожки и ебнувший пивной котел. доверьтесь промышленности (хоть китайской) и мигайте диодами с кроной
раскрыть ветку 2
0

Предохранители, автоматы, нее не слышал. Почти вся электрика 5в, но про безопасность всегда надо помнить. И да, пожарная сигнализация тоже, на той же Ардуино.

раскрыть ветку 1
0

Это научился делать )))). И встроенным и внешним. С этим-то проблем нет.

-3

На малинке это можно сделать быстрее и удобнее. Да и синтаксис питона полегче С++.

раскрыть ветку 20
+4

А ещё можно отлить колокол из титана и ударять по нему маятником разгоняемым гауссовой системой и питать это РИТЭГом

раскрыть ветку 1
+2

Годная идея. Надо только еще кластер из NVidia Tesla рядом поставить, чтобы управлять всем этим делом.

+1
Зачем на малинке? Давайте сразу полноценный комп воткнем, что мелочиться?
Про синтаксис питона не соглашусь. С++ мне, кажется, проще. Питон я пока ещё не осилил.)
раскрыть ветку 13
+3

Так-то Python проще. Другое дело, что если привык к C-образному синтаксису, подташнивает на поворотах. Это сугубо про язык. То что малина тут не уперлась - согласен.

0
Надо ноут поставить в коридор и там сделать батник который запускает аудио калокольчика и по расписанию запускать этот батник . делов то. можно старым дохлый ноутом обойтись . 20к + трата за энергию . оно будет от сети работать .
раскрыть ветку 4
-2

Ну тогда вместо малины можно Omega2+ использовать. Вот этот маленький linux монстрик специально разрабатывался для IoT.

раскрыть ветку 6
0

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

раскрыть ветку 3
0

А я вот ардуино ни разу не изучал. Как хоть она в работе?
Но у малинки есть некоторые минусы: она плохо работает с аналоговыми датчиками. Для этого нужны дополнительные аппаратные компоненты.
И еще один минус: малинка очень слабо умеет в реалтайме.

раскрыть ветку 2