Table des matières:

Arduino Cradle Rocker : 19 étapes (avec photos)
Arduino Cradle Rocker : 19 étapes (avec photos)

Vidéo: Arduino Cradle Rocker : 19 étapes (avec photos)

Vidéo: Arduino Cradle Rocker : 19 étapes (avec photos)
Vidéo: Robot Controllers Part 1: PID (with Dr. Christian Hubicki) 2024, Juillet
Anonim
Image
Image

Désolé, je n'ai pas pu résister à la musique intense et ringard que mon truc de montage vidéo suggérait.

J'ai récemment eu mon premier enfant et j'avais déjà un berceau en bois que mon oncle (qui est un excellent menuisier) a fabriqué pour mon neveu. Mon neveu l'avait depuis longtemps dépassé, alors j'étais heureux de le prendre et d'éviter de dépenser TOUT L'ARGENT sur le berceau / le berceau sur lequel les mamans blogueuses avaient fait s'évanouir ma femme. Le berceau est une conception assez simple, essentiellement deux montants avec des boulons à travers eux qui soutiennent le corps du berceau. Il y a une cheville amovible pour le verrouiller en place.

En quelques semaines, nous avons découvert que nous pouvions souvent apaiser une légère agitation en secouant un peu le berceau jusqu'à ce que notre garçon s'installe. La nuit où nous avons découvert cela, j'ai passé quelques étirements de 10 minutes tard dans la nuit avec mon bras tendu sous les couvertures, le berçant endormi, heureux d'avoir trouvé un moyen de le calmer sans sortir du lit moi-même. matin, j'ai attaché une ficelle et un petit mousqueton pour pouvoir bercer le berceau sans avoir à tendre le bras.

Le lendemain matin, j'ai commencé à réfléchir à un moyen d'avoir un robot qui berce ce gamin pour moi. Entrez dans l'Arduino…

Fournitures

Ok, c'était mon premier projet Arduino, j'ai donc fait quelques expérimentations et essais et erreurs, et je suis sûr qu'il y a place à l'amélioration de ma conception, mais voici ma liste de pièces: Arduino Uno (13 $) pour tout contrôler Une planche à pain kit (10 $) pour les fils de connexion

Le moteur pas à pas (14 $) C'est la pièce la plus amusante, car c'est la chose qui fait tout le travail. J'ai commencé avec un pilote à couple légèrement inférieur, mais j'ai ensuite obtenu celui-ci et il fonctionne plutôt bien. N'hésitez pas à en obtenir un encore plus puissant. Pilotes de moteur pas à pas (10-30 $) Il se situe entre l'Arduino et le moteur. Celui-ci est apparemment capable de conduire le moteur plus silencieusement que d'autres, alors je l'ai choisi car le moteur va être à quelques mètres de ma tête (et de celle de mon fils) pendant que nous dormons. Au départ, je venais d'acheter un pilote TMC2209 pour environ 10 $, mais j'ai fini par acheter un pack de 4 parce que j'avais des difficultés au début et que je voulais m'assurer que je n'avais pas fait frire la carte à un moment donné. J'ai fini par tuer 3 cartes, ce qui m'amène à mon prochain élément… Condensateurs ! (10 $) Vous n'avez vraiment besoin que d'un condensateur de 47 uF 50 V, donc cette boîte de 240 était bien excessive. Une alimentation 36 V (17 $) J'ai d'abord acheté une alimentation 12 V chétive, puis j'ai découvert que c'était la source de tous mes problèmes et j'en ai obtenu un qui était plus proche de la tension maximale que mon moteur pas à pas pouvait supporter. Si vous utilisez un autre moteur ou pilote pas à pas, assurez-vous qu'il peut supporter la tension (V) et que l'ampérage (A) de l'alimentation est au moins aussi élevé que les ampères de crête tirés par le moteur. $8) C'est ce que l'alimentation se branche. Vous devrez les souder à des fils à coller dans votre planche à pain. Un gros paquet de cavaliers (9 $) pour que je puisse placer les commandes où je veux dans la pièce.

Boutons (8 $) pour marche/arrêt, etc.

Un ampli micro (11 $) Oh, vous ne saviez pas que c'était aussi activé par le son ?

J'ai fini par les utiliser avec quelques petites roues de poulie (8 $), mais il pourrait y avoir de meilleures alternatives. Plus d'informations à ce sujet plus tard. Vous aurez également certainement besoin d'un fer à souder et de tout ce que vous souhaitez utiliser pour monter le moteur. Personnellement, je viens de fabriquer une boîte grossière à partir de 4 morceaux de bois vissés ensemble, puis je les ai vissés à un autre morceau de bois qui fait à peu près la largeur de la jambe de mon berceau. Pour l'instant je l'ai juste bridé car je ne sais pas si je veux abîmer le berceau de mon oncle.

Étape 1: Familiarisez-vous avec le brochage de votre pilote pas à pas

Câblez Arduino 5V/GND à votre planche à pain
Câblez Arduino 5V/GND à votre planche à pain

Le programme de modélisation que j'ai utilisé n'avait pas cette carte de pilote exacte, vous devrez donc référencer cette image. J'ai tout arrangé dans la même orientation que cette image.

Étape 2: Câblez Arduino 5V/GND à votre planche à pain

Connectez un fil de l'Arduino 5V au rail "+" d'un côté de votre planche à painConnectez un fil de l'un des Arduino GND au rail "-" du même côté de la planche à pain

(ignore le

Étape 3: connectez les rails +/- à VIO/GND

Connectez les rails +/- à VIO/GND
Connectez les rails +/- à VIO/GND

Connectez un fil du rail "-" à GND en bas à gauche de la carte du pilote pas à pas. Connectez un fil du rail "+" à VIO

Étape 4: Connectez DIR/STEP aux broches numériques sur l'Arduino

Connectez DIR/STEP aux broches numériques sur l'Arduino
Connectez DIR/STEP aux broches numériques sur l'Arduino

Connectez les broches DIR et STEP de la carte de pilote pas à pas à deux des broches numériques de l'Arduino. J'ai utilisé les broches 2 et 3, respectivement, mais cela n'a pas d'importance tant que vous définissez les broches dans votre code plus tard.

Étape 5: Allons de l'avant et ajoutons ce condensateur…

Allons de l'avant et ajoutons ce condensateur…
Allons de l'avant et ajoutons ce condensateur…

J'ai brûlé 2 cartes de pilote pas à pas parce que je n'avais pas de condensateur en place, alors allons-y et ajoutons le condensateur 47uF 50V aux broches VM/GND de la carte de pilote. Assurez-vous que la broche "-" sur le condensateur est dans la broche GND sur la planche à pain (il y aura un "-" sur le côté correspondant du condensateur)

Étape 6: Et allez-y et connectez ce GND

Et allez-y et connectez ce GND
Et allez-y et connectez ce GND

Sur le GND auquel vous venez d'ajouter le condensateur, connectez-le au même rail "-" que l'autre GND.

Étape 7: connectez le moteur au pilote

Connectez le moteur au pilote
Connectez le moteur au pilote

Quelle broche va où dépendra du moteur que vous avez acheté, mais celui que j'ai répertorié a le schéma de câblage sur la liste amazon.

Pour mon moteur -

Connectez le vert et le noir à M2B et M2A

Connectez le rouge et le bleu à M1A et M1BRemarque: si, pour une raison quelconque, votre moteur n'a pas de schéma, vous pouvez facilement déterminer quels fils forment un circuit si vous avez un multimètre. Réglez votre multimètre sur un réglage d'intensité faible et déconnectez votre moteur. Touchez l'un des fils du multimètre à l'un des fils du moteur, puis essayez chacun des autres fils avec l'autre fil. Si vous obtenez une lecture de résistance, alors ces deux fils forment 1 circuit et les deux autres forment l'autre.

Étape 8: Connectez EN, MS1 et MS2 à "-"

Connectez EN, MS1 et MS2 à
Connectez EN, MS1 et MS2 à

Je ne suis pas tout à fait sûr que cela soit nécessaire, mais je pense que cela règle le moteur sur un réglage de micropas plus petit sur le pilote TMC2209. Vous pouvez les connecter au rail "-" le plus proche d'eux, car nous le connecterons à l'autre côté plus tard.

Étape 9: soudez un connecteur d'alimentation femelle à deux fils

Souder un connecteur d'alimentation femelle à deux fils
Souder un connecteur d'alimentation femelle à deux fils

Je ne suis pas le meilleur au monde en soudure, vous devrez donc chercher ailleurs, mais j'ai fait le mien comme ça. J'ai plié les extrémités des fils pour qu'ils reposent à plat contre les fils du connecteur, puis j'ai soudé le fil au fil. Je n'avais pas de matériel thermorétractable pour cordon, alors je les ai juste enveloppés prodigieusement avec du ruban électrique.

Étape 10: connectez votre connecteur femelle nouvellement soudé

Connectez votre connecteur femelle nouvellement soudé
Connectez votre connecteur femelle nouvellement soudé

Veuillez ne pas encore brancher votre alimentation actuelle. Fil rouge vers "+", noir vers "-"

Étape 11: Connectez-les à VM/GND

Connectez-les à VM/GND
Connectez-les à VM/GND

Connectez ces rails "+" et "-" à la VM et au GND à côté. Ceux avec le condensateur dessus.

Étape 12: Admirez votre travail

Admirez votre travail
Admirez votre travail

Très bien, vous avez maintenant le moteur et le pilote complètement configurés ! À partir de maintenant, nous ne ferons que des contrôles. Au fait, pour la suite:

  • Si vous avez déconnecté votre pilote pour une raison quelconque, n'essayez pas de le connecter pendant que votre alimentation 36V est branchée. J'ai tué ma 3ème carte de pilote comme ça.
  • Branchez l'alimentation 36V avant de brancher l'alimentation Arduino. Personnellement, je n'ai pas fait frire un Arduino, mais en cours de route, j'ai vu de nombreux avertissements à ce sujet.

Étape 13: Facultatif - Vérifiez votre VREF

Le TMC2209 possède un potentiomètre qui contrôle le courant vers le moteur. Si vous avez le même pilote que moi, vous pouvez lire à ce sujet ici. Si vous souhaitez ajuster le paramètre:

  • Débranchez toute l'alimentation et débranchez les fils du moteur du pilote.
  • Débranchez le fil de la broche EN (activer) sur le pilote. Il s'agit de l'épingle dans le coin supérieur gauche.
  • Branchez l'alimentation de votre moteur (le 36V)
  • À l'aide d'un multimètre réglé sur 20V, touchez un fil à une source de GND (j'ai utilisé un fil connecté à mon rail "-") et touchez l'autre fil à la broche VREF. S'il vous plaît, ne touchez à rien d'autre, vous POUVEZ court-circuiter votre chauffeur si vous le faites.
  • Utilisez un petit tournevis pour régler doucement la vis du potentiomètre. Pour ma planche, sens antihoraire = plus de puissance. Mon VREF lit personnellement ~ 0.6V.

Étape 14: boutons

Boutons!
Boutons!

Ensuite, connectez vos boutons comme ça. Ils n'ont pas besoin d'électricité.

  • Connectez un rail "-" de votre planche à pain à l'un des GND de l'Arduino. Vous pouvez également simplement l'enchaîner du rail "-" de l'autre maquette si vous le souhaitez.
  • Connectez une broche de chaque bouton au rail "-"
  • Connectez une autre broche de chaque bouton à une broche numérique sur l'Arduino.

J'ai utilisé 4 boutons: Moteur marche/arrêt

Moteur continuer

Micro activé

Micro désactivé

Plus d'informations sur ceux-ci lorsque nous arrivons au code, mais j'ai utilisé des boutons de microphone distincts simplement parce que je n'avais pas de LED pour me faire savoir si le micro était allumé ou éteint, donc avoir des boutons marche/arrêt distincts le rendait infaillible.

Étape 15: ajouter la carte microphone

Ajouter la carte microphone
Ajouter la carte microphone

Celui-ci est simple, et Adafruit a de bonnes instructions (et les bases de la soudure !) ici.

  • Connectez "-" à un GND
  • Connectez GND sur la carte micro à "-" (vous pouvez connecter directement GND à GND et sauter l'étape précédente, vraiment)
  • Connectez VCC à l'alimentation 3,3 V de l'Arduino. Ceci est important car cette alimentation est moins "bruyante" que le 5V, ce qui permet de meilleures lectures du microphone
  • Connectez OUT à une broche ANALOG IN sur l'Arduino. J'ai utilisé A0.

Étape 16: Cela devrait être le résultat final

Cela devrait être le résultat final !
Cela devrait être le résultat final !
Cela devrait être le résultat final !
Cela devrait être le résultat final !

Tout devrait être prêt maintenant. Voici une photo du schéma final et mon fouillis de fils en réalité. Regardons un peu de code !

Étape 17: Codez

Ok, regardons le code ! Ce n'est pas mon travail le plus propre, mais il fait le travail. J'ai ajouté des commentaires pour tout expliquer ici, mais soyez indulgents avec moi. J'ai utilisé l'IDE Arduino pour tout cela (disponible gratuitement sur Windows et Mac).

Définissez un certain nombre de roches (balançoires) à faire.

Tournez la distance définie pour 1 swing. Swing un certain nombre de fois.

Entre tout cela, surveillez les pressions sur les boutons ou écoutez le microphone pour voir si le moteur doit s'allumer. Vous devrez ajuster les valeurs de vitesse, de distance et de sensibilité du micro. La vitesse du moteur affectera le volume et le couple. Plus le moteur va vite, plus il est fort et moins vous obtenez de couple. Le mien est actuellement presque silencieux, il est donc possible de le faire fonctionner sans faire beaucoup de son.

#include // bibliothèque de moteurs pas à pas "standard"

//#define DEBUG 1 // Décommentez ceci lorsque vous souhaitez ajuster les niveaux du microphone // Configuration des boutons - ceux-ci correspondent à l'endroit où les broches numériques que vous avez connectées aux boutons const int motorEnablePin = 10; const int continuePin = 11; const int micDisablePin = 12; const int micEnablePin = 13; // Configuration du micro - A0 voici l'entrée analogique pour le micro. La fenêtre d'échantillon est en millis const int micPin = A0; const int sampleWindow = 1000; échantillon int non signé; bool micEnabled = false; double sensibilité micro = 0,53; // vous aurez probablement besoin de changer cela // Pour moi, environ.5 était assez bon pour ne pas tirer sur de petits roucoulements // mais se déclenchera pour de petits cris int stepsPerRevolution = 3200; // changez cela pour qu'il corresponde au nombre de pas par tour de votre moteur // Mon moteur fait 200 pas/tour // Mais j'ai réglé le pilote sur 1/16 micropas // donc 200*16 = 3200… honnêtement aucune idée si cela est la bonne manière // de faire ce Stepper myStepper(stepsPerRevolution, 2, 3); // 2 & 3 sont les broches DIR & STEP int stepCount = 0; int motorSpeed = 95; // vous devrez ajuster cela en fonction du poids de votre berceau et de votre bébé int numSteps = 90; // La distance parcourue par le moteur. // Vous devrez ajuster cela en fonction du rayon de la roue que vous attachez // à votre moteur. Ceci et la vitesse seront probablement des essais et des erreurs. // Remarque - vitesse plus élevée sur les moteurs pas à pas = couple effectif inférieur // Si vous n'avez pas assez de couple, votre moteur sautera des étapes (ne bougera pas) int oldmotorButtonValue = HIGH; bool activé = faux; // moteur activé ? int loopStartValue = 0; int maxRocks = 100; // combien de fois vous voulez qu'il bascule avant de s'éteindre int rockCount = 0; void setup() { #ifdef DEBUG Serial.begin (9600); // pour la journalisation du débogage #endif pinMode(motorEnablePin, INPUT_PULLUP); // Ceci est un paramètre pour que les boutons fonctionnent sans alimentation pinMode(continuePin, INPUT_PULLUP); pinMode(micEnablePin, INPUT_PULLUP); pinMode(micDisablePin, INPUT_PULLUP); myStepper.setSpeed(motorSpeed); // définit la vitesse du moteur sur ce que vous avez spécifié précédemment } void loop() { int motorButtonValue = digitalRead(motorEnablePin); // digitalRead lit simplement les valeurs des boutons int continueValue = digitalRead(continuePin); // Ceci détecte la pression sur le bouton du moteur et l'empêche de se déclencher plus d'une fois par clic if (motorButtonValue == HIGH && oldmotorButtonValue == LOW) { enabled = !enabled; } micCheck(); // Si le moteur est éteint et que le micro est allumé, écoutez les pleurs de bébé if(!enabled && micEnabled) { if(getMicReading() >= micSensitivity) enabled = true; } if (activé) { stepPerRevolution = stepPerRevolution * -1; // sens inverse // Avec ma configuration, il est plus efficace d'inverser // le premier swing. Vous pouvez le mettre après la boucle // si ce n'est pas le cas pour le vôtre // faire tourner le moteur la distance spécifiée ci-dessus pour (int i = loopStartValue; i < numSteps; i++) { // vérifier la désactivation int tempmotorButtonValue = digitalRead (motorEnablePin); if(tempmotorButtonValue != motorButtonValue) { rockCount = 0; // Ces deux lignes suivantes "enregistrent" la position du moteur, de sorte que la prochaine fois que vous l'allumerez // il continuera à se déplacer comme si vous ne l'aviez pas éteint. Cela évite de jeter // vos distances de déplacement loopStartValue = i; // sauvegarde de la position stepPerRevolution = stepPerRevolution * -1; // maintient la direction oldmotorButtonValue = tempmotorButtonValue; Pause; } checkContinue(continueValue); // vérifie si le bouton Continuer a été enfoncé micCheck(); myStepper.step(stepsPerRevolution / 50); // combien de pas à faire par boucle, // vous devrez peut-être ajuster ceci // assurez-vous que nous continuons la boucle complète si la boucle est terminée // cela entre en jeu si vous avez éteint le moteur vous-même et qu'il a "sauvé" le position if(i == numSteps - 1) { loopStartValue = 0; } } } délai(100); // pause de 100 millis avant de faire le prochain rock. Vous devrez ajuster cela. if (activé) checkComplete(); oldmotorButtonValue = motorButtonValue; // ceci est utilisé pour éviter les doubles clics } // Ce code provient directement d'Adafruit. double getMicReading() { long startMillis non signé = millis(); int non signé peakToPeak = 0; // niveau crête à crête unsigned int signalMax = 0; int non signé signalMin = 1024; while (millis() - startMillis < sampleWindow) { micCheck(); if (digitalRead(motorEnablePin) == LOW) enabled = true; échantillon = analogRead(micPin); if (sample signalMax) { signalMax = échantillon; // ne sauvegarde que les niveaux maximum } else if (exemple = maxRocks) { activé = faux; rockCount = 0; // retour à la position médiane

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

myStepper.step(stepsPerRevolution * -1 / 50); // pas de 1/100 de tour:

}

} }

Étape 18: Montage et configuration de la roue

Montage et configuration des roues
Montage et configuration des roues

C'est toujours un WIP pour moi, car comme je l'ai dit, je ne suis pas encore sûr de vouloir mettre des vis dans mon berceau. La façon dont j'ai monté le mien est la suivante:

  • Mettre une pince pour agir comme un bras sortant du berceau afin que ma roue puisse tirer en ligne droite
  • J'ai vissé une boîte grossière pour y mettre le moteur et je l'ai vissée sur une plaque de base, que j'ai fixée au pied du berceau
  • Fabriqué une roue de poulie en bois personnalisée avec un trou pour s'adapter à la petite roue de poulie pas à pas à l'intérieur. J'ai fait le trou central très serré et juste malté dans la roue de la poulie pas à pas. J'ai percé un trou dans la roue jusqu'au milieu afin de pouvoir accéder à la vis de la roue de poulie en métal pour la serrer sur le moteur pas à pas.
  • A couru une chaîne du berceau "bras" à la roue. J'ai sécurisé la ficelle en la faisant passer dans le trou que j'avais percé et en la collant simplement en place.

La meilleure solution à la 3ème étape est d'acheter en premier lieu une poulie de plus grand diamètre. Le mien fait un peu moins de 3 de diamètre à l'intérieur de la rainure et fonctionne très bien pour mon berceau particulier.

Ma première version utilisait un bras au lieu d'une roue. Cela n'a pas fonctionné aussi bien parce que la force n'était pas appliquée dans une direction cohérente, et elle était également très susceptible d'être éjectée si la position de départ n'était pas correcte. L'utilisation d'une roue résout ces problèmes. Je me suis aussi amusé à utiliser un petit système de poulie, mais je n'en ai finalement pas eu besoin car ma roue me donnait suffisamment de couple.

Étape 19: Configuration finale

Configuration finale
Configuration finale

Montez le microphone près de votre enfant, mais dans un endroit où il ne touchera aucun fil. Placez les boutons où vous voulez, tant que vous avez suffisamment de fils pour aller jusqu'à la destination finale. Vous pouvez également simplement remplacer les boutons par une configuration wifi sur l'arduino, mais je ne suis pas encore allé aussi loin. Bonne chance!

Conseillé: