Spisu treści:

Arduino Cradle Rocker: 19 kroków (ze zdjęciami)
Arduino Cradle Rocker: 19 kroków (ze zdjęciami)

Wideo: Arduino Cradle Rocker: 19 kroków (ze zdjęciami)

Wideo: Arduino Cradle Rocker: 19 kroków (ze zdjęciami)
Wideo: Automatic Baby Cradle | Automatic E-Baby Cradle Cry (Sound Sensor) Bed Using Arduino 2024, Lipiec
Anonim
Image
Image

Przepraszam, nie mogłem się oprzeć kiczowatej, intensywnej muzyce sugerowanej przez mój pomysł na edycję wideo.

Niedawno urodziłem swoje pierwsze dziecko i miałem już drewnianą kołyskę, którą mój wujek (który jest niesamowitym stolarzem) zrobił dla mojego siostrzeńca. Mój siostrzeniec już dawno z tego wyrósł, więc z radością go wziąłem i unikałem wydawania WSZYSTKICH PIENIĘDZY na jakąkolwiek kołyskę/kołyskę, nad którą omdlała moja żona blogerka. Kołyska ma dość prostą konstrukcję, w zasadzie dwa słupki ze śrubami, które podpierają korpus kołyski. Jest zdejmowany kołek, aby zablokować go na miejscu.

W ciągu kilku tygodni odkryliśmy, że często możemy stłumić lekkie zamieszanie, kołysząc trochę kołyską, aż nasz syn się uspokoi. Tej nocy, kiedy się o tym dowiedzieliśmy, spędziłem późno w nocy kilka 10-minutowych rozciągnięć, wyciągając rękę spod kołdry, kołysząc go sennie, szczęśliwa, że znalazłam sposób na ukojenie go bez wstawania z łóżka. rano przywiązałem sznurek i mały karabińczyk, żeby móc kołysać kołyskę bez konieczności wyciągania ręki.

Następnego ranka zacząłem burzę mózgów, jak sprawić, by robot kołysał dla mnie tym dzieciakiem. Wejdź do Arduino…

Kieszonkowe dzieci

Ok, to był mój pierwszy projekt Arduino w historii, więc przeprowadziłem kilka eksperymentów i prób i błędów, i jestem pewien, że jest miejsce na ulepszenia w moim projekcie, ale oto moja lista części: Arduino Uno (13 USD) do kontrolowania wszystkiegoPłytka prototypowa zestaw (10 USD) do podłączenia przewodów

Silnik krokowy (14 USD) To najzabawniejszy kawałek, ponieważ to on wykonuje całą pracę. Zacząłem z nieco niższym sterownikiem momentu obrotowego, ale potem dostałem ten i działa całkiem nieźle. Zapraszam do zakupu jeszcze mocniejszego. Sterowniki silników krokowych (10-30 USD) Znajduje się między Arduino a silnikiem. Ten konkretny jest najwyraźniej w stanie napędzać silnik ciszej niż niektóre inne, więc poszedłem z tym, ponieważ silnik będzie znajdował się kilka stóp od mojej (i mojego syna) głowy podczas snu. Pierwotnie kupiłem tylko jeden sterownik TMC2209 za ~10 USD, ale skończyło się na tym, że kupiłem pakiet 4, ponieważ na początku miałem pewne trudności i chciałem się upewnić, że w pewnym momencie nie usmażyłem deski. Skończyło się na tym, że zabiłem 3 deski, co prowadzi mnie do następnego przedmiotu… Kondensatorów! (10 USD) Naprawdę potrzebujesz tylko 1 kondensatora 47 uF 50 V, więc to pudełko 240 było zdecydowanie przesadą. Zasilacz 36 V (17 USD) Pierwotnie kupiłem wątły zasilacz 12 V, a potem dowiedziałem się, że to było źródło wszystkich moich problemów i dostałem taki, który był bliższy maksymalnemu napięciu, które mógł obsłużyć mój silnik krokowy. Jeśli używasz innego silnika lub sterownika krokowego, upewnij się, że poradzi sobie z napięciem (V) i że natężenie prądu (A) zasilania jest co najmniej tak wysokie, jak szczytowe natężenie prądu pobierane przez silnik. Gniazda żeńskie (8 USD. To jest to, do czego podłącza się zasilacz. Będziesz musiał je przylutować do niektórych przewodów, aby wkleić się w płytkę stykową. Duża paczka zworek (9 USD), abym mógł umieścić kontrolki w dowolnym miejscu w pokoju.

Przyciski (8 USD do włączania/wyłączania itp.)

Wzmacniacz mikrofonowy (11 USD) Och, nie wiedzieliście, że to też było aktywowane dźwiękiem?

Niektóre małe koła pasowe (8 USD), w końcu ich użyłem, ale mogą być lepsze alternatywy. Więcej o tym później. Na pewno będziesz też potrzebować lutownicy i czegokolwiek, czego chcesz użyć do zamontowania silnika. Osobiście po prostu zrobiłem szorstkie pudełko z 4 skręconych kawałków drewna, a następnie przykręciłem je do innego kawałka drewna, który ma mniej więcej szerokość mojej nogi od kołyski. Na razie mam to tylko zaciśnięte, bo nie wiem, czy chcę zepsuć kołyskę wujka.

Krok 1: Zapoznaj się z pinoutem sterownika krokowego

Podłącz Arduino 5V/GND do płytki do krojenia chleba
Podłącz Arduino 5V/GND do płytki do krojenia chleba

Program do modelowania, którego użyłem, nie miał dokładnie takiej płyty sterownika, więc będziesz musiał odwołać się do tego obrazu. Ułożyłem wszystko w tej samej orientacji, co ten obraz.

Krok 2: Podłącz Arduino 5V/GND do płytki do krojenia chleba

Podłącz przewód z Arduino 5V do szyny „+” z jednej strony płytki prototypowej Podłącz przewód z jednego z Arduino GND do szyny „-” po tej samej stronie płytki prototypowej

(zignoruj

Krok 3: Podłącz +/- Rails do VIO/GND

Podłącz +/- Rails do VIO/GND
Podłącz +/- Rails do VIO/GND

Podłącz przewód z szyny „-” do GND w lewym dolnym rogu płyty sterownika krokowego. Podłącz przewód z szyny „+” do VIO

Krok 4: Podłącz DIR/STEP do cyfrowych pinów na Arduino

Podłącz DIR/STEP do cyfrowych pinów na Arduino
Podłącz DIR/STEP do cyfrowych pinów na Arduino

Podłącz piny DIR i STEP z płyty sterownika krokowego do dwóch cyfrowych pinów Arduino. Użyłem odpowiednio pinów 2 i 3, ale to nie ma znaczenia, o ile później ustawisz piny w kodzie.

Krok 5: Przejdźmy dalej i dodajmy ten kondensator…

Przejdźmy dalej i dodajmy ten kondensator…
Przejdźmy dalej i dodajmy ten kondensator…

Spaliłem 2 płytki sterownika krokowego, ponieważ nie miałem kondensatora na miejscu, więc śmiało dodajmy kondensator 47uF 50V do pinów VM/GND na płytce sterownika. Upewnij się, że styk „-” na kondensatorze znajduje się w styku GND na płytce stykowej (po odpowiedniej stronie kondensatora będzie „-”)

Krok 6: Idź dalej i podłącz ten GND

I idź dalej i podłącz ten GND
I idź dalej i podłącz ten GND

Na GND, do którego właśnie dodałeś kondensator, śmiało podłącz go do tej samej szyny „-”, co inne GND.

Krok 7: Podłącz silnik do sterownika

Podłącz silnik do sterownika
Podłącz silnik do sterownika

Który pin pójdzie tam, gdzie będzie zależeć od zakupionego silnika, ale ten, który wymieniłem, ma schemat połączeń na liście amazon.

Dla mojego silnika -

Podłącz zielony i czarny do M2B i M2A

Podłącz czerwony i niebieski do M1A i M1B Uwaga: Jeśli z jakiegoś powodu twój silnik nie ma schematu, możesz łatwo dowiedzieć się, które przewody tworzą obwód, jeśli masz multimetr. Ustaw multimetr na ustawienie niskiego natężenia i odłącz silnik. Dotknąć jednego z przewodów multimetru do jednego z przewodów silnika, a następnie wypróbować każdy z pozostałych przewodów z drugim przewodem. Jeśli uzyskasz odczyt rezystancji, wtedy te dwa przewody tworzą jeden obwód, a pozostałe dwa tworzą drugi.

Krok 8: Podłącz EN, MS1 i MS2 do "-"

Podłącz EN, MS1 i MS2 do
Podłącz EN, MS1 i MS2 do

Nie jestem do końca pewien, czy jest to konieczne, ale uważam, że ustawia silnik na mniejsze ustawienie mikrokrokowe na sterowniku TMC2209. Możesz podłączyć je do szyny "-" znajdującej się najbliżej nich, ponieważ później podłączymy ją z drugiej strony.

Krok 9: Przylutuj żeńskie złącze zasilania do dwóch przewodów

Przylutuj żeńskie złącze zasilania do dwóch przewodów
Przylutuj żeńskie złącze zasilania do dwóch przewodów

Nie jestem najlepszy na świecie w lutowaniu, więc musisz poszukać tego gdzie indziej, ale tak zrobiłem. Zagiąłem końce przewodów tak, aby leżały płasko na przewodach złącza, a następnie przylutowałem przewód do przewodu. Nie miałem żadnych materiałów termokurczliwych, więc po prostu owinąłem je obficie taśmą izolacyjną.

Krok 10: Podłącz swoje nowo lutowane złącze żeńskie

Podłącz swoje nowo lutowane złącze żeńskie
Podłącz swoje nowo lutowane złącze żeńskie

Proszę nie podłączać jeszcze rzeczywistego zasilacza. Czerwony przewód do "+", czarny do "-"

Krok 11: Podłącz je do VM/GND

Podłącz je do VM/GND
Podłącz je do VM/GND

Podłącz te szyny "+" i "-" do VM i GND obok. Te z kondensatorem.

Krok 12: Podziwiaj swoje dzieło

Podziwiaj swoje dzieło
Podziwiaj swoje dzieło

W porządku, masz teraz całkowicie skonfigurowany silnik i sterownik! Odtąd będziemy po prostu sterować. Nawiasem mówiąc, idąc dalej:

  • Jeśli odłączyłeś sterownik z jakiegokolwiek powodu, nie próbuj go podłączać, gdy podłączone jest zasilanie 36V. Zabiłem w ten sposób moją trzecią płytę sterownika.
  • Podłącz zasilanie 36 V przed podłączeniem zasilania Arduino. Nie usmażyłem osobiście Arduino, ale po drodze widziałem wiele ostrzeżeń o tym.

Krok 13: Opcjonalnie - sprawdź swój VREF

TMC2209 posiada potencjometr, który kontroluje prąd do silnika. Jeśli masz ten sam sterownik co ja, możesz o tym przeczytać tutaj. Jeśli chcesz dostosować ustawienie:

  • Odłącz całe zasilanie i odłącz przewody silnika od sterownika.
  • Odłącz przewód do bolca EN (włącz) na sterowniku. To jest pinezka w lewym górnym rogu.
  • Podłącz zasilanie silnika (36 V)
  • Za pomocą multimetru ustawionego na 20V dotknij jednym wyprowadzeniem do źródła GND (użyłem przewodu podłączonego do mojej szyny "-") a drugim wyprowadzeniem do pinu VREF. Proszę nie dotykać smyczy do niczego innego, MOŻESZ skrócić kierowcę, jeśli to zrobisz.
  • Użyj małego śrubokręta, aby delikatnie wyregulować śrubę potencjometru. Dla mojej planszy przeciwnie do ruchu wskazówek zegara = większa moc. Mój VREF osobiście odczytuje ~0.6V.

Krok 14: Przyciski

Guziki!
Guziki!

Następnie połącz swoje przyciski w ten sposób. Nie potrzebują mocy.

  • Podłącz szynę „-” płytki stykowej przycisku do jednego z GND Arduino. Możesz także po prostu połączyć go z szyną „-” drugiej płytki stykowej, jeśli chcesz.
  • Podłącz jeden pin każdego przycisku do szyny "-"
  • Podłącz kolejny pin każdego przycisku do cyfrowego pinu w Arduino.

Użyłem 4 przycisków: Silnik on/off

Silnik kontynuuj

Mikrofon włączony

Mikrofon wyłączony

Więcej o nich, gdy dojdziemy do kodu, ale użyłem odrębnych przycisków mikrofonu, ponieważ nie miałem diod LED, które informowałyby mnie, czy mikrofon jest włączony, czy wyłączony, więc posiadanie odrębnych przycisków włączania/wyłączania czyni go niezawodnym.

Krok 15: Dodaj płytkę mikrofonu

Dodaj płytkę mikrofonową
Dodaj płytkę mikrofonową

Ten jest prosty, a Adafruit ma tutaj dobre instrukcje (i podstawy lutowania!).

  • Połącz „-” z GND
  • Podłącz GND na płycie mikrofonowej do "-" (możesz bezpośrednio podłączyć GND do GND i pominąć poprzedni krok, naprawdę)
  • Podłącz VCC do zasilania 3,3 V na Arduino. Jest to ważne, ponieważ ten zasilacz jest mniej „zaszumiony” niż 5 V, co skutkuje lepszymi odczytami mikrofonu
  • Podłącz OUT do pinu ANALOG IN w Arduino. Użyłem A0.

Krok 16: To powinien być ostateczny wynik

To powinien być ostateczny wynik!
To powinien być ostateczny wynik!
To powinien być ostateczny wynik!
To powinien być ostateczny wynik!

Wszystko powinno być już gotowe. Oto zdjęcie końcowego schematu i moja plątanina przewodów w rzeczywistości. Spójrzmy na jakiś kod!

Krok 17: Kod

Ok, spójrzmy na kod! To nie jest moja najczystsza praca, ale załatwia sprawę. Dodałem komentarze, aby wyjaśnić wszystko tutaj, ale bądź ze mną. Użyłem do tego Arduino IDE (dostępne na Windows i Mac za darmo) Jist jest taki: Ustaw prędkość silnika i odległość do skrętu.

Ustaw liczbę kamieni (huśtawek) do zrobienia.

Obróć ustaloną odległość na 1 zamach. Rozbujaj określoną liczbę razy.

W międzyczasie obserwuj naciśnięcia przycisków lub słuchaj mikrofonu, aby sprawdzić, czy silnik powinien się włączyć. Będziesz musiał dostosować wartości prędkości, odległości i czułości mikrofonu. Prędkość silnika będzie miała wpływ na głośność i moment obrotowy. Im szybciej pracuje silnik, tym jest głośniejszy i tym mniejszy jest moment obrotowy. Kopalnia jest obecnie prawie bezgłośna, więc można ją uruchomić bez wydawania większej ilości dźwięku.

#include // "standardowa" biblioteka silników krokowych

//#define DEBUG 1 // odkomentuj to, gdy chcesz dostosować poziomy mikrofonu // Konfiguracja przycisków - odpowiadają one rozmieszczeniu pinów cyfrowych podłączonych do przycisków const int motorEnablePin = 10; const int kontynuujPin = 11; const int micDisablePin = 12; const int micEnablePin = 13; // Konfiguracja mikrofonu – A0 to wejście analogowe mikrofonu. Przykładowe okno jest w milis const int micPin = A0; const int sampleWindow = 1000; niepodpisana próbka int; bool micEnabled = false; podwójny mikrofon Czułość = 0,53; // prawdopodobnie będziesz musiał to zmienić // Dla mnie około.5 było wystarczająco dobre, aby nie odpalać przy małym gruchaniu // ale odpala przy małych okrzykach int stepsPerRevolution = 3200; // zmień to, aby dopasować liczbę kroków na obrót dla twojego silnika // Mój silnik ma 200 kroków/obrót // Ale ustawiłem sterownik na 1/16 mikrokroków // więc 200*16 = 3200… szczerze nie mam pojęcia, czy to to właściwy sposób // na wykonanie tego Stepper myStepper(stepsPerRevolution, 2, 3); // 2 i 3 to piny DIR i STEP int stepCount = 0; int prędkość silnika = 95; // musisz dostosować to do wagi Twojej kołyski i dziecka int numSteps = 90; // Odległość, na jaką przejedzie silnik. // Musisz to dostosować na podstawie promienia koła, // które przymocujesz do silnika. To i szybkość prawdopodobnie będą próbami i błędami. // Uwaga - wyższa prędkość na silnikach krokowych = niższy efektywny moment obrotowy // Jeśli nie masz wystarczającego momentu obrotowego, silnik pominie kroki (nie wykona ruchu) int oldmotorButtonValue = HIGH; bool włączony = fałsz; // silnik włączony? int loopStartValue = 0; int maxSkały = 100; // ile razy ma się kręcić przed wyłączeniem int rockCount = 0; void setup() { #ifdef DEBUG Serial.begin(9600); // do logowania debugowania #endif pinMode(motorEnablePin, INPUT_PULLUP); // To jest ustawienie dla przycisków, aby działały bez zasilania pinMode(continuePin, INPUT_PULLUP); pinMode(micEnablePin, INPUT_PULLUP); pinMode(micDisablePin, INPUT_PULLUP); myStepper.setSpeed(silnikPrędkość); // ustawia prędkość silnika na określoną wcześniej } void loop() { int motorButtonValue = digitalRead(motorEnablePin); // digitalRead odczytuje tylko wartości przycisków int continueValue = digitalRead(continuePin); // To wykrywa naciśnięcie przycisku silnika i zapobiega jego uruchomieniu więcej niż raz na kliknięcie if (motorButtonValue == HIGH && oldmotorButtonValue == LOW) { enabled = !enabled; } micCheck(); // Jeśli silnik jest wyłączony, a mikrofon włączony, nasłuchuj płaczu dziecka if(!enabled && micEnabled) { if(getMicReading() >= micSensitivity) enabled = true; } if (enabled) { stepsPerRevolution = stepsPerRevolution * -1; //odwróć kierunek // Z moim ustawieniem bardziej efektywne jest odwrócenie // przy pierwszym zamachu. Możesz umieścić to po pętli // jeśli tak nie jest w twoim //silniku spinowym na odległość określoną powyżej for(int i = loopStartValue; i < numSteps; i++){ //check for off int tempmotorButtonValue = digitalRead(motorEnablePin); if(tempmotorButtonValue != motorButtonValue) { RockCount = 0; // Kolejne dwie linie "zapisują" pozycję silnika, tak że następnym razem, gdy go włączysz, // będzie kontynuował podróż tak, jakbyś go nie wyłączył. Zapobiega to wyrzuceniu // odległości ruchu loopStartValue = i; // zapisz pozycję stepsPerRevolution = stepsPerRevolution * -1; // zachowaj kierunek oldmotorButtonValue = tempmotorButtonValue; przerwa; } checkContinue(continueValue); // sprawdź, czy został naciśnięty przycisk Kontynuuj micCheck(); myStepper.step(krokiPerRevolution / 50); // ile kroków należy wykonać na pętlę, // może być konieczne dostosowanie tego // upewnij się, że kontynuujemy pełną odległość pętli, jeśli pętla się skończyła // to wchodzi w grę, jeśli sam wyłączyłeś silnik i "zapisał" position if(i == numSteps - 1) { loopStartValue = 0; } } } opóźnienie(100); // pauza 100 milisekund przed wykonaniem kolejnego kamienia. Musisz to dostosować. if (enabled) checkComplete(); oldmotorButtonValue = motorButtonValue; // służy do zapobiegania podwójnym kliknięciom } // Ten kod pochodzi bezpośrednio z Adafruit. double getMicReading() { unsigned long startMillis = millis(); unsigned int peakToPeak = 0; // poziom szczytu do szczytu unsigned int signalMax = 0; unsigned int signalMin = 1024; while (millis() - startMillis < sampleWindow) { micCheck(); jeśli (digitalRead(motorEnablePin) == LOW) włączony = true; próbka = analogRead(micPin); if (sample signalMax) { signalMax = próbka; // zapisz tylko maksymalne poziomy } else if (przykład = maxRocks) { włączone = fałsz; liczba skał = 0; // powrót do środkowej pozycji

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

myStepper.step(krokiNaRewolucję * -1 / 50); // krok 1/100 obrotu:

}

} }

Krok 18: Montaż i konfiguracja koła

Montaż i konfiguracja kół
Montaż i konfiguracja kół

To wciąż jest dla mnie WIP, ponieważ jak powiedziałem, nie jestem pewien, czy chcę jeszcze wkręcić śruby do mojej kołyski. Sposób, w jaki zmontowałem swoją, wygląda następująco:

  • Załóż zacisk, aby działał jak ramię wychodzące z kołyski, aby moje koło mogło ciągnąć się w linii prostej
  • Skręciłem prymitywną skrzynkę, aby włożyć silnik, i przykręciłem to do płyty podstawy, którą przymocowałem do nogi kołyski
  • Zrobiłem niestandardowe drewniane koło pasowe z otworem na małe koło pasowe krokowe w środku. Zrobiłem otwór środkowy bardzo ciasny i po prostu wbiłem w koło pasowe krokowe. Wywierciłem otwór przez koło do środka, abym mógł uzyskać dostęp do śruby na metalowym kole pasowym, aby dokręcić ją do silnika krokowego.
  • Pobiegł sznurkiem od kołyskowego „ramienia” do koła. Zabezpieczyłem sznurek, przepuszczając go przez wywiercony otwór i po prostu przyklejając go na miejscu.

Lepszym rozwiązaniem trzeciego kroku jest po prostu zakup koła pasowego o większej średnicy. Mój ma średnicę nieco poniżej 3 cali wewnątrz rowka i działa naprawdę dobrze dla mojej konkretnej kołyski.

Moja pierwsza wersja używała ramienia zamiast koła. To nie działało tak dobrze, ponieważ siła nie była przykładana w spójnym kierunku, a także była bardzo podatna na odrzucenie, jeśli pozycja początkowa nie była właściwa. Korzystanie z koła rozwiązuje te problemy. Bawiłem się też używaniem małego systemu kół pasowych, ale skończyło się na tym, że nie musiałem tego robić, ponieważ moje koło dawało mi wystarczający moment obrotowy.

Krok 19: Końcowa konfiguracja

Konfiguracja końcowa
Konfiguracja końcowa

Zamontuj mikrofon blisko dziecka, ale w miejscu, w którym nie uderzą w żadne przewody. Umieść przyciski w dowolnym miejscu, o ile masz wystarczająco dużo przewodów, aby dobiec do miejsca docelowego. Możesz też po prostu zastąpić przyciski konfiguracją Wi-Fi na arduino, ale jeszcze nie zaszedłem tak głęboko. Powodzenia!

Zalecana: