Turinys:

„Arduino Cradle Rocker“: 19 žingsnių (su nuotraukomis)
„Arduino Cradle Rocker“: 19 žingsnių (su nuotraukomis)

Video: „Arduino Cradle Rocker“: 19 žingsnių (su nuotraukomis)

Video: „Arduino Cradle Rocker“: 19 žingsnių (su nuotraukomis)
Video: Automatic Baby Cradle | Automatic E-Baby Cradle Cry (Sound Sensor) Bed Using Arduino 2024, Lapkritis
Anonim
Image
Image

Atsiprašau, aš negalėjau atsispirti šlykščiai intensyviai muzikai, kurią pasiūlė vaizdo įrašų redagavimas.

Neseniai susilaukiau pirmagimio ir jau turėjau medinį lopšį, kurį mano dėdė (kuris yra nuostabus medžio apdirbėjas) padarė mano sūnėnui. Mano sūnėnas jau seniai jį išaugo, todėl aš mielai jį paėmiau ir vengiau išleisti VISŲ pinigų bet kokiam lopšiui/krepšeliui, kurį mamytės tinklaraštininkės pravirko. Lopšys yra gana paprastas dizainas, iš esmės du statramsčiai su varžtais, kurie palaiko lopšio korpusą. Yra nuimamas kaištis, kad jį užfiksuotų.

Per kelias savaites pastebėjome, kad dažnai galime numalšinti lengvą nerimą, šiek tiek pakratydami lopšį, kol mūsų berniukas apsigyvens. Naktį, kai tai sužinojome, vėlai vakare praleidau kelias dešimties minučių, kai ranka siekiau iš po dangčio, mieguistai jį sūpavau, džiaugiuosi, kad radau būdą, kaip jį nuraminti neišlipdama iš lovos. ryte prisegiau virvelę ir šiek tiek karabino, kad galėčiau sūpuotis lopšiu, neištiesdama rankos.

Ryte po to aš pradėjau galvoti apie tai, kaip robotas tiesiog pasuks šį vaiką. Įeikite į Arduino…

Prekės

Gerai, tai buvo mano pirmasis „Arduino“projektas, todėl aš eksperimentavau, bandžiau ir suklydau, ir esu tikras, kad mano dizainą galima tobulinti, tačiau čia yra mano dalių sąrašas: „Arduino Uno“(13 USD) už viską valdymą komplektas (10 USD) laidams prijungti

Žingsninis variklis (14 USD) Tai yra pats smagiausias kūrinys, nes tai yra dalykas, kuris atlieka visą darbą. Pradėjau nuo šiek tiek mažesnio sukimo momento variklio, bet tada gavau šį ir jis veikia gana gerai. Nesivaržykite įsigyti dar galingesnį. Žingsninių variklių vairuotojai (10–30 USD) Tai yra tarp „Arduino“ir variklio. Šis konkretus, matyt, sugeba variklį valdyti tyliau nei kai kurie kiti, todėl aš tai padariau, nes variklis bus už kelių pėdų nuo mano (ir mano sūnaus) galvos, kol mes miegame. Iš pradžių aš ką tik nusipirkau vieną TMC2209 tvarkyklę už ~ 10 USD, bet galiausiai nusipirkau 4 paketą, nes iš pradžių turėjau tam tikrų sunkumų ir norėjau įsitikinti, kad tam tikru momentu neužkepiau lentos. Aš galų gale iš tikrųjų nužudiau 3 lentas, o tai atveda mane prie kito elemento … Kondensatoriai! ($ 10) Jums tikrai reikia tik 1 47 uF 50 V kondensatoriaus, todėl ši 240 dėžutė buvo per didelė. 36 V maitinimo šaltinis (17 USD) Aš iš pradžių nusipirkau silpną 12 V maitinimą, tada sužinojau, kad tai buvo visų mano rūpesčių šaltinis ir gavau tokią, kuri buvo arčiau maksimalios įtampos, kurią galėjo valdyti mano žingsninis variklis. Jei naudojate kitą variklį arba žingsninį valdiklį, įsitikinkite, kad jis gali valdyti įtampą (V) ir kad maitinimo srovės stipris (A) yra ne mažesnis kaip variklio maksimalus stiprintuvas. Moteriški maitinimo lizdai (8 USD) Prie to prijungiamas maitinimo šaltinis. Turėsite juos lituoti prie kai kurių laidų, kad priliptų prie savo duonos lentos. Didelė džemperių pakuotė (9 USD), kad galėčiau patalpinti valdiklius, kur norėjau kambaryje.

Mygtukai (8 USD) įjungimui/išjungimui ir kt

Mikrofono stiprintuvas (11 USD) Oi, visi nežinojo, kad taip pat įjungtas garsas?

Kai kuriuos mažus skriemulio ratus (8 USD) aš panaudojau šiuos, tačiau gali būti geresnių alternatyvų. Daugiau apie tai vėliau. Jums taip pat tikrai reikės lituoklio ir visko, ką norite naudoti varikliui pritvirtinti. Aš asmeniškai ką tik padariau šiurkščią dėžę iš 4 susuktų medžio gabalų, o tada prisukau juos prie kito medžio gabalo, kuris yra maždaug mano lopšio kojos pločio. Kol kas aš jį tiesiog užspaudžiu, nes nežinau, ar noriu ištepti dėdės lopšį.

1 žingsnis: Susipažinkite su „Stepper Driver Pinout“

Prijunkite „Arduino 5V/GND“prie savo duonos lentos
Prijunkite „Arduino 5V/GND“prie savo duonos lentos

Mano naudojama modeliavimo programa neturėjo tikslios tvarkyklės plokštės, todėl turėsite nurodyti šį vaizdą. Aš viską sutvarkiau ta pačia kryptimi, kaip ir šis vaizdas.

2 veiksmas: prijunkite „Arduino 5V/GND“prie savo duonos lentos

Prijunkite laidą iš „Arduino 5V“prie „+“bėgio, esančio vienoje jūsų duonos lentos pusėje.

(ignoruoti

3 veiksmas: prijunkite +/- bėgius prie VIO/GND

Prijunkite +/- bėgius prie VIO/GND
Prijunkite +/- bėgius prie VIO/GND

Prijunkite laidą iš „-“bėgio prie GND, esančio žingsninio vairuotojo lentos apačioje kairėje. Prijunkite laidą nuo „+“bėgelio prie VIO

4 veiksmas: prijunkite DIR/STEP prie „Arduino“skaitmeninių kaiščių

Prijunkite DIR/STEP prie „Arduino“skaitmeninių kaiščių
Prijunkite DIR/STEP prie „Arduino“skaitmeninių kaiščių

Prijunkite DIR ir STEP kaiščius nuo žingsninio valdiklio plokštės prie dviejų „Arduino“skaitmeninių kaiščių. Aš naudoju atitinkamai 2 ir 3 kaiščius, tačiau tai nesvarbu, jei vėliau nustatysite kaiščius savo kode.

5 žingsnis: eikime į priekį ir pridėkite tą kondensatorių …

Eikime į priekį ir pridėkime tą kondensatorių …
Eikime į priekį ir pridėkime tą kondensatorių …

Aš sudeginau 2 žingsnines tvarkyklės plokštes, nes neturėjau vietoje kondensatoriaus, todėl eikime į priekį ir pridėkite 47uF 50 V kondensatorių prie VM/GND kaiščių vairuotojo plokštėje. Įsitikinkite, kad „-“kaištis ant kondensatoriaus yra duonos lentos GND kaištyje (atitinkamoje kondensatoriaus pusėje bus „-“)

6 veiksmas: eikite į priekį ir prijunkite tą GND

Ir pirmyn ir prijunkite tą GND
Ir pirmyn ir prijunkite tą GND

GND, prie kurio ką tik pridėjote kondensatorių, eikite į priekį ir prijunkite jį prie to paties „-“bėgelio, kaip ir kitas GND.

7 veiksmas: prijunkite variklį prie tvarkyklės

Prijunkite variklį prie vairuotojo
Prijunkite variklį prie vairuotojo

Kuris smeigtukas eina, priklausys nuo jūsų įsigyto variklio, tačiau mano išvardytame yra prijungimo schema „Amazon“sąraše.

Mano varikliui -

Prijunkite žalią ir juodą prie M2B ir M2A

Prijunkite raudoną ir mėlyną prie M1A ir M1BPastaba: jei dėl kokių nors priežasčių jūsų variklis neturi diagramos, galite lengvai išsiaiškinti, kurie laidai sudaro grandinę, jei turite multimetrą. Nustatykite mažo stiprintuvo multimetrą ir atjunkite variklį. Palieskite vieną iš multimetro laidų prie vieno iš variklio laidų, tada išbandykite visus kitus laidus kitu laidu. Jei gausite varžos rodmenį, tada šie du laidai sudaro 1 grandinę, o kiti du - kitą.

8 veiksmas: prijunkite EN, MS1 ir MS2 prie „-“

Prijunkite EN, MS1 ir MS2 prie
Prijunkite EN, MS1 ir MS2 prie

Nesu visiškai tikras, ar tai būtina, bet manau, kad dėl to variklis TMC2209 tvarkyklėje nustato mažesnį mikroskopinį nustatymą. Galite juos prijungti prie arčiausiai jų esančio bėgio "-", nes vėliau jį prijungsime prie kitos pusės.

9 žingsnis: Lituokite moterišką maitinimo jungtį prie dviejų laidų

Lituokite moterišką maitinimo jungtį prie dviejų laidų
Lituokite moterišką maitinimo jungtį prie dviejų laidų

Aš nesu geriausias pasaulyje litavimas, todėl turėsite to ieškoti kitur, bet aš taip padariau. Aš sulenkiau laidų galus taip, kad jie gulėtų lygiagrečiai prie jungčių laidų, tada litavau laidą prie laido. Neturėjau jokių laidų termiškai susitraukiančių daiktų, todėl juos tiesiog apvyniojau elektros juosta.

10 veiksmas: prijunkite naujai sulydytą moterišką jungtį

Prijunkite naujai sulydytą moterišką jungtį
Prijunkite naujai sulydytą moterišką jungtį

Kol kas neprijunkite tikrojo maitinimo šaltinio. Raudonas laidas prie „+“, juodas-„-“

11 veiksmas: prijunkite juos prie VM/GND

Prijunkite juos prie VM/GND
Prijunkite juos prie VM/GND

Prijunkite tuos „+“ir „-“bėgelius prie VM ir šalia esančio GND. Tie, kuriuose yra kondensatorius.

12 žingsnis: grožėkitės savo rankų darbu

Pasigrožėkite savo rankų darbu
Pasigrožėkite savo rankų darbu

Gerai, dabar jūs visiškai nustatėte variklį ir vairuotoją! Nuo šiol mes tik kontroliuosime. Beje, pirmyn:

  • Jei dėl kokių nors priežasčių atjungėte tvarkyklę, nebandykite jos prijungti, kai jūsų 36 V maitinimo šaltinis yra įjungtas. Aš taip nužudžiau savo trečiąją tvarkyklės plokštę.
  • Prieš prijungdami „Arduino“maitinimą, prijunkite 36 V maitinimą. Aš asmeniškai nekepiau „Arduino“, bet pakeliui pamačiau daug įspėjimų apie tai.

13 veiksmas: neprivaloma - patikrinkite savo VREF

TMC2209 turi potenciometrą, valdantį variklio srovę. Jei turite tą pačią tvarkyklę kaip ir aš, apie tai galite perskaityti čia. Jei norite koreguoti nustatymą:

  • Atjunkite visą maitinimą ir atjunkite variklio laidus nuo tvarkyklės.
  • Atjunkite laidą prie vairuotojo EN (įjungimo) kaiščio. Tai kaištis viršutiniame kairiajame kampe.
  • Prijunkite variklio maitinimo šaltinį (36 V)
  • Naudodami 20 V įtampos multimetrą, vieną laidą palieskite prie GND šaltinio (aš naudoju laidą, prijungtą prie „-“bėgio), o kitą-prie VREF kaiščio. Nelieskite laido prie nieko kito, jei galite, galite sutrumpinti savo vairuotoją.
  • Naudodami mažą atsuktuvą švelniai sureguliuokite potenciometro varžtą. Mano lentai prieš laikrodžio rodyklę = daugiau galios. Mano VREF asmeniškai nuskaito ~ 0.6V.

14 žingsnis: mygtukai

Mygtukai!
Mygtukai!

Toliau prijunkite mygtukus taip. Jiems nereikia galios.

  • Prijunkite mygtuko lentos „-“bėgelį prie vieno iš „Arduino“GND. Jei norite, taip pat galite jį tiesiog atjungti nuo kitos lentos „-“bėgelio.
  • Prijunkite vieną kiekvieno mygtuko kaištį prie „-“bėgelio
  • Prijunkite kitą kiekvieno mygtuko kaištį prie skaitmeninio „Arduino“kaiščio.

Naudojau 4 mygtukus: variklis įjungtas/išjungtas

Variklis toliau

Mikrofonas įjungtas

Mikrofonas išjungtas

Daugiau apie tai, kai pereisime prie kodo, bet aš naudojau skirtingus mikrofono mygtukus vien todėl, kad neturėjau šviesos diodų, kurie praneštų man, ar mikrofonas įjungtas, ar išjungtas, todėl turėdami skirtingus įjungimo/išjungimo mygtukus jis tapo nepriekaištingas.

15 veiksmas: pridėkite mikrofono plokštę

Pridėkite mikrofono plokštę
Pridėkite mikrofono plokštę

Tai paprasta, o „Adafruit“čia turi gerų instrukcijų (ir litavimo pagrindų!).

  • Prijunkite „-“prie GND
  • Prijunkite GND mikrofono plokštėje prie „-“(galite tiesiogiai prijungti GND prie GND ir praleisti ankstesnį veiksmą)
  • Prijunkite VCC prie 3,3 V maitinimo „Arduino“. Tai svarbu, nes šis maitinimo šaltinis yra mažiau „triukšmingas“nei 5 V, todėl gaunami geresni mikrofono rodmenys
  • Prijunkite OUT prie ANALOG IN kaiščio „Arduino“. Aš naudojau A0.

16 žingsnis: tai turėtų būti galutinis rezultatas

Tai turėtų būti galutinis rezultatas!
Tai turėtų būti galutinis rezultatas!
Tai turėtų būti galutinis rezultatas!
Tai turėtų būti galutinis rezultatas!

Viskas turėtų būti paruošta dabar. Čia yra galutinės diagramos paveikslas ir mano laidų kratinys realybėje. Pažvelkime į tam tikrą kodą!

17 žingsnis: kodas

Gerai, pažvelkime į kodą! Tai nėra pats švariausias mano darbas, bet tai daro. Aš pridėjau komentarų, kad čia viską paaiškinčiau, bet būkite su manimi. Visa tai naudoju „Arduino IDE“(galima nemokamai „Windows“ir „Mac“)

Nustatykite norimų atlikti uolų (sūpynių) skaičių.

Pasukite nustatytą atstumą 1 pasukimui. Pasukite nustatytą skaičių kartų.

Tarp viso to stebėkite mygtukų paspaudimus arba klausykitės mikrofono, kad pamatytumėte, ar variklis turėtų įsijungti. Turėsite koreguoti greičio, atstumo ir mikrofono jautrumo vertes. Variklio greitis paveiks garsumą ir sukimo momentą. Kuo greičiau variklis sukasi, tuo garsiau ir mažiau sukimo momento. Manasis šiuo metu yra beveik tylus, todėl jį galima paleisti be didelio garso.

#include // "standartinė" žingsninio variklio biblioteka

//#define DEBUG 1 // atšaukite komentarą, kai norite reguliuoti mikrofono lygius // Mygtukų sąranka - jie atitinka vietas, kur skaitmeniniai kaiščiai, kuriuos prijungėte prie mygtukų const int motorEnablePin = 10; const int ContinPin = 11; const int micDisablePin = 12; const int micEnablePin = 13; // Mikrofono sąranka - A0 čia yra mikrofono analogas. Pavyzdinis langas yra milis konstanta int micPin = A0; const int sampleWindow = 1000; nepasirašytas int pavyzdys; bool micEnabled = klaidinga; dvigubas mikrofonas Jautrumas = 0,53; // jums tikriausiai reikės tai pakeisti // Man maždaug.5 buvo pakankamai geras, kad neužsidegtų ant mažo kūkčiojimo // bet užsidegs už mažus verksmus int stepsPerRevolution = 3200; // pakeiskite tai, kad atitiktų jūsų variklio žingsnių skaičių per apsisukimą // Mano variklis yra 200 žingsnių/apsisukimas // Bet aš nustatiau tvarkyklę 1/16 mikroskopų // taigi 200*16 = 3200 … sąžiningai neįsivaizduoju, ar tai yra tinkamas būdas // tai padaryti Stepper myStepper (stepsPerRevolution, 2, 3); // 2 ir 3 yra DIR & STEP kaiščiai int stepCount = 0; int motorSpeed = 95; // turėsite tai koreguoti pagal savo lopšį ir kūdikio svorį int numSteps = 90; // Atstumas, kuriuo variklis judės. // Turėsite tai koreguoti, atsižvelgdami į rato, kurį pritvirtinate prie variklio, spindulį. Greičiausiai tai bus bandymai ir klaidos. // Pastaba - didesnis greitis ant žingsninių variklių = mažesnis efektyvus sukimo momentas // Jei neturite pakankamai sukimo momento, jūsų variklis praleis žingsnius (nejudės) int oldmotorButtonValue = HIGH; bool enabled = false; // variklis įjungtas? int loopStartValue = 0; int maxRocks = 100; // kiek kartų norite, kad jis roko prieš išjungdamas int rockCount = 0; void setup () {#ifdef DEBUG Serial.begin (9600); // debug logging #endif pinMode (motorEnablePin, INPUT_PULLUP); // Tai yra nustatymas, kad mygtukai veiktų be maitinimo pinMode (jatykPin, INPUT_PULLUP); pinMode („micEnablePin“, INPUT_PULLUP); pinMode („micDisablePin“, INPUT_PULLUP); myStepper.setSpeed (motorSpeed); // nustato variklio greitį į tą, kurį anksčiau nurodėte} void loop () {int motorButtonValue = digitalRead (motorEnablePin); // „DigitalRead“tiesiog skaito mygtukų reikšmes. // Tai nustato variklio mygtuko paspaudimą ir neleidžia jam suaktyvinti daugiau nei vieną kartą per paspaudimą, jei (motorButtonValue == HIGH && oldmotorButtonValue == LOW) {enabled =! Enabled; } micCheck (); // Jei variklis išjungtas, o mikrofonas įjungtas, klausykite, ar kūdikis neverkia, jei (! Įgalintas && micEnabled) {jei (getMicReading ()> = micSensitivity) įgalintas = tiesa; } if (įgalinta) {stepsPerRevolution = stepsPerRevolution * -1; // atvirkštinė kryptis // Su mano sąranka efektyviau pakeisti pirmąjį svyravimą. Tai galite įdėti po ciklo // jei jūsų atveju taip nėra // sukite variklį aukščiau nurodytu atstumu (int i = loopStartValue; i <numSteps; i ++) {// patikrinkite, ar išjungti int tempmotorButtonValue = digitalRead (motorEnablePin); if (tempmotorButtonValue! = motorButtonValue) {rockCount = 0; // Šios kitos dvi eilutės „išsaugo“variklio padėtį, kad kitą kartą jį įjungus // jis ir toliau keliaus taip, lyg nebūtumėte jo išjungęs. Tai neleidžia išmesti // jūsų judėjimo atstumų loopStartValue = i; // išsaugoti poziciją stepsPerRevolution = stepsPerRevolution * -1; // išlaikyti kryptį oldmotorButtonValue = tempmotorButtonValue; pertrauka; } checkContinue (tęsinioVerta); // patikrinti, ar buvo paspaustas tęsti mygtukas micCheck (); myStepper.step (stepsPerRevolution / 50); // kiek žingsnių reikia atlikti vienai kilpai, // jums gali tekti tai koreguoti // įsitikinkite, kad tęsiame visą ciklo atstumą, jei ciklas baigtas // tai įvyksta, jei patys išjungėte variklį ir jis „išsaugojo“pozicija if (i == numSteps - 1) {loopStartValue = 0; }}} uždelsimas (100); // pristabdykite 100 milis prieš darant kitą roką. Turėsite tai koreguoti. jei (įjungta) checkComplete (); oldmotorButtonValue = motorButtonValue; // tai naudojama siekiant išvengti dvigubų paspaudimų} // Šis kodas yra tiesiogiai iš „Adafruit“. double getMicReading () {unsigned long startMillis = millis (); unsigned int peakToPeak = 0; // nuo piko iki piko lygio unsigned int signalMax = 0; unsigned int signalMin = 1024; while (millis () - startMillis <sampleWindow) {micCheck (); if (digitalRead (motorEnablePin) == LOW) įgalintas = tiesa; mėginys = analogRead (micPin); if (signal signalMax) {signalMax = mėginys; // išsaugoti tik maksimalius lygius} else if (pavyzdys = maxRocks) {įgalintas = klaidingas; uolienų skaičius = 0; // grįžti į vidurinį positio

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

myStepper.step (stepsPerRevolution * -1 / 50); // 1/100 revoliucijos žingsnis:

}

} }

18 veiksmas: montavimas ir ratų sąranka

Montavimas ir ratų nustatymas
Montavimas ir ratų nustatymas

Tai man vis dar yra WIP, nes, kaip jau sakiau, nesu tikras, ar dar noriu įkišti varžtus į savo lopšį. Tai, kaip aš sukomplektuoju kasyklą, yra toks:

  • Uždėkite spaustuką, kuris veiktų kaip ranka, nusileidusi nuo lopšio, kad mano ratas galėtų traukti tiesia linija
  • Prisukame neapdorotą dėžę varikliui įdėti ir prisukame prie pagrindo plokštės, kurią prispaudžiu prie lopšio kojos
  • Padarė specialų medinį skriemulio ratą su skylute, kad tilptų mažas žingsninis skriemulio ratas. Aš padariau centrinę skylę labai sandarią ir tiesiog sugadinau žingsninio skriemulio ratą. Aš išgręžiau skylę per ratą iki vidurio, kad galėčiau prieiti prie metalinio skriemulio rato varžto ir priveržti jį ant žingsninio variklio.
  • Nubraukė stygą nuo lopšio „rankos“iki rato. Aš pritvirtinau virvelę, praleisdamas ją per išgręžtą skylę ir tiesiog užklijuodamas.

Geriausias trečiojo žingsnio sprendimas yra tiesiog nusipirkti didesnio skersmens skriemulio ratą. Mano skersmuo griovelio viduje yra šiek tiek mažesnis nei 3 coliai ir jis puikiai tinka mano konkrečiam lopšiui.

Mano pirmoji versija vietoj rato naudojo ranką. Tai neveikė beveik taip pat gerai, nes jėga nebuvo taikoma nuoseklia kryptimi, be to, ji buvo labai linkusi būti išmesta, jei pradinė padėtis buvo neteisinga. Rato naudojimas išsprendžia šias problemas. Aš taip pat pramogavau naudodamas mažą skriemulių sistemą, bet galiausiai to neprireikė, nes mano ratas man suteikė pakankamai sukimo momento.

19 veiksmas: galutinė sąranka

Galutinė sąranka
Galutinė sąranka

Montuokite mikrofoną arti savo vaiko, bet toje vietoje, kur jie nesilies prie laidų. Įdėkite mygtukus, kur tik norite, jei turite pakankamai laidų, kad galėtumėte pasiekti galutinę paskirties vietą. Taip pat galite tiesiog pakeisti mygtukus „wifi“sąrankoje „arduino“, bet aš dar nesu nuėjęs taip giliai. Sėkmės!

Rekomenduojamas: