Оглавление:

Колыбель Arduino Rocker: 19 шагов (с изображениями)
Колыбель Arduino Rocker: 19 шагов (с изображениями)

Видео: Колыбель Arduino Rocker: 19 шагов (с изображениями)

Видео: Колыбель Arduino Rocker: 19 шагов (с изображениями)
Видео: USB based Automatic cradle designed for my little princes 2024, Июль
Anonim
Image
Image

Извините, я не мог устоять перед банально интенсивной музыкой, которую предлагал мой редактор видео.

У меня недавно родился первый ребенок, и у меня уже была деревянная колыбель, которую мой дядя (отличный столяр) сделал для моего племянника. Мой племянник давно перерос это, поэтому я был счастлив взять его и не тратить ВСЕ ДЕНЬГИ на любую люльку / люльку, которую мама-блоггер заставила мою жену упасть в обморок. Подставка имеет довольно простую конструкцию, в основном две стойки с болтами, которые крепятся через них, которые поддерживают корпус люльки. Есть съемный штифт, чтобы зафиксировать его на месте.

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

На следующее утро я начал мозговой штурм, как заставить робота раскачать для меня этого ребенка. Войдите в Arduino…

Запасы

Хорошо, это был мой первый проект Arduino в истории, поэтому я провел несколько экспериментов, проб и ошибок, и я уверен, что в моем дизайне есть возможности для улучшения, но вот мой список деталей: Arduino Uno (13 долларов США) для управления всем комплект (10 $) для подключения проводов

Шаговый двигатель (14 долларов США). Это самая интересная вещь, потому что она выполняет всю работу. Я начал с драйвера с немного меньшим крутящим моментом, но потом получил этот, и он работает довольно хорошо. Не стесняйтесь покупать еще более мощный. Драйверы шагового двигателя (10-30 долларов США). Они находятся между Arduino и двигателем. Этот конкретный, по-видимому, может управлять двигателем тише, чем некоторые другие, поэтому я пошел с этим, поскольку двигатель будет в нескольких футах от моей (и моего сына) головы, пока мы спим. Первоначально я только что купил один драйвер TMC2209 примерно за 10 долларов, но в итоге купил пакет из 4, потому что сначала у меня были некоторые трудности и я хотел убедиться, что в какой-то момент я не поджарил плату. Я фактически убил 3 платы, что подводит меня к следующему пункту … Конденсаторы! (10 долларов) Вам действительно нужен только конденсатор емкостью 1 47 мкФ 50 В, так что эта коробка на 240 была излишней. Источник питания на 36 В (17 долларов) Первоначально я купил ничтожный источник питания 12 В, затем выяснил, что это был источник всех моих проблем и получил тот, который был ближе к максимальному напряжению, с которым мог справиться мой шаговый двигатель. Если вы используете другой двигатель или шаговый драйвер, убедитесь, что он может выдерживать напряжение (В) и что сила тока (А) источника питания не ниже пикового тока, потребляемого двигателем. 8 $) Это то, к чему подключается блок питания. Вам нужно будет припаять их к некоторым проводам, чтобы вставить их в макетную плату. Большой пакет перемычек (9 долларов США), чтобы я мог разместить элементы управления в любом месте комнаты.

Кнопки (8 долларов) для включения / выключения и т. Д.

Микрофонный усилитель (11 долларов) О, вы все тоже не знали, что это был звук?

Я использовал некоторые маленькие шкивные колеса (8 долларов), но, возможно, есть альтернативы получше. Подробнее об этом позже. Вам также обязательно понадобится паяльник и все, что вы хотите использовать для установки двигателя. Я лично просто сделал грубую коробку из 4-х скрепленных между собой деревянных кусков, а затем прикрутил их к другому куску дерева, ширина которого примерно равна ширине моей опоры колыбели. А пока я просто держу его зажатым, потому что не знаю, хочу ли я испортить колыбель моего дяди.

Шаг 1. Ознакомьтесь с распиновкой вашего шагового драйвера

Подключите Arduino 5V / GND к макетной плате
Подключите Arduino 5V / GND к макетной плате

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

Шаг 2: Подключите Arduino 5V / GND к макетной плате

Подключите провод от Arduino 5V к шине «+» на одной стороне макета. Подключите провод от одного из GND Arduino к шине «-» на той же стороне макета.

(игнорировать

Шаг 3: Подключите +/- шины к VIO / GND

Подключите +/- шины к VIO / GND
Подключите +/- шины к VIO / GND

Подключите провод от шины «-» к GND в нижнем левом углу платы шагового драйвера. Подключите провод от шины «+» к VIO.

Шаг 4: Подключите DIR / STEP к цифровым контактам на Arduino

Подключите DIR / STEP к цифровым контактам на Arduino
Подключите DIR / STEP к цифровым контактам на Arduino

Подключите выводы DIR и STEP платы шагового драйвера к двум цифровым выводам на Arduino. Я использовал контакты 2 и 3 соответственно, но это не имеет значения, если вы установите контакты в своем коде позже.

Шаг 5: Давайте добавим конденсатор …

Пойдем вперед и добавим этот конденсатор …
Пойдем вперед и добавим этот конденсатор …

Я сжег 2 платы шаговых драйверов, потому что у меня не было конденсатора, поэтому давайте продолжим и добавим конденсатор 47 мкФ 50 В к контактам VM / GND на плате драйвера. Убедитесь, что контакт «-» на конденсаторе находится в контакте GND на макете (на соответствующей стороне конденсатора будет «-»).

Шаг 6: Идите вперед и подключите этот GND

И идите вперед и подключите этот GND
И идите вперед и подключите этот GND

На GND, к которому вы только что добавили конденсатор, подключите его к той же «-» шине, что и другой GND.

Шаг 7: Подключите двигатель к драйверу

Подключите двигатель к драйверу
Подключите двигатель к драйверу

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

Для моего мотора -

Подключите зеленый и черный к M2B и M2A

Подключите красный и синий к M1A и M1B Примечание: если по какой-либо причине у вашего двигателя нет схемы, вы можете легко определить, какие провода образуют цепь, если у вас есть мультиметр. Установите мультиметр на низкий уровень ампер и отключите двигатель. Прикоснитесь к одному из выводов мультиметра к одному из проводов двигателя, а затем попробуйте каждый из других проводов с другим проводом. Если вы получили показание сопротивления, то эти два провода образуют одну цепь, а два других - другую.

Шаг 8: Подключите EN, MS1 и MS2 к "-"

Подключите EN, MS1 и MS2 к
Подключите EN, MS1 и MS2 к

Я не совсем уверен, что это необходимо, но я считаю, что он устанавливает меньший микрошаг для мотора на драйвере TMC2209. Вы можете соединить их с ближайшей к ним «-» рейкой, так как мы подключим ее к другой стороне позже.

Шаг 9: припаяйте гнездовой разъем питания к двум проводам

Припаяйте гнездовой разъем питания к двум проводам
Припаяйте гнездовой разъем питания к двум проводам

Я не лучший пайщик в мире, так что вам придется поискать это где-нибудь в другом месте, но я так и сделал. Я согнул концы проводов так, чтобы они плотно прилегали к выводам разъема, затем припаял провод к выводу. У меня не было термоусадочного материала для шнура, поэтому я просто обернул их изолентой.

Шаг 10: Подключите недавно припаянный женский разъем

Подключите недавно припаянный женский разъем
Подключите недавно припаянный женский разъем

Пожалуйста, пока не подключайте свой настоящий блок питания. Красный провод к «+», черный к «-»

Шаг 11: Подключите их к VM / GND

Подключите их к VM / GND
Подключите их к VM / GND

Подключите эти «+» и «-» шины к виртуальной машине и заземлению рядом с ней. Те, на которых есть конденсатор.

Шаг 12: восхищайтесь своей работой

Полюбуйтесь своей работой
Полюбуйтесь своей работой

Хорошо, теперь у вас полностью настроены двигатель и драйвер! С этого момента мы будем просто контролировать. Кстати, забегая вперед:

  • Если вы отключили драйвер по какой-либо причине, не пытайтесь подключить его, пока подключено питание 36 В. Я убил свою третью плату драйвера вот так.
  • Подключите питание 36 В. перед подключением питания Arduino. Я лично не жарил Arduino, но по пути видел много предупреждений об этом.

Шаг 13: Необязательно - проверьте свой VREF

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

  • Отключите все питание и отсоедините провода двигателя от драйвера.
  • Отсоедините провод от контакта EN (включение) на драйвере. Это булавка в верхнем левом углу.
  • Подключите источник питания двигателя (36 В)
  • Используя мультиметр, установленный на 20 В, прикоснитесь одним выводом к источнику GND (я использовал провод, подключенный к моей «-» шине), а другой вывод - к выводу VREF. Пожалуйста, не касайтесь провода ни к чему другому, вы МОЖЕТЕ закоротить свой драйвер, если вы это сделаете.
  • Используйте небольшую отвертку, чтобы аккуратно отрегулировать винт потенциометра. Для моей платы против часовой стрелки = больше мощности. Мой VREF лично читает ~ 0,6 В.

Шаг 14: Кнопки

Кнопки!
Кнопки!

Затем подключите ваши кнопки вот так. Им не нужна сила.

  • Подключите «-» шину макетной платы к одному из GND Arduino. Вы также можете просто прикрепить его к другой планке «-» макета, если хотите.
  • Подключите по одному выводу каждой кнопки к «-» рейке.
  • Подключите другой контакт каждой кнопки к цифровому контакту на Arduino.

Я использовал 4 кнопки: вкл / выкл мотора

Мотор продолжить

Микрофон включен

Микрофон выключен

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

Шаг 15: Добавьте плату микрофона

Добавьте плату микрофона
Добавьте плату микрофона

Это просто, и здесь у Adafruit есть хорошие инструкции (и основы пайки!).

  • Подключите «-» к GND
  • Подключите GND на плате микрофона к «-» (вы можете напрямую подключить GND к GND и пропустить предыдущий шаг, правда)
  • Подключите VCC к источнику питания 3,3 В на Arduino. Это важно, так как этот источник питания менее "шумный", чем 5 В, что приводит к лучшим показаниям микрофона.
  • Подключите OUT к контакту ANALOG IN на Arduino. Я использовал A0.

Шаг 16: Это должен быть окончательный результат

Это должен быть окончательный результат!
Это должен быть окончательный результат!
Это должен быть окончательный результат!
Это должен быть окончательный результат!

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

Шаг 17: Код

Хорошо, посмотрим на код! Это не самая чистая моя работа, но она выполняет свою работу. Я добавил комментарии, чтобы объяснить все здесь, но терпите меня. Я использовал Arduino IDE для всего этого (доступно для Windows и Mac бесплатно). Суть заключается в следующем: установите скорость двигателя и расстояние для поворота.

Установите количество камней (качелей), которые нужно сделать.

Поверните установленное расстояние на 1 мах. Качайте заданное количество раз.

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

#include // "стандартная" библиотека шаговых двигателей

// # define DEBUG 1 // раскомментируйте это, когда вы хотите настроить уровни микрофона // Настройка кнопок - они соответствуют тому, где цифровые контакты вы подключили к кнопкам const int motorEnablePin = 10; const int continuePin = 11; const int micDisablePin = 12; const int micEnablePin = 13; // Настройка микрофона - A0 - аналоговый вход для микрофона. Окно выборки указано в миллисекундах. Int micPin = A0; const int sampleWindow = 1000; беззнаковый образец int; bool micEnabled = false; двойная микрочувствительность = 0,53; // вам, вероятно, придется это изменить // Для меня около 0,5 было достаточно, чтобы не срабатывать при слабом воркании // но срабатывать при слабом возгласе int stepsPerRevolution = 3200; // измените это, чтобы соответствовать количеству шагов на оборот для вашего двигателя // Мой двигатель 200 шагов / оборот // Но я установил драйвер на 1/16 микрошага // поэтому 200 * 16 = 3200 … честно говоря, не знаю, если это это правильный способ // сделать это Stepper myStepper (stepsPerRevolution, 2, 3); // 2 и 3 - контакты DIR и STEP int stepCount = 0; int motorSpeed = 95; // вам нужно будет отрегулировать это в соответствии с вашей колыбелью и весом ребенка int numSteps = 90; // Расстояние, на которое будет двигаться мотор. // Вам нужно будет отрегулировать это в зависимости от радиуса колеса, // которое вы прикрепите к мотору. Это и скорость, скорее всего, будет методом проб и ошибок. // Примечание - более высокая скорость на шаговых двигателях = более низкий эффективный крутящий момент // Если у вас недостаточно крутящего момента, ваш двигатель будет пропускать шаги (не двигаться) int oldmotorButtonValue = HIGH; bool enabled = false; // мотор включен? int loopStartValue = 0; int maxRocks = 100; // сколько раз вы хотите, чтобы он качался перед выключением int rockCount = 0; void setup () {#ifdef DEBUG Serial.begin (9600); // для ведения журнала отладки #endif pinMode (motorEnablePin, INPUT_PULLUP); // Это настройка для работы кнопок без питания pinMode (continuePin, INPUT_PULLUP); pinMode (micEnablePin, INPUT_PULLUP); pinMode (micDisablePin, INPUT_PULLUP); myStepper.setSpeed (motorSpeed); // устанавливает скорость двигателя равной указанной ранее} void loop () {int motorButtonValue = digitalRead (motorEnablePin); // digitalRead просто считывает значения кнопок int continueValue = digitalRead (continuePin); // Это обнаруживает нажатие кнопки мотора и предотвращает срабатывание более одного раза за щелчок if (motorButtonValue == HIGH && oldmotorButtonValue == LOW) {enabled =! Enabled; } micCheck (); // Если мотор выключен, а микрофон включен, слушаем детский плач if (! Enabled && micEnabled) {if (getMicReading ()> = micSensitivity) enabled = true; } если (включено) {stepsPerRevolution = stepsPerRevolution * -1; // обратное направление // с моей установкой более эффективно развернуться на // первом колебании. Вы можете поместить это после цикла, // если это не так для вашего // вращающего двигателя расстояние, указанное выше для (int i = loopStartValue; i <numSteps; i ++) {// проверка выключения int tempmotorButtonValue = digitalRead (motorEnablePin); если (tempmotorButtonValue! = motorButtonValue) {rockCount = 0; // Следующие две строки «сохраняют» положение двигателя, поэтому в следующий раз, когда вы его включите, // он продолжит движение, как если бы вы его не выключали. Это предотвращает сбрасывание // вашего расстояния перемещения loopStartValue = i; // сохраняем позицию stepsPerRevolution = stepsPerRevolution * -1; // сохраняем направление oldmotorButtonValue = tempmotorButtonValue; перерыв; } checkContinue (continueValue); // проверяем, была ли нажата кнопка продолжения micCheck (); myStepper.step (stepsPerRevolution / 50); // сколько шагов нужно сделать на цикл, // вам может потребоваться отрегулировать это // убедитесь, что мы продолжаем полное расстояние цикла, если цикл завершился // это вступает в игру, если вы сами выключили двигатель и он «сохранил» позиция if (i == numSteps - 1) {loopStartValue = 0; }}} задержка (100); // пауза 100 миллисекунд перед выполнением следующего камня. Вам нужно будет это отрегулировать. если (включено) checkComplete (); oldmotorButtonValue = motorButtonValue; // это используется для предотвращения двойных щелчков} // Этот код взят непосредственно из Adafruit. двойной getMicReading () {беззнаковый длинный startMillis = millis (); беззнаковое int peakToPeak = 0; // размах без знака int signalMax = 0; unsigned int signalMin = 1024; в то время как (millis () - startMillis <sampleWindow) {micCheck (); если (digitalRead (motorEnablePin) == LOW) включен = true; sample = analogRead (micPin); если (образец signalMax) {signalMax = sample; // сохраняем только максимальные уровни} else if (sample = maxRocks) {включено = ложь; rockCount = 0; // возвращаемся в среднее положение

for (int i = loopStartValue; i <numSteps / 2; i ++) {

myStepper.step (stepsPerRevolution * -1 / 50); // шаг 1/100 оборота:

}

} }

Шаг 18: Установка и настройка колес

Монтаж и настройка колес
Монтаж и настройка колес

Для меня это все еще WIP, потому что, как я уже сказал, я еще не уверен, что хочу ввинчивать винты в свою подставку. Я установил свой следующим образом:

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

Лучшее решение для третьего шага - сначала просто купить шкив большего диаметра. У меня в канавке диаметр чуть меньше 3 дюймов, и он отлично подходит для моей конкретной люльки.

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

Шаг 19: Окончательная настройка

Окончательная настройка
Окончательная настройка

Установите микрофон близко к ребенку, но в таком месте, где он не будет задевать провода. Поместите кнопки в любом месте, если у вас достаточно проводов, чтобы добраться до конечного пункта назначения. Вы также можете просто заменить кнопки настройкой Wi-Fi на Arduino, но я еще не углубился в это. Удачи вам!

Рекомендуемые: