Обновить
128K+

Программирование микроконтроллеров *

Учимся программировать микроконтроллеры

302
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Разбор мат-модели четырехногого робота-«паука»

Время на прочтение4 мин
Охват и читатели9.9K

Хотел бы рассмотреть код открытого проекта робота-"паука" с 12DoF

Разберем по косточкам весь скелет и код, управляющий им.

TLDR: инверсная кинематика, теорема косинусов

Поехали!

Новости

Я просто хотел часы, которые не нужно подводить. Всё закончилось Pi Zero и LLM

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели13K

Это история о том, к чему привело моё желание иметь часы, которые в магазине не купишь.

Ещё с детских лет у моей кровати всегда стояли какие-нибудь дешёвые часы с красными семисегментными индикаторами и функцией радио, купленные в Walmart или Target. Это всегда были дешёвые, простые и живучие модели — вот только все они неизменно требовали ручной подстройки при переходе не летнее/зимнее время и при сбое питания. И после недавнего такого сбоя, когда я в очередной раз стоял у тумбочки, зажав кнопку «TIME» и лихорадочно нажимая кнопку «HOUR», моё терпение лопнуло: «Мы прожили уже четверть 21-го века. Должен же быть какой-то более совершенный способ!»

В моём представлении идеальные часы должны уметь сами настраивать время. Они должны автоматически переходить на летний/зимний режим (или нет, в зависимости от того, чем закончится этот законопроект) и компенсировать погрешность хода, всегда показывая точное время вплоть до миллисекунд. Плюс они должны показывать это время на семисегментном дисплее красными цифрами — не синими, не зелёными, не жёлтыми и уж точно не белыми. И всё это не должно требовать установки всяческих мусорных шпионских приложений.

Читать далее

В заголовке моего ELF есть точка входа. Оказалось, её никто не читает

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели7.7K

Три статьи я собирал файл и отдавал его эмулятору, ни разу в него не заглянув. Заглянул. Внутри два разных описания одних и тех же байтов, ответ на вопрос, откуда взялся адрес 0x80000000, и поле, которое я заполнял зря.

Ну, открываем!

Мониторинг удалённых объектов без интернета: ESP, MacroDroid и старый Android

Время на прочтение10 мин
Охват и читатели11K

«SIM800/900 против старого телефона: битва за дачу»

В системах удалённого мониторинга часто требуется передача данных из точек без покрытия интернета. Классическое решение — GSM-модули семейства SIM800/SIM900, управляемые через AT-команды, но у этого подхода, на мой личный взгляд и опыт, есть недостаток - написать кучу AT-команд.

 Одна из альтернатив — использование старого Android-смартфона как GSM-шлюза. У него уже есть: сотовая связь (для SMS), Wi-Fi (для локальной сети без интернета с ESP), установленное приложение MacroDroid и аккумулятор, зарядкой которого тоже можно управлять через MacroDroid

Осталось только «подружить» его с микроконтроллером.

В этой статье я предлагаю архитектуру двусторонней связи между ESP и телефоном через SMS с использованием HTTP-протокола в локальной сети. Рассмотрены сценарии:

Запрос статуса от пользователя (SMS от пользователя  → Телефон с MacroDroid →  ESP → Телефон с MacroDroid → SMS пользователю)

 Экстренные уведомления от ESP (ESP → Телефон с MacroDroid → SMS пользователю)

 Всё работает без интернета, без облачных сервисов, без SIM800/900. Только ESP c MicroPython и  старый сотовый телефон с MacroDroid, в который мы вдохнем жизнь и пусть он проведет остаток своей жизни с пользой.

 Прежде чем приступить к описанию сценариев, необходимо уточнить несколько технических моментов.

 1. Схема сети

Телефон работает в режиме точки доступа (AP) название в телефоне примерно «Мобильная точка доступа и модем», WiFi должен быть отключен (желательно в настройках убрать галочку с Автоматическое включение WiFi). В созданной телефоном локальной сети телефон (он же роутер) обычно имеет IP-адрес 192.168.43.1. В настройках «Мобильная точка доступа и модем» есть название сети и пароль (или вы сами их можете задать), которые необходимы для подключения к сети и нужен для написания кода на микроконтроллере.

Читать далее

Клиент-сервер на ESP (MicroPython): чистый socket и прикладной HTTP — конспект-справочник

Время на прочтение19 мин
Охват и читатели8.1K

Минимум библиотек — максимум понимания

В этой обзорной статье-конспекте мы будем работать с чистым модулем socket — без готовых библиотек вроде Microdot, urequests или MicroWebSrv2.

 Почему мы отказываемся от готовых решений?

 Понимание «под капотом». Когда вы знаете, как работает socket, любая сетевая библиотека становится прозрачной. Вы перестаёте быть заложником чужого кода и начинаете понимать, что на самом деле происходит в программе.

 Экономия памяти. Для ESP8266 (особенно для модулей ESP-01S с 1 МБ Flash) каждый килобайт на счету. Готовая библиотека может весить 10–20 КБ, а чистый socket решает те же задачи с минимальными затратами.

 Гибкость и независимость. Вы не привязаны к сторонним решениям и можете адаптировать код под любую, даже самую нестандартную задачу. Библиотека есть не всегда, а socket — есть всегда.

 Этот материал — не просто статья, а личный конспект-справочник, к которому можно возвращаться в своих проектах. Мы пройдём путь от подключения к Wi-Fi до полноценного веб-сервера, работающего в неблокирующем режиме.

 Сокет — это программный интерфейс для обмена данными между устройствами по сети. Если проводить аналогию, то серверный сокет — это дверь, в которую стучатся клиенты. Клиентский сокет — это человек, который стучится в дверь и ждёт ответа.

 Сокет работает на уровне транспортного протокола — TCP или UDP. Он умеет:

 - Устанавливать соединение (connect() для клиента, accept() для сервера).

- Отправлять и получать данные (send() и recv()).

- Работать в блокирующем или неблокирующем режиме.

Читать далее

Моя рекурсия зависла навсегда, и это был правильный результат

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели10K

Написал рекурсию тем же приёмом, что во второй статье, и программа повисла навсегда: возвращаться ей было некуда. Чиню, завожу стек и по дороге выясняю, что регистра sp в наборе команд нет вовсе. А потом урезаю стек до 128 байт, и сборка об этом не говорит ни слова.

Ломать второй раз!

ESP32 + MicroPython + трубка Гейгера: как за вечер собрать детектор радиации

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели13K

Радиация окружает нас повсюду – естественный радиоактивный фон присутствует всегда и везде. Имея под рукой плату ESP32 за 8 долларов, OLED-дисплей за 3 доллара, MicroPython и трубку Гейгера – Мюллера, можно без труда собрать полноценный детектор радиации. Он сможет не только выводить текущие показатели на экран, но и отправлять данные на GMCMap, в Home Assistant и другие сервисы.

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

Читать далее

Как PVS-Studio улучшает качество embedded-проектов

Уровень сложностиПростой
Время на прочтение16 мин
Охват и читатели10K

Embedded-разработка отличается множеством уникальных настроек, компиляторов и систем сборки. А при использовании стандартных методов анализа могут возникать сложности. Для решения этой проблемы PVS-Studio предоставляет специально разработанный механизм. Давайте узнаем о нём больше и посмотрим, как его можно применять на практике.

Читать далее

Изделие «ЗАМ—3П»

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели9.4K

ЗАМ-3П — оптический считыватель орловского производства ЗАО «Протон‑Импульс». Эксплуатировался в нулевые года. Устанавливался в основном на чёрные входы жилых домов или учреждений.

Читать далее

Отечественный микроконтроллер MIK32 “Амур”: устанавливаем рабочее окружение в пару кликов

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели8.4K

Российские микроконтроллеры существуют не только в новостях и реестрах. Возьмём МИК32 «Амур», настроим рабочее окружение в несколько кликов и запустим на нём первую программу.

Читать далее

Добавляем надежный recovery в Xiaomi Band 10 Pro

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели10K

В руках у меня новые часы от Xiaomi, Smart Band 10 Pro, у них есть приличный минус в системе recovery, который устранен в других часах линейки Сяоми, я расскажу об устройстве данной модели, структуре прошивки, пакета OTA и покажу какое решение решение я реализовал, чтобы улучшить механизм восстановления часов.

Читать далее

Генератор M-последовательностей

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели10K

В радиолокации и цифровой связи есть острая потребность кодировать зондирующие импульсы уникальным цифровым кодом с хорошей автокорреляционной функцией.
Для преодоления помех надо закачивать в импульс существенно большую энергию. Энергию можно закачивать в двух направлениях: либо в амплитуду передаваемого сигнала, либо в длительность излучения. Амплитуду невозможно увеличивать до бесконечности. Остается увеличивать длительность зондирующего импульса. Однако длинные монотонные импульсы портят разрешение по дальности. Чтобы не проиграть в разрешении по дальности длинные сигналы надо как-то модулировать. Вот тут-то и выходят на сцену М-последовательности.

Читать далее

Необычный ремонт LCD Roland JUNO-G

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели21K

Довольно давно у меня в кладовке пылился синтезатор Roland JUNO-G. Его поразила родовая болезнь – быстрая смерть LCD, замену которому Roland выпускала по конским ценам, а потом и просто прекратила выпуск. При этом в остальном синтезатор полностью рабочий и выбрасывать его было жалко. И тут, спустя много лет, мне попался репозитарий на GitHub с описанием способа нестандартного ремонта дисплея Roland JUNO-G. Я осуществил его на собственном синтезаторе и хочу немного рассказать об этом. Тема интересная, поскольку таким образом можно восстанавливать разную устаревшую технику.

Читать далее

Ближайшие события

time.ticks_ms() в MicroPython: как не блокировать код и выполнять задачи конкурентно на ESP

Время на прочтение11 мин
Охват и читатели10K

Очень часто в программировании микроконтроллеров используются блокирующие задержки: delay() для Arduino, time.sleep() для MicroPython. Эти функции просты и понятны, но у них есть фундаментальный недостаток: они останавливают выполнение программы на заданное время, делая систему нечувствительной к внешним событиям. В этот промежуток времени процессор не выполняет никакой код, не проверяет таймеры, не обрабатывает события и не реагирует на прерывания. Это как повар в ресторане, который ставит суп на плиту и говорит: «Я ничего не буду делать 10 минут, пока он варится». За это время мимо проходят голодные посетители, другие кастрюли перекипают, а он просто сидит и смотрит на таймер.

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

В MicroPython есть, на мой взгляд, элегантное решение — time.ticks_ms(). Это способ заставить микроконтроллер ESP делать несколько дел одновременно — без прерываний, без Timer, без asyncio и сложных планировщиков. Достаточно просто… посмотреть на часы.

Это как повар, который включает плиту, смотрит на настенные часы, запоминает время и идёт готовить салат. Каждые пару минут он поглядывает на часы: «Прошло 5 минут — помешаю суп. Прошло 30 минут — выключу огонь». Он успевает управлять десятью кастрюлями одновременно, потому что у него есть часы на стене и система проверок.

В этой статье мы рассмотрим,

как с помощью функции time.ticks_ms() создать систему неблокирующих таймеров. Она позволит управлять реле, опрашивать датчики и отправлять SMS одновременно, без остановки основного цикла;

Читать далее

Эхолокация: микрофон и фазированная решётка из колонок

Уровень сложностиПростой
Время на прочтение15 мин
Охват и читатели17K

Представьте себе кромешную темноту карстовой пещеры, куда не проникают лучи солнечного света. В таких местах обитают маленькие, но очень интересные существа — летучие мыши. В непроглядной тьме эти ночные хищники уверенно летают, огибая каждый сталактит, и ловят крошечных насекомых для пропитания. Они не видят, но «слышат» окружающий мир с помощью эхолокации.

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

Читать далее

Двенадцать символов, двадцать один байт: как я научил голый RISC-V говорить «Привет, мир!»

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели9.5K

Без библиотек, без обвязок, без операционной системы под ногами. Реальный код на реальном железе — ну, почти реальном.
Пустая эмулируемая машина RISC-V, десяток строк ассемблера, и в терминале:
Сначала думал вывести «hello», как все.
Пусть будет «Привет, мир!»

Ну, привет!

Моя котельная

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели20K

На этот раз хочу описать контроллер и обвес для котельной, который я с переменным успехом ваяю уже с полгода. ESP32, Kinkony A16, Modbus, тепломер, Arduino в слейв-режиме по i2c, ШИМ-управляемые насосы, дашборд, ну и MQTT. Тупой газовый котёл, гидрострелка, тёплые полы. Если эти слова вам близки, или хотя бы интересны - может и моя статья пригодится.

Итак, начиналось всё как всегда со статьи на Хабре. Кажется вот этой: Kincony KC868-A16: контроллер 16-го уровня. Ну или даже нет, если быть совсем точным, началось всё с комментария в одной из статей, что эта железка на озоне продается дешевле полутора тысяч рублей. В тот момент я еще не очень понимал, зачем мне эта штуковина, но решил взять, просто чтобы было.

Читать далее

Основатель движения мейкеров Дейл Догерти расспросил Майю и Свету об их проектах на нашем кружке электроники

Время на прочтение2 мин
Охват и читатели9K

Я писал в предыдущих постах, что наш митап по верилогу пригласили на мероприятие торговой палаты города Маунтин-Вью, Калифорния. И вот мероприятие состоялось. Ну, как я уже написал в заголовке, на наш стенд зашел Дейл Догерти, основатель журнала самоделкиных Make Magazine и выставок Maker Faire. Дейл расспросил Майю и Свету почему у них возник интерес к проектам с микросхемами малой степени интеграции.

Читать далее

Сонар из Музыкальной Колонки

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели16K

В этом тексте я написал про то как упражняться в радиолокации на основе экспериментов в акустическом диапазоне. Я собрал прототип сонара и попробовал определять расстояния до условных целей.

Читать далее

Метеостанция на LoRa и ESP32, которая годами работает от батарейки

Уровень сложностиПростой
Время на прочтение23 мин
Охват и читатели13K

Ранее в своих статьях я рассказывал, как подключать модули EBYTE LoRa к Raspberry Pi и Repka Pi (ссылки в конце этой статьи). Но такие микрокомпьютеры потребляют довольно много электроэнергии и не «проживут» долго на аккумуляторе. 

Сами по себе модули LoRa в спящем режиме весьма экономны и могут годами работать на автономном питании, если после передачи данных «засыпают» на длительное время. Но вся эта экономия сработает, только если они будут управляться микроконтроллерами, способными переходить в спящий режим и просыпаться по таймеру.

В этой статье на примере метеостанции я расскажу о том, как создавать узлы сбора данных LoRa на базе микроконтроллера ESP32-S3, установленного в модуле Heltec Automation HTIT‑WB32LAF V3. Микроконтроллер может переходить в состояние глубокого сна, когда работают только часы реального времени и память RTC, а вся периферия отключается. В результате узел сбора данных может работать очень долго, питаясь от аккумулятора.

Читать далее
1
23 ...