Innholdsfortegnelse:

Arduino Cradle Rocker: 19 trinn (med bilder)
Arduino Cradle Rocker: 19 trinn (med bilder)

Video: Arduino Cradle Rocker: 19 trinn (med bilder)

Video: Arduino Cradle Rocker: 19 trinn (med bilder)
Video: Automatic Baby Cradle | Automatic E-Baby Cradle Cry (Sound Sensor) Bed Using Arduino 2024, Juli
Anonim
Image
Image

Beklager, jeg kunne ikke motstå den krevende intense musikken min videoredigerings ting foreslo.

Jeg hadde nylig mitt første barn og hadde allerede en trevugge som onkelen min (som er en fantastisk trearbeider) laget til nevøen min. Min nevø hadde lenge vokst opp av det, så jeg tok det gjerne og unngikk å bruke ALLE PENGENE på hvilken vugge/bassin som mammabloggerne fikk min kone til å svømme over. Vuggen er en ganske enkel design, i utgangspunktet to stendere med bolter gjennom dem som støtter vuggehuset. Det er en flyttbar pinne for å låse den på plass.

I løpet av noen uker fant vi ut at vi ofte kunne dempe lett mas ved å vugge vuggen litt til gutten vår slo seg ned. Den kvelden vi fant dette ut tilbrakte jeg noen ti minutter lange strekninger sent på kvelden med armen min nede under dekslene, søvnig vugget ham, glad for at jeg hadde funnet en måte å berolige ham på uten å stå ut av sengen selv. morgen festet jeg en snor og en liten karabinkrok slik at jeg kunne vugge vuggen uten å måtte strekke armen ut.

Morgenen etter begynte jeg å brainstorme en måte å bare få en robot til å rocke denne gutten for meg. Skriv inn Arduino …

Rekvisita

Ok, dette var mitt første Arduino -prosjekt noensinne, så jeg eksperimenterte og prøvde og feiler, og jeg er sikker på at det er rom for forbedring i designet mitt, men her er min deleliste: Arduino Uno ($ 13) for å kontrollere alt Et brødbrett sett ($ 10) for tilkobling av ledninger

Stepper motor ($ 14) Dette er det morsomste stykket, fordi det er tingen som gjør alt arbeidet. Jeg begynte med en litt lavere dreiemoment driver, men så fikk jeg denne og den fungerer ganske bra. Få en enda kraftigere en. Stepper motor drivers ($ 10-30) Denne sitter mellom Arduino og motoren. Denne spesifikke er tydeligvis i stand til å kjøre motoren mer stille enn noen andre, så jeg gikk med det siden motoren kommer til å være noen få meter fra hodet (og sønnen min) mens vi sover. Jeg kjøpte opprinnelig bare en TMC2209 -driver for ~ $ 10, men endte med å kjøpe en pakke med 4 fordi jeg hadde problemer med det først og ville sørge for at jeg ikke hadde stekt brettet på et tidspunkt. Jeg endte opp med å faktisk drepe 3 brett, noe som bringer meg til mitt neste element … Kondensatorer! ($ 10) Du trenger egentlig bare 1 47 uF 50V kondensator, så denne boksen med 240 var for mye. En 36V strømforsyning ($ 17) Jeg kjøpte opprinnelig en dårlig 12V forsyning, og fant ut at det var kilden til alle problemene mine og fikk en som var nærmere maks spenning som steppermotoren min kunne håndtere. Hvis du bruker en annen motor eller trinndriver, må du kontrollere at den kan håndtere spenningen (V) og at strømstyrken (A) på forsyningen er minst like høy som toppforsterkerne trukket av motoren. $ 8) Dette er hva strømforsyningen kobles til. Du må lodde disse til noen ledninger for å stikke inn i brødbrettet. En stor pakke hoppere ($ 9) slik at jeg kunne sette kontrollene hvor jeg ville i rommet.

Knapper ($ 8) for av/på, etc.

En mikrofonforsterker ($ 11) Åh, visste du ikke at dette var lydaktivert også?

Noen små remskiver ($ 8) jeg endte opp med å bruke disse, men det kan være bedre alternativer. Mer om det senere. Du trenger definitivt et loddejern og hva du vil bruke til å montere motoren. Jeg personlig laget bare en grov eske av 4 skrudd sammen trebiter, og skrudde dem deretter til et annet treverk som er omtrent bredden på vuggebenet mitt. Foreløpig har jeg bare klemt den fast fordi jeg ikke vet om jeg vil ødelegge min onkels vugge.

Trinn 1: Gjør deg kjent med Stepper Driver Pinout

Koble Arduino 5V/GND til brødbrettet
Koble Arduino 5V/GND til brødbrettet

Modellprogrammet jeg brukte hadde ikke akkurat dette driverkortet, så du må referere til dette bildet. Jeg har ordnet alt i samme retning som dette bildet.

Trinn 2: Koble Arduino 5V/GND til brødbrettet

Koble en ledning fra Arduino 5V til "+" skinnen på den ene siden av brødbrettet Koble en ledning fra en av Arduino GND til "-" skinnen på samme side av brødbrettet

(ignorer

Trinn 3: Koble +/- skinnene til VIO/GND

Koble +/- skinnene til VIO/GND
Koble +/- skinnene til VIO/GND

Koble en ledning fra "-" skinnen til GND nederst til venstre på trinnbrettet. Koble en ledning fra "+" skinnen til VIO

Trinn 4: Koble DIR/STEP til Digital Pins på Arduino

Koble DIR/STEP til Digital Pins på Arduino
Koble DIR/STEP til Digital Pins på Arduino

Koble DIR- og STEP -pinnene fra trinndriverkortet til to av de digitale pinnene på Arduino. Jeg brukte henholdsvis pinne 2 og 3, men det spiller ingen rolle så lenge du setter pinnene i koden senere.

Trinn 5: La oss gå foran og legge til kondensatoren …

La oss gå foran og legge til kondensatoren …
La oss gå foran og legge til kondensatoren …

Jeg brente ut 2 trinndriverkort fordi jeg ikke hadde en kondensator på plass, så la oss fortsette og legge til 47uF 50V kondensatoren i VM/GND -pinnene på driverkortet. Sørg for at "-" pinnen på kondensatoren er i GND-pinnen på brødbrettet (det vil være en "-" på den tilsvarende siden av kondensatoren)

Trinn 6: Og gå fremover og koble til GND

Og gå fremover og koble til GND
Og gå fremover og koble til GND

På GND som du nettopp la kondensatoren til, fortsett og koble den til den samme "-" skinnen som den andre GND.

Trinn 7: Koble motoren til driveren

Koble motoren til driveren
Koble motoren til driveren

Hvilken pinne som går, vil avhenge av motoren du kjøpte, men den jeg har oppført har koblingsskjemaet på Amazon -listen.

For min motor -

Koble grønt og svart til M2B og M2A

Koble rød og blå til M1A og M1B Merk: Hvis motoren din av en eller annen grunn ikke har et diagram, kan du enkelt finne ut hvilke ledninger som danner en krets hvis du har et multimeter. Sett multimeteret til en lav forsterkerinnstilling og koble fra motoren. Berør en av multimeterledningene til en av motortrådene, og prøv deretter hver av de andre ledningene med den andre ledningen. Hvis du får en motstandsavlesning, danner de to ledningene en krets, og de to andre danner den andre.

Trinn 8: Koble EN, MS1 og MS2 til "-"

Koble EN, MS1 og MS2 til
Koble EN, MS1 og MS2 til

Jeg er ikke helt sikker på at dette er nødvendig, men jeg tror at det setter motoren til en mindre microstep -innstilling på TMC2209 -driveren. Du kan koble dem til skinnen "-" nærmest dem, ettersom vi vil koble den til den andre siden senere.

Trinn 9: Lodd en kvinnelig strømkontakt til to ledninger

Lodd en kvinnelig strømkontakt til to ledninger
Lodd en kvinnelig strømkontakt til to ledninger

Jeg er ikke verdens beste på lodding, så du må lete andre steder etter det, men jeg gjorde min slik. Jeg bøyde endene på ledningene slik at de lå flatt mot kontaktledningene, og loddet deretter ledningen til ledningen. Jeg hadde ikke noe krympevarer for ledninger, så jeg pakket dem inn fantastisk med elektrisk tape.

Trinn 10: Koble til den nylig loddede hunnkontakten

Koble den nylig loddede hunnkontakten
Koble den nylig loddede hunnkontakten

Ikke koble til den faktiske strømforsyningen ennå. Rød ledning til "+", svart til "-"

Trinn 11: Koble dem til VM/GND

Koble dem til VM/GND
Koble dem til VM/GND

Koble disse "+" og "-" skinnene til VM og GND ved siden av. De med kondensatoren på.

Trinn 12: Beundre håndverket ditt

Beundre håndverket ditt
Beundre håndverket ditt

OK, nå har du motoren og sjåføren helt satt opp! Fra nå av skal vi bare gjøre kontroller. Forresten, fremover:

  • Hvis du har koblet fra driveren din av en eller annen grunn, ikke prøv å koble den til mens 36V -strømmen er tilkoblet. Jeg drepte mitt tredje førerkort på den måten.
  • Koble til 36V -strømmen før du kobler til Arduino -strømmen. Jeg stekte ikke personlig en Arduino, men underveis så jeg mange advarsler om dette.

Trinn 13: Valgfritt - Sjekk VREF

TMC2209 har et potensiometer som styrer strømmen til motoren. Hvis du har samme driver som meg, kan du lese om det her. Hvis du vil justere innstillingen:

  • Koble fra all strøm og koble motortrådene fra driveren.
  • Koble ledningen til EN -knappen (aktiver) på driveren. Dette er pinnen øverst i venstre hjørne.
  • Koble til motorens strømforsyning (36V)
  • Ved å bruke et multimeter satt på 20V, berører du den ene ledningen til en kilde til GND (jeg brukte en kabel til min "-" skinne) og berører den andre ledningen til VREF-pinnen. Ikke berør ledningen til noe annet, du kan kortføre sjåføren hvis du gjør det.
  • Bruk en liten skrutrekker til å justere potensiometerskruen forsiktig. For brettet mitt, mot klokken = mer kraft. Min VREF leser personlig ~ 0,6V.

Trinn 14: Knapper

Knapper!
Knapper!

Deretter kobler du knappene dine slik. De trenger ikke strøm.

  • Koble en "-" skinne på knappebrødbrettet til en av GND-ene til Arduino. Du kan også bare koble den av det andre brødbrettets "-" skinne hvis du vil.
  • Koble en pinne på hver knapp til "-" skinnen
  • Koble en annen pinne på hver knapp til en digital pinne på Arduino.

Jeg brukte 4 knapper: Motor på/av

Motoren fortsetter

Mikrofon på

Mikrofonen er slått av

Mer om disse når vi kommer til koden, men jeg brukte forskjellige mikrofonknapper rett og slett fordi jeg ikke hadde LED -er for å gi meg beskjed om mikrofonen var på eller av, så det å ha forskjellige på/av -knapper gjorde den idiotsikker.

Trinn 15: Legg til mikrofonkortet

Legg til mikrofonkortet
Legg til mikrofonkortet

Denne er enkel, og Adafruit har gode instruksjoner (og grunnleggende for lodding!) Her.

  • Koble "-" til en GND
  • Koble GND på mikrofonkortet til "-" (du kan direkte koble GND til GND og hoppe over forrige trinn, virkelig)
  • Koble VCC til 3,3V strøm på Arduino. Dette er viktig ettersom denne strømforsyningen er mindre "bråkete" enn 5V, noe som resulterer i bedre mikrofonavlesninger
  • Koble OUT til en ANALOG IN -pinne på Arduino. Jeg brukte A0.

Trinn 16: Dette burde være det endelige resultatet

Dette burde være det endelige resultatet!
Dette burde være det endelige resultatet!
Dette burde være det endelige resultatet!
Dette burde være det endelige resultatet!

Alt skal være klart nå. Her er et bilde av det endelige diagrammet og mitt virvar av ledninger i virkeligheten. La oss se på noen kode!

Trinn 17: Kode

Ok, la oss se på koden! Dette er ikke mitt reneste arbeid, men det får jobben gjort. Jeg har lagt til kommentarer for å forklare alt her, men vær med meg. Jeg brukte Arduino IDE for alt dette (tilgjengelig på Windows og Mac gratis) Jist er dette: Still inn en motorhastighet og avstand som skal svinges.

Sett et antall steiner (husker) å gjøre.

Vri innstilt avstand for 1 sving. Sving et bestemt antall ganger.

Mellom alt dette, se etter knappetrykk eller lytt til mikrofonen for å se om motoren skal slås på. Du må justere hastighet, avstand og mikrofonfølsomhetsverdier. Motorhastighet vil påvirke volum og dreiemoment. Jo raskere motoren går, jo høyere er den og jo mindre dreiemoment får du. Min er for øyeblikket nesten stille, så det er mulig å få den til å kjøre uten å lage mye lyd.

#include // "standard" stepper motorbibliotek

//#definer DEBUG 1 // kommenter dette når du vil justere mikrofonnivåene // Knappoppsett - disse tilsvarer der de digitale pinnene du koblet til knappene const int motorEnablePin = 10; const int continuePin = 11; const int micDisablePin = 12; const int micEnablePin = 13; // Mikrofonoppsett - A0 her er analog -inn for mikrofonen. Eksempelvindu er i millis const int micPin = A0; const int sampleWindow = 1000; usignert int prøve; bool micEnabled = false; dobbel mikrofølsomhet = 0,53; // du må sannsynligvis endre dette // For meg var rundt.5 bra nok til å ikke skyte på små slynger // men vil fyre for små gråt int stepsPerRevolution = 3200; // endre dette for å passe til antall trinn per omdreining for motoren din // Min motor er 200 trinn/omdreining // Men jeg satte driveren til 1/16 mikrotrinn // så 200*16 = 3200 … ærlig talt aner ikke om dette er den riktige måten // for å gjøre dette Stepper myStepper (stepsPerRevolution, 2, 3); // 2 & 3 er DIR & STEP -pinnene int stepCount = 0; int motorSpeed = 95; // du må justere dette i henhold til vuggen og babyens vekt int numSteps = 90; // Avstanden motoren vil bevege seg. // Du må justere dette basert på radiusen på hjulet du fester // til motoren din. Dette og hastigheten vil sannsynligvis være prøving og feiling. // Merk - høyere hastighet på trinnmotorer = lavere effektivt dreiemoment // Hvis du ikke har nok dreiemoment, hopper motoren over trinn (ikke beveger seg) int oldmotorButtonValue = HIGH; bool aktivert = false; // motor aktivert? int loopStartValue = 0; int maxRocks = 100; // hvor mange ganger du vil at den skal rocke før du slår av int rockCount = 0; ugyldig oppsett () {#ifdef DEBUG Serial.begin (9600); // for feilsøkingslogging #endif pinMode (motorEnablePin, INPUT_PULLUP); // Dette er en innstilling for at knappene skal fungere uten strøm pinMode (continuePin, INPUT_PULLUP); pinMode (micEnablePin, INPUT_PULLUP); pinMode (micDisablePin, INPUT_PULLUP); myStepper.setSpeed (motorSpeed); // setter motorhastigheten til det du spesifiserte tidligere} void loop () {int motorButtonValue = digitalRead (motorEnablePin); // digitalRead leser bare knappverdier int continueValue = digitalRead (continuePin); // Dette oppdager motorknappetrykket og forhindrer at det skyter mer enn én gang per klikk hvis (motorButtonValue == HIGH && oldmotorButtonValue == LOW) {enabled =! Enabled; } micCheck (); // Hvis motoren er slått av og mikrofonen er på, kan du lytte etter babygråt hvis (! Aktivert && micEnabled) {if (getMicReading ()> = micSensitivity) enabled = true; } hvis (aktivert) {stepsPerRevolution = stepsPerRevolution * -1; // omvendt retning // Med mitt oppsett er det mer effektivt å reversere // den første svingen. Du kan sette dette etter sløyfen // hvis det ikke er tilfellet for din // spinnmotor avstanden angitt ovenfor for (int i = loopStartValue; i <numSteps; i ++) {// sjekk for slå av int tempmotorButtonValue = digitalRead (motorEnablePin); if (tempmotorButtonValue! = motorButtonValue) {rockCount = 0; // Disse to linjene "lagrer" motorposisjonen, slik at neste gang du slår den på // fortsetter den å reise som om du ikke hadde slått den av. Dette forhindrer at du kaster av // bevegelsesavstandene loopStartValue = i; // lagre posisjon stepsPerRevolution = stepsPerRevolution * -1; // opprettholde retningen oldmotorButtonValue = tempmotorButtonValue; gå i stykker; } checkContinue (continueValue); // sjekk om det ble trykket på fortsett -knappen micCheck (); myStepper.step (stepsPerRevolution / 50); // hvor mange trinn du skal ta per sløyfe, // du må kanskje justere dette // sørg for at vi fortsetter hele sløyfedistansen hvis sløyfen er ferdig // dette spiller inn hvis du slår av motoren selv og det "reddet" posisjon hvis (i == numSteps - 1) {loopStartValue = 0; }}} forsinkelse (100); // pause 100 millis før du gjør neste stein. Du må justere dette. hvis (aktivert) checkComplete (); oldmotorButtonValue = motorButtonValue; // denne brukes for å forhindre dobbeltklikk} // Denne koden er direkte fra Adafruit. double getMicReading () {unsigned long startMillis = millis (); usignert int peakToPeak = 0; // topp-til-topp-nivå usignert int signalMax = 0; usignert int signalMin = 1024; while (millis () - startMillis <sampleWindow) {micCheck (); hvis (digitalRead (motorEnablePin) == LOW) aktivert = true; sample = analogRead (micPin); if (sample signalMax) {signalMax = sample; // lagre bare maksnivåene} else if (sample = maxRocks) {enabled = false; rockCount = 0; // gå tilbake til midtposisjonen

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

myStepper.step (stepsPerRevolution * -1 / 50); // trinn 1/100 av en revolusjon:

}

} }

Trinn 18: Montering og hjuloppsett

Montering og hjuloppsett
Montering og hjuloppsett

Dette er fortsatt en WIP for meg, for som sagt er jeg ikke sikker på om jeg vil sette skruer i vuggen min ennå. Måten jeg rigget min på er som følger:

  • Sett en klemme for å fungere som en arm som kommer av holderen slik at hjulet mitt kan trekke i en rett linje
  • Skruet sammen en råboks for å sette motoren i, og skrudde den til en bunnplate, som jeg klemte fast i holderen
  • Laget et tilpasset trinsehjul med hull for å passe til det lille trinnhjulhjulet inni. Jeg gjorde senterhullet veldig tett og bare malet i trinntrinshjulet. Jeg boret et hull gjennom hjulet til midten slik at jeg kunne få tilgang til skruen på metallhjulet for å stramme det på trinnmotoren.
  • Kjørte en snor fra vuggen "armen" til hjulet. Jeg sikret snoren ved å kjøre den gjennom hullet jeg hadde boret og bare teipe den på plass.

Den bedre løsningen på det tredje trinnet er å bare kjøpe et hjul med større diameter i utgangspunktet. Min er litt under 3 i diameter inne i sporet og fungerer veldig bra for akkurat min vugge.

Min første versjon brukte en arm i stedet for et hjul. Det fungerte ikke like godt fordi kraften ikke ble påført i en konsekvent retning, og det var også veldig utsatt for å bli kastet hvis startposisjonen ikke var riktig. Å bruke et hjul løser disse problemene. Jeg underholdt også med et lite trinsesystem, men det endte med at jeg ikke trengte det fordi hjulet mitt ga meg nok dreiemoment.

Trinn 19: Sluttoppsett

Sluttoppsett
Sluttoppsett

Monter mikrofonen nær barnet ditt, men på et sted der de ikke kommer til å treffe noen ledninger. Sett knappene hvor du vil, så lenge du har nok ledninger til å løpe til sluttdestinasjonen. Du kan også bare bytte ut knappene med et wifi -oppsett på arduinoen, men jeg har ikke gått så dypt ennå. Lykke til der ute!

Anbefalt: