суббота, 9 ноября 2024 г.

Дальномер AJ-SR04M

 Ультразвуковой водоустойчивый модуль дальномер AJ-SR04M интересен тем что может работать даже после погружения в воду. Также данный модуль может взаимодействовать с платой ардуино таким же образом как и датчик hc-sr04. Для написания скетча, для данных датчиков, не требуется установка специальных библиотек. Датчик посылает ультразвуковой сигнал который отражается от препятствия и возвращается обратно, время сигнала в пути от датчика до препятствия и обратно может использоваться для вычисления расстояния до препятствия. Для получения этого времени используется функция pulseIn(). Подключить модуль к плате ардуино можно по схеме:

Рисунок 1 - Схема

На плате есть площадка для пjдключения резистора R19 которым можно изменять режим работы модуля:
1) Без резистора - Традиционный Эхо - режим для которого подходит скетч ниже.
2) 300кОм - Эхо режим с пониженным потреблением.
3) 120кОм - Автоматический последовательный режим, в данном режиме модуль автоматически раз в 120мс измеряет расстояние до препятствий и выдает его на пин Echo длительностью импульса.
4) 47кОм - Последовательный режим с пониженным энергоптреблением, в данном режиме модуль "спит" пока на пин Trig не придет определенный сигнал, после чего модуль просыпается, измеряет расстояние и выдает его на пин Echo в виде длительности импульса.

Скетч, для режима по умолчанию, можно скопировать из текстового поля:
Скетч взят со страницы https://tutorials.probots.co.in/communicating-with-a-waterproof-ultrasonic-sensor-aj-sr04m-jsn-sr04t/ и немного переделан. Убраны стартовые выводы на uart и добавлена индикация приближения препятствия более чем на 20см в строке:

distance<20 ? digitalWrite(13, HIGH) : digitalWrite(13, LOW);

Чтобы можно было тестировать датчик без подключения к компьютеру. Если заменить 20 на другую цифру то можно поставить другой порог срабатывания. В ходе тестирования датчика было определено что он переносит погружение в воду и имеет широкую диаграмму направленности т.е. (если совсем просто то) препятствием он будет считать не только то что от него напрямую но и то что от него сбоку что надо учитывать.


Адрес биткоин кошелька для поддержки канала - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

суббота, 5 октября 2024 г.

Ховеркрафт на воздушной подушке с дистанционным управлением по WIFI

 Одной из основных причин ограничивающих скорость передвижения транспортных средств на поверхности земли, является трение. Основной идеей создания парящего на воздушной "подушке" над поверхностью, транспорта является - уменьшение трения между поверхностью и транспортным средством. Такой способ увеличения скорости можно использовать не только для больших транспортных средств перевозящих людей но и для небольших беспилотных дистранционно управляемых устройств. Используя пенопласт, мощные авиамодельные электродвигатели с винтами, легкие модули и аккумуляторы можно сделать беспилотный ховеркрафт на воздушной подушке с дистанционным управлением. Практика показывает что работать будет такая даже такая незамысловатая конструкция как плоский кусок пенопласта с дыркой посередине диаметром с пропеллер, внутрь которой данный пропеллер с двигателем помещен чтобы создавать воздушную подушку под днищем плоского куска пенопласта. В качестве модуля радиоуправления можно использовать например модуль ESP8266 т.к. он небольшой, легкий, совмещает в себе радиомодуль и микроконтроллер и в качестве пульта управления к нему можно использовать смартфон, компьютер или какое либо ещё устройство которое может быть WIFI хостом. Для управления двигателями можно использовать два logic level MOSFET транзистора с обратными диодами, а также один сервомотор который будет поворачивать тяговый двигатель с пропеллером, двигатель создающий воздушную подушку будет закреплен неподвижно.

Рисунок 1 - Схема ховеркрафта на воздушной подушке

Запитывается схема от небольшого литий-полимерного аккумулятора с напряжением 3.7В от которого питаются двигатели. Далее это напряжение повышается небольшим повышающим модулем до 5В для запитки сервомотора после напряжение подается на линейный стабилизатор до 3.3В для питания модуля ESP8266. О том как запрограммировать данный модуль через Arduino IDE есть отдельная статья - https://electe.blogspot.com/2023/06/esp8266-arduino-ide.html

Скетч можно скопировать из текстового поля:

После загрузки скетча нужно будет отключить перемычку (см. по ссылке выше) подать питание (при этом моторы на некоторое время сработают (особенность модуля ESP8266)) после можно включить WIFI на смартфоне, найти WIFI сеть модуля ESP8266 и подключиться к ней по указанному в скетче логину и паролю. После можно через браузер на смартфоне (напр. гугл хром) зайти в веб интерфейс ховеркрафта, набрав его IP адрес в адресной строке браузера и запустив загрузку страницы. Управлять ховеркрафтом можно используя ползунки в открывшемся веб интерфейсе. Каждый ползунок отвечает за свой мотор. Процесс управления ховеркрафтом можно увидеть на видео:


Адрес биткоин кошелька для поддержки канала - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

четверг, 12 сентября 2024 г.

AVR ASM RAM

 У микроконтроллера ATtiny2313 есть 3 типа памяти (если не считать память регистров общего назначения и специализированную вроде регистров данных и т.д.). Это постоянная или flash память, она самая большая и в ней обычно храниться код программы. Оперативная (ОЗУ, RAM), информация с которой удаляется после выключения или перезагрузки, обычно содержит данные с которыми требуются частые манипуляции. Также есть EEPROM для длительного хранения данных при выключенном питании. В ассемблерных программах ранее рассмотренных в данном блоге обычно применялись регистры общего назначения для хранения данных с которыми требуются частые манипуляции. Однако регистров общего назначения не так много как ячеек оперативной памяти, поэтому не всегда можно обойтись одними только регистрами. Чтобы научиться использовать оперативную память, записывать и читать из неё данные. Можно в качестве тренировки сделать например "бегущий светодиод" схема которого приведена на рисунке:

Рисунок 1 - Схема "бегущего светодиода"

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

Многое из данного кода знакомо по предыдущим статьям об ассемблере в данном блоге. Но есть некоторые новые команды.

Директива .DSEG указывает на начало сегмента данных. В данном сегменте резервируюется память под переменные. Переменной можно дать произвольное название и выделить для неё произвольное количество байт. В данном случае, каждой переменной выделено по 1 байт. Для записи, в переменную, используется команда STS. Запись в переменную осуществляется из регистра общего назначения (в данном случае R16) а в регистр общего назначения, значение записывается командой LDI. Чтение из переменной происходит только в регистр общего назначения, командой LDS. 

Посмотреть работу "бегущего светодиода" можно на видео




Адрес биткоин кошелька для поддержки канала - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

суббота, 3 августа 2024 г.

W801 работа с SDK

 Для работы с одним интересным, производительным и недорогим (на момент написания данной статьи) микроконтроллером W801 существует специальный SDK https://github.com/cjacker/wm_sdk_w80x. Программировать данный микроконтроллер можно и через arduino IDE (о чем есть отдельная статья - https://electe.blogspot.com/2023/12/w801.html) но SDK предоставляет больше возможностей для использования данного микроконтроллера. Данный SDK можно использовать на операционных системах семейства Linux. Процесс компиляции и загрузки программы в плату, на самом деле, не очень сложный если разобраться. Использовать можно как какой нибудь иммитатор Linux так и реально установленную на диск операционную систему. Наиболее простой для пользователя операционной системой, из линуксообразных, возможно является Ubuntu. Которую можно установить на отдельный диск либо даже можно записать её на USB флеш накопитель и использовать в тестовом режиме. Чтобы начать работу система естественно должна быть настроена, на ней д.б. интернет и прочие вещи. Также необходимо установить некоторые зависимости для работы с SDK. После перехода в терминал нужно ввести команду

sudo apt-get update

после важно установить пакет build-essential который содержит много необходимых утилит. Напр. компиляторы gcc, g++, утилита make для сборки и многое другое. Чтобы установить данный пакет нужно вписать команду

sudo apt-get install build-essential

или специальный вариант чтобы не вводить "y" в процессе установки

sudo apt-get install build-essential -y

можно также установить git командой

sudo apt-get install git

И libcurses5-dev, для запуска конфигурационного меню, командой

sudo apt-get install libcurses5-dev

Далее необходимо скачать toolchain по ссылке

https://github.com/cjacker/wm_sdk_w80x/releases/download/init/csky-elfabiv2-tools-x86_64-minilibc-20210423.tar.gz

или

 https://occ.t-head.cn/community/download

разархивировать его, создать папку toolchain в папке opt, в созданной папке toolchain создать ещё одну папку в которую поместить разархивированный toolchain. Далее нужно перейти в папку toolchain и склонировать в неё SDK командой

git clone https://github.com/cjacker/wm_sdk_w80x.git

Так чтобы в папке toolchain располагалось две папки одна из которых с toolchainом а другая с SDK. После, из папки toolchainом, нужно выполнить команду

sudo chown -R root:root csky-elfabiv2-tools-x86_64-minilibc-20210423/

Но только если папка в которую был помещё тулчейн была так названа csky-elfabiv2-tools-x86_64-minilibc-20210423. Если она названа по другому то и название в команду нужно вписать соответствующее. Далее нужно перейти в корень папки с SDK командой

cd wm-sdk-w80x 

И запустить меню конфигурации командой 

make menuconfig

В терминале откроется меню как на картинке
Здесь интересует пункт "toolchain configuration" который следует выбрать.
Далее появиться меню с двумя пунктами 
Нужно выбрать пункт "toolchain path" и в появившемся новом окне вписать путь до до папки bin 
которая располагается в папке с распакованным тулчайном, в начале и конце пути д.б. слеши.
После нужно выйти в основное меню и выбрать "save". После появиться окно в котором будет нужно нажать "OK" для того чтобы сохранить конфигурацию под названием по умолчанию.
Дальше можно выйти из конфигуратора меню, перейдя по пункту "Exit".
И теперь всё готово для компиляции кода. Сам код располагается в папке app с SDK. Внутри есть просто вывод строки "user task" по uartу. Чтобы откомпилировать этот код и получить прошивку, нужно перейти папку wm_w80x_sdk т.е. в корень SDK и ввести команду 

sudo make

Если компиляция пройдет успешно то вывод в терминале будет примерно таким
В папке w800 папки bin появится прошивка в формате .fls. Загрузить прошивку можно в микроконтроллер, утилитой wm_tools которая располагается в папке tools для ОС linux. Или утилитой wm_tools.exe для ОС windows. Чтобы использовать утилиту для linux нужно в пункте "Download confifuration" конфигуратора меню дописать "ttyUSB0". Использовать утилиту wm_tools.exe можно без дополнительных  настроек. Можно поместить прошивку в папку где располагается данная утилита и загрузить её в микроконтроллер командой

wm_tools.exe -dl w800.fls -c COM3

Где вместо COM3 нужно указать название своего COM порта который появился после подключения платы. Номер порта можно посмотреть например в Arduino IDE, диспетчере устройств или просто методом перебора. Во время процесса, в консоли появиться сообщение с просьбой перезагрузить плату. Для этого нужно нажать кнопку reset на плате и после, прошивка в неё загрузиться. 
Если прошивка удачно загрузилась то при подключенной плате можно видеть в мониторе последовательного порта сообщение "user tasks".



Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

воскресенье, 7 июля 2024 г.

Стабильное дистанционное лазерное управление роботом

 Лазерное дистанционное управление имеет множество преимуществ описанных ранее в  статье https://electe.blogspot.com/2023/03/blog-post.htmlТакже там имеется простая схема для реализации такого управления.


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

Для такого передатчика, теперь в качестве приемника, нужна не обычная лазерная указка а лазерная указка с импульсным светом. Для этого можно взять лазерный модуль и запитать его импульсным напряжением например от обычного симметричного мультивибратора на транзисторах:
Или же применить микросхему 555 или же есть огромное множество других вариантов (см. статьи, в данном блоге, по мультивибраторам). Несмотря на то что система довольно простая и то что на двигатели поступает не полная мощность, система неплохо показала себя на практике. Теперь робот стал вести себя более предсказуемо т.к. в окружающем пространстве импульсных световых помех не было, способных повлиять на работу робота. Посмотреть тест можно на видео:


Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g


воскресенье, 16 июня 2024 г.

Получение координат с GPS модуля GY-GPS6mv2

 Обычному человеку, обычно не составляет труда определить свое местоположения по виду который он определяет глазами и подсознательно сверяет с "картой" в своей голове и тем не менее иногда человек может заблудиться. Такой способ определения своего местоположения - очень не просто реализовать для электронного устройства т.к. будет нужен большой объем памяти, для хранения карты, и высокая производительность процессора для работы эмулятора нейронной сети или какого либо другого сопоставителя информации с камеры и внутренней карты. К тому же понадобиться камера что уже само по себе сильно увеличивает требования к аппаратному обеспечению а если используется искусственная нейронная сеть то удовлетворительный результат её работы, на самом деле, не гарантируется даже при очень хорошем её обучении. К счастью есть более простой и надежный способ определения своих координат в пространстве. Они могут быть определены по искусственным спутникам земли системы GPS. Есть также система beidou и ГЛОНАСС но, на практике, сигналы со спутников GPS ловятся лучше, хотя тоже не всегда так хорошо как хотелось бы. Для приема сигналов от спутников системы глобального позиционирования GPS существуют недорогие модули GY-GPS6mv2. Такой модуль взаимодействует с внешними приборами по интерфейсу UART.

 Чтобы проверить его работу можно использовать USB-UART переходник увидеть данные, которые он передает, можно в мониторе последовательного порта среды Arduino IDE. Или же можно скачать специальную программу от производителя по ссылке  https://www.u-blox.com/en/product/u-center

Для подключения к модулю, есть кнопочка слева вверху.

Чтобы программа показала координаты и точку расположения модуля нужно сначала дождаться пока модуль поймает сигналы с хотя бы 4х спутников, если вообще поймает. Без этого модуль не сможет определить координаты. Если модуль поймал сигналы то на нем начнет периодически мигать светодиод. Также координаты можно определить из сообщений которые он присылает в монитор порта. Координаты находятся в строке начинающейся с $GPGGA
перед запятой с буквой N находиться широта т.е. градус угла между плоскостью экватора и линией от центра земли до модуля, перед запятой с буквой E находиться востоная долгота т.е. градус угла между линией от Гринвича до центра и линией от модуля до центра земли т.е. широта ориентирует вдоль оси земли и параллельно экватору и говорит  насколько далеко мы от него в градусах от 0 до 90 а долгота показывает насколько далеко мы от полукруга с концами на полюсах и проходящего через Гринвич тоже в градусах. 
Обычно настройки модуля по умолчанию таковы что им можно пользоваться, для получения координат, не выполняя дополнительных настроек. На многих микроконтроллерах имеется интерфейс UART поэтому проблем с подключением модуля быть не должно. Его можно подключить например к Ардуино или ESP32. Рассмотрим далее скетч для робота, с модулем ESP32, которым можно управлять со смартфона и получить координаты местоположения робота на экран смартфона, по нажатию кнопки.
 
Данный код можно скопировать в Arduino IDE но textarea_ надо заменить на textarea т.к. с textarea данный код сюда нормально не вставляется, поэтому пришлось сделать такую замену.
В отличии от ESP8266, нужно использовать функцию ledcWrite() вместо analogWrite(). Прием от модуля осуществляется функцией Serial.read() после байт нужно преобразовать к типу char, отсечь спецсимволы конца строки и затолкать данные в массив символов далее этот массив можно обработать выделив нужную строку т.к. строку начинающуюся с $GPGGA т.к. в ней содержаться координаты. Строку можно распарсить на стороне сервера и лучше сделать именно так чтобы сам робот мог принимать какие то решения на основе своего положения но я пока решил не заморачиваться, передал данные клиенту где парсинг на джаваскрипте осуществляется гораздо проще. А именно двоиным разбиением строки сначала по символу 'N' потом на запятые
и выделением нужных концов для широты и также для долготы только в начале разбиаение по 'E'  с запятой естественно чтобы в результатах её не было. Испытания робота можно посмотреть на видео:


Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g 

КАРТА БЛОГА (содержание)

четверг, 23 мая 2024 г.

Магнетометр hmc5883 GY-271

Магнетометр hmc5883 GY-271 можно использовать например для квадрокоптера чтобы он не крутился или например для радиоуправляемого кораблика чтобы он мог знать в какую сторону плыть если потерял сигнал чтобы не пришлось нырять в воду за ним. Акселерометр с гироскопом не подходят т.к. их основная задача - это показывать в каком направлении нахдиться земля т.е. где низ а где верх т.е. ориентировать по вертикальной оси. Магнетометр же ориентирует по оставшимся двум осям. При заказе может попастя орининальный модуль HMC5883 либо не оригинальный QMC5883 для них нужны разнные библиотеки. Если попался QMC5883 то думаю последовательность действий будет примерно такой же. Заходим в менеджер библиотек среды ардуино. Скетчь -> Подключить библиотеку -> Управлять библиотеками

Далее вписываем в строке поиска hmc588
и для оригинала выбираем библиотеку adafruit HMC5883 unified
для не оригинала можно поискать другую библиотеку
Если появилось окно для выбора установки дополнительных библиотек то
нужно нажать кнопку установить все
после установки можно закрыть менеджер библиотек
и найти пример по вкладкам
файл->примеры->adafruit HMC5883 unified->magsensor
который можно открыть и загрузить в плату
После можно открыть монитор последовательного порта
выбрать скорость 9600 бод
и увидеть стартовую информацию 
и магнитные индукции в микротеслах по всем трем осям
а также угол компаса в градусах
если держать модуль осью Z вверх от земли
Теперь немного про скетчь вначале подключаются заголовочные файлы
потом назначается уникальный идентификатор
Потом есть функция для вывода стартовой информации

в функции setup() инициализируется последовательный порт и модуль магнетометра

после выводиться стартовая информация
в основном цикле у модуля беруться данные
и выводяться магнитные индукции по всем 3м осям в микроТеслах

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


Видео по теме данного магнетометра-

Адрес биткоин кошелька для поддержки - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g





пятница, 19 апреля 2024 г.

Электровелосипед с безколлекторным двигателем

Всевозможные виды электротранспорта становяться всё более популярными (на момент написания данной статьи). На улицах городов уже давно появились гироскутеры, моноколеса, электросамокаты однако не везде есть достаточно хорошие дороги для данных видов транспорта т.к. у данных видов транспорта маленькие колеса для грунтовых не асфальтовых дорог. Электровелосипед подходит для большинства дорог и возможно что это самый проходимый транспорт т.к. он узкий и легкий то он может проходить даже по таким местам которые недоступны для автомобилей и квадроциклов. Оснастив электровелосипед мотором можно получить электровелосипед. Обычно для этого используют мотор-колеса. Однако, на момент написания данной статьи, они очень дорогие. Возможно из за своей популярности а также из за дороговизны редкоземельных магнитов являющихся составной частью данных моторов. Отдельные моторы с редкоземельными магнитами могут быть на порядки дешевле и тем не менее быть способными "тянуть" велосипед. Однако такие моторы, чаще всего, имеют слишком высокие обороты для того чтобы крутить колесо велосипеда напрямую. А также для этого им не хватает момента. Чтобы увеличить момент и понизить обороты можно использовать редуктор. Существует множество разнообразных видов редукторов но наиболее подходящие для велосипеда могут быть сделаны со шкивами и ремнями или с цепями и звездами. Редуктор с цепями подходит лучше т.к. занимает меньше места по ширине. Редуктор должен иметь некоторое количество ступеней т.к. без них для понижения оборотов понадобиться очень большая ведомая звезда. BLDC мотор может управляться готовым контроллером или самодельным. Если мотор трехфазный то скорее всего для него подойдет такой же контроллер как и для моторколеса с соответствующими параметрами (мощность, сопротивление обмоток и т.д.). В данном блоге имеются статьи о создании самодельного контроллера BLDC мотора. Внешний вид платы м.б. напр. такой как на фотографии:

Плата с данной фотографии ещё некоторое количество раз модифицировалась прежде чем начать работать в электровелосипеде но в конце концов электровелосипед всё таки заработал. Велосипедов в которых работал данный контроллер на самом деле 2. Первый показан на фоторгафии:
Данный контроллер успешно работал с данным велосипедом и аккумулятором на 24в а позже и на 29в. После контроллер был переставлен на другой велосипед. Тест которого можно посмотреть на видео:




Адрес биткоин кошелька для поддержки канала - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g


пятница, 15 марта 2024 г.

Системный таймер STM32

 Микроконтроллеры STM32 содержат некоторое количество таймеров. Таймеры делятся на типы и отличаются друг от друга. Существуют, ранее рассмотренные, таймеры общего назначения (напр. TIM2 и TIM3), продвинутые таймеры (TIM1 почти такие же как таймеры общего назначения но с большим количеством дополнительных функций), сторожевые таймеры и системные таймеры (обычно системный таймер только один). Системный таймер самый простой и может использоваться когда не нужен какой либо сложный функционал. Данный тип таймера имеет некоторое небольшое количество регистров. Например регистр счетчика. В этом регистре находиться число которое показывает до скольки досчитал данный таймер. Считать он может только вниз т.е. только декрементировать (уменьшать на единицу) число в данном регистре. Этот регистр 23х разрядный:


После того как число в этом регистре достигло нуля, происходит запись числа в этот регистр из регистра перезагрузки:

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

У данного таймера всего один регистр настройки в котором для настройки есть всего три бита. Также есть один флаг. Бит 1 (как было показано выше) отвечает за разблокировку прерывания по переполнению (других прерываний у данного таймера нет). Этот бит д.б. установлен в единицу чтобы прерывание срабатывало. Также есть бит 0 для включения таймера:
И бит 2 для выбора внутреннего источника тактирования:

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



Адрес биткоин кошелька для поддержки канала - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

суббота, 10 февраля 2024 г.

Переделка дальта 3D принтера в лазерный ЧПУ гравер

 FDM 3D принтеры стали популярными ЧПУ станками для изготовления прототипов а также даже производства настоящих полнофункциональных изделий и деталей в основном из пластмассы. Чаще всего 3D принтеры делают детали из PLA или ABS пластиков которые весьма дорогие (на момент написания данной стати) в состоянии прутка пригодного для FDM 3D принтера. Большинство FDM 3D принтеров легко переделать в лазерный гравер путем замены экструдера пластика на лазер. Для лазера (в отличии от например фрезера) не нужна жесткая конструкция + 3D принтер может менять фокусировку лазера в процессе работы, чего не могут даже некоторые лазерные граверы. Чтобы переделать 3D принтер в лазерный гравер нужно заменить хотенд принтера на лазерный модуль. Лазерные модули бывают разные. Лазеры бывают разных типов и мощностей. Самые дешёвые, компактые и легкие - это полупроводниковые лазеры они также уступают по мощности например CO2 лазерам но зато + к меньшим габаритам они имеют меньшую стоимость и могут быть установлены на дельта 3D принтеры типа Rostock mini. Обычно дельта на дельта принтеры не устанавливаются тяжелые головки но практика показала лазерный модуль оптической мощностью 5Вт (потребляемая мощность 40Вт) способный резать фанеру и пластик а также гравировать большинство материалов может работать с принтером Rostock mini.

Данный лазерный модуль имеет радиатор, вентилятор для охлаждения и одновременно сдувания дыма от разрезаемой поверхности для улучшения прохождения лазера до этой самой поверхности а также есть сопло которое направляет поток воздуха в разрезаемую точку чтобы лучше сдувать дым. Также есть защитная красная насадка для защиты глаз (на которую не стоит сильно полагаться) и плата управления с тремя выводами. Один вывод питания +12В, второй - земля GND 0В и вывод управления на который подается ШИМ с уровнями напряжения 0В и +5В. В комплекте шел кабель с разъемами. В кабеле 3 провода: красный +12В питания, черный 0В, желтый - ШИМ 0...+5В. Питание подключается к источнику от которого питается принтер. А желтый провод к одному из пинов контроллера RAMPS но только не к тому с которого выходит 12В например стола или вентилятора т.к. эти пины сожгут испортят плату. Нужен именно управляющий пин. Это может быть например свободный пин D4


 который предназначен для подключения сервомотора но также его можно использовать как обычный свободный GPIO командой например M42:

M42 P4 S150 ; включить пин D4 на гребенке с сервами с краю с ШИМом 150

Где M42 - это название команды, P4 - номер пина, S150 - уровень шима который м.б. от 0 (лазер полностью выключен и не работает) до 255 (лазер полностью включен и работает на пределе). К сожалению в прошивке Мерлина данная команда не синхронизированна с командой G1 перемещения головки в пространстве, поэтому резка и гравировка не будут точными а также в варианте прошивки для дельта принтера вообще нет команды с синхронизированной работой лазера и перемещением головки. К счастью данная прошивка является скетчем для ардуины Меги который можно подправить. Можно например добавить собственный нестандартный G код с синхронизацией лазера и перемещения головки в пространстве. Что и было сделано. В прошивке Мерлина есть файл "Configuration.h" в который вносятся изменения для настройки принтера. В данном файле изменяются специальные константы которые специально вынесены в данный файл для пользователя чтобы было удобнее и безопаснее чтобы не испортить случайно всю прошивку но добавить новую команду через этот файл нельзя. Добавить её можно в файле "Marlin_main.cpp". В данном файле есть функция "void process_commands()" внутри которой есть ветвление "switch((int)code_value())" внутри которого есть команды. Было замечено что в прошивке для дельта принтера Rostock mini G команды заканчиваются на G4 потом идет перерыв и начинаются с G10 которые заканчиваются на M командах. Для G команд и M команд существует какой общепринятый то стандарт и команда с синхронизацией должна иметь специальное обозначение что возможно позволит использовать для генерации кодов какую либо готовую программу. Однако поскольку для полного понимания прошивки и изучения стандарта нужно тратить время то для ускорения и упрощения можно просто добавить новую команду по аналогии с какой либо имеющейся и написать генератор G кодов самостоятельно. Чтобы добавить новую команду G5 нужно скопировать код:

и вставить после обработчика команды G4. Пример использования новой самодельной команды
 G5 X0 Y0 Z73 F300 P4 S150
означает переместиться в точку X0 Y0 Z73 со скоростью 300 и включить пин D4 с шимом 150.

Адрес биткоин кошелька для поддержки канала - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g

понедельник, 8 января 2024 г.

Инфракрасный лазерный дальномер GY-530 GY-VL53L0X

 Инфракрасный лазерный дальномер VL53L0X может быть подключен к плате Ардуино по шине I2C и использоваться для бесконтактного измерения расстояний от 50мм (проверено эксперементально (см. видео ниже)) до 2м с точностью до 1мм. Существуют также ультразвуковые дальномеры наподобии HC-SR04 но такие дальномеры больше подходят для обнаружения крупных препятствий в то время как VL53L0X способен обнаруживать препятствия толщиной с карандаш и возможно даже меньше. Инфракрасные дальномеры также обладают недостатками по сравнению с ультразвуковыми, например они менее далеко будут измерять поверхности хорошо поглощающие свет. Подключить дальномер VL53L0X к плате Arduino pro mini можно по схеме:



USB-UART конвертер нужен для передачи данных на компьютер чтобы компьютер мог монитором показать результат. А также для того чтобы загружать скетч в Ардуино. Схема соединения простая, модуль толерантен к напряжению +5В поэтому такая схема возможна. Для того чтобы можно было использовать данный модуль с платой Ардуино и программировать в среде Ардуино, нужно подключить библиотеку в данной среде. Для этого нужно зайти в менеджер библиотек поп пути Скетчь -> Подключить библиотеку -> Управлять библиотеками

В поисковой строке менеджера библиотек вписать название модуля или первые буквы его названия чтобы найти библиотеку, после чего нажать кнопку "установка"
Далее появится окно предлагающее установить ещё некоторое количество библиотек необходимых для работы основной библиотеки тут естественно нужно нажать кнопку "Install all"
если конечно данные библиотеки ещё не установлены.
После того как библиотеки будут установены, можно закрыть менеджер библиотек. Теперь можно открыть тестовый скетчь и загрузить его в плату
После того как скетчь загрузиться можно открыть монитор последовательного порта и измерять расстояние дальномером
Тестовый скетч не сложный:

в самом верху подключается заголовочный файл библиотеки, далее объявляется объект класса библиотеки, в основной функции setup() инициализируется последовательный порт, модуль и выводятся стартовые сообщения. В основном цикле имеется объект для получения данных с модуля (measure) ниже данный объект заполняется данными если расстояние удалось измерить то оно выводиться в последовательный порт если не удалось то выводитья сообщение об этом
в самом конце задержка для того чтобы цифры не сильно мельтишили на экране.
Видео по дальномеру:

Адрес биткоин кошелька для поддержки блога - bc1qlhrmmkh77x2lzhqe4lt9qwkglswj64tsqt2l5g