Программируем метеостанцию в FLProg.

Программируем метеостанцию в FLProg.

Преобразуем изображения и GIF анимацию в код для Arduino

Сейчас в продаже доступно много разных Ч/Б дисплеев, в том числе и OLED. Для того, чтобы получить красивое черно-белое изображение для этих дисплеев, с глубиной цвета всего 1 бит, но в тоже время с имитацией полутонов, как на представленной ниже картинке — нужно использовать преобразование по алгоритму «Floyd-Steinberg».

Я, наверное, Вам уже надоел своими конвертерами, но не спешите с оценкой. Этот конвертер, в отличие от предыдущих, может преобразовать изображение любого масштаба и с любой глубиной цвета в требуемый размер и сразу получить на выходе готовый Си код понятный Arduino IDE или другому компилятору.

Можно, конечно, использовать графический редактор со встроенной функцией дизеринга Floyd-Steinberg, но ради пары картинок, нет желания изучать функционал этого сложного ПО. Да и как правило эти редакторы в основном платные. По этому я представляю он-лайн инструмент для конвертирования изображений полного цикла, с возможностью подстраивать детализацию выходного изображения.

Для примера загружаю изображение автомобиля в онлайн конвертер. При помощи ползунков «Яркость» и «Контрастность» добиваюсь максимально детализированного изображения на предпросмотре. На выходе получаю Ч/Б картинку с заданными мною параметрами разрешения и исходный код этого изображения. Полученный код можно скопировать и вставить в свой проект.

Пошаговая инструкция для преобразования

1 — Выберите изображение на своем ПК, нажав на кнопку «Выберите фаил» и загрузите его в он-лайн конвертер. Изображение может быть цветным или ч/б с любой глубиной цвета и любого размера.

2 — Укажите требуемый размер получаемого на выходе преобразователя изображения.

3 — При помощи бегунков «Яркость» и «Контрастность добейтесь наилучшего результата на предварительном просмотре.

4 — Укажите название изображения латинскими буквами.

5 — Скопируйте полученный Си код и вставьте его в свой исходник.

6 — При необходимости сохраните преобразованное изображение, нажав на изображении правую кнопку мышки.

Преобразование GIF-анимации

Для реализации ардуино проекта, мне понадобилась черно-белая GIF-анимация. В интернете я нашел простой, пакетный способ преобразования картинок. Которым я с Вами, с удовольствием, делюсь. Ссылка на автора.Для конвертирования GIF-ок в черно-белый формат. Потребуется приложение IrfanView. Скачиваем и устанавливаем его на свой ПК.

Запускаем приложение и загружаем в него GIF-ку. Потом жмем на кнопку меню „Сервис >> Извлечь все кадры“. После чего приложение извлечёт из ГИФ-ки все кадры изображений и сохранит их в той же папке, в которой находится сам файл анимации.

Следующим шагом нужно преобразовать все кадры анимации в черно-белые картинки, с требуемым для дисплея размером. Для этого жмём в меню „Файл >> Преобразовать“. Или кнопку „B“ на клавиатуре.

Сначала нужно указать, в какой формат нужно преобразовать, для этого нажимаем кнопку „Обработка“И активируем все параметры, которые отмечены на скриншоте ниже.

После чего выделяем все ранее преобразованные картинки и жмем кнопку „Добавить“. И следом кликаем на кнопку „Выполнить“. После чего, в этой же папке появятся преобразованные ч/б изображения.

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

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

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

Подключаем дисплей к АрдуиноДля проверки анимации, понадобятся следующие компоненты:Arduino nanoOLED SH1106Провода соединительные

Соединяем дисплей с Arduino по следующей схеме:

Скетч для АрдуиноСкетч настолько простой, что даже комментировать в нем особо нечего.Для воспроизведения анимации я вызываю простейшую функцию и предаю ей все требуемые параметры. Такие как: размер изображения по горизонтали и вертикали, длительность показа кадров, количество кадров в анимации, число повторов воспроизведения, имя массива указателей и цвет изображения, который в данном случае может принимать всего 2 значения: черный или белый. Учитывая не большой объем памяти программ контроллера ATmega328. Нужно учесть, что прокручивать в одном скетче несколько анимаций практически невозможно. Хотя если эти анимации будут маленького размера и с небольшим количеством кадров, то можно попробовать их запихнуть.

Для скетча так же потребуется библиотеки OLED_SH1106 и Adafruit-GFXТак же можно скачать весь ардуино проект со всеми изображениями.

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

Контроллер для теплицы

В прошлом году подвязался изготовить контроллер для мини теплицы (гроубокса). Наконец закончил. Фактически это умное реле с 10 каналами и датчиками. В теории можно использовать где угодно предварительно настроив прошивку. Осторожно, будет много фото.

Раньше пилил несколько постов с промежуточными этапами. Теперь почти финал.

На борту 10 каналов, из которых 8 для управления постоянным током (4 с шим) и 2 для управления переменным током с детектором нуля. Управление светом(досвет красным), температурой, вентиляторами, ультразвуковым испарителем, автополивом или аэропоникой и т.д. Датчики температуры/влажности AHT10, температуры DS18B20, воды или влажности почвы. Также на борту пищалка, модуль часов реального времени, блютус для управления, резистивный делитель для измерения напряжения на входе.

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

С драйверами для управления мосфет было бы идеально, но пока подключение через резистор 100 ом. Так же пытался использовать микросхему ACS712 для измерения силы толка, но что то пошло не так. С помощью ЛУТ перенес на стеклотекстолит.

Почти без косяков. Совсем немного подкрасил и закинул в раствор персульфата аммония.

Не знаю зачем сделал эту фото, но пусть будет. Очистил флюс бензином.

И начал готовить детали.

Показалось логичным использовать разъем для питания процессора с материнской платы. При 10 амперах с ним должно быть все в порядке и удобно подключать дешевый блок питания от ПК. Другой ракурс.

Нужно больше фотографий. Покрыл акриловым лаком на всякий случай.

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

И наконец фото готового устройства. В таком виде контроллер уехал Сергею. Ни одной кнопки, ни одной лампочки, ничего. Управление командами по блютус. Следующий шаг, это добавление ESP8266 или ESP32 для интеграции в умный дом. Заказ заводских плат в Китае. Добавление экрана и крутилку/кнопки для управления. Использование драйвера для управления мосфет и прочие мелочи.

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

Светодиодный ночник своими руками из подручных материалов

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

Например, для этого светильника я использую банку из-под морской соли, которую мне дарили. А провод — это старый нерабочий USB кабель от телефона. Понятно, что электронику ESP8266 и светодиодную гирлянду нужно покупать, но без красивого корпуса это просто железки.

· Управление с приложения;

· 18 световых эффектов;

· 16 статических цветов;

· Автопереключение позволяет переключать световые эффекты через заданное время;

· Настройка источника питания (задавать ток источника питания в прошивке);

· Простой способ узнать IP светильника.

И в итоге получаем вот такую красоту.

Конечно, фотографии не передают всей красоты и насыщенности цветов. Но даже на них светильник выглядит достаточно красиво.

Схему подключения и исходные материалы скачать можно на сайте разработчика.

Надеюсь моя информация будет полезной.

Спасибо! Всем добра!

Аквазамок

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

Через некоторое время один из приятелей спрашивает - Стасян дай ключ, я сигареты достану". и Стас такой хлоп, хлоп себя по шее, а ключа нет. Короче обыскали мы берег, место где загорали, плотик с которого ныряли и естественно ничего не нашли, начали дергать двери, отгибать и найденной проволокой цеплять солдатик блокировки двери, где то через пол часа периодических отбираний проволоки друг у друга дверь была открыта и слава ВАЗу ключ зажигания у автомобиля был отдельный что позволило без проблем запустить автомобиль и добраться до дому.

Через пару лет оказались мы практически той же компанией в аквапарке где всем выдали браслеты с меткой для открытия ящичков в душевой и оплаты в баре, после некоторого времени купания и сидения в парилке Стас изрекает показывая на свой силиконовый браслет -"Вот им бы открывать машину, а не шкафчик в душевой, ключ то теперь один и мочить его нельзя он с кнопками и чипом иммобилайзера и если потеряется или намокнет то никуда мы уже не уедем".

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

После установки "Аквазамка" в автомобиль надевается РФИД браслет на руку и автомобиль закрывается, для этого нужно приложить к лобовому стеклу запястье с браслетом в определенное место где наклеена антенна. Далее идут водные процедуры и открытие центрального замка так же приложением запястья. Замок показал себя с лучшей стороны на горнолыжном курорте где вся одежда промокала насквозь, в походах в баню и купание в проруби. Вот схема замка на ардуино нано и модуле RDM 6300

А это видео про изготовление такого замка.

Симулятор Arduino, Raspberry Pi Pico, ESP32, FastLED, MicroPython

Для того чтобы начать создавать свои проекты с использованием различных плат Arduino, Raspberry Pi Pico, ESP32, Attiny85 достаточно перейти на сайт wokwi.com и выбрать нужную плату для разработки.

Симулятор просто незаменим для написания световых эффектов с использованием библиотеки FastLED.

Кроме программирования адресных светодиодных лент, можно запрограммировать светодиодные матрицы

Симулятор проектов на MicroPython

Проектом можно поделиться, нажав на кнопку «Share».

Надеюсь моя информация будет полезной.

Спасибо! Всем добра!

Шнекоход. Пробная версия

Шнекороторный снегоболотоход. Согласитесь, звучит настолько круто, что было просто необходимо попробовать это сделать. Ну, я и сделал :) Естественно, с кучей косяков из-за недостатка опыта в конструкторских делах, но все-равно получилось довольно забавно. Но обо всем по порядку.

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

С девизом "сначала делай, потом думай" было решено приступить к сборке.

Сперва я хотел собрать, любимую мной, фанерную тележку с лапшой, просто "чтоб потестить" шнеки. Ну примерно такую же, как когда я тестировал самодельные гусеницы:

Потом же я наткнулся на фотографию шнекохода ЗИЛ-4904 и подумал, вот оно, надо брать делать. И, в итоге, по приколу, решил стилизовать тестовую тележку под модель советской техники. Тем более, сделать кабину и чуток всяких держателей и крышек не составило особых проблем. Но, в остальном, тестовая тележка остается тестовой тележкой :)

прим.: Фотографию ЗИЛ-4904 не приложу, мало ли там авторские права, все дела, но гуглится она очень просто.

Близость Новогодних праздников и руки из одного места дают о себе знать. На деле, подход экстремального прототипирования дал сбой и полезли косяки. Мои, естественно :) Хотя платформа и тестовая, и косяки просто неизбежны, но, в этот раз, их как-то слишком много:

1) Вес платформы оказался намного больше, чем ожидалось, поэтому платформа в свежем снегу часто тонет и буксует. Это, в принципе, еще легко решается: путем увеличения диаметра шнеков.

2) Выбранные моторы просто катастрофически слабые. В процессе сборки, я как бы догадывался об этом, но отгонял эту мысль подальше. Т.к. других моторов у меня пока что нет, а переделывать платформу под размеры поменьше не хотелось.

3) Отказ работы li-ion аккумуляторов на морозе. Винить я их не могу, сам в такую температуру на улицу выходить не хочу -_-. Бороться с этим, вообще, пока что без понятия как. Только сейчас понял, что до этого не делал ни одного зимнего проекта. Тут даже вопрос не только по аккумуляторам, но и в целом, с температурой, т.к. моторы тоже клинило на морозе. Буду рад советам, если кто в этом шарит.

4) Ну и по мелочи: смещенный центр масс, отсутствие некоторых электронных компонентов и т.д.

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

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

Тем более, например, то же гусеничное шасси, как аналог для зимних проектов, сделать намного сложнее. Так чтоб оно еще и не разваливалось на ходу. Шнекороторное, на мой взгляд, понадежнее. Правда, это с учетом наличия 3d принтера и если речь о небольших тележках, для которых шнек напечатать можно. ИМХО, конечно.

Так что шасси - топ. Исполнение - шляпа. Полученный опыт - бесценен. Вам - добра.

До встречи, я надеюсь :)

Полное видео, со сборкой, тестами и прочим (там же ссылки на модели):

Formula Arduino (Упоротый геймдев)

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

Среди прочего мусора глаз зацепился за Arduino Yun, да старый символьный LCD Winstar 2004. Из полезной рассыпухи был только переменный резистор на 10К - стандартный как ничто.

В голове крутилось, что надо срочно что-то заделать. Но что?

Я ведь вроде гей(м)-девелопер, какой никакой степени паршивости. Значит надо делать игру. Но покупать кнопки было лень, да и экранчик маловат - длинный, но невысокий.

Штош, значит игруля должны быть псевдо-вертикальной. А что вертикальное у нас? Шмапы, да гоночки. Ну и арканоиды всякие. Тут то как раз резистор и подойдет - управлять корабликом/машинкой/ракеткой, да еще и модно - аналогово!

Выбор пал на гоночки.

Экран самый попсовый, без всяких вам i2c. 20х4 символов. Для его обуздания используется стандартная уже библиотека LiquidCrystal. Управление игрой - только через переменный резистор в 10Ком, который мы считаем рулём :) Резистор подключен к аналоговой ноге и считывается как источник аналогового сигнала. Рулем же игру запускаем и из стартовой картинки.

Суть игры - нужно ехать и не врезаться, набрав побольше очков. В игре 2 поверапа - бонус в 500 очков и увеличение скорости (эдакий антиповерап).

Основная проблема аналогового управления игровым "персонажем" при отображении на сегментном экране - как раз сегментность этого самого экрана. 4 фиксированные позиции могли свести на нет всю идею аналоговости. Но тут на помощь приходят программируемые символы, доступные для этого экрана. Ин крайне немного, но достаточно для имитации плавного руления.

Машинка помимо чистого отображения ровно в одном символе имеет "межстрочные" варианты отрисовки ( на видео ниже это прекрасно видно). Тут битовые маски собраны так, чтобы при межстрочном отображении часть машинки рисовалась на одном символе, а другая часть уже на другом. Физически в игре такая отрисовка смысла не имеет, косметически же выглядит мягко и непринужденно. В результате рулем мы имеем условные 32 считываемых стабильных положения, которые интерпретируются в 8 псевдокадров отрисовки. Физика столкновений же работает все с теми же 4 стабильными символами (4 же строки). Такая вот магия визуального обмана.

Второй вопрос - Ардуино таки достаточно медленный. А гоночки нет :) Тут без имитации двойного буфера не обойтись. Идея такова - есть буфер экрана, который отрисовывается символ за символом. И есть заэкранный буфер, в который быстрым копированием всего массива копируется очередной пресет дороги. Пресетов наваять можно достаточно много - зависит только от доступной памяти. Причем все пресеты сохранены через PROGMEM, иначе оперотивочка закакивается моментально и становится все плохо.

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

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

Случайность появления пресетов дороги неслучайна. Так как точки въезда в пресет могут быть разные и тупая случайная выборка может породить неразрешимые тупики, если у пресетов вьезд и выезд сильно различаются по положению - пришлось вводить понятие "резолверов".

Резолвер - это привязанный к пресету массив с номерами допустимых "следующих" пресетов, из которых рисовалка дороги и выбирает следующий случайный.

Ну а в остальном - классический подход. Обычная стейт-машина, куча кривого кода и масса мест с TODO.

Ну и спецэффекты, куда без них. Люблю я на подобных штуках всякие анимации ваять.

Код игры - индусский до последней строчки. Оптимизаций можно напилить еще вагон, сам код местами избыточен, местами джунен и вообще меня волновало только экономия оперативоньки, коей всего 2Кб, поэтому говнокостыльного кода много.

📎📎📎📎📎📎📎📎📎📎