Table des matières:

Voiture sans fil à commande gestuelle : 7 étapes
Voiture sans fil à commande gestuelle : 7 étapes

Vidéo: Voiture sans fil à commande gestuelle : 7 étapes

Vidéo: Voiture sans fil à commande gestuelle : 7 étapes
Vidéo: Var : les voitures sans permis très prisées des jeunes 2024, Novembre
Anonim
Voiture sans fil à commande gestuelle
Voiture sans fil à commande gestuelle

Dans ce tutoriel, nous allons apprendre à fabriquer une voiture à commande gestuelle ou n'importe quel robot. Ce projet a deux parties, une partie est l'unité d'émission et l'autre partie est l'unité de réception. L'unité émettrice est en fait montée sur des gants et l'unité réceptrice est placée à l'intérieur d'une voiture ou de tout robot. Il est maintenant temps de faire une belle voiture. Allons-y!

Étape 1: Équipements

Unité de transmission

1. Arduino Nano.

2. Module de capteur MPU6050.

3. Émetteur RF 433 MHz.

4. Tout type de pile 3 cellules, 11,1 volts (Ici, j'ai utilisé une pile bouton).

5. Vero-Board.

6. Gants à main.

Unité de réception

1. Arduino Nano ou Arduino Uno.

2. Module de commande de moteur L298N.

3. Châssis de robot à 4 roues comprenant des moteurs.

4. Récepteur RF 433 RF.

5. Batterie Li-po à 3 cellules, 11,1 volts.

6. Vero-conseil.

Autres

1. Bâtons de colle et pistolet.

2. Cavaliers.

3. Tournevis

4. Kit de soudure.

etc.

Étape 2: fichier image du schéma de circuit

Fichier image de schéma de circuit
Fichier image de schéma de circuit

Étape 3: Fritzing fichier de schéma de circuit

Étape 4: Code de l'émetteur

#comprendre

#comprendre

#comprendre

MPU6050 mpu6050 (fil);

minuterie longue = 0;

char *contrôleur;

void setup()

{ Serial.begin(9600); Fil.begin(); mpu6050.begin(); mpu6050.calcGyroOffsets(true); vw_set_ptt_inverted(true); // vw_set_tx_pin(10); vw_setup(40000);// vitesse de transfert de données Kbps

}

boucle vide()

{ ////////////////////////////////////////////////////////////////////////////////////////////////

mpu6050.update();

if(millis() - minuteur > 1000)

{ Serial.println("============================================ ==========="); Serial.print("temp: ");Serial.println(mpu6050.getTemp()); Serial.print("accX: ");Serial.print(mpu6050.getAccX()); Serial.print("\taccY: ");Serial.print(mpu6050.getAccY()); Serial.print("\taccZ: ");Serial.println(mpu6050.getAccZ()); Serial.print("gyroX: ");Serial.print(mpu6050.getGyroX()); Serial.print("\tgyroY: ");Serial.print(mpu6050.getGyroY()); Serial.print("\tgyroZ: ");Serial.println(mpu6050.getGyroZ()); Serial.print("accAngleX: ");Serial.print(mpu6050.getAccAngleX()); Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY()); Serial.print("gyroAngleX: ");Serial.print(mpu6050.getGyroAngleX()); Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY()); Serial.print("\tgyroAngleZ: ");Serial.println(mpu6050.getGyroAngleZ()); Serial.print("angleX: ");Serial.print(mpu6050.getAngleX()); Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY()); Serial.print("\tangleZ: ");Serial.println(mpu6050.getAngleZ()); Serial.println("============================================= ==========\n"); minuteur = millis(); }

/////////////////////////////////////////////////////////////////////////////////////

if (mpu6050.getAccAngleX()30) { controller="X2"; vw_send((uint8_t *)contrôleur, strlen(contrôleur)); vw_wait_tx(); // Attendez que tout le message soit parti Serial.println("FORWARD"); } else if (mpu6050.getAccAngleY()>40) { controller="Y1"; vw_send((uint8_t *)contrôleur, strlen(contrôleur)); vw_wait_tx(); // Attendez que tout le message soit parti Serial.println("LEFT"); } else if (mpu6050.getAccAngleY()<-40) { controller="Y2"; vw_send((uint8_t *)contrôleur, strlen(contrôleur)); vw_wait_tx(); // Attendez que tout le message soit parti Serial.println("RIGHT"); } else if (mpu6050.getAccAngleX()-10 && mpu6050.getAccAngleY()-10) { controller="A1"; vw_send((uint8_t *)contrôleur, strlen(contrôleur)); vw_wait_tx(); // Attendez que tout le message disparaisse Serial.println("STOP"); } }

Étape 5: Code du destinataire

#comprendre

int LA = 3;

entier LB = 11; int RA = 5; int RB = 6; void setup() { Serial.begin(9600); vw_set_ptt_inverted(true); // Requis pour DR3100 vw_set_rx_pin(12); vw_setup(4000); // Bits par seconde pinMode(13, OUTPUT); pinMode(LA, SORTIE); pinMode(LB, SORTIE); pinMode(RA, SORTIE); pinMode(RB, SORTIE); vw_rx_start(); // Démarrez la PLL du récepteur en exécutant Serial.println("All OK");

}

boucle vide() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen)) // Non bloquant

{ if((buf[0]=='X')&&(buf[1]=='1')) { Serial.println("BACKWARD"); arrière(); retard (100); //désactivé(); } else if((buf[0]=='X')&&(buf[1]=='2')) { Serial.println("FORWARD"); effronté(); retard (100); //désactivé(); }

sinon si((buf[0]=='Y')&&(buf[1]=='1'))

{ Serial.println("GAUCHE"); la gauche(); retard (100); //désactivé(); }

sinon si((buf[0]=='Y')&&(buf[1]=='2'))

{ Serial.println("RIGHT"); droit(); retard (100); //désactivé(); } else if((buf[0]=='A')&&(buf[1]=='1')) { Serial.println("STOP"); désactivé(); retard (100); } } else { Serial.println("Aucun signal reçu"); } }

annuler en avant()

{ analogWrite(LA, 70); analogWrite(LB, 0); analogWrite(RA, 70); analogWrite(RB, 0); }

annuler en arrière()

{ analogWrite(LA, 0); analogWrite(LB, 70); analogWrite(RA, 0); analogWrite(RB, 70); }

vide à gauche()

{ analogWrite(LA, 0); analogWrite(LB, 70); analogWrite(RA, 70); analogWrite(RB, 0); }

annuler à droite()

{ analogWrite(LA, 70); analogWrite(LB, 0); analogWrite(RA, 0); analogWrite(RB, 70); }

annuler()

{ analogWrite(LA, 0); analogWrite(LB, 0); analogWrite(RA, 0); analogWrite(RB, 0); }

Étape 6: Fichiers INO

Étape 7: Lien des bibliothèques

Bibliothèque de fils virtuelle:

MPU6050_tockn Libraby:

Bibliothèque de fils:

Conseillé: