Дорогие коллеги и просто любители радио техники Сегодня читал про основы квантовой механики и чёт подумал сделать макет суперпозиции То есть частица находиться в хаотичном состояние до момента наблюдение В момент наблюдение частица встаёт одну из всех возможных ее позиций В моей модуляции 2 вкл выкл
Господа знающие. Прошу подсказать! Не получается включить шаговик. Использую Arduino UNO, понижающий преобразователь напряжения / LM2596S (DC-DC) для самой ардуинки, модуль-адаптер для подключения драйверов и сам драйвер DRV8825, ну и шаговик Nema 17. На драйвер подаю напрямую 12V. GDN общий у всего. Если провод из пина D3 тыкать вручную на GDN - двигатель чуть дёргается, т.е. вроде пытается работать, а так, в пине просто издаёт какой то стрёмный скрежет/свист. Проверил пары проводов - 1А 1В, 2А 2В - это тоже подключено правильно да и провод как бы стандартный с двигателем приехал. Крутил потенциометр на драйвере: против часовой стрелки - свистит так же, против часовой стрелки - почти в конце свист полностью исчезает (похоже что просто отключается т.к. руками проворачивается).
Задался целью, подружить Arduino Nano с телефоном на Android, через OTG кабель. Да, можно и с wi fi, но было интересно сделать с кабелем. И вот результат.
Смеркалось. Рядом со мной стоял откалиброванный 3Д принтер, две катушки свежего PLA-пластика, пять еще не распакованных датчиков с маркетплейса, мультиметр, надфили, кусачки, пол-литра изопропилового спирта и целый комплект Arduino Uno с набором проводов — не считая той мелочи, что оставалась из старых запасов. Всё это было щедро приправлено некоторыми знаниями и относительно прямыми руками. Не хватало идеи.
Помогло отключение воды. Поливая руки из пластиковой бутылки, зажатой подмышками, кряхтя и промахиваясь, я вспомнил летний отдых в доме у бабушки, где не было водопровода по определению. Был умывальник. И это было удобно, за неимением альтернативы.
Решено! Сделаю умывальник. Идею взять цветочный горшок, гвоздь "сотку", кусок пластилина и сделать все быстро была отметена в зародыше. 21 век, все таки! Напечатаю на 3Д принтере.
Если интересно, как, зачем, почему и какие проблемы решил в процессе, то добро пожаловать.
Всю эпопею можно разделить на три четких этапа. Первый - неудачный. Второй - удачный и точка, где, по хорошему надо было бы остановиться. Третий - чистое баловство и развлечение. Зато он самый интересный.
Вариант 1. Эпичный провал.
Буквально в день появления идеи, на коленке, был сделан набросок и пущен на печать. За основу идеи я взял те умывальники, что висели в огороде в моем детстве. Круглая емкость, больше всего похожая на цветочный горшок, сужающаяся к низу. К сожалению чертежей первой версии не сохранилось. Есть только фото готового результата.
1/3
Умывальник версии 1 типа "ведро"
Наиболее полезной и работоспособной частью стал "язык" умывальника и выемка под резиновое уплотнительное кольцо для него. Это, без особых изменений пошло в дальнейшие модификации.
В целом испытания показали - работает. Подтекает немного, но нажимаешь - льется, отпускаешь - не льется. Осталось как - то его прикрепить. Вот тут - то и выявились критические недостатки конструкции. На фото не очень хорошо видно габариты, но в верхней части диаметр сантиметров 16-18. Как это крепить я сразу и не подумал. А надо было!
Наращивать какие - то ушки на верхнем бортике? Слишком узко. Не выдержит веса набранной воды. Да и перепечатывать не хочется. Попытка сделать обруч, который повторяет сужение и по бокам имеет крепежные элементы уперлась в ограничение принтера. Хоть оно и вполне приличное, но имеет пределы. Саму емкость надо держать в верхней части, чтобы центр масс был ниже, иначе перевернется. И так далее. Выходило громоздко, некрасиво и не печаталось одним элементом.
Я конечно попытался что - то изобразить. К сожалению не нашел фотографии. Оно и к лучшему. Мне было бы стыдно это показывать.
Пришлось подумать и пересмотреть концепцию. Во мне проснулся инженер. [А он и не засыпал!]
Вариант 2. То, что надо!
К делу подошел более вдумчиво. Если круглая емкость не подошла - пусть будет емкость квадратная. Ее крепить однозначно будет проще. Сразу решил, что крепить буду к шкафчику над раковиной. Ширина доски 16 мм. Вот на нижнюю часть шкафчика и повешу умывальник. Удобно одевать и снимать. Получится достаточно высоко, чтобы можно было без проблем поднести руки и/или посуду.
1/4
Умывальник версии 2. Переработанный.
На рисунках выше видно, что получилось. Из неизменного взято отверстие и язык. Емкость квадратная. Внутри сделаны плавные скаты, чтобы не оставалось лишней воды.
Особое внимание стоит уделить держателям, а именно их способу крепления к емкости. Хотелось проверить - получится ли на PLA пластике, несмотря на его хрупкость, сделать эффект пружинной защелки? В нижней части емкости сделаны пазы в которую предполагается защелкнуть крепление. В верхней части емкости сделано углубление - потай. Крепление как бы одевается сверху, а потом защелкивается.
Опыт показал, что это отличное решение. Одевается с характерным щелчком. Чтобы снять необходимо чем - то острым типа отвертки поддеть снизу. Снимается и не ломается.
В связи с тем, что задача стала уже больше экспериментом, чем решением актуальной проблемы - появилось желание проверить возможность печати различных деталей и общей модульности конструкции. Например, сама емкость печаталась 11 часов, и не хотелось печатать ее снова. Хотелось, переделывать отдельные элементы. Будь - то крышка, держатели, или что - то еще.
Крепление отдельно. Самая интересная деталь, как по мне.
Итог - все работает так, как должно. Почти. Крепится, льется. Выявил три проблемы:
Крепление слишком короткое и хрупкое в том месте, которое одевается на стенку шкафчика. Печатал не думая о прочности. Внутри пористая структура. Итог закономерен. Набрав полную емкость воды (а это литра 2,5 - 3) крепления не выдержали и сломались. Это поправимо сделаем длиннее, толще и уменьшим внутренний воздух.
Нет полной герметичности. После наливания воды постоянно капает. Причиной этому стала ошибка в глубине выемки под уплотнительную резинку. Буквально на 1 миллиметр глубже, чем следовало. Но перепечатывать емкость и тратить снова 11 часов на это очень не хотелось. Ниже будет описано, как постарался исправить ситуацию.
Чего - то не хватает. Нет полного удовольствия от процесса. Сам по себе этот умывальник больше игрушка. Так - что доведем игрушку до логического конца. Сделаем его автоматизированным устройством, чтобы он автоматически открывался, когда подносишь руки и закрывался, когда убираешь.
Вариант 3. Лучшее враг хорошего!
Мне кажется это самая интересная часть повествования. Для автоматизации надо было найти ответы на следующие вопросы:
Как преобразовать вращательное движение (двигатель) в поступательное?
Какой двигатель выбрать?
Какой подобрать датчик, чтобы он удовлетворял требованиям по точности и скорости срабатывания.
Как скомпоновать и закрепить все на устройстве?
Изначально хотел сделать какой - то вариант кривошипно - шатунного, или кривошипно - ползунного механизма. Можно, но зачем? Остановился на варианте звезда - рейка. Дешево и сердито. Чтобы открыть/закрыть требуется минимум оборотов. Об износе и речи не идет. Если все сделать точно - будет работать как надо.
1/2
Язык умывальника в сборе
На рисунке выше сборка из четырех деталей. Рейки с удлинением, чтобы ее длины хватало выглядывать из крышки и цепляться с зубчатым колесом. Самого языка, его насадки для удобства нажатия и уплотнительной резинки.
Выше я писал, что промахнулся с углублением в емкости. Из - за этого не было достаточной герметичности. Решил проблему так, чтобы резинка закрывалась другой резинкой. И эта резинка выпирала ровно на тот самый миллиметр наружу, компенсируя ошибку в емкости. На второй картинке я обвел это место. Сам язык сделал тяжелым, чтобы не всплывал и центр тяжести опустил как можно ниже, чтобы повысить устойчивость. Для этого и предусмотрен массивный прямоугольник. Помогло.
Следующим шагом создал крышку на умывальник в котором предусмотрел отверстия для налива воды и выхода рейки. Отлично подошло решение с потаем бокового крепления, когда оно, крепление, надетое на емкость, становится продолжением бортика. Крышка надевается сверху плотно без зазоров.
1/2
Крышка
Странные отверстия на крышке - это крепления под накладку, на которой, по моей задумке, будут крепиться основные компоненты. Изначально я хотел сделать крепления по принципу защелки, но все эксперименты показали, что PLA слишком хрупок для этого и ломается. Удивительно, что сработали защелки на держателе (см. выше). Думаю потому, что подобрал удачное сочетание толщины пластика и длины рычага. А эти защелки получались слишком мелкими и, потому, хрупкими. Решил, что крепиться будет по принципу кубика конструктора шип - паз. Идея прекрасно сработала. Накладка одевается туго. Намертво.
Осталось дело за малым. Спроектировать накладку так, чтобы удачно скомпоновать все элементы, а именно:
Двигатель и звезда
Батарейка
Драйвер двигателя
Плата ардуино
1/3
Накладка для крепления плат и двигателя
В качестве двигателя решил взять шаговый двигатель. Т.к., как писал выше, много оборотов не требуется. Скорость не требуется. Важна точность. Шаговый двигатель самый подходящий вариант. В комплекте с набором ардуино шел двигатель 28byj-48 и плата драйвера. Это удобно. Не надо вникать в детали управления шагового двигателя. Подавай импульсы на выходы платы по порядку и он будет крутиться.
Двигатель имеет определенные габариты и должен быть установлен точно так, чтобы звезда идеально заходила на рейку. Для этого использовал достаточно длинные крепления, чтобы двигатель сидел на них очень плотно, а требуемое расстояние задал с помощью трубочек определенной длины. Вал двигателя соединил со звездой муфтой, в которой сделал отверстие для двигателя характерной формы. Внешний диаметр муфты совпадает с диаметром крепления звездочки. Все село плотно.
1/2
Крепление контроллера и батарейки нет смысла обсуждать отдельно. Ничего интересного.
Гораздо интереснее оказалось с выбором датчика. Изначально задумывалось использовать инфракрасный датчик HC-SR505. Он срабатывает именно на человека. Должен работать хорошо.
HC-SR505
На практике оказалось все иначе. Для моего случая у датчика был запредельный диапазон срабатывания, а что самое важное, крайне медленное время реагирования. По факту, даже накрыв датчик плотной тканью он узнавал об этом спустя 30 - 40 секунд. Датчик отлично подойдет для систем освещения типа лампочек в подъездах (для этого он и сделан), но в моем случае не годится. Думал применить его старших братьев с регулировкой скорости и расстояния, но остановился на ультразвуковом датчике hc-sr04. Расстояние срабатывания от 2 см до 4 м и скорость отклика до 38 мс.
Скорость отклика записывают в его недостатки, но для меня это фактически сверхсветовая. С гарантией. В программе мы опрашиваем его раз в пол секунды.
HC-SR04
Надо бы его закрепить так. чтобы руки точно попадали под его излучение. Тут все просто - смотри картинку. Важно сделать желобок, чтобы не мешали провода и прижать все так, чтобы не попала вода.
Детали напечатаны, собраны. Дело за программным обеспечением. Не стал жестить и вспоминать ассемблер под контроллеры ATMega. Решил пусть будет C++. Программа простая. Ресурсов хватит точно. Поставил Arduino IDE, надергал скетчей из интернета по работе с двигателем и датчиком и собрал все в удобное для себя решение. Где брал основу для своего класса по работе с двигателем уже не вспомню. А вот по датчику помню.
Основной код программы:
#include "u_driver.h"
#define echoPin 6
#define trigPin 7
#define in1 8
#define in2 9
#define in3 10
#define in4 11
U_Driver *drvr;
int isOpen; //-1 подготовка, 0 закрыто, 1 открыто
const int thresold = 11; //Пороговое значение срабатывания (открытия/закрытия) в см
void setup() {
//Пины привода
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
//Пины датчика
pinMode(trigPin, OUTPUT); // назначаем trigPin, как выход
pinMode(echoPin, INPUT); // назначаем echoPin, как вход
Serial.begin(9600);
drvr = new U_Driver(10,90);
isOpen = -1;
Serial.println("START PROGRAM");
}
void loop() {
if (isOpen == -1){
delay(1000);
//Убираем первое ложное срабатывание
isOpen = 0;
}
else {
Serial.println("MAIN LOOP START");
int duration, cm; // назначаем переменную "cm" и "duration" для показаний датчика
digitalWrite(trigPin, LOW); // изначально датчик не посылает сигнал
delayMicroseconds(2); // ставим задержку в 2 ммикросекунд
digitalWrite(trigPin, HIGH); // посылаем сигнал
delayMicroseconds(10); // ставим задержку в 10 микросекунд
cm = duration / 58; // вычисляем расстояние в сантиметрах
Serial.print(cm); // выводим расстояние в сантиметрах
Serial.println(" cm");
Serial.print("IsOpen:");
Serial.println(isOpen);
if (cm <= thresold && isOpen == 0)
{
Serial.print("NEED OPEN");
//Если поднесли руки в зону срабатывания датчика и закрыто
drvr->Open();
isOpen = 1;
}
if (cm > thresold && isOpen == 1){
Serial.print("NEED CLOSE");
//Было открыто, но убрали руки.
drvr->Close();
isOpen=0;
}
}
delay(500); // ставим паузу в 0,5 секунд
}
По коду и комментировать - то нечего. Кроме того, что я немножко получил удовольствие вспомнив С++. Убедился, что современные языки стали гораздо удобнее тот - же С#. Не удержался от соблазна немного поиграть в ООП и спрятал логику работы с двигателем в отдельный класс. Думаю, что не стоит тут это расписывать. В конце статьи будет ссылка на материалы в т.ч. и на код. Кому интересно посмотрит самостоятельно.
Изначально я планировал закрывать язык в самом начале работы программы. Чтобы избежать состояния, когда язык поднят, а питание убрано. Это было лишнее. Точнее как. Это было бы правильно сделать, по науке, но для этого надо было усложнить схему. Как - то определять вращается ли двигатель. Просто вращать - оказалось плохой идеей. Мощности двигателя хватало, чтобы приподнять крышку.
Но, к моему удивлению, убрав блок инициализации, я столкнулся с тем, что при включении устройства в сеть (не ресет, а именно подача питания) было ложное срабатывание датчика на открытие. Склоняюсь к тому, что идет процесс инициализации самой микросхемы. Копать глубже не стал. Поступил, как настоящий ИТшник. Сделал костыль. Вернул этап подготовки, но при этом не стал вращать двигатель, а подождал одну секунду. Это убрало ложные срабатывания. Может кому - то будет полезно.
Костыль, конечно, но, надо держать марку. Как - же без костылей - то?
Итог
Рендеринг, это хорошо, но, уверен, что хочется посмотреть, как получилось в итоге.
Не уверен, что кому - то надо, но STL файлы и код для ардуино можно скачать по этой ссылке
Выводы
Лично я получил большое удовольствие от процесса. Времени потрачено очень много. Пластика, с учетом брака и экспериментов - три катушки по 1 кг каждая.
Значительно повысил навык работы в CAD программе.
Методом проб и ошибок понял пределы допустимого в использовании 3Д принтера для своих целей. Что работает, что нет. Захотелось попробовать иные пластики, более сложные конструкции и так далее.
В планах сделать какой ни будь мини проект, чтобы:
- Интегрировать ПК (ноут, или рапсбери) с ардуино, а может какой другой линейкой контроллеров. Ардуино самый доступный. Без интеграции с ПК дальше мелких поделок продвинуться не удастся. То, что это у меня получится гарантия 100% тут нет сомнений, но сам путь все равно надо пройти и набить руку.
- Поиграться с тем, чтобы один контроллер мог управлять другими контроллерами. Теми же приводами могут управлять и более простые контроллеры, а некую логику реализовывать более мощные, а им управлять программы на ПК и т.д.
У меня есть пару идей, куда бы применить свое внезапно появившееся хобби, но может быть в комментариях кто - то еще подскажет дельные советы? Буду благодарен. Жду отзывов. Панамку приготовил.
Кто осилил текст - тем большое спасибо за внимание!
Я не являюсь автором 3D-модели, но она была "немного" допилена.
Материалом для 3Д печати послужил PET-G около 2 кг. Элементы соединялись на металлические шипы, прихватывались суперклеем и окончательно фиксировались эпоксидной смолой. Швы и дефекты затирались шпатлевкой для пластика. Далее грунт, жидкий "хром", лак, хаки. Столь мудреная окраска нужна чтоб сквозь реальные потертости и царапины проглядывал металл.
В качестве микроконтроллера был выбран Arduino nano, из за своей попсовости и вообще он у меня 2 года пылился. Сервоприводы изначально планировались MG90S, но они оказались слишком слабыми, поэтому были заменены на MG995. Музыкой заведует модуль DFPlayer Mini. Конечно на карту памяти было залито полтора часа музыки из игры. Два фонаря белый и красный коммутируются через реле. С питанием внутренних цепей пришлось намудрить и использовать аж 4 понижайки на базе LM2596. Источником первичного питания являются 2 аккумулятора 18650, но при желании можно запитать от любого источника от 7 до 35 вольт (например БП ноутбука). Управление осуществляется посредством ИК пульта.
На изготовление данного MP3 плеера ушло порядка 2-х месяцев.