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.

Arduino & Pi

1.4K постов20.6K подписчика

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Вы смотрите срез комментариев. Показать все
DELETED
Автор поста оценил этот комментарий

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

раскрыть ветку (20)
4
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

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

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

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

Автор поста оценил этот комментарий
Надо ноут поставить в коридор и там сделать батник который запускает аудио калокольчика и по расписанию запускать этот батник . делов то. можно старым дохлый ноутом обойтись . 20к + трата за энергию . оно будет от сети работать .
раскрыть ветку (4)
1
Автор поста оценил этот комментарий

20к?

Старый дохлый ноут, достаточный для таких задач, стоит 2-3к, а то и меньше. 

раскрыть ветку (3)
Автор поста оценил этот комментарий
ну школа же бушный не купит . тендер и тд . Под старым имел ввиду устаревшие комплектующие
раскрыть ветку (2)
Автор поста оценил этот комментарий

О закупках и официальной установке тут речи не идёт. В этом случае это гора согласований и выбивание денег из отсутствующего на это бюджета.


Если речь о гипотетических затратах на гипотетическую реализацию, в любой школе уже есть компьютер, достаточный для таких задач. В моей, например, до сих пор в кладовке БК стоят, и при наличии определённых знаний и острой тяге к извращениям, даже их будет достаточно.

раскрыть ветку (1)
Автор поста оценил этот комментарий
Или можно на китайских микрокотроллерах за руб 500 .
DELETED
Автор поста оценил этот комментарий

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

раскрыть ветку (6)
2
Автор поста оценил этот комментарий
Нахрена ты на столь тривиальную задачу, которая, в целом решается при помощи пары-тройки релюшек, пытаешься всунуть такие вычеслитильные мощности?
раскрыть ветку (5)
DELETED
Автор поста оценил этот комментарий

1. Управление по локалке с любого смартфона. Либо доступ из любой точки мира со статическим IP.
2. Удобство: готовый веб-интерфейс управления
3. Опять же, в условиях разработки "умного дома", важно не только управлять устройствами через интернет, то выполненять задания по расписанию и реагировать на события друг друга.

раскрыть ветку (4)
1
Автор поста оценил этот комментарий
Зачем это все _обычному_школьному_звонку?
Вы ещё предложите всем в школе смс-ку за 5 минут до звонка отправлять.
раскрыть ветку (2)
DELETED
Автор поста оценил этот комментарий

Годная мысль!)))
А если прикрепить вебку, то можно фоткать того, кто нажмет на звонок раньше времени.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Блютус! Не знаю, зачем он здесь, но все любят блютус!

Иллюстрация к комментарию
Автор поста оценил этот комментарий
Про выполнять задачу по расписанию - согласен. Это то, что мы, в общем-то ожидаем от школьного звонка.
Про рреакцию на событие - не понял. Какое событие? Ученик сбежал с уроков через окно?
Управление ззвонком через интернет - тоже сомнительная идея. Кто-то из школьников может ломануть и бесить всю школу.
Автор поста оценил этот комментарий

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

раскрыть ветку (3)
DELETED
Автор поста оценил этот комментарий

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

раскрыть ветку (2)
2
Автор поста оценил этот комментарий

Для реалтайма как раз и придумали контроллеры

Автор поста оценил этот комментарий
Малинка отлично умеет в реалтайме. Просто надо операционку тоже реалтаймовую ставить. А лучше вообще на BareMetall, если реалтайм нужен.
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку