- Необходимые материалы
- Подготовка к практической реализации проекта
- Простой робот-пылесос diy на arduino своими руками
- Робот пылесос своими руками. часть 2
- Самодельный робот-пылесос v. 2.0. часть 1: корпус, турбина, механика / блог им. nitrior / robocraft. роботы? это просто!
- Сборка робота-пылесоса
- Способы обеспечения движения, уборки и питания робота-пылесоса
- Теоретические аспекты проблемы
Необходимые материалы
Чтобы сделать робот-пылесос своими руками, вам потребуются следующие материалы:
- «Ардуино Про Мини» — главный мозг и информационный центр всей конструкции.
- Драйвер моторов робота-пылесоса серии Л298Н.
- Понижающий преобразователь переменного тока.
- Модуль с мосфетом, посредством которого будет осуществляться контроль над темпом работы передней щетки устройства.
- 4 инфракрасных датчика, которые будут фиксировать наличие препятствий на пути робота пылесоса.
- Пара переключателей, которые будут изменять направление движение устройства при столкновении.
- 3 шарообразных колеса.
- Мотор, обеспечивающий вращение щетки в различных режимах.
- Мотор высокой мощности, обеспечивающий нормальное функционирование турбины.
- 4 литийионных аккумулятора, а также средство контроля над ними.
- Фанерное основание нужного размера.
- Корпус из поливинилхлорида нужного размера.
- 8 пар магнитов для крепления.
- Провода, кабели, переключатели и прочие элементы электрической сети.
Подготовка к практической реализации проекта
Рассмотрим применение вышеизложенных принципов на базе платформы Arduino Mega 2560. Процесс создания будет состоять из нескольких этапов:
- подготовка инструментов и материалов;
- изготовление корпуса с колесами и отделом под мусор, пылесборника и турбины;
- монтаж датчиков и микроконтроллера, моторов с редукторами, аккумулятора, щеток;
- выполнение электрических подключений;
- введение программы в Arduino, определение согласованности датчиков;
- проверка работоспособности робота-пылесоса и его способности заряжаться самостоятельно.
Идея реализуется с помощью следующих материалов и инструментов:
- контроллер Arduino – 1 шт, с драйверами;
- лист фанеры (либо плотный картон) – 1 м.кв;
- колеса – 3 шт;
- провод сечением не более 0,75 мм.кв (подойдет витая пара) – около 2 м;
- блок питания – 4 аккумулятора по 18 V, индикатор заряда к ним, зарядное устройство;
- инфракрасные датчики – 4 шт, контактные – 2 шт;
- электродвигатели: для турбины – 1 шт, вращающий щетку – 1 шт, 2 мотора с редуктором обеспечивают передвижение;
- поливинилхлоридный корпус – 1 шт;
- клей – 1 упаковка, саморезы – 10 шт, скотч – 1 шт, набор магнитов;
- набор отверток и сверл, плоскогубцы, нож канцелярский, карандаш, линейка, шуруповерт, электролобзик.
Простой робот-пылесос diy на arduino своими руками
В мире с каждым днем все больше растет популярность среди роботов-уборщиков. Благодаря таким маленьким помощникам в доме становится гораздо чище, а усилий на уборку при этом прикладывается гораздо меньше. Существует огромное множество различных модификаций роботов, все они отличаются по функционалу, размерам и другим параметрам.
Конкретно в данной статье будет рассмотрен пример, как своими руками можно сделать простого робота, который сам будет пылесосить помещение, когда это нужно. В качестве «мозга» здесь используется контроллер Arduino.
Материалы и инструменты для изготовления робота:
– плата, контролирующая работу двигателей (Arduino motor shield);
– плата Arduino;
– два моторчика с редукторами (моторчики на 3 вольта и скоростью вращения около 100 об/мин.);
– колеса (можно сделать из алюминиевых банок;
– кулер от компьютерного блока питания (можно как на 5В, так и на 12В);
– источник питания 5В (аккумулятор);
– провода и пластина для установки радиоэлементов;
– чтобы сделать корпус понадобится пластиковый контейнер;
– еще один небольшой контейнер для создания мусоросборника;
– термоклей;
– магниты;
– картон.
Процесс изготовления робота:
Шаг первый. Программная часть робота и скетч:
Сердцем робота является контроллер Arduino. Чтобы его запрограммировать понадобится компьютер и специальное программное обеспечение.
Чтобы загрузить в плату скетч будет нужна программа Arduino IDE. Ниже можно взять программный код робота и увидеть основную схему.
/*
Program for controlling a robot with two motors.
The robot turns when motors changes their speed and direction.
Front bumpers on left and right sides detect obstacles.
Ultrasonic sonars can be connected to analog inputs (tested on LV-MaxSonar-EZ1):
– put pins in array sonarPins in following order: left, right, front, others..
Examples:
1. only left and right sonars connected to pins 2 and 3: sonarPins[] = {2,3}
2. left, right and front sonars connected to pins 2, 3 and 5: sonarPins[] = {2,3,5}
3. only front sonar connected to pin 5: sonarPins[] = {-1,-1,5}
4. only left sonar connected to pin 2: sonarPins[] = {2}
5. only right sonar connected to pins 3: sonarPins[] = {-1,3}
6. 5 sonars connected to pins 1,2,3,4,5: sonarPins[] = {1,2,3,4,5}
Motor shield is used to run motors.
*/
const int Baud = 9600; //UART port speed
//Sonar properties
int sonarPins[] = {1, 2};//Analog Pin Nums to sonar sensor Pin AN
const long MinLeftDistance = 20; //Minimum allowed left distance
const long MinRightDistance = 20; //Minimum allowed right distance
const long MinFrontDistance = 15; //Minimum allowed front distance
const int SamplesAmount = 15;//more samples – smoother measurement and bigger lag
const int SonarDisplayFrequency = 10; //display only one of these lines – not all
int sonarDisplayFrequencyCount = 0;
const long Factor = 2.54 / 2;
long samples[sizeof(sonarPins)][SamplesAmount];
int sampleIndex[sizeof(sonarPins)];
//right side
const int pinRightMotorDirection = 4; //this can be marked on motor shield as “DIR A”
const int pinRightMotorSpeed = 3; //this can be marked on motor shield as “PWM A”
const int pinRightBumper = 2; //where the right bumper is connected
//left side
const int pinLeftMotorDirection = 7; //this can be marked on motor shield as “DIR B”
const int pinLeftMotorSpeed = 6; //this can be marked on motor shield as “PWM B”
const int pinLeftBumper = 8; //where the right bumper is connected
//uncomment next 2 lines if Motor Shield has breaks
//const int pinRightMotorBreak = PUT_BREAK_PIN_HERE; //this can be marked on motor shield as “BREAKE A”
//const int pinLeftMotorBreak = PUT_BREAK_PIN_HERE; //this can be marked on motor shield as “BREAKE B”
//fields
const int turnRightTimeout = 100;
const int turnLeftTimeout = 150;
//set in counter how long a motor is running back: N/10 (in milliseconds)
int countDownWhileMovingToRight;
int countDownWhileMovingToLeft;
//Initialization
void setup() {
Serial.begin(Baud);
initPins();
//uncomment next 4 lines if Motor Shield has breaks
// pinMode(pinLeftMotorBreak, OUTPUT);
// pinMode(pinRightMotorBreak, OUTPUT);
// digitalWrite(pinLeftMotorBreak, LOW); //turn off breaks
// digitalWrite(pinRightMotorBreak, LOW); //turn off breaks
runRightMotorForward();
runLeftMotorForward();
startMotors();
}
//Main loop
void loop() {
verifyAndSetRightSide();
verifyAndSetLeftSide();
processRightSide();
processLeftSide();
delay(10);//repeat every 10 milliseconds
}
//—————————————————
void initPins(){
pinMode(pinRightMotorDirection, OUTPUT);
pinMode(pinRightMotorSpeed, OUTPUT);
pinMode(pinRightBumper, INPUT);
pinMode(pinLeftMotorDirection, OUTPUT);
pinMode(pinLeftMotorSpeed, OUTPUT);
pinMode(pinLeftBumper, INPUT);
for(int i = 0; i < sizeof(sonarPins); i )
pinMode(sonarPins[i], INPUT);
}
void startMotors(){
setMotorSpeed(pinRightMotorSpeed, 255);
setMotorSpeed(pinLeftMotorSpeed, 255);
}
void waitWhileAnyBumperIsPressed(){
while(checkBumperIsNotPressed(pinRightBumper)
&& checkBumperIsNotPressed(pinLeftBumper)){
delay(20);//check every 20 milliseconds
}
}
void processRightSide(){
if(countDownWhileMovingToRight MinFrontDistance)//checks if the minimum allowed front distance is not reached
return;
if(checkCounterIsNotSet(countDownWhileMovingToLeft))//if the counter is not yet counting down
runLeftMotorBackward();//run the right motor backward
countDownWhileMovingToLeft = turnLeftTimeout;//set the counter to maximum value to start it counting down
}
bool checkCounterIsNotSet(int counter){
return counter = SamplesAmount)
sampleIndex[pinIndex] = 0;
samples[pinIndex][sampleIndex[pinIndex]] = value;
return true;
}
long calculateAvarageDistance(int pinIndex){
long average = 0;
for(int i = 0; i < SamplesAmount; i )
average = samples[pinIndex][i];
return average / SamplesAmount;
}
Шаг второй. Подготовка основных элементов робота
Для крепления всех компонентов робота, включая аккумулятор, платы управления и двигатели, в качестве основы используется картон.
Турбину нужно хорошенько приклеить или иным образом зафиксировать на малом пластиковом контейнере, в котором нужно проделать отверстие для всасывания грязи. Впоследствии эта конструкция приклеивается к картонной основе. Помимо этого контейнер должен иметь дополнительное отверстие, через которое будет выходить воздух. Здесь должен быть фильтр, автор решил использовать для этих целей синтетическую ткань.
На следующем этапе кулер нужно склеить с сервоприводами, ну а затем эта конструкция устанавливается на картонную основу.
Шаг третий. Изготавливаем колеса для робота
Чтобы сделать колеса нужно взять алюминиевые банки и отрезать от них верхнюю и нижнюю часть. Затем эти элементы склеиваются между собой. Теперь лишь останется хорошенько прикрепить колеса к серводвигателям при помощи термоклея. Здесь важно понимать, что колеса должны быть зафиксированы четко по центру валов сервоприводов. Иначе
робот
будет ездить криво, и будет перерасходовать энергию.
Шаг четвертый. Заключительный процесс сборки робота
После того как будет установлена батарея и будут подключены все элементы робота, останется поместить конструкцию в прочный корпус. Для этих целей отлично подходит большой пластиковый контейнер. В первую очередь в носовой части корпуса робота нужно проделать отверстия, через них будут выводиться контакты, которые будут подавать сигнал
электронике
при столкновении робота с препятствием.
Для того чтобы корпус можно было быстро и легко снимать для его фиксации применяются магниты, в данном случае их восемь. Магниты приклеиваются на внутреннюю часть пылесоса и на сам контейнер по 4 штуки.
Вот и все. Теперь робот собран, и его можно испробовать на деле. Не смотря на то, что робот не способен самостоятельно подзаряжаться и у него довольно ограниченный возможности в плане навигации, за полчаса он вполне сможет убрать мусор на кухне или небольшой комнате. Достоинства робота в том, что все компоненты можно легко найти и они не особо дорогие. Несомненно, самоделку можно дорабатывать, добавляя новые датчики и иные элементы.
Робот пылесос своими руками. часть 2
Меня зовут Дмитрий Дударев. Я занимаюсь разработкой электроники и очень люблю создавать различные портативные девайсы. Еще я люблю музыку.
Давным-давно – в апреле или около того, когда весь мир сотрясался от ударов страшного карантина, я решил научиться играть на гитаре. Я взял у друга акустическую гитару и стал осваивать инструмент по урокам из ютуба и табулатурам. Было тяжело. То ли я неправильно что-то делал, то ли плохо старался, то ли в обществе моих предков мелкая моторика вредила размножению. Короче, ничего кроме звуков дребезжащих струн у меня не выходило. Мое негодование усиливала постоянная расстройка струн. Да и окружающим тысячный раз слушать мою кривую Nothing else matters удовольствия не доставляло.
Но в этих муках про главное правило электронщика я не забыл. Если что-то существует, значит туда можно вставить микроконтроллер. Или, хотя бы, сделать портативную электронную модификацию.
Электронная гитара? Хм, интересная идея, подумал я. Но еще лучше, если на этой гитаре я сам смогу научиться играть. В тот же день акустическая гитара отправилась на свалку обратно к другу, а я стал придумывать идею.
Поскольку я у мамы инженер, то первым делом я составил список требований к девайсу.
Что я хочу от гитары?
1) Я хочу что-то максимально похожее на гитару, т.е. шесть струн и 12 ладов на грифе.
2) Хочу компактность и портативность. Чтобы можно было брать девайс с собой куда угодно, не заказывая газель для транспортировки.
3) Устройство должно без плясок с бубном подключаться к чему угодно, от iOS до Windows. Окей-окей, ладно, будем реалистичными – ко всем популярным осям.
4) Работа от аккумулятора.
5) Подключение должно производиться без проводов (но раз уж там будет USB разъем для зарядки, то и по проводу пусть тоже подключается)
6) Ключевой момент – на гитаре должно быть просто учиться играть, без необходимости в долгих тренировках по адаптации кистевых связок. Как это реализовать? Сразу пришла идея оснастить струны и лады светодиодами. Типа, загрузил табулатуры в гитару, а она уже сама показывает, куда ставить пальцы. Т.е. нет такого, что смотришь на экран, потом на гитару, снова на экран, снова на гитару. Вот этого вот всего не надо. Смотришь только на гитару. И там же играешь. Все. Это прям мое.
7) Хотелось бы поддержки разных техник игры на гитаре: hummer on, pull off, slide, vibrato.
8) Без тормозов. По-научному – чтобы задержка midi-команд не превышала 10мс.
9) Все должно собираться из говна и палок легко доступных материалов без сложных техпроцессов и дорогой электроники.
В итоге должен получиться компактный инструмент, на котором можно играть, как на гитаре, лишенный аналоговых недостатков и оснащенный наглядной системой обучения. Звучит реализуемо.
Разумеется, для мобильных платформ потребуется написать приложение, в котором можно будет выбрать табулатуру для обучения светодиодами, выбрать инструмент (акустика, классика, электрогитара с различными пресетами фильтров, укулеле и т.д.), и воспроизводить звуки.
Существующие аналоги
А надо ли изобретать велосипед? Ведь на всякую гениальную идею почти наверняка найдется азиат, который уже давно все реализовал в «железе», причем сделал это лучше, чем ты изначально собирался. Иду гуглить.
Оказывается, первая цифровая гитара была создана еще в 1981 году, но в народ сильно не пошла из-за хилой функциональности.
Варианты посовременнее, конечно, тоже нашлись.
Вот, например, с айпадом вместо струн или еще одна в форме моллюска:
Однако такого, чтобы выполнялись все мои хотелки – в первую очередь компактность и режим обучения «жми на лампочки» – такого нет. Кроме того, такие midi-гитары нацелены все же на более профессиональную аудиторию. И еще они дорогие.
Значит, приступаем!
Первый прототип
Чтобы проверить жизнеспособность концепции, нужно сначала определиться с элементной базой.
Контроллер берем STM32F042. В нем есть все, что нужно, при стоимости меньше бакса. Кроме беспроводного подключения, но с этим позже разберемся.
Далее. Струны на деке. Для первого концепта решил напечатать пластиковые язычки, закрепить их на потенциометрах с пружинками и измерять углы отклонения.
Так выглядит 3D-модель:
А так живьем:
Тактильное ощущение приятное. Должно сработать.
Для ладов на грифе я заказал на Али вот такие тензорезистивные датчики.
В отличие от разнообразных кнопок, они не щелкают. Плюс есть возможность определять усилие нажатия, а значит, можно реализовать сложные техники вроде slide или vibrato.
Плюс нужен АЦП, чтобы считывать инфу с датчиков и передавать на контроллер.
Пока ждал датчики из Китая, развел плату:
Прежде чем заказывать печать платы, решил дождаться тензорезисторов. И, как оказалось, не зря. Из 80-ти датчиков рабочими оказались только несколько, и то с разными параметрами.
Выглядит, мягко говоря, не так, как заявлено. И чего я ожидал, покупая электронику на Али?..
И тут меня осенило.
Можно ведь применить другой метод детектирования — измерение емкости, как в датчиках прикосновения. Это гораздо дешевле и доступнее. А если правильно спроектировать механику, то можно и усилие определять.
Что ж. Удаляю все, что было сделано
Второй прототип
Итак, тензорезистивные датчики в топку. В качестве сенсорных элементов в этот раз взял небольшие медные цилиндрики, напиленные из проволоки. Для измерения емкости удалось найти дешевый 12-канальный измеритель емкости общего назначения. Он измеряет емкость в масштабах единиц пикофарад, чего должно быть достаточно для схемы измерения усилия, которую я планирую реализовать в следующих модификациях.
Дополнительно на всякий случай повесил на каждый элемент грифа по посадочному месту для кнопки или чего-то подобного. И сделал соответствующие вырезы в плате. Это чтобы можно было не только прикоснуться к цилиндрику, но и прожать его внутрь. Можно будет поэкспериментировать с разными техниками игры.
Решив вопрос подключения множества микросхем измерителя емкости к контроллеру, приступаю к разводке платы.
На этот раз плату удалось заказать и даже дождаться ее изготовления.
После того, как припаял все комплектующие к плате, понял, что конструкция с пластиковыми струнами получается слишком сложной. Поэтому решил пока что повесить на деку такие же сенсорные цилиндрики, но подлиннее.
Два проводочка в нижней части – это я подключил накладку с цилиндриками к уже изготовленной плате. Это временное решение.
Железяка готова. Следующая задача – заставить ее играть.
Софт
Программная часть реализована так:
1. Скачиваем виртуальный синтезатор, который может работать с MIDI устройством и издавать гитарные звуки.
2. Пишем прошивку для контроллера, которая будет опрашивать сенсоры и передавать данные по USB на комп.
3. На стороне компа пишем программу, которая будет получать эти данные, генерировать из них MIDI-пакеты и отправлять их на виртуальный синтезатор из пункта 1.
Теперь каждый пункт подробнее.
Виртуальных синтезаторов под винду с поддержкой MIDI оказалось довольно много. Я попробовал Ableton live, RealGuitar, FL studio, Kontakt. Остановился на RealGuitar из-за простоты и заточенности именно под гитару. Он даже умеет имитировать несовершенства человеческой игры – скольжение пальцев по струнам, рандомизированные параметры извлечения нот.
Чтобы подключить свое приложение к виртуальному синтезатору я сэмулировал виртуальный порт midi, который подключен ко входу синтезатора RealGuitar через эмулятор midi-кабеля. Такая вот многоуровневая эмуляция.
*Мем с ДиКаприо с прищуренными глазами*
В интерфейсе программы я сделал графическое отображение уровня измеряемой емкости для каждого сенсора. Так будет проще подстраивать звучание. Также на будущее добавил элементы управления светодиодами, вибромотором (пока не знаю зачем, но он тоже будет в гитаре), визуализации работы акселерометра и уровня заряда аккумулятора.
Для того чтобы удары по струнам гитары вызывали проигрывание правильных нот, нужно замапить все 72 сенсора на грифе на соответствующую ноту.
Оказалось, что из 72 элементов на 12-ти ладах всего 37 уникальных нот. Они расположены по определенной структуре, так что удалось вместо построения большой таблицы вывести простое уравнение, которое по номеру сенсора выдает номер соответствующей ноты.
Проверяем работу
Похоже, все готово для первого теста. Пилить прутки и паять все 12 ладов мне было лень, поэтому ограничился 8-ю. Момент истины:
IT’S ALIVE! Жизнеспособность концепта подтверждена. Счастью не было предела! Но нельзя расслабляться.
Следующий этап – добавление светодиодов, акселерометра, вибромотора, аккумулятора, беспроводной связи, корпуса и возможности работы без драйверов или программ эмуляции midi на всех популярных платформах.
Светодиоды
По плану гитара должна подсказывать пользователю, куда ставить пальцы, зажигая в этом месте светодиод. Всего нужно 84 светодиода. Тут все просто. Я взял 14 восьмибитных сдвиговых регистров и соединил в daisy chain. STM-ка передает данные в первый регистр, первый – во второй, второй – в третий и т.д. И все это через DMA, без участия ядра контроллера.
Акселерометр
Самый простой акселерометр LIS3D позволит гитаре определить угол своего наклона. В будущем буду это использовать для наложения звуковых фильтров во время игры в зависимости от положения гитары.
Беспроводное соединение
Для беспроводной передачи данных решил поставить ESP32. Оно поддерживает различные протоколы Bluetooth и WI-FI, будет с чем поэкспериментировать (на тот момент я еще не знал, что в моем случае существует только один правильный способ подключения).
Корпус
Одно из ключевых требований к гитаре – портативность. Поэтому она должна быть складной, а значит, электронику деки и грифа нужно разнести на две платы и соединять их шлейфом. Питание будет подаваться при раскрытии корпуса, когда магнит на грифе приблизится к датчику Холла на деке.
Доработка прототипа
Что ж, осталось облачить девайс в приличную одежку.
Я много экспериментировал с различными конструкциями тактильных элементов грифа и рассеивателями для светодиодов. Хотелось, чтобы равномерно светилась вся поверхность элемента, но при этом сохранялась возможность детектирования прикосновения и нажатия на кнопки.
Вот некоторая часть этих экспериментов:
Еще я обратился к другу, который профессионально занимается промышленным дизайном. Мы придумали конструкцию узла сгибания гитары, после чего он спроектировал и напечатал прототип корпуса.
Развожу финальный вариант плат и собираем гитару:
Выглядит почти круто. Но девайс все еще подключается к компу через цепочку эмуляторов, эмулирующих другие эмуляторы.
Превращаем гитару в MIDI-устройство
В новой версии в первую очередь я хотел, чтобы при подключении по USB, гитара определялась как MIDI устройство без всяких лишних программ.
Оказалось, сделать это не так сложно. Все спецификации есть на официальном сайте usb.org. Но все алгоритмы, которые выполнялись на стороне python-приложения, пришлось переписывать на C в контроллер.
Я был удивлен, что оно сразу заработало на всех устройствах. Windows 10, MacOS, Debian 9, Android (через USB переходник). Достаточно просто воткнуть провод и в системе появляется MIDI-устройство с названием «Sensy» и распознается всеми синтезаторами. С айфоном пока протестировать не удалось т.к. нет переходника. Но должно работать так же.
Беспроводной интерфейс
Осталось избавиться от проводов. Правильное решение пришло не сразу, потому что я поленился как следует погуглить. Но в итоге я использовал протокол BLE MIDI, который поддерживается всеми новыми операционками и работает без всяких драйверов прямо как по USB MIDI. Правда, есть вероятность, что на более старых операционках решение не заработает в силу отсутствия поддержки BLE MIDI. Но все тесты с доступными мне девайсами прошли успешно.
Переписанный функционал приложения – т.е. трансляция данных сенсоров в MIDI-данные – занял точнехонько всю память контроллера. Свободными осталось всего 168 байт. Очевидно, кремниевые боги мне благоволили, значит иду в правильном направлении.
Уверен, можно оптимизировать, но это отложу для следующей версии. Хотя, возможно, проще не тратить время и просто взять контроллер потолще. Разница по деньгам – 5 центов. Посмотрим. Все равно нужно будет место для новых фич – обрабатывать техники игры, например. В первую очередь, хочу реализовать slide. Это когда начинаешь играть ноту с определенным зажатым ладом и проскальзываешь рукой по грифу, перескакивая с лада на лад.
Теперь можно проверить работу по беспроводу:
При включении всех светодиодов, гитару можно использовать, если вы заблудились в темной пещере.
Недостатки прототипа
На текущий момент у конструкции есть следующие минусы:
1) На сенсорах нигде не измеряется усилие нажатия. Это влечет за собой три проблемы:
• Постоянно происходят случайные задевания соседних струн как на деке, так и на грифе. Это делает игру очень сложной.
• Все играемые ноты извлекаются с одинаковой громкостью. Большинство подопытных этого не замечают, но хотелось бы более приближенной к настоящей гитаре игры
• Невозможность использовать техники hammer on, pull off и vibrato
2) Светодиоды одноцветные. Это ограничивает наглядность при игре по табулатурам. Хочется иметь возможность разными цветами указывать на различные приемы игры.
3) Форма корпуса не подходит для левшей. С точки зрения софта – я уже реализовал инверсию струн по акселерометру. Но механический лепесток, необходимый для удержания гитары рукой во время игры, поворачивается только в сторону, удобную правшам.
4) Отсутствие упора для ноги. Сейчас при игре сидя нижняя струна почти касается ноги, а это неудобно.
5) Сустав сгибания гитары требует осмысления и доработки. Возможно, он недостаточно надежен и стабилен.
Время переходить к разработке следующей версии.
Переезжаю на контроллер серии STM32F07. На нем уже 128КБ флэша – этого хватит на любой функционал. И даже на пасхалки останется.
Использовать ESP32 в финальной версии гитары было бы слишком жирно, поэтому я пошел искать что-то более православное. Выбор пал на NRF52 по критериям доступности, наличию документации и адекватности сайта.
Конечно, будут реализованы и три главных нововведения:
– светодиоды теперь RGB,
– на каждом сенсоре грифа будет измерение усилия (тактовые кнопки больше не нужны),
– струны на деке станут подвижными.
На данный момент плата деки выглядит так (футпринт ESP на всякий случай оставил):
Уже есть полная уверенность в том, что весь задуманный функционал будет реализован, поэтому было принято решение о дальнейшем развитии. Будем пилить стартап и выкладываться на Kickstarter 🙂
Проект называется Sensy и сейчас находится в активной разработке. Мы находимся в Питере, сейчас команда состоит из двух человек: я занимаюсь технической частью, мой партнер – маркетингом, финансами, юридическими вопросами.
Скоро нам понадобится наполнять библиотеки табулатур и сэмплов различных инструментов. Если среди читателей есть желающие в этом помочь – пожалуйста, пишите мне в любое время.
Кому интересно следить за новостями проекта – оставляйте почту в форме на сайте и подписывайтесь на соцсети.
Очень надеюсь на обратную связь с комментариями и предложениями!
Спасибо за внимание!
Забавный эпизод из процесса разработки
Сижу отлаживаю NRF52, пытаюсь вывести данные через UART. Ничего не выходит. Проверял код, пайку, даже перепаивал чип, ничего не помогает.
И тут случайно нестандартным способом перезагружаю плату – в терминал приходит буква «N» в ascii. Это соответствует числу 0x4E, которое я не отправлял. Перезагружаю еще раз – приходит буква «O». Странно. Может быть проблема с кварцевым резонатором и сбился baud rate? Меняю частоту в терминале, перезагружаю плату – опять приходит «N». С каждой новой перезагрузкой приходит по новой букве, которые в итоге составляют повторяющуюся по кругу фразу «NON GENUINE DEVICE FOUND».
Что эта NRF-ка себе позволяет? Прошивку я обнулял. Как она после перезагрузки вообще помнит, что отправлялось в предыдущий раз? Это было похоже на какой-то спиритический сеанс. Может, я и есть тот самый NON GENUINE DEVICE?
Залез в гугл, выяснил, что производители ftdi микросхем, которые стоят в USB-UART донглах, придумали способ бороться с китайскими подделками. Виндовый драйвер проверяет оригинальность микросхемы и на лету подменяет приходящие данные на эту фразу в случае, если она поддельная. Очевидно, мой донгл оказался подделкой и переход на другой решил эту проблему.
Снова спасибо китайцам.
Самодельный робот-пылесос v. 2.0. часть 1: корпус, турбина, механика / блог им. nitrior / robocraft. роботы? это просто!
Диаметр робота 34 сантиметра, высота 9 сантиметров. Корпус робота сделан из вспененного ПВХ толщиной 4 мм.
Сначала основание вырезал из фанеры, но она крошится и отслаивается. Решил делать из ПВХ. Склеил вместе два куска 4 миллиметрового ПВХ и вырезал из этого бутерброда основание диаметром 33 сантиметра. Потом прорезал отверстия для колес.
Примерил колеса.
Вид снизу.
Сделал крепления для бампера.
Чтобы ровно согнуть переднюю часть бампера, воспользовался большой кастрюлей. Взял полоску ПВХ, нагрел обычным феном, прижал к кастрюле с помощью ремня и продолжал греть, подтягивая ремень. Когда все это дело остыло, приклеил крепление бампера.
Вырезал дугу и приклеил её сверху бампера, для жесткости.
Насверлил отверстий и приклеил инфракрасные датчики препятствия. Датчики пришлось немного перепаять. У них ИК-диоды были припаяны с другой стороны платы и не было бы возможности регулировать расстояние до препятствия с помощью подстроечных резисторов.
Соорудил такую конструкцию, чтобы не тянуть от каждого датчика по три провода к основной плате. Получилось вместо 18 проводов, всего 8, шесть сигнальных и два питание.
Крыльчатку для турбины вытащил из автомобильного пылесоса, который приобрел за 200 рублей.
Вырезал крепление для мотора, закрепил мотор и одел не него крыльчатку.
Корпус турбины.
Вид снизу.
Закрепил мотор с крыльчаткой в корпусе.
Мотор оказался немного длиннее и пришлось вырезать под него отверстие в дне турбины и в основании пылесоса.
Прикрутил турбину к основанию, сделал крепления для аккумуляторов, закрепил выключатели столкновения и прорезал отверстие для пылесборника.
Проплавил два отверстия для моторов, которые будут крутить щетки.
Моторы закрепил на железных крышках из-под соуса, а сами крышки вклеил в основание.
Прикрутил бампер.
С задней стороны робота стоят аккумуляторы формата 18650. Подключены две пары последовательно.
В черной коробочке находится контроллер заряда — разряда аккумуляторов. Когда АКБ подходит к минимально допустимому разряду, контроллер отключает пылесос, когда заряжается и достигает полной зарядки, то отключает зарядное устройство.
Пылесос с бампером, вид спереди.
Одел верхнюю крышку.
На передней крышке выключатель и разъем для подключения программатора.
Контейнер для пыли и мусора сделал из 4 мм. ПВХ. Фильтр из двух слоев тряпичной салфетки (продается в любом магазине, где торгуют чистящими средствами для дома) и вклеил их в рамку из плотного картона.
Чтобы крышка на контейнере хорошо держалась приклеил к ней и к контейнеру магнитные полоски, от магнитов на холодильник.
Контейнер, вид снизу. Серая точка это магнит, который притягивает контейнер к основанию.
Робот-пылесос вид снизу.
Щетки сделал из лески и вклеил между слоями ПВХ. Колесики временные, пока не найду шариковые высотой не более 2 сантиметров.
Черная юбка сделана из войлока и крепится на неодимовых магнитах.
Робот-пылесос в сборе.
В следующей части будет электроника, схема, скетч и видео работы робота-пылесоса.
Сборка робота-пылесоса
Подготовив все необходимое можно приступать к сборке. Она заключается в прохождении вышеописанных этапов.
- Создаем корпус цилиндрической формы из картона либо поливинилхлорида: диаметр – 30 см, высота – 9 см, толщина стенок – 0,6 см. Дно лучше вырезать из фанеры.
- Закрепляем на корпусе поливинилхлоридный бампер при помощи скотча, предварительно установив в него датчики инфракрасные и реагирующие на удар.
- Изготавливаем из картона или поливинилхлорида отсек для мусора с крышкой, закрепляемой магнитами.
- Делаем фильтр из тканевых салфеток.
- Делаем турбину из поливинилхлорида и компьютерных дисков, устанавливаем.
- Подключаем датчики к контроллеру: обычный рабочий режим соответствует логической единице, а срабатывание – нулю.
- Двигатель передней щетки подключаем к arduino mega 2560 через транзистор mosfet, что обеспечивает быстрое ее вращение по углам и довольно медленное по основной площади комнаты.
- Устанавливаем 4 аккумулятора (соединяем их попарно, каждую пару — последовательно) и зарядное устройство, подключаем их.
- Монтируем щетки, изготовленные самостоятельно из лески, и колеса (купленные либо снятые с подходящей игрушки) на дно.
- Устанавливаем на arduino необходимые программы при помощи компьютера, которые можно найти в сети интернет.
- Проверяем закрепление всех компонентов к дну и стенкам корпуса.
- Вырезаем из картона или поливинилхлорида крышку, закрепляем ее саморезами.
Важным моментом работы является возвращение бампера в исходное положение после удара о препятствие, то есть достаточная его упругость.
Все детали закрепляются на имеющиеся для этих целей у них разъемы саморезами либо клеем, скотчем. Полученный результат представлен на фотографии:
Способы обеспечения движения, уборки и питания робота-пылесоса
Движение роботизированного устройства в общем случае осуществляется двумя способами: по спирали (с центра наружу) и зигзагами. В микроконтроллеры можно также занести и схемы комнат по отдельности.
Пространственную ориентацию, объезд препятствия на пути следования пылесос осуществляет благодаря встроенным контактным и инфракрасным датчикам — они образуют систему обратной связи. Инфракрасные регулируют движение, определяя расстояние до стен, предметов, перепады высот.
Автоматизированный пылесос с автономным источником питания, конечно же, не развивает такую мощность всасывания, как ручной вариант. Практические испытания показали большую эффективность использования маленькой щетки совместно с всасывающей турбиной.
Питание роботизированной системы можно осуществлять от нескольких аккумуляторов, напряжение на клеммах которых – 12 V (18 V), а его емкость равняется 7 А*ч. Зарядка осуществляется при прямом контакте либо беспроводным способом. Применение последнего увеличивает расходы на комплектующие детали.
Самостоятельный возврат робота к месту зарядки – сложная задача, которую можно решить установкой передающего маяка.
Любая автоматизированная модель собирается на базе контроллера (мозга системы). Поэтому следует изучить язык его программирования для занесения алгоритма команд. Следует также учитывать интуитивную направленность командного интерфейса, что значительно облегчает процесс.
Теоретические аспекты проблемы
Домашние умельцы вывели практическим путем требования к роботам-пылесосам, которых следует придерживаться при их создании. Результатом соблюдения будет механизм, пригодный к дальнейшей эксплуатации. Перечень основных правил следующий:
- рекомендуется изготавливать робот в форме небольшого цилиндра;
- для того, чтобы автомат мог осуществлять развороты на месте – колеса следует размещать по диаметру;
- дополнительному рулевому колесу привод не требуется;
- механизм должен собирать мусор в легко вынимаемый мусороприемник;
- робот обязательно должен быть оснащен контактным бампером, занимающим минимум половину его окружности;
- зарядку аппарата следует проводить от зарядного устройства, без его разборки;
- наилучшим местом размещения центра тяжести у робота являются колеса, также допускается располагать его рядом с ними;
- оптимальная скорость движения – от 25 до 35 см/с;
- двигатели работают совместно с редукторами, оснащенными пружинами.
Выделяются модели с шаговыми двигателями, что позволяет программно управлять ими без применения редукторов.