Inhoudsopgave:

Arduino Cradle Rocker - Ajarnpa
Arduino Cradle Rocker - Ajarnpa

Video: Arduino Cradle Rocker - Ajarnpa

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

Sorry, ik kon de melige, intense muziek niet weerstaan die mijn videobewerkingsding suggereerde.

Ik heb onlangs mijn eerste kind gekregen en had al een houten wieg die mijn oom (die een geweldige houtbewerker is) voor mijn neefje heeft gemaakt. Mijn neef was het al lang ontgroeid, dus ik was blij om het te nemen en te voorkomen dat ik AL HET GELD uitgaf aan welke wieg / wieg de mama-bloggers mijn vrouw in zwijm hadden laten vallen. De wieg is een vrij eenvoudig ontwerp, in feite twee staanders met bouten er doorheen die het wieglichaam ondersteunen. Er is een verwijderbare pin om hem op zijn plaats te vergrendelen.

Binnen een paar weken ontdekten we dat we lichte onrust vaak konden onderdrukken door de wieg een beetje te wiegen totdat onze jongen tot rust kwam. De avond dat we dit ontdekten, bracht ik 's avonds laat een paar keer 10 minuten met mijn arm uit onder de dekens, hem slaperig wiegend, blij dat ik een manier had gevonden om hem te kalmeren zonder zelf uit bed te komen. 's Ochtends maakte ik een touwtje en een kleine karabijnhaak vast zodat ik de wieg kon wiegen zonder mijn arm te hoeven uitstrekken.

De ochtend daarna begon ik te brainstormen over een manier om gewoon een robot dit kind voor me te laten wiegen. Voer de Arduino …

Benodigdheden

Ok, dit was mijn eerste Arduino-project ooit, dus ik heb wat geëxperimenteerd en met vallen en opstaan, en ik weet zeker dat er ruimte is voor verbetering in mijn ontwerp, maar hier is mijn lijst met onderdelen: Arduino Uno ($ 13) voor het besturen van alles Een breadboard kit ($10) voor het aansluiten van draden

De stappenmotor ($ 14) Dit is het leukste stuk, want het is het ding dat al het werk doet. Ik ben begonnen met een driver met een iets lager koppel, maar heb toen deze gekregen en hij werkt redelijk goed. Voel je vrij om een nog krachtigere te krijgen. Stappenmotordrivers ($ 10-30) Dit zit tussen de Arduino en de motor. Deze specifieke is blijkbaar in staat om de motor stiller aan te drijven dan sommige andere, dus daar ging ik mee omdat de motor een paar meter van mijn (en mijn zoon's) hoofd zal zijn terwijl we slapen. Ik kocht oorspronkelijk slechts één TMC2209-driver voor ~ $ 10, maar kocht uiteindelijk een pakket van 4 omdat ik in het begin wat problemen had en er zeker van wilde zijn dat ik het bord op een gegeven moment niet had gefrituurd. Ik heb uiteindelijk 3 boards vermoord, wat me bij mijn volgende item brengt … Condensatoren! ($ 10) Je hebt eigenlijk maar 1 47 uF 50V-condensator nodig, dus deze doos van 240 was veel te veel. en kreeg er een die dichter bij de maximale spanning was die mijn stappenmotor aankan. Als u een andere motor of stappenmotor gebruikt, zorg er dan voor dat deze de spanning (V) aankan en dat de stroomsterkte (A) van de voeding minstens zo hoog is als de piek-ampères die door de motor worden getrokken. Vrouwelijke stroomaansluitingen ($ 8) Dit is waar de voeding op wordt aangesloten. Je moet deze aan een paar draden solderen om in je breadboard te steken. Een groot pakket jumpers ($ 9) zodat ik de bedieningselementen overal in de kamer kon plaatsen.

Knoppen ($ 8) voor aan/uit, etc

Een microfoonversterker ($11) Oh, wist je niet dat dit ook geluid geactiveerd was?

Sommige kleine katrolwielen ($ 8) heb ik uiteindelijk gebruikt, maar er zijn misschien betere alternatieven. Daarover later meer. Je hebt ook zeker een soldeerbout nodig en wat je maar wilt gebruiken om de motor te monteren. Ik heb persoonlijk zojuist een ruwe doos gemaakt van 4 aan elkaar geschroefde stukken hout en die vervolgens op een ander stuk hout geschroefd dat ongeveer de breedte van mijn wiegbeen is. Voor nu heb ik hem maar vastgeklemd omdat ik niet weet of ik de wieg van mijn oom wil bederven.

Stap 1: Maak uzelf vertrouwd met de pinout van uw stepperstuurprogramma

Sluit Arduino 5V/GND aan op uw breadboard
Sluit Arduino 5V/GND aan op uw breadboard

Het modelleringsprogramma dat ik gebruikte had niet dit exacte driverbord, dus je zult naar deze afbeelding moeten verwijzen. Ik heb alles in dezelfde richting gerangschikt als deze afbeelding.

Stap 2: Sluit Arduino 5V/GND aan op uw breadboard

Sluit een draad van de Arduino 5V aan op de "+" rail aan één kant van je breadboard Sluit een draad van een van de Arduino GND's aan op de "-" rail aan dezelfde kant van het breadboard

(negeer de

Stap 3: Verbind de +/- rails met VIO/GND

Sluit de +/- Rails aan op VIO/GND
Sluit de +/- Rails aan op VIO/GND

Sluit een draad van de "-"-rail aan op GND linksonder op de stepper-driverkaart. Sluit een draad van de "+"-rail aan op VIO

Stap 4: Sluit DIR/STEP aan op digitale pinnen op de Arduino

Sluit DIR/STEP aan op digitale pinnen op de Arduino
Sluit DIR/STEP aan op digitale pinnen op de Arduino

Verbind de DIR- en STEP-pinnen van het stepper-stuurprogrammabord met twee van de digitale pinnen op de Arduino. Ik heb respectievelijk pinnen 2 en 3 gebruikt, maar het maakt niet uit, zolang je de pinnen maar later in je code instelt.

Stap 5: Laten we doorgaan en die condensator toevoegen …

Laten we doorgaan en die condensator toevoegen …
Laten we doorgaan en die condensator toevoegen …

Ik heb 2 stepper-driverkaarten doorgebrand omdat ik geen condensator had, dus laten we doorgaan en de 47uF 50V-condensator toevoegen aan de VM/GND-pinnen op de driverkaart. Zorg ervoor dat de "-"-pin op de condensator zich in de GND-pin op het breadboard bevindt (er staat een "-" aan de overeenkomstige kant van de condensator)

Stap 6: En ga je gang en verbind die GND

En ga je gang en sluit die GND aan
En ga je gang en sluit die GND aan

Op de GND waar je zojuist de condensator aan hebt toegevoegd, ga je gang en sluit die aan op dezelfde "-" rail als de andere GND.

Stap 7: Sluit de motor aan op de driver

Sluit de motor aan op de driver
Sluit de motor aan op de driver

Welke pin waar gaat, hangt af van de motor die je hebt gekocht, maar degene die ik heb vermeld, heeft het bedradingsschema op de Amazon-lijst.

Voor mijn motor -

Verbind Groen & Zwart met M2B & M2A

Sluit Rood & Blauw aan op M1A & M1BOpmerking: Als je motor om wat voor reden dan ook geen schema heeft, kun je met een multimeter eenvoudig achterhalen welke draden een circuit vormen. Stel uw multimeter in op een lage ampère-instelling en laat uw motor loskoppelen. Raak een van de multimeterdraden aan op een van de motordraden en probeer vervolgens elk van de andere draden met de andere draad. Als u een weerstandswaarde krijgt, vormen die twee draden 1 circuit en de andere twee vormen de andere.

Stap 8: Sluit EN, MS1 en MS2 aan op "-"

Sluit EN, MS1 en MS2 aan op
Sluit EN, MS1 en MS2 aan op

Ik weet niet helemaal zeker of dit nodig is, maar ik geloof dat het de motor op een kleinere microstep-instelling op de TMC2209-driver zet. Je kunt ze aansluiten op de rail "-" rail die zich het dichtst bij hen bevindt, omdat we deze later met de andere kant zullen verbinden.

Stap 9: Soldeer een vrouwelijke voedingsconnector aan twee draden

Soldeer een vrouwelijke voedingsconnector aan twee draden
Soldeer een vrouwelijke voedingsconnector aan twee draden

Ik ben niet de beste ter wereld in solderen, dus daarvoor moet je ergens anders zoeken, maar ik heb de mijne zo gedaan. Ik boog de uiteinden van de draden zodat ze plat tegen de connectordraden lagen, en soldeerde de draad vervolgens aan de lead. Ik had geen snoer dat krimpt, dus ik heb ze gewoon wonderbaarlijk omwikkeld met elektrische tape.

Stap 10: Sluit uw nieuw gesoldeerde vrouwelijke connector aan

Sluit uw nieuw gesoldeerde vrouwelijke connector aan
Sluit uw nieuw gesoldeerde vrouwelijke connector aan

Sluit uw huidige voeding nog niet aan. Rode draad naar "+", zwart naar "-"

Stap 11: Verbind deze met VM/GND

Verbind die met VM/GND
Verbind die met VM/GND

Verbind die "+" en "-" rails met VM en de GND ernaast. Die met de condensator erop.

Stap 12: bewonder je handwerk

Bewonder je handwerk
Bewonder je handwerk

Oké, je hebt nu de motor en driver volledig ingesteld! Vanaf nu doen we alleen nog maar controles. Trouwens, vooruit:

  • Als je je driver om wat voor reden dan ook hebt losgekoppeld, probeer hem dan niet aan te sluiten terwijl je 36V-stroom is aangesloten. Ik heb mijn 3e driverbord op die manier gedood.
  • Sluit de 36V-voeding aan voordat u de Arduino-voeding aansluit. Ik heb niet persoonlijk een Arduino gebakken, maar onderweg zag ik menig waarschuwing hierover.

Stap 13: Optioneel - Controleer uw VREF

De TMC2209 heeft een potentiometer die de stroom naar de motor regelt. Als je dezelfde driver hebt als ik, kun je dat hier lezen. Als u de instelling wilt aanpassen:

  • Koppel alle stroom los en koppel de motordraden los van de driver.
  • Koppel de draad los van de EN (enable) pin op de driver. Dit is de pin in de linkerbovenhoek.
  • Sluit je motorvoeding aan (de 36V)
  • Gebruik een multimeter die is ingesteld op 20V, raak een draad aan op een GND-bron (ik heb een draad gebruikt die is aangesloten op mijn "-" rail) en raak de andere draad aan op de VREF-pin. Raak het snoer niet aan met iets anders, u KUNT uw stuurprogramma kortsluiten als u dat doet.
  • Gebruik een kleine schroevendraaier om de potentiometerschroef voorzichtig af te stellen. Voor mijn board, tegen de klok in = meer kracht. Mijn VREF leest persoonlijk ~ 0.6V.

Stap 14: Knoppen

Toetsen!
Toetsen!

Sluit vervolgens uw knoppen zo aan. Ze hebben geen stroom nodig.

  • Sluit een "-" rail van je button breadboard aan op een van de GND's van de Arduino. Je kunt het ook gewoon van de "-" -rail van het andere breadboard afkoppelen als je wilt.
  • Sluit een pin van elke knop aan op de "-" rail
  • Verbind een andere pin van elke knop met een digitale pin op de Arduino.

Ik gebruikte 4 knoppen: Motor aan/uit

Motor doorgaan

Microfoon aan

Microfoon uit

Meer hierover als we bij de code komen, maar ik gebruikte verschillende microfoonknoppen, simpelweg omdat ik geen LED's had om me te laten weten of de microfoon aan of uit was, dus het hebben van verschillende aan/uit-knoppen maakte het onfeilbaar.

Stap 15: voeg het microfoonbord toe

Voeg het microfoonbord toe
Voeg het microfoonbord toe

Deze is eenvoudig en Adafruit heeft hier goede instructies (en basisprincipes voor solderen!).

  • Verbind "-" met een GND
  • Sluit GND op het microfoonbord aan op "-" (je zou GND rechtstreeks op GND kunnen aansluiten en de vorige stap eigenlijk overslaan)
  • Sluit VCC aan op de 3.3V voeding op de Arduino. Dit is belangrijk omdat deze voeding minder "luidruchtig" is dan de 5V, wat resulteert in betere microfoonmetingen
  • Verbind OUT met een ANALOG IN-pin op de Arduino. Ik heb A0 gebruikt.

Stap 16: Dit zou het eindresultaat moeten zijn

Dit zou het eindresultaat moeten zijn!
Dit zou het eindresultaat moeten zijn!
Dit zou het eindresultaat moeten zijn!
Dit zou het eindresultaat moeten zijn!

Alles zou nu klaar moeten zijn. Hier is een foto van het definitieve diagram en mijn wirwar van draden in werkelijkheid. Laten we eens kijken naar wat code!

Stap 17: Codeer

Ok laten we eens kijken naar de code! Dit is niet mijn schoonste werk, maar het klaart de klus. Ik heb opmerkingen toegevoegd om alles hier uit te leggen, maar wees geduldig. Ik heb hiervoor Arduino IDE gebruikt (gratis beschikbaar op Windows en Mac).

Stel een aantal rotsen (schommels) in om te doen.

Draai de ingestelde afstand voor 1 schommel. Zwaai een bepaald aantal keren.

Kijk tussendoor of je op de knop drukt of luister naar de microfoon om te zien of de motor moet worden ingeschakeld. Je zult de waarden voor snelheid, afstand en microfoongevoeligheid moeten aanpassen. De snelheid van de motor heeft invloed op het volume en het koppel. Hoe sneller de motor gaat, hoe luider hij is en hoe minder koppel je krijgt. De mijne is momenteel bijna stil, dus het is mogelijk om hem te laten werken zonder veel geluid te maken.

#include // "standaard" stappenmotorbibliotheek

//#define DEBUG 1 // verwijder dit commentaar als u microfoonniveaus wilt aanpassen // Knopinstelling - deze komen overeen met waar de digitale pinnen die u op de knoppen hebt aangesloten const int motorEnablePin = 10; const int continuePin = 11; const int micDisablePin = 12; const int micEnablePin = 13; // Mic setup - A0 hier is de analoge ingang voor de microfoon. Voorbeeldvenster is in millis const int micPin = A0; const int sampleWindow = 1000; niet-ondertekend int-monster; bool micEnabled = false; dubbele micGevoeligheid = 0,53; // je zult dit waarschijnlijk moeten veranderen // Voor mij was ongeveer 0,5 goed genoeg om niet te vuren op klein koeren // maar zal vuren voor kleine kreten int stepsPerRevolution = 3200; // verander dit zodat het past bij het aantal stappen per omwenteling voor uw motor // Mijn motor is 200 stappen/omwenteling // Maar ik heb de driver ingesteld op 1/16 microstappen // dus 200*16 = 3200… eerlijk gezegd geen idee of dit is de juiste manier // om dit te doen Stepper myStepper(stepsPerRevolution, 2, 3); // 2 & 3 zijn de DIR & STEP-pinnen int stepCount = 0; int motorSnelheid = 95; // je moet dit aanpassen aan het gewicht van je wieg en baby int numSteps = 90; // De afstand die de motor zal afleggen. // U moet dit aanpassen op basis van de straal van het wiel dat u // aan uw motor bevestigt. Dit en snelheid zullen waarschijnlijk vallen en opstaan. // Opmerking - hogere snelheid op stappenmotoren = lager effectief koppel // Als u niet genoeg koppel heeft, zal uw motor stappen overslaan (niet bewegen) int oldmotorButtonValue = HIGH; bool ingeschakeld = false; // motor ingeschakeld? int loopStartValue = 0; int maxRocks = 100; // hoe vaak je wilt dat het rockt voordat je int rockCount = 0 uitschakelt; void setup() { #ifdef DEBUG Serial.begin (9600); // voor debug-logging #endif pinMode (motorEnablePin, INPUT_PULLUP); // Dit is een instelling voor de knoppen om te werken zonder power pinMode (continuePin, INPUT_PULLUP); pinMode (micEnablePin, INPUT_PULLUP); pinMode (micDisablePin, INPUT_PULLUP); myStepper.setSpeed(motorSpeed); // stelt de motorsnelheid in op wat u eerder hebt opgegeven} void loop () {int motorButtonValue = digitalRead (motorEnablePin); // digitalRead leest alleen knopwaarden int continueValue = digitalRead (continuePin); // Dit detecteert het indrukken van de motorknop en voorkomt dat deze meer dan één keer per klik wordt geactiveerd if (motorButtonValue == HIGH && oldmotorButtonValue == LOW) { enabled = !enabled; } micCheck(); // Als de motor uit staat en de microfoon aan staat, luister dan of de baby huilt if(!enabled && micEnabled) { if(getMicReading() >= micSensitivity) enabled = true; } if (ingeschakeld) { stepsPerRevolution = stepsPerRevolution * -1; //omgekeerde richting // Met mijn setup is het effectiever om achteruit te gaan op // de eerste swing. Je kunt dit na de lus plaatsen // als dat niet het geval is voor de jouwe // draai de motor de hierboven gespecificeerde afstand voor (int i = loopStartValue; i < numSteps; i++) { // check for turn off int tempmotorButtonValue = digitalRead (motorEnablePin); if (tempmotorButtonValue! = motorButtonValue) { rockCount = 0; // Deze volgende twee regels "slaan" de motorpositie op, zodat hij de volgende keer dat u hem aanzet // blijft reizen alsof u hem niet had uitgeschakeld. Dit voorkomt het afwerpen van // je bewegingsafstanden loopStartValue = i; // bewaar positie stepsPerRevolution = stepsPerRevolution * -1; // handhaaf richting oldmotorButtonValue = tempmotorButtonValue; pauze; } checkContinue(continueValue); // controleer of de knop Doorgaan is ingedrukt micCheck (); myStepper.step (stepsPerRevolution / 50); // hoeveel stappen je per lus moet nemen, // je moet dit mogelijk aanpassen // zorg ervoor dat we de volledige lusafstand voortzetten als de lus is voltooid // dit speelt een rol als je de motor zelf hebt uitgeschakeld en het de position if(i == numSteps - 1) { loopStartValue = 0; } } } vertraging (100); // pauzeer 100 millis voordat je de volgende steen doet. Je zult dit moeten aanpassen. indien (ingeschakeld) checkComplete(); oldmotorButtonValue = motorButtonValue; // dit wordt gebruikt om dubbelklikken te voorkomen } // Deze code is rechtstreeks van Adafruit. dubbele getMicReading() { unsigned long startMillis = millis(); unsigned int peakToPeak = 0; // piek-tot-piek niveau unsigned int signalMax = 0; unsigned int signalMin = 1024; while (millis() - startMillis <sampleWindow) { micCheck(); if (digitalRead (motorEnablePin) == LAAG) ingeschakeld = waar; voorbeeld = analogRead (micPin); if (monster signaalMax) { signaalMax = monster; // sla alleen de maximale niveaus op } else if (voorbeeld = maxRocks) { ingeschakeld = onwaar; rotstelling = 0; // keer terug naar de middelste positie

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

myStepper.step (stepsPerRevolution * -1 / 50); // stap 1/100 van een omwenteling:

}

} }

Stap 18: Montage en wielconfiguratie

Montage en wielconfiguratie
Montage en wielconfiguratie

Dit is nog steeds een WIP voor mij, want zoals ik al zei, ik weet nog niet zeker of ik schroeven in mijn wieg wil zetten. De manier waarop ik de mijne heb opgetuigd is als volgt:

  • Plaats een klem om te fungeren als een arm die van de wieg komt, zodat mijn wiel in een rechte lijn kan trekken
  • Een ruwe doos in elkaar geschroefd om de motor in te zetten, en die op een grondplaat geschroefd, die ik aan de wiegpoot vastklemde
  • Een op maat gemaakt houten katrolwiel met een gat om het kleine stappenwieltje erin te passen. Ik heb het middelste gat erg strak gemaakt en gewoon in het stappenwiel gehamerd. Ik boorde een gat door het wiel naar het midden, zodat ik toegang had tot de schroef op het metalen katrolwiel om het op de stappenmotor vast te draaien.
  • Leidde een touwtje van de wieg "arm" naar het wiel. Ik maakte het touwtje vast door het door het gat te halen dat ik had geboord en het gewoon op zijn plaats te plakken.

De betere oplossing voor de 3e stap is om gewoon een katrolwiel met een grotere diameter te kopen. De mijne heeft een diameter van iets minder dan 3 in de groef en werkt heel goed voor mijn specifieke wieg.

Mijn eerste versie gebruikte een arm in plaats van een wiel. Het werkte lang niet zo goed omdat de kracht niet in een consistente richting werd uitgeoefend, en het was ook erg vatbaar om eraf te worden gegooid als de startpositie niet correct was. Het gebruik van een wiel lost deze problemen op. Ik vermaakte me ook met het gebruik van een klein katrolsysteem, maar dat was uiteindelijk niet nodig omdat mijn wiel me voldoende koppel gaf.

Stap 19: Definitieve installatie

Definitieve installatie
Definitieve installatie

Monteer de microfoon dicht bij je kind, maar op een plaats waar ze geen draden raken. Plaats de knoppen waar je maar wilt, zolang je genoeg draden hebt om naar de eindbestemming te rennen. Je kunt de knoppen ook gewoon vervangen door een wifi-setup op de arduino, maar zo diep ben ik nog niet gegaan. Veel succes daar!

Aanbevolen: