Sommario:

Arduino Cradle Rocker: 19 passaggi (con immagini)
Arduino Cradle Rocker: 19 passaggi (con immagini)

Video: Arduino Cradle Rocker: 19 passaggi (con immagini)

Video: Arduino Cradle Rocker: 19 passaggi (con immagini)
Video: Omens Above | Critical Role | Campaign 3, Episode 19 2024, Dicembre
Anonim
Image
Image

Scusa, non ho potuto resistere alla musica sdolcinata e intensa suggerita dalla mia cosa di editing video.

Di recente ho avuto il mio primo figlio e avevo già una culla di legno che mio zio (che è un falegname fantastico) ha realizzato per mio nipote. Mio nipote l'aveva da tempo superato, quindi ero felice di prenderlo ed evitare di spendere TUTTI I SOLDI su qualunque culla/culla le mamme blogger abbiano fatto svenire mia moglie. La culla è un design piuttosto semplice, fondamentalmente due montanti con bulloni attraverso di loro che supportano il corpo della culla. C'è un piolo rimovibile per bloccarlo in posizione.

Nel giro di poche settimane abbiamo scoperto che spesso potevamo sedare una leggera pignoleria scuotendo un po' la culla finché il nostro ragazzo non si fosse calmato. La notte in cui l'abbiamo scoperto, ho passato alcuni minuti di stretching a tarda notte con il braccio che si allungava da sotto le coperte, cullandolo assonnato, felice di aver trovato un modo per calmarlo senza alzarmi dal letto. Stamattina ho attaccato una corda e un moschettone per poter dondolare la culla senza dover allungare il braccio.

La mattina dopo, ho iniziato a pensare a un modo per avere un robot che scuotesse questo ragazzo per me. Entra nell'Arduino…

Forniture

Ok, questo è stato il mio primo progetto Arduino in assoluto, quindi ho fatto alcuni esperimenti e tentativi ed errori, e sono sicuro che ci sia spazio per miglioramenti nel mio design, ma ecco la mia lista delle parti: Arduino Uno ($ 13) per controllare tutto Una breadboard kit ($ 10) per collegare i cavi

Il motore passo-passo ($ 14) Questo è il pezzo più divertente, perché è la cosa che fa tutto il lavoro. Ho iniziato con un driver di coppia leggermente inferiore, ma poi ho preso questo e funziona abbastanza bene. Sentiti libero di ottenerne uno ancora più potente. Driver per motori passo-passo ($ 10-30) Si trova tra Arduino e il motore. Questo specifico è apparentemente in grado di guidare il motore più silenziosamente di altri, quindi l'ho scelto poiché il motore sarà a pochi metri dalla mia testa (e di mio figlio) mentre dormiamo. Inizialmente ho appena acquistato un driver TMC2209 per ~ $ 10, ma alla fine ho acquistato un pacchetto di 4 perché all'inizio ho avuto qualche difficoltà e volevo assicurarmi di non aver fritto la scheda a un certo punto. Alla fine ho effettivamente ucciso 3 schede, il che mi porta al mio prossimo elemento… Condensatori! ($ 10) Hai davvero solo bisogno di 1 condensatore da 47 uF 50 V, quindi questa scatola da 240 era davvero eccessiva. Un alimentatore da 36 V ($ 17) Inizialmente ho comprato un misero alimentatore da 12 V, poi ho scoperto che era la fonte di tutti i miei problemi e ne ho preso uno più vicino alla tensione massima che il mio motore passo-passo poteva gestire. Se utilizzi un motore o un driver passo-passo diverso, assicurati che possa sopportare la tensione (V) e che l'Amperaggio (A) dell'alimentazione sia almeno pari agli Ampere di picco assorbiti dal motore. Prese jack di alimentazione femmina ($8) Questo è ciò a cui si collega l'alimentatore. Dovrai saldarli a dei fili per attaccarli alla tua breadboard. Un grande pacchetto di ponticelli ($ 9) in modo da poter posizionare i controlli dove volevo nella stanza.

Pulsanti ($8) per accensione/spegnimento, ecc

Un amplificatore per microfono ($ 11) Oh, non sapevate che anche questo fosse attivato dal suono?

Alcune piccole pulegge ($ 8) ho finito per usarle, ma potrebbero esserci alternative migliori. Ne parleremo più avanti. Avrai anche sicuramente bisogno di un saldatore e di qualsiasi cosa tu voglia usare per montare il motore. Personalmente ho appena realizzato una scatola grezza con 4 pezzi di legno avvitati insieme, e poi li ho avvitati a un altro pezzo di legno che è all'incirca della larghezza della mia gamba della culla. Per ora l'ho solo bloccato perché non so se voglio rovinare la culla di mio zio.

Passaggio 1: familiarizzare con il pinout del driver stepper

Collega Arduino 5V/GND alla tua breadboard
Collega Arduino 5V/GND alla tua breadboard

Il programma di modellazione che ho usato non aveva questa scheda driver esatta, quindi dovrai fare riferimento a questa immagine. Ho sistemato tutto con lo stesso orientamento di questa immagine.

Passaggio 2: collega Arduino 5V/GND alla breadboard

Collega un filo dall'Arduino 5V al binario "+" su un lato della breadboardCollega un filo da uno dei GND Arduino al binario "-" sullo stesso lato della breadboard

(ignora il

Passaggio 3: collegare i binari +/- a VIO/GND

Collega i binari +/- a VIO/GND
Collega i binari +/- a VIO/GND

Collegare un cavo dalla guida "-" a GND in basso a sinistra della scheda del driver passo-passo. Collegare un cavo dalla guida "+" a VIO

Passaggio 4: collegare DIR/STEP ai pin digitali su Arduino

Collega DIR/STEP ai pin digitali di Arduino
Collega DIR/STEP ai pin digitali di Arduino

Collega i pin DIR e STEP dalla scheda del driver dello stepper a due dei pin digitali dell'Arduino. Ho usato i pin 2 e 3, rispettivamente, ma non importa fintanto che imposti i pin nel codice in un secondo momento.

Passaggio 5: andiamo avanti e aggiungiamo quel condensatore …

Andiamo avanti e aggiungiamo quel condensatore …
Andiamo avanti e aggiungiamo quel condensatore …

Ho bruciato 2 schede driver stepper perché non avevo un condensatore in posizione, quindi andiamo avanti e aggiungiamo il condensatore 47uF 50V ai pin VM/GND sulla scheda driver. Assicurati che il pin "-" sul condensatore sia nel pin GND sulla breadboard (ci sarà un "-" sul lato corrispondente del condensatore)

Passaggio 6: vai avanti e collega quel GND

E vai avanti e connetti quel GND
E vai avanti e connetti quel GND

Sul GND a cui hai appena aggiunto il condensatore, vai avanti e collegalo allo stesso binario "-" dell'altro GND.

Passaggio 7: collegare il motore al driver

Collegare il motore al driver
Collegare il motore al driver

Quale pin va dove dipenderà dal motore che hai acquistato, ma quello che ho elencato ha lo schema elettrico sull'elenco di Amazon.

Per il mio motore -

Collega Verde e Nero a M2B e M2A

Collega Red & Blue a M1A e M1BNota: se per qualsiasi motivo il tuo motore non ha uno schema, puoi facilmente capire quali fili formano un circuito se hai un multimetro. Imposta il multimetro su un'impostazione di amplificatore basso e disconnetti il motore. Tocca uno dei cavi del multimetro su uno dei cavi del motore, quindi prova ciascuno degli altri cavi con l'altro cavo. Se ottieni una lettura della resistenza, quei due fili formano 1 circuito e gli altri due formano l'altro.

Passaggio 8: collegare EN, MS1 e MS2 a "-"

Collegare EN, MS1 e MS2 a
Collegare EN, MS1 e MS2 a

Non sono del tutto sicuro che ciò sia necessario, ma credo che imposti il motore a un'impostazione microstep più piccola sul driver TMC2209. Puoi collegarli al binario "-" più vicino a loro, poiché lo collegheremo all'altro lato in seguito.

Passaggio 9: saldare un connettore di alimentazione femmina a due fili

Saldare un connettore di alimentazione femmina a due fili
Saldare un connettore di alimentazione femmina a due fili

Non sono il migliore al mondo nella saldatura, quindi dovrai cercare altrove, ma io ho fatto così. Ho piegato le estremità dei cavi in modo che aderissero ai cavi del connettore, quindi ho saldato il cavo al cavo. Non avevo alcun cavo termoretraibile, quindi li ho semplicemente avvolti prodigiosamente con del nastro isolante.

Passaggio 10: collegare il connettore femmina appena saldato

Collega il tuo connettore femmina appena saldato
Collega il tuo connettore femmina appena saldato

Si prega di non collegare ancora l'alimentatore effettivo. Filo rosso su "+", nero su "-"

Passaggio 11: collegali a VM/GND

Collegali a VM/GND
Collegali a VM/GND

Collega i binari "+" e "-" alla VM e al GND accanto ad essa. Quelli con il condensatore sopra.

Passaggio 12: ammira il tuo lavoro

Ammira il tuo lavoro
Ammira il tuo lavoro

Bene, ora hai il motore e il driver completamente configurati! Da qui in avanti faremo solo controlli. A proposito, andando avanti:

  • Se hai scollegato il driver per qualsiasi motivo, non provare a collegarlo mentre l'alimentazione a 36 V è collegata. Ho ucciso la mia terza scheda driver in quel modo.
  • Collegare l'alimentazione a 36 V prima di collegare l'alimentazione di Arduino. Non ho fritto personalmente un Arduino, ma lungo la strada ho visto molti avvertimenti su questo.

Passaggio 13: facoltativo: controlla il tuo VREF

Il TMC2209 ha un potenziometro che controlla la corrente al motore. Se hai lo stesso driver che ho io, puoi leggerlo qui. Se vuoi modificare l'impostazione:

  • Scollegare tutta l'alimentazione e scollegare i cavi del motore dal driver.
  • Scollegare il cavo dal pin EN (abilita) sul driver. Questo è il pin nell'angolo in alto a sinistra.
  • Collega l'alimentatore del tuo motore (quello da 36V)
  • Usando un multimetro impostato su 20V, tocca un cavo a una sorgente di GND (ho usato un cavo collegato alla mia guida "-") e tocca l'altro cavo al pin VREF. Si prega di non toccare il cavo a nient'altro, è possibile cortocircuitare il driver se lo si fa.
  • Utilizzare un piccolo cacciavite per regolare delicatamente la vite del potenziometro. Per la mia scheda, in senso antiorario = più potenza. Il mio VREF legge personalmente ~ 0.6V.

Passaggio 14: pulsanti

Bottoni!
Bottoni!

Quindi, collega i tuoi pulsanti in questo modo. Non hanno bisogno di energia.

  • Collega un binario "-" della breadboard del tuo pulsante a uno dei GND di Arduino. Se lo desideri, puoi anche semplicemente concatenarlo dalla guida "-" dell'altra breadboard.
  • Collegare un pin di ciascun pulsante alla guida "-"
  • Collega un altro pin di ciascun pulsante a un pin digitale su Arduino.

Ho usato 4 pulsanti: motore acceso/spento

Motore continua

Microfono acceso

Microfono spento

Maggiori informazioni su questi quando arriviamo al codice, ma ho usato pulsanti del microfono distinti semplicemente perché non avevo i LED per farmi sapere se il microfono era acceso o spento, quindi avere pulsanti di accensione/spegnimento distinti lo rendeva infallibile.

Passaggio 15: aggiungere la scheda del microfono

Aggiungi la scheda del microfono
Aggiungi la scheda del microfono

Questo è semplice e Adafruit ha buone istruzioni (e basi di saldatura!) qui.

  • Collega "-" a un GND
  • Collega GND sulla scheda del microfono a "-" (puoi collegare direttamente GND a GND e saltare il passaggio precedente, davvero)
  • Collega VCC all'alimentazione a 3,3 V su Arduino. Questo è importante in quanto questo alimentatore è meno "rumoroso" del 5V, con conseguenti letture del microfono migliori
  • Collega OUT a un pin ANALOG IN su Arduino. Ho usato A0.

Passaggio 16: questo dovrebbe essere il risultato finale

Questo dovrebbe essere il risultato finale!
Questo dovrebbe essere il risultato finale!
Questo dovrebbe essere il risultato finale!
Questo dovrebbe essere il risultato finale!

Tutto dovrebbe essere pronto ora. Ecco un'immagine dello schema finale e del mio guazzabuglio di fili nella realtà. Diamo un'occhiata a un po' di codice!

Passaggio 17: codice

Ok diamo un'occhiata al codice! Questo non è il mio lavoro più pulito, ma fa il suo lavoro. Ho aggiunto commenti per spiegare tutto qui, ma abbi pazienza. Ho usato Arduino IDE per tutto questo (disponibile su Windows e Mac gratuitamente) Il jist è questo: imposta una velocità del motore e la distanza per girare.

Imposta un numero di rocce (altalene) da fare.

Ruota la distanza impostata per 1 swing. Oscillare un determinato numero di volte.

Nel frattempo, osserva la pressione dei pulsanti o ascolta il microfono per vedere se il motore deve accendersi. Dovrai regolare i valori di velocità, distanza e sensibilità del microfono. La velocità del motore influenzerà il volume e la coppia. Più veloce è il motore, più rumoroso è e minore è la coppia che ottieni. Il mio è attualmente quasi silenzioso, quindi è possibile farlo funzionare senza fare molto rumore.

#include // libreria di motori passo-passo "standard"

//#define DEBUG 1 // togli il commento quando vuoi regolare i livelli del microfono // Configurazione dei pulsanti - questi corrispondono a dove i pin digitali che hai collegato ai pulsanti const int motorEnablePin = 10; const int continuePin = 11; const int micDisablePin = 12; const int micEnablePin = 13; // Mic setup - A0 ecco l'ingresso analogico per il microfono. La finestra di esempio è in millis const int micPin = A0; const int sampleWindow = 1000; campione int non firmato; bool micEnabled = false; doppio microfono Sensibilità = 0,53; // probabilmente dovrai cambiarlo // Per me, intorno a 0,5 è stato sufficiente per non sparare con un piccolo tubare // ma si accenderà per piccoli gridi int stepsPerRevolution = 3200; // cambia questo per adattarlo al numero di passi per giro del tuo motore // Il mio motore è 200 passi/giro // Ma ho impostato il driver su 1/16 micropassi // quindi 200*16 = 3200… onestamente non ho idea se questo è il modo corretto // per fare questo Stepper myStepper(stepsPerRevolution, 2, 3); // 2 e 3 sono i pin DIR e STEP int stepCount = 0; int velocità motore = 95; // dovrai regolarlo in base al peso della culla e del bambino int numSteps = 90; // La distanza percorsa dal motore. // Dovrai regolarlo in base al raggio della ruota che attacchi // al tuo motore. Questo e la velocità saranno probabilmente tentativi ed errori. // Nota: maggiore velocità sui motori passo-passo = minore coppia effettiva // Se non si dispone di una coppia sufficiente, il motore salterà i passaggi (non si sposterà) int oldmotorButtonValue = HIGH; bool abilitato = falso; // motore abilitato? int loopStartValue = 0; int maxRocks = 100; // quante volte vuoi che oscilli prima di disattivare int rockCount = 0; void setup() { #ifdef DEBUG Serial.begin(9600); // per la registrazione del debug #endif pinMode(motorEnablePin, INPUT_PULLUP); // Questa è un'impostazione per il funzionamento dei pulsanti senza alimentazione pinMode(continuePin, INPUT_PULLUP); pinMode(micEnablePin, INPUT_PULLUP); pinMode(micDisablePin, INPUT_PULLUP); myStepper.setSpeed(motorSpeed); // imposta la velocità del motore su quanto specificato in precedenza } void loop() { int motorButtonValue = digitalRead(motorEnablePin); // digitalRead legge solo i valori del pulsante int continueValue = digitalRead(continuePin); // Questo rileva la pressione del pulsante del motore e ne impedisce l'attivazione più di una volta per clic if (motorButtonValue == HIGH && oldmotorButtonValue == LOW) { abilitato = !abilitato; } micCheck(); // Se il motore è spento e il microfono è acceso, ascolta il pianto del bambino if(!enabled && micEnabled) { if(getMicReading() >= micSensitivity) enabled = true; } if (abilitato) { stepsPerRevolution = stepsPerRevolution * -1; //direzione inversa // Con la mia configurazione è più efficace invertire // il primo swing. Puoi metterlo dopo il ciclo // se questo non è il tuo caso // fai girare il motore alla distanza specificata sopra for(int i = loopStartValue; i < numSteps; i++){ // controlla se spegni int tempmotorButtonValue = digitalRead(motorEnablePin); if(tempmotorButtonValue != motorButtonValue) { rockCount = 0; // Queste due righe successive "salvano" la posizione del motore, così che la prossima volta che lo accendi // continuerà a viaggiare come se non lo avessi spento. Ciò impedisce il lancio // delle distanze di movimento loopStartValue = i; // salva la posizione stepsPerRevolution = stepsPerRevolution * -1; // mantiene la direzione oldmotorButtonValue = tempmotorButtonValue; rottura; } checkContinue(continueValue); // controlla se il pulsante continua è stato premuto micCheck(); myStepper.step(stepsPerRevolution / 50); // quanti passi fare per loop, // potresti aver bisogno di regolarlo // assicurati di continuare l'intera distanza del loop se il loop è finito // questo entra in gioco se hai spento il motore da solo e ha "salvato" il posizione if(i == numSteps - 1) { loopStartValue = 0; } } } ritardo(100); // metti in pausa 100 millis prima di eseguire il rock successivo. Dovrai regolare questo. if (abilitato) checkComplete(); oldmotorButtonValue = motorButtonValue; // questo è usato per prevenire i doppi clic } // Questo codice è direttamente da Adafruit. double getMicReading() { unsigned long startMillis = millis(); unsigned int peakToPeak = 0; // livello picco-picco unsigned int signalMax = 0; segnale int senza segnoMin = 1024; while (millis() - startMillis < sampleWindow) { micCheck(); if (digitalRead(motorEnablePin) == LOW) abilitato = vero; campione = analogRead(micPin); if (campione segnaleMax) { segnaleMax = campione; // salva solo i livelli massimi } else if (esempio = maxRocks) { abilitato = falso; rockCount = 0; // ritorno alla posizione centrale

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

mioStepper.step(stepsPerRevolution * -1 / 50); // passo 1/100 di giro:

}

} }

Passaggio 18: montaggio e configurazione delle ruote

Montaggio e configurazione delle ruote
Montaggio e configurazione delle ruote

Questo è ancora un WIP per me, perché come ho detto non sono ancora sicuro di voler mettere le viti nella mia culla. Il modo in cui ho truccato il mio è il seguente:

  • Metti un morsetto che funga da braccio che si stacca dalla culla in modo che la mia ruota possa tirare in linea retta
  • Ho avvitato una scatola grezza per mettere il motore e l'ho avvitato a una piastra di base, che ho fissato alla gamba della culla
  • Realizzata una puleggia in legno personalizzata con un foro per adattarsi alla piccola puleggia stepper all'interno. Ho fatto il foro centrale molto stretto e ho appena martellato la ruota della puleggia dello stepper. Ho praticato un foro attraverso la ruota al centro in modo da poter accedere alla vite sulla puleggia metallica per serrarla sul motore passo-passo.
  • Ha eseguito una corda dal "braccio" della culla alla ruota. Ho fissato la corda facendola passare attraverso il foro che avevo praticato e fissandola semplicemente in posizione.

La soluzione migliore per il 3° passaggio consiste nell'acquistare semplicemente una puleggia di diametro maggiore in primo luogo. Il mio ha un diametro di poco meno di 3 pollici all'interno della scanalatura e funziona davvero bene per la mia culla particolare.

La mia prima versione usava un braccio invece di una ruota. Non ha funzionato altrettanto bene perché la forza non veniva applicata in una direzione coerente, ed era anche molto suscettibile di essere buttato fuori se la posizione di partenza non era corretta. L'uso di una ruota risolve questi problemi. Mi sono anche divertito usando un piccolo sistema di pulegge, ma alla fine non ne ho avuto bisogno perché la mia ruota mi ha dato una coppia sufficiente.

Passaggio 19: configurazione finale

Configurazione finale
Configurazione finale

Monta il microfono vicino a tuo figlio, ma in un punto in cui non colpirà alcun cavo. Metti i pulsanti dove vuoi, purché tu abbia abbastanza cavi per arrivare alla destinazione finale. Potresti anche sostituire i pulsanti con una configurazione wifi sull'arduino, ma non sono ancora andato così in profondità. Buona fortuna là fuori!

Consigliato: