Проект длиною в 2+ года
Наконец допилил свой хобби проект, с которым возился уже два года. Ну так, изредка периодически что-то допиливал, периодически ждал нужных компонент с али :). Все началось с того что захотелось домашние часы, которые не нужно переводить и им не нужно подводить время. Закончилось часами погодной станцией, с синхронизацией времени через интернет, с датчиками температуры, влажности, давления, CO2. Еще есть логирование всех датчиков и рисование графиков на веб интерфейсе. Кнопок на девайсе в принципе нет, при старте через мобильный конфигурируется к какому Wi-Fi подключиться и дальше оно все само. Единственны недостаток без подключения к интернету время не выставить. Потом уже, оно сохраняется во внутреннем RTC модуле и при пропаданиях интернета или электричества время не сбивается. Попутно купил еще 3D принтер, когда понял что все это нужно упаковать в какой-то более-менее достойный корпус. Все это едет на контроллере ESP32.
Когда у кого-то из близких день рождения, или на праздник часы периодически выводят салютик и соответствующее поздравление.
Самодельный WiFi танк. ESP-32 + Arduino
Всем привет, хочу поделится с вами своим танком.
Я cделал танк для того, чтобы научится делать подобные машинки и набраться побольше опыта с платами Arduino и ESP. Ну и вообще просто захотелось собрать что-то такое что б ездило и жужжало =)
Основные компоненты, которые я использовал:
*Модуль ESP-32-cam – в роли камеры и контроллера, который отвечает за роботу с WiFi.
*Arduino Nano – контроллер, который отвечает за управление двигателями и прием/обработку данных с датчиков.
*L298N – драйвер для двигателей (выбран из-за харизматичного вида).
*Датчики, которые есть на борту – ультразвуковой дальномер US-025; барометр BMP280; модуль акселерометр и гироскоп MPU-6050; термометр и гигрометр DHT-11, датчик Холла A3144 в роли импровизированного тахометра.
*Бортовое питание – два аккумулятора 18650 2000 мА*ч; повышайка MT3608; зарядка usb type-c.
*Корпус использовался от игрушечного танка – срезал верхнюю часть, замазал все дырки термоклеем, редуктор оставил родной, металлическая крышка вырезана из автомагнитолы, петля обычная дверная.
В целом выбор датчиков не обусловлен ничем кроме моего стремления поиграться с ними, по большему счету они ничего не делают, но создают мне базу для будущих экспериментов, а еще с ними танк выглядит как что-то серьезное).
Важно!
Скорее всего правильно подписывать картинки снизу, но ведь это не удобно прочитать описание, а потом листать вверх что бы приглядеться снова, по этой причине что бы не возникало путаницы предупреждаю – описание к изображению будет сверху.
Вид танка спереди. Можно увидеть зеленую плату с двумя «вылупнями» – это ультразвуковой датчик, немного похоже на глаза. Выше в очень аккуратном вырезе притаилась камера и хотя ее характеристики позволяют ей снимать мир в потрясающем разрешении в 2Мп (1600x1200) при практическом использовании ее разрешение меньше – 800x600.
Левый борт. Большинство датчиков размещены (с комфортом) на нижней зеленой плате, на правом краю платы можно увидеть рычажок который переключает танк в бесшумный режим – не будет пищать зуммер, который в свою очередь нужен для подачи танком служебных и оповещающих сигналов для разгона зевак на улице (что б не задавили танк). Так же видно торчащий как палка провод в правом нижнем углу, это датчик Холла, который закреплен напротив ведущей звездочки для подсчета ее оборотов (способ не очень, но работает). Этажом выше расположена Arduino Nano, отсюда она может эффективно распоряжаться своими подчиненными – датчиками и двигателями и общаться по выделенному каналу связи со своей подружкой ESP.
Правый борт танка. Тут можно увидеть: кнопку управления питанием, справа на белой коробке (корпус ESP) находиться красный рычажок, переводящий ESP в режим прошивки, чуть выше кнопка, выполняющая самую важную функцию – перезагрузку ESP. Слева на корме удобно устроился драйвер для двигателей L298N, его радиатор является важным элементом в дизайне танка. Ниже под гусеницей можно наблюдать два болта которые скрепляют крышку танка с его основным корпусом через петлю, данный элемент крепления намеренно сделан побольше для обеспечения структурной целостности и придания характерного вида танка.
Танк с открытой крышкой, вид спереди. Металлическая крышка выполняет несколько функций: обеспечивает эффективное использование пространства, облегчает монтаж элементов и самое главное придает танку бронирование (а танк ведь обязан его иметь). И просто это круто выглядит.
Танк с открытой крышкой, вид от кормы. На этой фотографии видно танковую батарею, моторы, спрятанный шнурок для прошивки ESP, плату зарядки аккумуляторов, которая позволяет танку быть в духе современности – type-C же. Можно еще увидеть кривой монтаж и вырез крышки, но все это элегантно скрывается не в фокусе.
Танк, вид от кормы – на зарядке. Снизу прикручен бампер, благодаря чему к танку можно прицепить трос для помощи своим менее везучим братьям.
Разобранный корпус для ESP. Сам корпус был сделан из остатков сигнализации (датчик движения), внутри обклеен фольгой для экранирования ESP от помех (и просто для красоты). Антенна взята от старого роутера. Данная коробка отлично дополняет стиль танка «из чего было – с того и собрал».
Внутренний вид корпуса ESP. Почти все контакты ESP заняты, снизу видно высокотехнологичное крепление, которое обеспечивает механическую прочность всей конструкции, а также позволяет легко вносить изменения. ESPшка довольно сильно греется во время стрима видео по этому на сам чип и стабилизатор заботливо наклеены радиаторы.
Для управления танком я создал приложение при помощи Unity (игровой движок). Конечно, можно было сделать нативное приложение для андроида, но чисто для прикола почему бы не сделать его на Unity, да?
Главный экран приложения. Вверху в шапке можно видеть всю нужную информацию, например качество связи, заряд батареи, последнюю отданную команду движения и пару-тройку датчиков. Внизу управление. Слева выход, журнал. Справа настройки, данные датчиков и кнопка послать звуковой сигнал. Уровень сигнала ноль, потому что это уровень сигнала от репитера (вторая ESP, в роли маршрутизатора для увеличения радиуса действия), но на тот момент танк был подключен напрямую.
Экран настроек. Можно поменять размер картинки, качество видео. Из прикольного автонастройка качества видео, если связь ухудшается и видео начинает идти с задержками, то приложение автоматически посылает сигнал танку для перенастройки качества сигнала. Работает не прям что идеально, но вполне сносно. Так же есть галочка для снятия защиты двигателей, не смотря на название двигатели оно не защищает, это защищает сам танк от зависания, когда на низком заряде двигатели выжимают последние капли из батареи и напряжения не хватает для контроллеров (да можно было бы сделать раздельное питание, но мне хотелось единое).
Экран данных с датчиков. Ничего такого просто датчики, просто данные. Часть из них к тому же не очень-то и настроена.
Демонстрация работы танка ниже на видео. Видео ускорено в 3 раза.
Выводы. Сам танк получился весьма непростым проектом, хотя я сделал его так как и представлял в своей голове изначально, в процессе я наткнулся на уйму багов, граблей и костылей, но зато теперь имею опыт создания подобного, а для этого я и делал танк.
В будущем я планирую сделать статью для того что бы поделится полученным опытом с сообществом, возможно это кого то вдохновит на нечто подобное, как когда то вдохновился я.
Бонусная фотография – танк на вечерней прогулке
Народная дозиметрия. Бюджетный дозиметр своими руками
Введение в проект DIY-дозиметра
Готов поспорить, что вы хоть раз задумывались о покупке дозиметра для бытовых целей - измерить уровень радиации дома, на прогулке или в путешествиях.
Сегодня мы соберем простой бюджетный дозиметр на базе WIFI-контроллера ESP32 и платы RadSens. RadSens - готовый I2C-модуль для газоразрядного счетчика Гейгера-Мюллера. В качестве сенсора будет использована надежная и распространенная трубка СБМ20-1. Впрочем, вместо нее к модулю можно подключить любую другую трубку - J305, M4011, СТС-5 и др.
Целью статьи является создание максимально подробной инструкции по сборке. Если повторить описанные шаги сможет самый юный инженер-дозиметрист - мы достигли успеха.
Но сначала, как принято, немного истории и теории…
Матчасть по газоразрядным трубкам
История счётчика Гейгера-Мюллера
Принцип работы счетчика Гейгера был предложен в 1908 году немецким физиком Гансом Гейгером. Счетчик стал дальнейшим развитием уже известной ионизационной камеры, представлявшей собой конденсатор, наполненный газом. Конденсатор использовался Пьером Кюри для изучения электрических свойств газов.
Ганс Гейгер (слева) работал вместе с Эрнестом Резерфордом (справа) с 1907 по 1913 г. (рис. 1)
В 1925 году под началом Ганса Гейгера Вальтер Мюллер создаёт ещё несколько типов счётчиков с чувствительностью к каждому открытому на тот момент виду излучения, а именно для α-, β- и γ-излучения (нейтроны были открыты только в 1932 году).
Как показало время, надёжный, дешёвый и простой счетчик Гейгера-Мюллера остаётся одним из самых распространённых способов измерения уровня радиации как в быту, так и в промышленности.
Принцип работы трубки Гейгера-Мюллера
Принцип работы основан на эффекте ударной ионизации газа в межэлектродном пространстве под действием радиоактивных частиц.
Трубка состоит из герметичного баллона из металла или стекла, наполненного инертным газом или газовой смесью. Внутри баллона имеются катод и анод. Для облегчения возникновения электрического разряда в газовом баллоне создается пониженное давление. Электроды подключаются к источнику высокого напряжения постоянного тока через нагрузочный резистор, на котором формируются электрические импульсы при регистрации радиоактивных частиц.
Участок схемы со счётчиком Гейгера-Мюллера (рис. 2)
В исходном состоянии газовый промежуток между электродами имеет высокое сопротивление, и тока в цепи нет. Когда заряженная частица с высокой энергией сталкивается с элементами конструкции датчика (корпус, баллон, катод), она выбивает некоторое количество электронов, которые оказываются в промежутке между электродами. Под действием ускоряющего напряжения электроны устремляются к аноду. Процесс многократно повторяется, и количество электронов увеличивается, что приводит к разряду между катодом и анодом. В состоянии разряда промежуток в межэлектродном пространстве становится токопроводящим, что вызывает скачок тока в нагрузочном резисторе.
Иными словами, под действием ионизирующего излучения происходит пробой, приводящий к разряду между электродами. Интенсивность разрядов прямо пропорциональна интенсивности ионизирующего излучения.
Компоненты для сборки дозиметра своими руками
Важнейшим критерием при выборе платы и комплектующих выступала стоимость используемых компонентов. Мы ставили задачу сделать дозиметр максимально бюджетным.
Для создания дозиметра-радиометра были выбраны следующие компоненты:
1) Модуль дозиметра - RadSens (от 3900 руб.)
RadSens - готовый модуль в сборе с популярной трубкой СБМ-20. Не требует ничего кроме установки библиотеки в менеджере библиотек Arduino. Дозиметр готов к работе “из коробки”.
2) Плата ESP8266 / ESP32 (от 700 руб.)
Модуль RadSens имеет интерфейс I2C, совместим с Arduino, esp, Raspberry. Но цены на ардуинки в последнее время совсем не радуют…
3) OLED-экран диагональю 0.96” (от 300 руб.)
Можно взять любой экран с I2C. Но OLED-экран позволяет добавлять простую анимацию и цветовую маркировку текущего уровня радиации.
4) Модуль бузера (пищалки) для звуковой индикации импульсов (от 80 руб.)
Бузер предназначен для звукового информирования пользователя, когда нет доступа к информации на экране.
5) Кнопка-выключатель (от 60 руб.)
6) Макетная плата 120*80 мм (от 130 руб.)
Плата используется для удобного (эротичного) размещения и организации проводки между элементами.
Итоговая стоимость сборки - 5170 рублей.
Самый дешёвый дозиметр на маркетплейсе Ozon - 8700 рублей.
Процесс сборки самодельного дозиметра
Необходимо произвести следующие шаги:
1) Припаять к макетной плате элементы в желаемом положении
2) Соединить все элементы по предложенной схеме
3) Проверить правильность подключения сначала визуально, затем подключив ESP к USB
4) Подключить библиотеку RadSens и плату ESP32 в Arduino IDE
5)Добавить код в IDE и загрузить его
Шаг 1. Подключение
Для подключения нам потребуется припаять все элементы и соединить их. Пины SDA и SCL на RadSens и OLED-экране требуется подключить к портам D22 (SCL) и D21 (SDA), они обмениваются данными по интерфейсу I2C, важно их не перепутать.
Остальное подключить согласно схеме на рис. 4.
Схема подключения модулей к ESP32 (рис. 4)
На фото один из вариантов компоновки дозиметра.
Шаг 2. Подключение библиотек RadSens, ESP32, GyverOLED
Подключение расширения для плат в Arduino IDE для платы ESP32 осуществляется следующим образом:
Arduino -> Инструменты -> Плата -> Менеджер плат -> Написать “ESP32” в поисковой строке.
Шаг первый — переход в менеджер плат
Шаг второй — пишем в поисковике «ESP32» и устанавливаем единственный дистрибутив
Далее необходимо выбрать необходимую нам плату. Для этого переходим во вкладку “Инструменты”, выбираем раздел “Плата”, далее выбираем “ESP32 Dev Module” в подразделе “ESP32 Arduino”.
Шаг третий — необходимо выбрать «ESP32 Dev Module»
Готово! Перейдем к установке библиотеки.
Для установки библиотеки RadSens необходимо проделать почти такую же операцию:
Arduino -> Скетч -> Подключить библиотеку -> Управлять библиотеками -> Написать “RadSens” в поисковой строке.
Шаг первый — заходим в менеджер библиотек
Шаг второй — пишем в поиске «RadSens» и устанавливаем нашу официальную библиотеку
Далее необходимо установить библиотеку GyverOLED в менеджере библиотек тем же путём.
Необходимо написать «GyverOLED» в поисковике и установить библиотеку
Теперь мы готовы переходить к программированию.
Шаг 3. Код
Код был написан с использованием библиотеки для OLED от Алекса Гавера. Она проста в изучении и поддерживает вывод русского языка без дополнительных манипуляций. Допустимо использовать U8G2, Adafruit или любой удобную вам библиотеку.
Код вы можете найти в примерах библиотеки RadSens в Arduino IDE или скопировать отсюда:
// Подключаем необходимые библиотеки
#include <radSens1v2.h> // Библиотека RadSens
#include <Wire.h> // I2C-библиотека
#include <GyverOLED.h> // Библиотека для OLED Gyver'а идеально подойдёт для понимания методики работы с OLED-экраном, к тому же тут сразу есть русский шрифт
#define buz 18 // Устанавливаем управляющий пин пьезоизлучателя. Если вы выбрали другой управляющий пин - замените значение
GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled; // Инициализируем OLED-экран
ClimateGuard_RadSens1v2 radSens(RS_DEFAULT_I2C_ADDRESS); // Инициализируем RadSens
uint32_t timer_cnt; // Таймер опроса интенсивности излучения и импульсов для OLED-экрана
uint32_t timer_imp; // Таймер опроса импульсов для пьезоизлучателя
uint32_t timer_oled; // таймер обновления дисплея
float dynval; // Переменная для динамического значения интенсивности
float statval; // Переменная для статического значения интенсивности
uint32_t impval; // Переменная для кол-ва импульсов
uint32_t pulsesPrev; // Переменная, содержащая кол-во импульсов за прошлый цикл
void setup() {
pinMode(buz, OUTPUT); // Инициализируем пьезоизлучатель как получатель данных
ledcSetup(1, 500, 8); // Инициализируем ШИМ (только для ESP, для Arduino это необходимо стереть)
ledcAttachPin(buz, 1); // Задаём пин вывода пьезоизлучателя для ШИМа (только для ESP, для Arduino это необходимо стереть)
oled.init(); // Инициализируем OLED в коде
oled.flipV(1); // Я перевернул экран для удобства
oled.flipH(1); // Для нормального отображения после переворота нужно инвертировать текст по горизонтали
oled.clear();
oled.setScale(2); // Устанавливаем размер шрифта
radSens.radSens_init();
oled.clear();
radSens.setSensitivity(105); // Задаем чувствительность трубки (если вы заменили СБМ-20 на другую - проверьте чувствительность в документации и измените значение в скобках)
int16_t sensval = radSens.getSensitivity();
oled.setCursor(10, 2);
oled.print("Чувствит:");
oled.setCursor(42, 4);
oled.print(sensval);
delay(4000);
oled.clear();
pulsesPrev = radSens.getNumberOfPulses(); //Обнуляем значение перед началом работы пьезоизлучателя для предотвращения длинных тресков
}
void beep(int deltime) { // Функция, описывающая время и частоту пищания пьезоизлучателя
ledcWriteTone(1, 500); // Включаем на частоте 500 Гц
delay(3);
ledcWriteTone(1, 0); // Выключаем
delay(deltime);
}
/*
void beep(int deltime){
tone(buz, 500, deltime)
} та же функция для Arduino */
void loop() {
if (millis() - timer_imp > 250) { // Функция, создающая "треск" пьезоизлучателя
timer_imp = millis();
int pulses = radSens.getNumberOfPulses();
if (pulses > pulsesPrev) {
for (int i = 0; i < (pulses - pulsesPrev); i++) {
beep(30); // Вы можете изменить параметр, если хотите, чтобы интервал между тресками был больше или меньше
}
pulsesPrev = pulses;
}
}
if (millis() - timer_cnt > 1000) { // Записываем в объявленные глобальные переменные необходимые значения
timer_cnt = millis();
dynval = radSens.getRadIntensyDynamic();
statval = radSens.getRadIntensyStatic();
impval = radSens.getNumberOfPulses();
}
if (millis() - timer_oled > 1000) { // Записываем переменные в строки и выводим их на OLED-экран
timer_oled = millis();
String dynint = "Дин: "; // Динамическое значение в мкР/ч
dynint += dynval;
String statint = "Ст: "; // Усреднённое за 500 секунд значение в мкР/ч
statint += statval;
String nimp = "Имп: "; // Количество имульсов с момента включения
nimp += impval;
oled.setCursor(0, 1);
oled.print(dynint);
oled.setCursor(0, 3);
oled.print(statint);
oled.setCursor(0, 5);
oled.print(nimp);
}
}
Тестирование самодельного дозиметра
Сегодня нами был рассмотрен самый бюджетный вариант дозиметра-радиометра. Добавив фантазии, мы заказали прозрачные пластины из оргстекла, чтобы сделать прибор более удобным и наглядным. Для проверки работы был использован сульфат калия из ближайших хозтоваров. Удобрение богато радиоактивным изотопом калием-40, активно испускающим бета-излучение.
Показатели естественного фона и при поднесении сульфата калия
Стандартный уровень радиации в помещении - 15-20 мкР/ч. При прямом контакте сульфат калия получаем 32-39 мкР/ч, что вдвое выше нормы.
При контакте с сульфатом натрия через оргстекло толщиной 4 мм уровень радиации практически не менялся, что указывает на мягкое бета-излучение
В качестве заключения
Несмотря на всю эстетическую привлекательность, проект является сугубо домашним и предназначен, в большей части, для измерения порошков, предметов старины и прочих вещей, непонятным образом попавших в ваш дом :)
В рамках следующего материала постараемся разработать портативный и многофункциональный дозиметр с возможностью вывода информации (графиков, минимумов, максимумов) на экран и выгрузкой статистики в мобильное приложение на Блине.
А какие возможности в следующей версии DIY-дозиметра хотели бы видеть вы? Оставляйте свои предложения в комментариях!
Отдельная благодарность магазину «Duino» и мастерской «HelloBarsuki» за предоставленные материалы для статьи!
Первый опыт с ESP 8266
Добрый вечер, Дорогие читатели! Сегодня расскажу про свой первый опыт общения с ESP 8266.
Всё началось с просмотра рекомендованного Ютубом видео. Там вещали о том, что добывать криптовалюту можно с мобильного телефона на платформе Андроид. Меня это заинтересовало, так как тема "Криптовалюта" последние годы обходит меня стороной. Хоть волна общественного возбуждения, связанная с этим прошла, но это явление похоже с нами надолго.
И так, имея несколько старых смартфонов, игрался с различными приложениями, дающими возможность использовать процессор телефона для осуществления сторонних вычислений. Смотрел различные видео на эту тему, и тут мне подвернулся сюжет про Duino Coin - использующий для майнинга широкий список маломощных устройств. Одним из таких и является плата ESP. Звонок другу детства (@Alexjustuser) и выясняется, что у него как раз есть несколько таких.
Много не заработаешь, да не факт что в плюс можно выйти, но поиграться можно. Две платы из семи оказались не исправны. Первая не подавала признаков жизни, позже оказалось, что на ней отсутствовали диоды Шоттки, а вторая грелась в районе чипа. Куда пропали диоды с первой платы не известно, но были заменены перемычками из волоска многожильного провода и она заработала. Со второй неизвестно что, из оборудования есть только мультиметр, а как правильно его приложить к плате, чтобы диагностировать неисправность я не знаю.
Дрон из Raspberry Pi и ESP32 (или мои первые шаги в робототехнике)
Я как-то четыре года назад пытался тут продвинуть свой пикабу с блэкджеком и шлюхами (можете чекнуть историю постов), само собой ничего не вышло, но зато полученные навыки смог применить устроившись веб-разработчиком, так я проработал 3 года, выгорел к херам, и начал посматривать на робототехнику, как способ не отупеть от бессмысленного перекрашивания кнопок. Короче зацените мою очередную поделку. Видос я записал на английском, дабы охватить более широкую аудиторию, но добавил русские субтитры.
Hyper cubic equalizer
Скетч, библиотеки, бинарник - внутри https://drive.google.com/file/d/1Z0BwxFeFYXqVTGVQ6_H9ULQBj8T...
Все не понятное спрашивайте!
Симулятор Arduino, Raspberry Pi Pico, ESP32, FastLED, MicroPython
Для того чтобы начать создавать свои проекты с использованием различных плат Arduino, Raspberry Pi Pico, ESP32, Attiny85 достаточно перейти на сайт wokwi.com и выбрать нужную плату для разработки.
Нашел я симулятор wokwi при разработке проекта светодиодной гирлянды на ESP32.
Симулятор просто незаменим для написания световых эффектов с использованием библиотеки FastLED.
Кроме программирования адресных светодиодных лент, можно запрограммировать светодиодные матрицы
Симулятор проектов на MicroPython
Проектом можно поделиться, нажав на кнопку «Share».
Мой пример проекта https://wokwi.com/arduino/projects/320758263801971282
Надеюсь моя информация будет полезной.
Спасибо! Всем добра!