Bienvenue dans un nouveau blog de notre série sur les Robot Cars. Cette fois, nous voulons contrôler notre petite voiture avec notre smartphone. Pour cela, nous utilisons l'application Blynk.
Matériel nécessaire
Variante de véhicule 1: Kit
Avantage : peu coûteux, toutes les pièces nécessaires sont disponibles.
Inconvénient : moins orientable, le montage du MCU et des capteurs est difficile avec les trous de montage déjà présents.
Numéro |
Composantes |
Note |
---|---|---|
1 |
|
Variante du véhicule 2 : de l'imprimante 3D
Avantage : Grâce à la boule de roulement comme roue pivotante, la dirigeabilité est meilleure. Des trous de montage pour l'unité centrale et les capteurs sont disponibles. Il y a aussi l'installation d'un servo pour caméra ou capteur à ultrasons.
Inconvénient : une imprimante 3D est nécessaire.
Numéro |
Composantes |
Note |
---|---|---|
Numéro |
Composantes |
Note |
1 |
|
|
1 |
|
|
6 |
Vis M3 x 30 avec écrou |
pour les moteurs et la boule roulante |
2 |
Vis avec écrou M3 x 12 |
Pour le support du bloc d'alimentation |
1 |
|
|
1 |
|
Comme microcontrôleur nous avons besoin d'un ESP8266 ou mieux d'un ESP32 à cause de l'intégration WLAN. L'ESP-32 présente l'avantage de disposer de beaucoup plus de broches d'entrée/sortie, ce qui sera important pour les futurs projets utilisant des capteurs.
Numéro |
Composantes |
Note |
---|---|---|
Numéro |
Composantes |
Note |
1 |
|
|
Ou 1 |
|
|
1 |
|
Pour utiliser le blindage du pilote de moteur avec les contrôleurs ESP, de petites modifications sont nécessaires, car les contrôleurs ESP fonctionnent avec une tension d'alimentation de 3,3 V.
De la broche D7, une résistance de 10kOhm doit être connectée à GND. Ceci est nécessaire car la broche D7 sur le blindage est connectée à 5V via une résistance pullup de 10KOhm.
Les connexions A0 à A5, ainsi que les connexions d'alimentation correspondantes, doivent être équipées de têtes de broches. Afin d'utiliser ces connexions pour les capteurs, la tension d'alimentation doit également être connectée à 3,3V au lieu de 5V. Pour ce faire, il suffit de couper le fil de connexion aux broches du côté inférieur. Ensuite, vous pouvez connecter les broches à la broche 3.3V.
Les connexions pour la tension d'alimentation doivent également être équipées.
Les sorties M2 et M4 sont utilisées pour connecter les deux moteurs, car M1 et M3 ne peuvent pas être contrôlés avec la carte ESP8266. Les connexions du moteur seront raccordées aux bornes à vis correspondantes sur le capot du moteur. Si le véhicule doit être alimenté par la prise USB du microcontrôleur, le jumper (cercle rouge) doit être retiré et l'entrée M+ connectée au connecteur 5V du microcontrôleur (représenté en vert).
Le Motorshield est simplement branché sur la carte du microcontrôleur. D'autres mesures de câblage ne sont pas nécessaires.
Pour le montage mécanique des cartes, le châssis de l'imprimante 3D comporte des trous correspondants, auxquels la carte de microcontrôleur peut être vissée à l'aide d'entretoises. Avec le kit, vous devrez peut-être percer des trous appropriés.
Software
Le logiciel Blynk, disponible gratuitement, doit être utilisé pour la commande à distance du véhicule. Blynk est un projet Kickstarter qui permet de contrôler des microcontrôleurs le plus simplement possible avec un smartphone. L'élément essentiel est l'application, qui permet de créer une application via une sorte de kit de construction. Toutes les informations concernant cette application sont stockées dans le serveur Blynk. Chaque demande reçoit un numéro d'identification unique. Du côté du microcontrôleur, une bibliothèque garantit que le microcontrôleur peut communiquer avec le serveur Blynk et que l'application sur le smartphone peut directement lire ou contrôler les broches du microcontrôleur. Cela ne nécessite aucune programmation supplémentaire sur le microcontrôleur. La seule condition est que le microcontrôleur ait accès au serveur Blynk. Cependant, comme aucune broche du microcontrôleur ne peut être contrôlée directement pour la commande à distance du véhicule, une certaine programmation sera finalement nécessaire.
Mais il faut d'abord installer l'application Blynk sur le smartphone. Après l'installation et le démarrage de l'application, l'écran de connexion apparaît. Pour utiliser Blynk, vous avez besoin d'un compte pour le serveur Blynk. Tout ce dont vous avez besoin est une adresse électronique et un mot de passe de votre choix.
Après avoir créé un compte, un message concernant l'énergie apparaîtra. Pour créer un projet Blynk, vous avez besoin d'une certaine quantité d'énergie pour chaque élément d'écran. Avec un nouveau compte, vous recevez automatiquement 2000 points d'énergie pour travailler. Si vous avez besoin de plus de points d'énergie pour un projet, vous pouvez en acheter.
Après cette fenêtre de message, l'écran de démarrage apparaît. Ici, le projet Robocar peut maintenant être chargé via le code QR suivant.
Vous voyez maintenant la fenêtre du projet. Si vous cliquez sur le symbole de l'écrou, les paramètres du projet s'ouvriront. Dans les paramètres du projet, vous trouverez le lien "Email all". Si vous cliquez dessus, vous recevrez un courriel contenant la clé dont votre microcontrôleur Sketch a besoin pour communiquer avec le serveur Blynk. Utilisez l'icône en forme de triangle en haut à droite de la fenêtre du projet pour démarrer l'application.
Vous trouverez de plus amples informations sur Blynk sur Internet ou dans le livre Smarthome. Le livre décrit également comment installer votre propre serveur Blynk privé sur un Raspberry Pi.
Sketch
Outre le paquet pour l'ESP32 ou l'ESP8266, vous avez besoin de la bibliothèque Blynk qui peut être installée via la gestion des bibliothèques.
#ifdef Esp32 Constantes et fichiers contenant esp32 #include <Réseau sans fil.Heures> #include <Blues 32.Heures> Broche d'enregistrement du curseur de direction de rotation #define Virements 12 Entrée des données arduino D8 #define Horloge de poste 17 Arduino D4 Slider #define Loquet CLK 19 Taux de stockage arduino D12 #define Non activé 14 Activez arduino D7 avec une faible sortie PWM avec régime moteur compris entre 0 et 1023 #define M1 PWM 23 Broche du moteur 1 arduino d11 #define Dawn 25 Broche du moteur 2 arduino D3 #define M3pwm 27 Broche du moteur 3 arduino D6 #define J'aime les connaissances. 16 Moteur pin 4 arduino D5 Connexion servo #define Services 5 Servo1 D10 pin #define Services 2 13 Servo 2 D9 pin #endif #ifdef Esp8266 Constantes et fichiers contenant esp8266 #include <Esp8266wifi.Heures> #include <Bleu impleesp8266.Heures> Broche d'enregistrement du curseur de direction de rotation #define Virements 0 Entrée des données arduino D8 #define Horloge de poste 4 Arduino D4 Slider #define Loquet CLK 12 Taux de stockage arduino D12 #define Non activé 13 Activez arduino D7 avec une faible sortie PWM avec régime moteur compris entre 0 et 1023 #define M1 PWM 13 Pin pour motor1 arduino d11 double! #define Dawn 5 Broche du moteur 2 arduino D3 #define M3pwm 12 Motor3 arduino D6 double pin dédié! #define J'aime les connaissances. 14 Moteur pin 4 arduino D5 Connexion servo #define Services 15 Servo1 D10 pin #define Services 2 2 Servo 2 D9 pin #endif Pour les messages de débogage blynk #define Impression blynk Numéro de série Les constantes suivantes doivent être remplacées par vos données personnelles Clé d'authentification blynk dans le courriel #define Les clés. "+++++++++++++++++++++++++++++++++++++" SSID du WLAN local #define SSID "************************************" Clé WLAN #define PSK "**************************************" L'adresse du serveur blynk local ou l'adresse publique de '' #define Services "" Bits dans le registre du moteur #define Type m1a 2 Moteur 1A #define Classe m1b 3 Moteur 1 b #define Type m2a 1 Moteur 2 a #define Type m2b 4 Moteur 2 b #define Type M3A 5 Moteur 3 a #define Type m3b 7 Moteur 3 b #define M4a 0 Moteur 4 a #define Type M4B 6 Moteur 4 b Répartition du moteur #define Le Tribunal 2 #define Développement 4 Constante de rotation #define Bas les pattes! 0 #define En avant 1 #define En arrière. 2 Contenu actuel du Registre des curseurs directionnels Uint32 Feuille de route = 0; Vitesse maximale Int. Avec; Remplir le registre des curseurs de commande du moteur Contenu indiqué Non valable Direction de transmission() { Unité - moi.; Écriture numérique(Loquet CLK, Faible); Mémoire verrouillée Écriture numérique(Virements, Faible); Entrée pour / / 0 Pour (- moi.=0; - moi.<8; - moi.++) { Écriture numérique(Horloge de poste, Faible);Lire bit par bit Si (Feuille de route & Un peu.(7-- moi.)) { Écriture numérique(Virements, Élevé); } Temps de décollage estimé { Écriture numérique(Virements, Faible); } Écriture numérique(Horloge de poste, Élevé); } Écriture numérique(Loquet CLK, Élevé); À l'aide d'un flanc avant } Régler la direction de rotation du moteur Non valable Définir la direction(Unité Moteur, Unité Orientation) { Unité Un.=0, Catégorie B=0; Détermine l'étiquette du moteur sélectionné Conversion (Moteur) { CAS 1: Un.=Type m1a; Catégorie B=Classe m1b; Casse - toi.; CAS 2: Un.=Type m2a; Catégorie B=Type m2b; Casse - toi.; CAS 3: Un.=Type M3A; Catégorie B=Type m3b; Casse - toi.; CAS 4: Un.=M4a; Catégorie B=Type M4B; Casse - toi.; } Régler d'abord les deux bits du moteur à 0 pour l'arrêt Feuille de route &= ~ Un peu.(Un.) & ~ Un peu.(Catégorie B); Conversion (Orientation) { CAS En avant: Feuille de route |= Un peu.(Un.); Casse - toi.; Préface a à 1 chiffre CAS En arrière.: Feuille de route |= Un peu.(Catégorie B); Casse - toi.;Pour le BIT de valeur inverse B sur 1 } Serial.printf ("direction =% x \ \ n", directions); Direction de transmission(); Envoyer les nouveaux paramètres au Registre des curseurs } Zone neutre de X et y Le joystick doit être hors de portée pour démarrer le moteur Int. Minimum = 312; Int. Plage maximale = 712; Tourner le moteur à gauche et à droite. Les paramètres gauche et droite contiennent la vitesse Une valeur négative indique un retour en arrière Non valable Moteur(International 16u t À gauche., International 16u t C'est exact.) { Serial.printf ("link% I, Right% I \ \ n", left, right "); Direction Si (À gauche.<0) { Définir la direction(Développement,En arrière.); } Temps de décollage estimé Si (À gauche. == 0){ Définir la direction(Développement,Bas les pattes!); } Temps de décollage estimé { Définir la direction(Développement,En avant); } Si (C'est exact.<0) { Définir la direction(Le Tribunal,En arrière.); } Temps de décollage estimé Si (C'est exact. == 0){ Définir la direction(Le Tribunal,Bas les pattes!); } Temps de décollage estimé { Définir la direction(Le Tribunal,En avant); } Les sorties PWM d'esp32 et esp8266 sont différentes #ifdef Esp32 Vitesse Plomb(Développement,Système antiblocage(À gauche.)); Plomb(Le Tribunal,Système antiblocage(C'est exact.)); #endif #ifdef Esp8266 Vitesse Simulation(J'aime les connaissances.,Système antiblocage(À gauche.)); Simulation(Dawn,Système antiblocage(C'est exact.)); #endif } Évaluation des données du Joystick Non valable Contrôle des mouvements(Int. Dix., Int. C'est vrai.) { En avant! Si(C'est vrai. >= Plage maximale && Dix. >= Minimum && Dix. <= Plage maximale) { En avant Moteur(Avec,Avec); } Temps de décollage estimé Si(Dix. <= Minimum && C'est vrai. >= Plage maximale ) { Déplacer à droite Moteur(0.7*Avec,0.3*Avec); } Temps de décollage estimé Si(Dix. >= Plage maximale && C'est vrai. >= Minimum && C'est vrai.<=Plage maximale) { Déplacer à droite Moteur(Avec,-Avec); } Temps de décollage estimé Si(Dix. <= Minimum && C'est vrai. >= Plage maximale ) { Avancez à gauche. Moteur(0.3*Avec,0.7*Avec); } Temps de décollage estimé Si(Dix. <= Minimum && C'est vrai. >= Minimum && C'est vrai. <= Plage maximale) { Déplacer à gauche Moteur(-Avec,Avec); } Temps de décollage estimé Si(C'est vrai. < Plage maximale && C'est vrai. > Minimum && Dix. < Plage maximale && Dix. > Minimum) {Zone neutre Moteur(0,0); } Temps de décollage estimé Si(C'est vrai. <= Minimum && Dix. >= Minimum && Dix. <= Plage maximale) { En arrière. Moteur(-Avec,-Avec); } Temps de décollage estimé Si(C'est vrai. <= Minimum && Dix. <= Minimum) { En arrière à droite Moteur(-0.7*Avec,-0.3*Avec); } Temps de décollage estimé Si(C'est vrai. <= Minimum && Dix. >= Plage maximale) { Vers l'arrière et vers la gauche Moteur(-0.3*Avec,-0.7*Avec); } } Paramètres Non valable Paramètres() { Numéro de série.C'est parti.(115200); Numéro de série.Imprimer(); Numéro de série.Imprimer("Automne"); Régler toutes les broches utilisées à la sortie Mode pinmode(Virements,Produits); Mode pinmode(Horloge de poste,Produits); Mode pinmode(Loquet CLK,Produits); Mode pinmode(Non activé,Produits); PWM pour esp32 #ifdef Esp32 PWM pour esp32 Ledcsetup (canal, fréquence, BIT de résolution) Paramètres LED(Développement, 100, 10); Paramètres LED(Le Tribunal,100, 10); Les broches du moteur sont assignées aux canaux Lekatachipin(J'aime les connaissances.,Développement); Lekatachipin(Dawn,Le Tribunal); #endif #ifdef Esp8266 Esp8266 broche de moteur facile à sortir Mode pinmode(J'aime les connaissances.,Produits); Mode pinmode(Dawn,Produits); #endif Arrêt de tous les moteurs Feuille de route = 0; Direction de transmission(); Envoyer au Registre des curseurs Écriture numérique(Non activé,0); Sortie du Journal de diapositives Numéro de série.Imprimer("Démarrer blynk"); Dépend du serveur public ou privé Différents départs de blynk Si (Services=="") { Bleu.C'est parti.(Les clés., SSID, PSK); } Temps de décollage estimé { Bleu.C'est parti.(Les clés., SSID, PSK, Services, 8080); } } Non valable Exécution() { Communiquer avec le serveur blynk ici Bleu.Exécution(); } Données reçues par le pin virtuel V1 Blynk Write(Version 1) Lire et évaluer la valeur du levier { Int. Dix. = Arrêtez![0].Asins(); Int. C'est vrai. = Arrêtez![1].Asins(); Contrôle des mouvements(Dix.,C'est vrai.); } Données reçues par Virtual pin V2 Blynk Write(Version 2) { Lire la valeur et régler la vitesse maximale Avec = Arrêtez![0].Asins(); }
Châssis de l'imprimante 3D
Fichier de support de batterie
Amusez-vous avec la Robot Car
1 commentaire
riewes
Großartiger Inhalt, er wird mir in meinem Geschäft helfen. Danke für den Austausch nützlicher Informationen. Hochachtungsvoll, David, Autor des Blogs https://riewes.de/