Съдържание:

Arduino Cradle Rocker: 19 стъпки (със снимки)
Arduino Cradle Rocker: 19 стъпки (със снимки)

Видео: Arduino Cradle Rocker: 19 стъпки (със снимки)

Видео: Arduino Cradle Rocker: 19 стъпки (със снимки)
Видео: Automatic Baby Cradle | Automatic E-Baby Cradle Cry (Sound Sensor) Bed Using Arduino 2024, Юли
Anonim
Image
Image

За съжаление не можах да устоя на баналната интензивна музика, която ми предложи редактирането на видео.

Наскоро имах първото си дете и вече имах дървена люлка, която чичо ми (който е страхотен дърводелец) направи за племенника ми. Племенникът ми отдавна го беше надраснал, така че с удоволствие го взех и избягвах да изразходвам ВСИЧКИ ПАРИ за каквато люлка/люлка, на която майките блогъри бяха принудили жена ми. Люлката е доста прост дизайн, основно две стойки с болтове през тях, които поддържат тялото на люлката. Има подвижен кол, за да го заключите на място.

В рамките на няколко седмици открихме, че често можем да потушим леката тревога, като разлюляваме малко люлката, докато нашето момче се успокои. В нощта, в която разбрахме това, прекарах няколко 10 -минутни разтягания късно през нощта, като протегнах ръката си изпод завивките, сънливо го люшках, щастлив, че съм намерил начин да го успокоя, без да ставам от леглото. сутринта закачих връв и малко карабинерче, за да мога да разклатя люлката, без да се налага да протягам ръка.

На сутринта след това започнах да обмислям начин просто да накарам робот да скача това дете за мен. Влезте в Arduino …

Консумативи

Добре, това беше първият ми проект на Arduino някога, затова направих някои експерименти и опити и грешки и съм сигурен, че има място за подобрения в моя дизайн, но ето и моя списък с части: Arduino Uno ($ 13) за контролиране на всичко комплект ($ 10) за свързване на проводници

Стъпковият двигател ($ 14) Това е най -забавното парче, защото това е нещото, което върши цялата работа. Започнах с малко по -нисък въртящ момент, но след това взех този и работи доста добре. Чувствайте се свободни да получите още по-мощен драйвер за стъпков двигател ($ 10-30) Това се намира между Arduino и двигателя. Този специфичен очевидно е в състояние да управлява двигателя по -тихо от някои други, затова отидох с това, тъй като моторът ще бъде на няколко фута от главата ми (и от сина ми), докато спим. Първоначално току -що купих един драйвер за TMC2209 за ~ 10 долара, но в крайна сметка купих пакет от 4, защото в началото имах известни затруднения и исках да се уверя, че в даден момент не съм изпържил дъската. В крайна сметка всъщност убих 3 платки, което ме доведе до следващия ми артикул … Кондензатори! ($ 10) Наистина се нуждаете само от 1 47 uF 50V кондензатор, така че тази кутия от 240 беше много прекалена. 36V захранване ($ 17) Първоначално купих малко 12V захранване, след което разбрах, че това е източникът на всичките ми проблеми и получих такъв, който беше по -близо до максималното напрежение, с което моят стъпков двигател можеше да се справи. Ако използвате различен двигател или стъпков драйвер, уверете се, че той може да издържи напрежението (V) и че силата на тока (A) на захранването е поне толкова висока, колкото пиковите ампера, извлечени от двигателя. $ 8) Това е захранването. Ще трябва да ги запоите към някои проводници, за да се залепят в макета ви. Голям пакет джъмпери ($ 9), за да мога да поставя контролите, където пожелая в стаята.

Бутони ($ 8) за включване/изключване и т.н.

Усилвател за микрофон ($ 11) О, вие също не знаехте, че и този звук е активиран?

Някои малки колела с ролки ($ 8) в крайна сметка използвах тези, но може да има по -добри алтернативи. Повече за това по -късно. Вие също определено ще имате нужда от поялник и каквото искате да използвате за монтиране на двигателя. Аз лично направих груба кутия от 4 завинтени парчета дърво, а след това ги завинтих към друго парче дърво, което е приблизително с ширината на крака на люлката ми. Засега просто го затегнах, защото не знам дали искам да помрача люлката на чичо си.

Стъпка 1: Запознайте се с разписката на вашия стъпков драйвер

Свържете Arduino 5V/GND към вашата платка
Свържете Arduino 5V/GND към вашата платка

Програмата за моделиране, която използвах, нямаше точно тази платка с драйвери, така че ще трябва да се позовавате на това изображение. Подредих всичко в същата ориентация като това изображение.

Стъпка 2: Свържете Arduino 5V/GND към вашата платка

Свържете проводник от Arduino 5V към шината "+" от едната страна на вашата платка Свържете проводник от един от Arduino GND към шината "-" от същата страна на чертежа

(игнорирайте

Стъпка 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 стъпкови платки за драйвери, защото нямах поставен кондензатор, така че нека продължим и добавяме кондензатора 47uF 50V към щифтовете VM/GND на платката на драйвера. Уверете се, че щифтът "-" на кондензатора е в щифта GND на макета (ще има "-" от съответната страна на кондензатора)

Стъпка 6: И вървете напред и свържете този GND

И вървете напред и свържете този GND
И вървете напред и свържете този GND

На GND, към който току-що сте добавили кондензатора, продължете и го свържете към същата "-" шина като другия GND.

Стъпка 7: Свържете двигателя към драйвера

Свържете двигателя към драйвера
Свържете двигателя към драйвера

Кой щифт отива къде ще зависи от двигателя, който сте закупили, но този, който изброих, има схемата на свързване в списъка на Amazon.

За моя двигател -

Свържете зелено и черно към M2B и M2A

Свържете червено и синьо към M1A & M1BN Забележка: Ако по някаква причина вашият двигател няма диаграма, можете лесно да разберете кои проводници образуват верига, ако имате мултицет. Настройте мултицета на нисък усилвател и изключете двигателя. Докоснете един от проводниците на мултицета към един от проводниците на двигателя и след това опитайте всеки от другите проводници с другия проводник. Ако получите отчитане на съпротивлението, тези два проводника образуват 1 верига, а другите два образуват другата.

Стъпка 8: Свържете EN, MS1 и MS2 към "-"

Свържете EN, MS1 и MS2 към
Свържете EN, MS1 и MS2 към

Не съм напълно сигурен, че това е необходимо, но вярвам, че настройва двигателя на по -малка микростепенна настройка на драйвера TMC2209. Можете да ги свържете към релсата "-" най-близо до тях, тъй като по-късно ще я свържем с другата страна.

Стъпка 9: Запоявайте женски захранващ конектор към два проводника

Запояйте женски захранващ конектор към два проводника
Запояйте женски захранващ конектор към два проводника

Аз не съм най -добрият в света за запояване, така че ще трябва да потърсите това другаде, но аз направих моето така. Прегънах краищата на проводниците, така че да лежат плътно към проводниците на конектора, след което запоявах проводника към проводника. Нямах никакви термично свиващи се кабели, така че просто ги увих с огромна електрическа лента.

Стъпка 10: Свържете вашия ново запоен женски конектор

Свържете вашия новопоял женски конектор
Свържете вашия новопоял женски конектор

Моля, все още не включвайте действителното си захранване. Червен проводник към "+", черен към "-"

Стъпка 11: Свържете ги към VM/GND

Свържете тези към VM/GND
Свържете тези към VM/GND

Свържете тези "+" и "-" релси към VM и GND до него. Тези с кондензатор върху него.

Стъпка 12: Възхищавайте се на ръцете си

Възхищавайте се на ръцете си
Възхищавайте се на ръцете си

Добре, сега моторът и водачът са напълно настроени! Оттук нататък ние просто ще правим контрол. Между другото, занапред:

  • Ако сте изключили драйвера си по някаква причина, не се опитвайте да го свържете, докато захранването ви е 36V. Убих така 3 -тата си платка с драйвери.
  • Включете 36V захранването, преди да включите захранването на Arduino. Аз лично не пържех Arduino, но по пътя видях много предупреждения за това.

Стъпка 13: По избор - Проверете вашия VREF

TMC2209 има потенциометър, който контролира тока към двигателя. Ако имате същия драйвер като мен, можете да прочетете за това тук. Ако искате да коригирате настройката:

  • Изключете цялото захранване и изключете проводниците на двигателя от драйвера.
  • Разкачете проводника към щифта EN (активиране) на драйвера. Това е щифтът в горния ляв ъгъл.
  • Включете захранването на двигателя (36V)
  • С помощта на мултицет, настроен на 20V, докоснете единия проводник до източник на GND (използвах кабел, свързан към моята "-" шина) и докоснете другия проводник към щифта VREF. Моля, не докосвайте следите към нищо друго, МОЖЕТЕ да скъсите шофьора си, ако го направите.
  • Използвайте малка отвертка, за да регулирате внимателно винта на потенциометъра. За моята дъска, обратно на часовниковата стрелка = повече мощност. Моят VREF лично чете ~ 0.6V.

Стъпка 14: Бутони

Бутони!
Бутони!

След това свържете бутоните си така. Те не се нуждаят от власт.

  • Свържете „-“релса на макета на вашия бутон към един от GND на Arduino. Можете също така просто да го свържете от веригата "-" на другата дъска, ако искате.
  • Свържете по един щифт на всеки бутон към шината "-"
  • Свържете друг щифт на всеки бутон към цифров щифт на Arduino.

Използвах 4 бутона: Включване/изключване на двигателя

Моторът продължава

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

Микрофонът е изключен

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

Стъпка 15: Добавете микрофонната платка

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

Това е просто и Adafruit има добри инструкции (и основи за запояване!) Тук.

  • Свържете "-" към GND
  • Свържете GND на микрофонната платка към „-“(можете директно да свържете GND към GND и наистина да пропуснете предишната стъпка)
  • Свържете VCC към захранването 3.3V на Arduino. Това е важно, тъй като това захранване е по -малко „шумно“от 5V, което води до по -добри показания на микрофона
  • Свържете OUT към ANALOG IN щифт на Arduino. Използвах А0.

Стъпка 16: Това трябва да е крайният резултат

Това трябва да е крайният резултат!
Това трябва да е крайният резултат!
Това трябва да е крайният резултат!
Това трябва да е крайният резултат!

Всичко трябва да е готово сега. Ето снимка на последната диаграма и моята бъркотия от жици в действителност. Нека погледнем малко код!

Стъпка 17: Код

Добре, нека да разгледаме кода! Това не е най -чистата ми работа, но свършва работата. Добавих коментари, за да обясня всичко тук, но се придържайте към мен. Използвах Arduino IDE за всичко това (достъпно за Windows и Mac безплатно) Смехът е следният: Задайте скорост на двигателя и разстояние за завъртане.

Задайте няколко скали (люлки), които да направите.

Завъртете зададеното разстояние за 1 замах. Завъртете определен брой пъти.

Между всичко това следете за натискане на бутони или слушайте микрофона, за да видите дали двигателят трябва да се включи. Ще трябва да регулирате скоростта, разстоянието и чувствителността на микрофона. Скоростта на двигателя ще повлияе на силата на звука и въртящия момент. Колкото по -бързо се движи двигателят, толкова по -силен е и по -малък въртящ момент получавате. Моят в момента е почти безшумен, така че е възможно да го накарате да работи, без да издава много звук.

#include // "стандартна" библиотека на стъпкови двигатели

//#дефинирайте DEBUG 1 // декомментирайте това, когато искате да регулирате нивата на микрофона // Настройка на бутоните - те съответстват на мястото, където цифровите щифтове, които сте свързали с бутоните, са const int motorEnablePin = 10; const int continuePin = 11; const int micDisablePin = 12; const int micEnablePin = 13; // Настройка на микрофона - A0 тук е аналоговият вход за микрофона. Примерният прозорец е в millis const int micPin = A0; const int sampleWindow = 1000; неподписана int проба; bool micEnabled = false; двоен микрофон Чувствителност = 0,53; // вероятно ще трябва да промените това // За мен около.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); // Това открива натискането на бутона на двигателя и не позволява да се задейства повече от веднъж на кликване, ако (motorButtonValue == HIGH && oldmotorButtonValue == LOW) {enabled =! Enabled; } micCheck (); // Ако двигателят е изключен и микрофонът е включен, слушайте бебешки плач, ако (! Enabled && micEnabled) {if (getMicReading ()> = micSensitivity) enabled = true; } if (активиран) {stepsPerRevolution = stepsPerRevolution * -1; // обратна посока // С моята настройка е по -ефективно да се върна назад // първото замахване. Можете да поставите това след цикъла // ако това не е така за вашия // въртене на двигателя посоченото по -горе разстояние за (int i = loopStartValue; i <numSteps; i ++) {// проверете за изключване int tempmotorButtonValue = digitalRead (motorEnablePin); if (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 милис преди да направите следващия рок. Ще трябва да коригирате това. if (активиран) checkComplete (); oldmotorButtonValue = motorButtonValue; // това се използва за предотвратяване на двойни кликвания} // Този код е директно от Adafruit. double getMicReading () {unsigned long startMillis = millis (); unsigned int peakToPeak = 0; // пиково до пиково ниво без знак int signalMax = 0; без знак int signalMin = 1024; while (millis () - startMillis <sampleWindow) {micCheck (); if (digitalRead (motorEnablePin) == LOW) enabled = true; sample = analogRead (micPin); if (проба signalMax) {signalMax = проба; // запазваме само максималните нива} else if (мостра = maxRocks) {активирано = невярно; rockCount = 0; // връщане към средната позиция

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

myStepper.step (stepsPerRevolution * -1 / 50); // стъпка 1/100 от оборота:

}

} }

Стъпка 18: Монтаж и настройка на колелата

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

Това все още е WIP за мен, тъй като, както казах, все още не съм сигурен, че искам да поставя винтове в люлката си.

  • Поставете скоба, която да действа като рамо, слизащо от люлката, така че колелото ми да може да се дърпа по права линия
  • Завивах една сурова кутия, за да поставя двигателя, и я завинтвам към основна плоча, която закрепих към крака на люлката
  • Направено по поръчка дървено ролково колело с отвор, за да се побере вътре в него малкото стъпково колело. Направих централния отвор много стегнат и направо набит в колелото на стъпковата ролка. Пробих дупка през колелото до средата, за да имам достъп до винта на колелото на металната ролка, за да го затегна върху стъпковия двигател.
  • Прокара връв от "рамото" на люлката до колелото. Закрепих връвта, като я прокарах през пробитата отвор и просто я залепих на място.

По -доброто решение за третата стъпка е просто да закупите на първо място ролково колело с по -голям диаметър. Моят е с диаметър малко под 3 вътре в канала и работи много добре за моята конкретна люлка.

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

Стъпка 19: Окончателна настройка

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

Монтирайте микрофона близо до детето си, но на място, където те няма да засегнат никакви проводници. Поставете бутоните където пожелаете, стига да имате достатъчно проводници, за да стигнете до крайната дестинация. Можете също така просто да замените бутоните с настройка на wifi на arduino, но все още не съм навлязъл толкова дълбоко. Успех!

Препоръчано: