Fernbedienungen mit Joystick

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.


Amateurfunk (amateurfunk)Pour arduino

Laisser un commentaire

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

Messages de blogs recommandés

  1. Installez maintenant ESP32 via l'administrateur de la carte
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA-Over the Air-ESP Programmation par WiFi