Парусник “NaN” сигналит SOS (See Our Success) Raspberry Pi, азбука Морзе и MQTT: вместе веселее
Меня зовут Вова Балакин, я из московской школы на Юго-Востоке имени Маршала В.И.Чуйкова (классов “Силаэдр”: vk.com/silaedr), закончил 5 класс, интересуюсь программированием и техникой. Я хочу рассказать, что я делал этой весной. У меня был парусник, он назывался “Not a Number”(“NaN”). Выходить в море без сигнализации опасно, поэтому я подумал, что ему на мачте не хватает сигнальных огней. А лучше — сигнальных огней, которыми можно управлять удаленно. А лучше — удаленно из любой точки мира! У меня был Raspberry Pi — и тогда я придумал…
Чего мне захотелось (Постановка задачи)
… что можно прикрепить к мачте светодиод, соединить его с Raspberry Pi и запрограммировать так, чтобы из Интернета было возможно отсылать паруснику любое сообщение — и оно переводилось в код Морзе — и диод на мачте мигал в соответствии с этим кодом. И на ту же мачту закрепить фоторезистор — декодер кода Морзе, чтобы другой компьютер в Интернете мог получить переданный код.
Что у меня вышло (Результат)
После двух месяцев проб и ошибок у меня получилось написать программу, которая через MQTT-брокер(http://www.hivemq.com/demos/websocket-client/) позволяет любому человеку в Интернете, знающему Topic — секретный ключ для передачи сообщения клиенту, — отправить абсолютно любое сообщение написанное латиницей — и светодиод на мачте моего промигает его азбукой Морзе!
Вот в целом как это работает: мы пишем сообщение и отправляем его MQTT-серверу, а он в свою очередь отправляет его на Raspberry pi, который переводит его в код Морзе и подмигивает светодиодом в соответствии с кодом.
Вот код на Node.js на гитхабе.
Как мне пришлось помучиться (Инструменты и методы)
Сначала я писал на Python3. Но подключить питон к MQTT у меня не получилось — не нашел нужной документации — и я перешёл на платформу Node.js.
Кроме того, на протяжении суток я пытался сделать дешифратор световых сигналов азбуки Морзе (с помощью фоторезистора) и установить его на ту же мачту того же парусника, но это не вышло, потому что фоторезистор (по крайней мере, тот, что был у меня) не способен различить свет даже от 5 светодиодов (разница напряжений при включенных и выключенных светодиодах была слишком мала).
Полезные советы тем, кто будет делать что-то подобное (Обсуждение).
Пишите сразу на Node.js, если хотите связывать потом код с MQTT. Законнектить Python с MQTT — задача не из легких.
Что сделано человечеством (Литобзор)
Перед тем, как начать, я погуглил, как такое сделать. Все части этого проекта по отдельности в Интернете описаны, всё вместе — не нашел.
- Статья на Хабре, про то, что хорошо бы такое осуществить (там еще много классных идей): habr.com/ru/company/madrobots/blog/243253
- Понятное видео на ютубе про MQTT и Raspberry pi: https:/www.youtube.com/watch?v=p3vJxGKWDIg"
- Азбука Морзе и NodeJS
- Raspberry pi и Азбука Морзе: www.youtube.com/watch?v=wiciIlsS0eo
Благодарю за ценные замечания и крутые советы моих учителей робототехники и информатики и старшеклассников моей школы!
VT100
Беги, юный друг! Беги от болота аппаратуры! Иначе руки и нос покроются ожогами, ржавыми гвоздями в голове засядут Закон Ома и правила Кирхгофа, старшие будут больно бить по самолюбию и явным недостаткам твоих первых схем, ...
В общем — "начал играть в орлянку и покатился" (м/ф "Остров Сокровищ").
Ivanii
Модулированный сигнал много проще выделить и усилить.
anonymous
Буханкатролейбус.jpg, уж извините…
da-nie
Есть нюанс:
Проблема в том, что сейчас детей привлекают всякими кружками робототехники и подобным, не сообщая, что вообще-то использованные там технологии требуют образования в области электроники. Поэтому ребёнок собирает обманчиво простые работающие конструкции и уверяется, что всё действительно просто. Вместо этого стоило бы начинать с советских книжек типа Борисова «Юный радиолюбитель» и подобных. Познакомиться с полупроводниками, познакомиться с аналоговой электроникой, потом открыть какое-нибудь «Искусство схемотехники» и перейти от транзисторов к ОУ. Вот только это совсем не 5 и даже не 11 класс (оцените устойчивость схемы с обратной связью?). Вот поэтому-то и получается «потому что фоторезистор (по крайней мере, тот, что был у меня) не способен различить свет даже от 5 светодиодов». Слишком рано браться за такие задачи без соответствующей подготовки. Мигать светодиодом с Raspberry PI тоже несколько странно. ESP8266 для этой цели (с передачей в инет) куда больше подойдёт, но в идеале потребует Си++ для своей IDE (всякие lua и micropython + at-команды не лучший выбор для ESP8266). Только в 5 классе это сделать вряд ли получится самостоятельно.
sim2q
Часто вижу это мнение. Если следовать этому подходу и сейчас, то получится, что как минимум половину времени нам надо уделить на литографию и всё вот это вот… Четно — сам не знаю как лучше. Возможно все подходы рулят, нужно развивать разное
da-nie
Нет, не на литографию. А на схемотехнику. А иначе получается вот такое вот. Автор той статьи, межу прочим, позиционирует себя как «Hardware разработчик». И пишет:
Каково?
Полно книжек, даже для детей. Поляков, например, писал «Посвящение в радиоэлектронику» — да прочтите же хоть кто-нибудь, прежде чем лабать схемы на ардуине и распберри с ESP! Но нет, лёгкость вхождения приводит к закономерному результату — зачем понимать, как это работает, если вот он, китайский модуль со всей обвязкой.
sim2q
Разный подход, на самом деле. Если я не получаю хоть какой, но быстрый результат — дело не идёт. Ну и задачи опять же. У меня куча знакомых с ардуинкой решили свои задачи будучи совсем не в теме. Правда глянув на схемы, пробовал немного там за безопасность откомментить — гальваническая развязка, защиты минимальные — да какое там. Уже и сам начал сомневаться, т.к. мои схемы все получаются громозскими из за того что всё питание обычно обмазано LC фильтрами, аналог, цифра разделены, пины хотя бы в диодах и керамике, а AVR иногда просто в розетку включают (не шучу!).
Ivanii
Нельзя начинать обучение простым вещам на навороченном железе иначе потом эти малины поселятся в фонариках, погодных датчиках, умных кнопках и прочих простых устройствах наплевав на необходимость и потребление.
Для подобных устройств и задач есть среда Ардуино, платы ардуино нано или ESP8266, к ESP8266 легко подключается Blynk.
kAIST
Так для детей то действительно нужно начинать с того чтобы показать что это просто. Если сразу лезть в дебри, то можно просто отбить желание. Мой поход в радиотехнический кружок где то в 5-6 классе этим и закончился — положили передо мной учебник и сказали что сначала нужно изучить вот это. А мне хотелось что нибудь собрать самому. Если бы с этого начали бы, то потом уже проснулся бы интерес к чему то более сложному и сам бы понял что надо изучать матчасть.
Это как с программированием. Можно попытаться сначала изучить механизмы импорта, а можно просто сказать, сделай import turtle, а далее по ходу уже углубляться.
da-nie
Однако, обычно люди на этом простом и останавливаются. «Зачем любить? Зачем страдать?» Цель-то достигнута. И остаётся привычка всё так делать всегда.
kAIST
Ну и что в этом плохого?
Те, кому будет интересно, будет углубляться в тему, но есть еще немало людей, для которых это просто хобби.
Я вот недавно чтобы помигать светодиодом (реле) взял платку esp32. Они у меня валяются (зачем то купил 10 штук), на решение задачи ушло ровно 5 минут, включая мою говнопайку. Изделие не серийное и одноразовое. Мог бы конечно не стрелять из пушки по воробьям, съездить за каким нибудь 555, изучить, расвести плату и пр… Но зачем? Это для меня хобби.
da-nie
В этом плохого то, что человек точно так же начинает решать промышленные задачи (когда они внезапно возникают). Помните, тут был цикл статей про очередной конструктор (с электродами к голове вроде бы) и там был детальный разбор массы нарушений правил безопасности подобной электроники? Так вот, этот тот самый случай.
madcatdev
Я думаю, что автор статьи еще успеет изучить основы, прежде чем уйти в промышленную электронику :)
remzalp
А вот тут сложная ситуация. У преподавателя четкий KPI — сколько ходит, сколько в процессе сбежало (и перестало платить :) — в случае с платниками или просто удержание аудитории, в случае бесплатного кружка по интересам.
Сейчас поколение Z и дальше, если у ребенка сразу не получилось, то сбежит дальше. Крайне редкий суперзамотивированный пойдет прогрызаться через аналоговую электронику до расчета и постройки первого мультивибратора. Остальные сбегут раньше, если на первом занятии у них не получится чего-то работающего.
Когда я вел аналогичные курсы, планировал так, что показываю фундаментальные вещи и тут же их применение. Дал закон Ома, подбираем светодиоду резистор, чтобы не спалить.
Тепловое действие электрического тока — а давайте к грифелю карандаша батарейку подключим…
Только так, каждый раз новое и обязательно интересное. Если бы шел по классике, с основ, до практики добравшись только через пару месяцев — добрался бы один.
PositiveAlex
Если это можно взять и использовать, почему нет? Вы же когда машину покупаете, не идете в техникум или универ, где изучаете фундаментальную теорию создания сложных технических устройств? Нет, конечно, вы просто изучаете мануал к автомобилю. Тут так же, для учебных проектов, чтобы зайти в область — нормально. И можно только порадоваться стремлению к инженерному делу. Дальше надо дать конструктивные советы по плану более глубокого изучения этого дела. Чтобы человеку было понятно, куда двигаться дальше. Как раз будет чем заняться до конца школы.
da-nie
«Все аналогии ложны». Машину ведь вы не используете в построении на её базе другого устройства. А эти компоненты используете, не понимая их сути, ограничений и возможностей. В результате, рождённое комбинацией этих элементов новое качество оказывается весьма странным, неоптимальным, небезопасным, громоздким и прочее, прочее.
«Царского пути в геометрию нет.» Вы не заходите в область, вы просто соединяете чёрные ящики не понимая происходящих в них процессов со всеми вытекающими. Например, вы берёте китайский модуль источника питания 220 В->5 В. Подключаете к ардуине и модулю усилителя. Провода подключаете, как в уже упомянутой выше мной статье, к голове и записываете сигналы. Но вы не в курсе, что в китайском блоке питания стоит просто резистор и конденсатор и гальванической развязки вовсе нет (что это такое вы тоже не знаете — никто ж не сказал, как надо делать, а вы не изучали). Или вы берёте непонятный для вас фоторезистор и ждёте отклика от него в распберри. Он отклика не даёт. Вы недоумеваете. Почему? А всё дело в том, что вы понятия не имеете, что такое фоторезистор и какими параметрами он обладает.
В данном случае, это просто развлечение. «Приколько, да». Никакого развития от такого применения китайских блоков не будет. Будет просто потребление впечатлений «вау, я от wi-fi управляю не изучав ничего, нихрена не понимая, что там внутри, что такое wi-fi, как работает светодиод и простейший транзисторный ключ, а так же целая ОС в распберри». Почему ругают ардуинщиков? Потому что они применяют свои скетчи, сделанных другими людьми, не понимая как вообще работает их устройство (даже в самых общих чертах). И на этом они и останавливаются. Почему останавливаются? Потому что дальше требуется изучать и развиваться, а до этого момента работает это самое потребление впечатлений (то самое «вау, работает само»). Примерно такую же функцию несли советские наборы радиокубиков и электронных конструкторов. Вы можете собрать схему из альбома, но как это работает вы не поймёте никак. Просто развлечение, не более.
PositiveAlex
Хорошо, соглашусь. С первым тезисами, с последним только отчасти.
Я бы хотел, чтобы от критики подхода, которую мы уже обсудили, перешли к плану обучения, который был бы грамотным с точки зрения комьюнити.
Вот, что бы вы посоветовали ему изучить и в каком порядке, каких авторов и какие книги в ближайшие 5 лет?
da-nie
Сейчас рано ещё читать книжки, а если и читать, то только что-то совсем простое и в игровой форме (типа энциклопедии профессора Фортрана, только по электронике). Потому что пятый класс недостаточен от слова совсем для чего-либо, кроме как для соединения готовых блоков. В пятом классе ещё физика в школьном курсе только-только началась (и не с электричества). То есть, курс с упором на развлечение пока что никуда не девается. Но в этом курсе надо обязательно (так как без этого человек начнёт считать, что он постиг дзен :) и начнёт полагаться на свой текущий опыт при построении любых схем без каких-либо сомнений и колебаний — а вот это и приводит к дилетантским решениям и соответствующим статьям) делать акцент на том, что реальная электроника гораздо сложнее, а сейчас они просто играют, и если кто-либо захочет ей заниматься, то следует обратиться к ней года через 3-4 (электричество в физике как раз в 8 классе проходят) и начать хоть с того же Полякова и Борисова. На этом, наверное, всё для школьного уровня (хотя собирать по альбому типовые схемы получится и у школьника). Дальнейшие изыскания доступны, наверное, только с соответствующем институтским образованием (электроника — это где-то аж 3-4 курс университета, хотя ТОЭ это где-то 2 курс).
grayfolk
Тут, вероятно, планировалась ссылка и забылась/не вставилась/etc
Rightech_IoT
А с чем проблема возникла на Питоне? Я использовала библиотеку paho-mqtt, работало без проблем.