Aujourd’hui, nous sommes confrontés à un problème très grave: la condition physique de notre chien Yoshi.
Depuis que nous sommes dans notre boutique, Délicieux pour YoshiL’apport calorique de Yoshi a augmenté de façon disproportionnée.
En fait, nous voulions construire un distributeur de friandises automatisé pour Yoshi bientôt, qui distribuera automatiquement le Don Leckelis, mais ce serait irresponsable si nous ne fournissions pas la condition physique du chien.
Nous devons donc penser à un programme sportif pour Yoshi. Et puis vint l’idée avec le YoshiTrainer 2000!
Avantages:
- J’ai tous les composants nécessaires sur mon bureau
- La programmation est relativement simple que nous ignorons complètement mon dernier blog sur les numéros aléatoires et l’utilisation aléatoire ()
- L’appareil est compatible an 2000
Pour le projet, nous avons besoin:
1x Microcontrôleur AZ-Delivery, compatible avec Arduino Uno R3
2x Moteur Servo par exemple AZ-Livraison Servo MG996R
1x Laser Diode
Alimentation 1x 5V avec une puissance suffisante pour les servos, le laser et l’Uno
Ainsi que quelques rouleaux de ruban isolant VDE et de ruban adhésif recto-verso.
Avertissement laser:
La diode laser utilisée est un laser de classe 1. Selon DIN EN 60825-1, cela signifie : « Le rayonnement laser accessible est inoffensif, ou le laser se trouve dans un boîtier fermé ».
Néanmoins, je recommande l’utilisation de lunettes. En outre, les lasers nécessitent un refroidissement suffisant dans l’utilisation continue.
Je n’ai qu’un seul MG 996R servo, donc j’ai pris notre SG90 pour l’axe Y. C’est beaucoup plus petit, a des engrenages en plastique et a beaucoup moins de puissance.
Nous filons le tout comme suit:
Alimentation 5V 10A |
Planche à pain |
+ |
+ |
- |
- |
Microcontrôleur, compatible avec Arduino Uno R3 |
Planche à pain |
Vin (Vin) |
+ |
Gnd |
Gnd |
Microcontrôleur, compatible avec Arduino Uno R3 |
|
PWM 9 |
Servo 1 Orange |
PWM 10 |
Servo 2 Orange |
PWM 3 |
Laser S |
Servo 1 et 2 Rouge |
Planche à pain |
Servo 1 et 2 Brun |
Planche à pain - |
Laser - |
Planche à pain - |
Voici une photo où vous pouvez voir le câblage:
Alternativement, ici la même chose que schématique:
Maintenant, la programmation est toujours manquante.
J’utilise le servo.h fourni avec l’IDE
Avec "Servo servoX;" et "Servo servoY;" je crée 2 servos nommés ServoX et servoY.
Dans la configuration, je définis ensuite sur quelle épingle la ligne de commande du servo est accrochée, dans notre cas par exemple "servoX.attach(9);" pour servoX.
Maintenant, nous pouvons lire ou définir la position du servo avec les fonctions servoX.read() et servoX.write().
Pour que Yoshi ait une chance d’attraper le point, j’ai tout emballé dans une boucle de temps, avec de petits retards. La variable "spd" peut être utilisée pour accélérer grossièrement la vitesse.
Pour le laser, nous utilisons d’abord la broche comme une sortie en utilisant "pinMode(laserPin, OUTPUT);" et puis l’allumer avec "analogWrite (laserPin, 40);".
Voici le code source complet:
#include <Servo.H (en)> Servo servoX (servoX); Servo servoY; uint8_t tPosX (en) = Aléatoire(0,180); Position cible Servo X uint8_t cPosX (en) = servoX (servoX).Lire(); Position actuelle Servo X uint8_t tPosY (en) = Aléatoire(0,180); Position cible Servo Y uint8_t cPosY (en) = servoY.Lire(); Position cible Servo Y uint8_t Spd = 1; Vitesse Int laserPin = 3; PWM Pin pour diode laser Vide Configuration() { mettre votre code de configuration ici, pour s’exécuter une fois: servoX (servoX).joindre(9); Servo X à Pin 9 servoY.joindre(10); Servo Y à Pin 10 pinMode(laserPin, Sortie); analogWrite (en)(laserPin, 40); laser de luminosité - observez le développement de la chaleur! } Vide Boucle() { tPosX (en) = Aléatoire(45,135); cela permet à la plage entre 0 et 180 degrés d’être cPosX (en) = servoX (servoX).Lire(); Lire la position actuelle tPosY (en) = Aléatoire(120,170); cPosY (en) = servoY.Lire(); Tandis que (tPosX (en) > cPosX (en)){ cPosX (en) += Spd; servoX (servoX).Écrire(cPosX (en)); Retard(50); cPosX (en) = servoX (servoX).Lire(); } Tandis que (tPosX (en) < cPosX (en)){ cPosX (en) -= Spd; servoX (servoX).Écrire(cPosX (en)); Retard(50); cPosX (en) = servoX (servoX).Lire(); } Tandis que (tPosY (en) < cPosY (en)){ cPosY (en) -= Spd; servoY.Écrire(cPosY (en)); Retard(50); cPosX (en) = servoY.Lire(); } Tandis que (tPosY (en) > cPosY (en)){ cPosY (en) += Spd; servoY.Écrire(cPosY (en)); Retard(50); cPosX (en) = servoY.Lire(); } Retard(500); Pour que Yoshi ne soit pas trop fatigué }
Et nous avons un succès partiel. Un point laser qui se déplace plus ou moins au hasard à travers la zone.
Tout comme ça - ou du moins similaire - les premiers spectacles laser doit avoir ressemblé à cela à ce moment-là.
Nous espérons que vous avez aimé le blog d’aujourd’hui. S’il vous plaît écrire un court commentaire si vous souhaitez plus de contributions factuelles ou si vous avez aimé le post d’aujourd’hui.