Roboter Fahrzeug mit Blynk vom Smartphone steuern - AZ-Delivery

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

Kit avec 2 roues



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

2 moteurs à roues


1

Boule de roulement comme roue de roulette


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

Châssis de l'imprimante 3D


1

Support du bloc d'alimentation de l'imprimante 3D


 

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

D1 Board Node MCU esp8266mod - 12F


Ou 1

Esp32 D1 r32 Development Board


1

4 canaux l293d Shielded Drive



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(); 
  }

 Croquis à télécharger


Châssis de l'imprimante 3D


Fichiers pour châssis

Fichier de support de batterie

 

 

Contributions en format PDF

Amusez-vous avec la Robot Car


AmateurfunkEsp-32Esp-8266Projekte für anfänger

1 commentaire

riewes

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/

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Articles de blog recommandés

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery