Après les premières expériences avec le Robot Car robuste et notre télécommande avec le LCD-Keypad Shield, où nous obtenons le code envoyé affiché à l'écran, je veux montrer dans cet épisode d'autres possibilités pour une télécommande auto-construite avec nos microcontrôleurs et composants électroniques. Tout d'abord, l'émetteur-récepteur HC-12 de 433 MHz est à nouveau utilisé.
Dans les considérations préliminaires du dernier épisode, nous avions déjà pris en compte le fait que nous voulons également connecter un joystick analogique et calculer ensuite le code à partir des valeurs des axes x et y. Ici, les valeurs pour une entrée analogique 10 bits sont comprises entre 0 et 1023 avec environ 511 chacune en position centrale. Pour la direction y (plus tard en avant et en arrière), nous divisons cette valeur par 100 et obtenons 11 pas de déplacement de 0 à 10 avec un arrêt à 5. En gros, l'axe x fournit également 5 pas par direction en plus de la position centrale à 5. La manière dont nous convertissons le code en commandes de mouvement fait partie du croquis de la Robot Car.
Hardware
Anzahl | Bauteil |
---|---|
1 |
Carte microcontrôleur avec ATmega328P, ATmega16U2, compatible avec Arduino UNO R3 |
ou Nano V3.0 avec Atmega328 CH340! 100% Arduino compatible avec Nano V3 ou NNano V3.0 avec puce FT232RL et ATmega328! 100% compatible Arduino Nano V3 |
|
2 | Module émetteur / récepteur 433 MHz HC-12 (malheureusement plus dans la gamme) |
1 | PS2 Joystick Shield Game Pad Keypad V2.0 pour Arduino |
ou Module joystick KY-023 pour Arduino UNO R3 et autres MCU | |
Breadboard, câbles de démarrage, petits objets | |
le cas échéant | Boîtier de l'imprimante 3D |
Dans un premier temps, nous allons remplacer le blindage du clavier LCD par un joystick en utilisant les modules HC-12 du dernier blog. En fonction du microcontrôleur utilisé, vous avez le choix entre le Joystick Shield pour Arduino Uno et les MC compatibles et le Module Joystick, qui convient à tous les microcontrôleurs ayant au moins deux entrées analogiques.
Le Joystick Shield pour tous les microcontrôleurs compatibles Uno a un design très bien pensé avec de nombreux boutons, le joystick et de nombreuses possibilités de connexion. Les connecteurs habituels sont surtout accessibles. En haut à gauche de l'image, vous pouvez voir les emplacements pour l'émetteur-récepteur nRF24, que nous utiliserons la prochaine fois. Mais nous utilisons d'abord les connexions 3V3, GND, D13 et D12 pour notre émetteur HC-12 à 433 MHz.
Image 1 : Protection du joystick pour les microcontrôleurs compatibles Uno et Pin
Attention : l'étiquetage laisse supposer que vous pouvez également connecter l'écran du Nokia5110 directement ici. Ici, vous devez vérifier l'affectation exacte des broches. Je ne pouvais pas brancher mon écran directement, mais je devais le connecter avec des câbles de démarrage.
Mais nous voulons connecter le module HC-12 ici. Si vous avez besoin de longues gammes, vous devez alimenter le HC-12 avec une tension de fonctionnement de 5V, mais dans la gamme proche d'une télécommande pour voitures robot, les 3,3V sont suffisants, il suffit donc de le brancher et d'adapter le code de la dernière fois en raison de la modification de l'affectation des broches de SoftwareSerial. La ligne se lit alors
SoftwareSerial mySerial (12, 13); // RX, TX
Et la partie concernant le calcul du code pour la télécommande est beaucoup plus serrée lors de l'utilisation du joystick que notre solution avec le clavier. De l'affectation des broches du bouclier :
Bouton A = Digital D2
Bouton B = Digital D3
Bouton C = Digital D4
Bouton D = Digital D5
Bouton E = Digital D6
Bouton F = Digital D7
Bouton du joystick (appuyer sur le joystick par le haut) = Digital D8
Joystick axe x = analogique A0
Axe y du joystick = analogique A1
nous n'avons besoin au début que des entrées analogiques A0 et A1.
Une note sur le facteur constant que j'ai inséré. La protection du joystick est dotée - comme le montre l'image ci-dessous à gauche - d'un interrupteur à curseur, qui permet de modifier le voltage du joystick entre 3,3V et 5V. À 3,3V (tel qu'utilisé par moi), le facteur = 1,5. À 5V, le facteur = 1.
Si quelqu'un utilise le sketch avec un autre MCU équipé d'un convertisseur analogique-numérique 12 bits, le facteur = 0,25 est fixé.
Image 2 : Microcontrôleur avec écran pour joystick et émetteur-récepteur HC-12
Voici le croquis de la télécommande:
/*
Joystick als Motor Controller, Stillstand = 505
je 5 Stufen vor/zurück, je 5 Stufen rechts/links
*/
#include <SoftwareSerial.h>
//Anschlussbelegung für den HC-12 Transceiver
SoftwareSerial mySerial(12, 13); //RX, TX
int x = 5; // x-Achse = links/rechts
int y = 5; // y-Achse = vor/zurück
int joybutton = 8; // Joystick button
float faktor = 1.5; // für Anpassung bei unterschiedlicher Spannung oder ADC
void setup() {
pinMode(joybutton,INPUT_PULLUP);
Serial.begin(115200);
mySerial.begin(9600);
}
void sendcode() {
mySerial.println(100*y + x);//send code for motor
delay(100); // little delay for next button press
}
void loop() {
float A0 = faktor * analogRead (0);
float A1 = faktor * analogRead (1);
bool button = digitalRead(joybutton);
Serial.print("x-Achse: ");
Serial.print(A0);
Serial.print("y-Achse: ");
Serial.print(A1);
Serial.print(" Button pressed ");
Serial.print(button);
x = int(A1/100);
y = int(A0/100);
Serial.print(" Code = ");
Serial.println(100*y + x);
sendcode();
}
Un petit conseil entre les deux : Si le Robot Car ne réagit pas aux signaux, la question se pose souvent : est-ce alors dû à la télécommande (avec émetteur) et au récepteur ? On peut aussi facilement vérifier la télécommande avec un module HC-12 sur le PC.
J'avais encore un adaptateur USB-série du type CP2102 Breakout. Sans plus attendre, connectez le VCC, GND et TX/RX en croix, démarrez une nouvelle instance de l'EDI Arduino, présélectionnez le port COM et ouvrez le Serial Monitor à 9600 Baud. Si le code 505 ou une valeur entre 0 et 1010 y est affiché, au moins la télécommande est ok.
Image 3 : Adaptateur série HC-12 vers USB
En principe, la même télécommande peut être réalisée avec le module joystick. Pour les deux axes, deux entrées analogiques sont nécessaires et pour le bouton du joystick, une entrée numérique sur le microcontrôleur. Les microcontrôleurs de la famille Arduino avec tous les MCU compatibles, ESP32 et - à l'aide d'un convertisseur analogique-numérique - également le Raspberry Pis et les cartes avec ESP8266 (qui n'a qu'une entrée analogique par défaut) sont adaptés. Cette fois, je décide d'utiliser la Nano, qui est moins exigeante en termes de tension d'alimentation.
Image 4 : Module de joystick avec bande de contact
Mon circuit:
Image 5 : Nano sur une demi Breadboard avec émetteur-récepteur HC-12 et module joystick
Télécommande Sketch Nano_Joystick_HC12
/*
Joystick als MotorController, Stillstand = 505
je 5 Stufen vor/zurück, je 5 Stufen rechts/links
*
*/
#include <SoftwareSerial.h>
//Anschlussbelegung für den HC-12 Transceiver
SoftwareSerial mySerial(2, 3); //RX, TX
int x = 5; // x-Achse = links/rechts
int y = 5; // y-Achse = vor/zurück
int code = 505;
int joybutton = 4; // Joystick button
float faktor = 1.0; // für Anpassung bei unterschiedlicher Spannung oder ADC
void setup() {
pinMode(joybutton,INPUT_PULLUP);
Serial.begin(115200);
mySerial.begin(9600);
} //end of setup
void sendcode() {
mySerial.println(100*y + x);//send code for motor
delay(100); // little delay for next button press
} // end of endcode
void loop() {
float A6 = faktor * analogRead (6);
float A7 = faktor * analogRead (7);
bool button = digitalRead(joybutton);
Serial.print("x-Achse: ");
Serial.print(A6);
Serial.print("y-Achse: ");
Serial.print(A7);
Serial.print(" Button pressed ");
Serial.print(button);
x = int(A6/100);
y = int(A7/100);
code = 100*y + x;
Serial.print(" Code = ");
Serial.println(code);
sendcode();
} //end of loop
Enfin, je voudrais vous montrer comment votre Robot Car peut également fonctionner avec un Nano, le HC-12 et un IC L293D "nu".
J'ai échoué dans mes tentatives de créer le schéma dans Fritzing. Ce sera aussi troublant que l'image de l'installation terminée. C'est pourquoi j'ai décidé d'utiliser une table avec le pinout. Comme toujours, si vous faites des changements ici, vous devrez adapter l'esquisse.
Image 6 : Affectation des broches du circuit intégré de commande du moteur L293D
ENABLE 1 | 1 | Nano Pin 7 | Nano 5V | 16 | Vss |
---|---|---|---|---|---|
INPUT 1 | 2 | Nano Pin 5 | Nano Pin 10 | 15 | INPUT 4 |
OUTPUT 1 | 3 | Moteur gauche | Moteur de droite | 14 | OUTPUT 4 |
GND | 4 | 13 | GND | ||
GND | 5 | Batterie - | Nano GND | 12 | GND |
OUTPUT 2 | 6 | Moteur gauche | Moteur de droite | 11 | OUTPUT 3 |
INPUT 2 | 7 | Nano Pin 6 | Nano Pin 9 | 10 | INPUT 3 |
Vs | 8 | Batterie + | Nano Pin 8 | 9 | ENABLE 2 |
Tableau 1 : Affectation des broches du circuit d'attaque du moteur IC L293D
Image 7 : Affectation des broches de l'émetteur-récepteur 433 MHz HC-12
HC-12 |
Nano |
SET |
not connected |
TXD |
Nano Pin 12 LogicielSerial RX |
RXD |
Nano Pin 11 LogicielSerial TX |
GND |
Nano GND |
VCC |
Nano 3,3V ou 5V (plus grande portée) |
Tableau 2 : Affectation des broches de l'émetteur-récepteur 433 MHz HC-12
Lorsque la programmation est terminée et que la prise USB est débranchée, le NANO peut également être connecté à l'alimentation électrique des moteurs via Vin, comme le montre l'image suivante.
Figure 8 : Robot Car bimoteur avec Nano, L293D et HC-12
Le câblage montre clairement à quel point il est plus pratique d'utiliser un blindage de moteur ; la plupart des contacts sont alors réalisés en branchant le microcontrôleur.
La prochaine fois, je remplacerai les modules HC-12, qui ne sont malheureusement plus dans la gamme, par les modules nRF24L01. Ces composants peuvent également être utilisés de manière systématique comme émetteur et récepteur. D'où le terme d'émetteur-récepteur, qui désigne une combinaison d'émetteur et de récepteur.