Resumé
Essayer de créer/coder un projet qui utilise un Arduino, un télémètre laser VL53L0X,
Un écran LCD de 1602 pour afficher le texte de la distance, un écran LCD TFT pour afficher le champ de vision du RADAR/SONAR.
Avec des points rouges pour les contacts proches, et un servomoteur pour balayer le télémètre d'avant en arrière.
L'impression 3D du banc d'essai sert de base pour ce qui précède. Le code est toujours en cours de développement car il y a des problèmes pour effacer les lignes de balayage après que les contacts rouges soient affichés.
Réglages d'impression.
Remplissage :
15
Notes :
Il devrait utiliser des supports en raison du support du servomoteur.
Après l'impression.




Code Arduino.
/***
Nom : RadarTestBed02
Version : 02
Date : 08-01-22
Dernière révision : 08
Par : dcc
Description : J'ai essayé de créer/coder un projet qui utilise un Arduino.
Un télémètre laser VL53L0X, un écran LCD 1602 pour afficher le texte de la distance,
Un écran LCD TFT pour afficher un champ de vision radar/sonar balayant avec des points rouges.
Pour les contacts proches, et un servo pour balayer le champ de vision du télémètre.
et ainsi de suite. C'est un travail en cours, car nous avons toujours du mal à effacer.
Balayer les lignes après que les contacts rouges soient affichés. J'allais aussi...
Ajoutez un bip et un flash de lumière lorsqu'un contact apparaît sur l'écran du RADAR.
Autres fichiers :
-- <2022_RadarTestBed.stl> = base du corps principal
-- <2022_RadarMastShort.stl> et <2022_RadarMastLong.stl>
-- <67x8x3_4_5_Bars.stl> = pour les différences de taille dans les boîtes de batteries.
-- et quelques photos au format ".jpg"
-- <Puis-je utiliser le projet et...
---- pour régler le servo avant l'assemblage.
Matériel :
-- Arduino MEGA 2560 (ou équivalent) avec un écran LCD TFT de 2,8 pouces monté.
-- Deux batteries 9V dans des boîtiers commutés avec des prises standard.
-- Une demi-carte de montage avec une alimentation électrique.
-- Écran LCD 1602 - version montée I2C.
-- Sifflet actif et LED RGB montée.
-- 2 résistances de traction de 24,7 kOhm à 10 kOhm chacune pour le bus I2C.
****/
/***
Inclure les bibliothèques, les définitions de broches, déclarer et définir.
Constantes et variables, et initialisation des objets :
****/
// Bibliothèques
Inclure // pour l'I2C.
Inclure // pour le moniteur série.
Inclure // pour l'écran LCD 1602.
Inclure // pour le servo.
Inclure // la bibliothèque graphique de base.
Inclure // la bibliothèque spécifique au matériel.
//#include "Adafruit_VL53L0X.h" // détecteur de distance laser (je n'ai pas réussi à le faire fonctionner)
Inclure // la version Pololu.
// Réglez l'adresse du LCD à 0x27 pour un affichage de 16 caractères sur 2 lignes.
LiquidCrystal_I2C lcd(0x27, 16, 2); // l'autre est 0x29 (VL53L0X ???)
// Régler le capteur de distance de temps de vol du laser.
//Adafruit_VL53L0X lox = Adafruit_VL53L0X(); // j'ai eu des problèmes.
Le capteur VL53L0X ;
// Écran LCD TFT.
Définissez LCD_CS A3 // Le sélecteur de puce va à Analog 3.
Définissez LCD_CD A2 // La commande/les données vont vers l'analogique 2.
Définissez LCD_WR A1 // L'écriture sur l'écran LCD va vers l'analogique 1.
Définissez LCD_RD A0 // La lecture de l'écran LCD va vers l'analogique 0.
Définissez LCD_RESET A4 // Peut-on connecter alt à la broche de réinitialisation de l'Arduino ?
int X1, Y1, X2, Y2, X3, Y3, X4, Y4, L1, L2, L3 ; // coordonnées des points d'extrémité de la ligne et longueur
int mm, cm, in ; // distance en millimètres, centimètres et pouces
int D1, D2, D3 ; // angle en degrés
float R1, R2, R3 ; // angle (en radians)
Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Attribuer des noms aux valeurs de couleur 16 bits.
Définissez le NOIR 0x0000.
Définissez BLUE 0x001F.
Définissez CYAN 0x07FF.
Définissez DARKCYAN 0x03EF.
Définissez DARKGREEN 0x03E0
Définissez DARKGREY 0x7BEF.
Définissez GREEN 0x07E0
Définissez GREENYELLOW 0xAFE5
Définissez LIGHTGREY 0xC618
Définissez MAGENTA 0xF81F.
Définissez MAROON 0x7800.
Définissez NAVY 0x000F.
Définissez OLIVE 0x7BE0
Définissez ORANGE 0xFD20
Définissez PINK 0xF81F.
Définissez le VIOLET 0x780F.
Définissez RED 0xF800.
Définissez BLANC 0xFFFF.
Définissez le JAUNE 0xFFE0
// Servo, Buzzer et Lumières (module LED RGB)
// ou inclure des résistances de 220 ohms)
Servo servo01 ; // créer un objet servo
float servoAngle = 20 ; // pour stocker l'angle de la corne (bras) du servo
const int servoPin = 37 ; // broche du servo pour le mouvement du plat.
const int buzzer = 49 ; // broche du buzzer active (branchement direct de 49 à la masse)
const int LED_R = 39 ; // broche rouge de la LED RGB montée.
const int LED_G = 41 ; // broche verte de la LED RGB montée.
const int LED_B = 43 ; // broche bleue de la LED RGB montée.
/***
Code d'installation initial à exécuter une fois :
****/
void setup()
{
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
// Servo, Buzzer et Lumières
servo01.attach(servoPin); // attacher le servo à l'objet servo
servo01.write(90); // Le servo commence à faire face vers l'avant.
pinMode(buzzer, OUTPUT); // définir les broches en mode "sortie"
pinMode(LED_R, SORTIE);
pinMode(LED_G, SORTIE);
pinMode(LED_B, OUTPUT);
digitalWrite(LED_R, LOW); // régle les LEDs par défaut sur "éteint"
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, LOW);
// Initialiser l'écran LCD, activer le rétroéclairage et imprimer le message.
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Démarrage en cours....");
delay(100);
// Dessiner l'arrière-plan du radar/sonar sur un écran LCD TFT de 320x240 pixels.
// Le hub central est à x=160, y=230 (milieu de l'écran, à 10 pixels du bas)
tft.reset();
tft.begin(0x9341); // ou utilisez-le pour obtenir la variable à insérer.
tft.setRotation(3);
tft.fillScreen (DARKGREEN);
tft.setTextColor (JAUNE);
tft.setTextSize (2);
tft.println ("Banc d'essai radar/sonar");
tft.setTextSize (1);
tft.println ("(juillet 2022)");
tft.drawCircle (160, 230, 150, ORANGE);
tft.drawCircle (160, 230, 148, ORANGE);
tft.drawLine (160, 230, 5, 230, LIGHTGREY);
tft.drawLine (160, 230, 50, 120, LIGHTGREY);
tft.drawLine (160, 230, 160, 75, LIGHTGREY);
tft.drawLine (160, 230, 270, 120, LIGHTGREY);
tft.drawLine (160, 230, 315, 230, LIGHTGREY);
tft.setTextSize (2);
tft.setTextColor (ORANGE);
tft.setCursor(205, 73);
tft.print ("75 cm");
tft.setTextColor (LIGHTGREY);
tft.setCursor (17, 210);
tft.print ("0");
tft.setCursor (30, 100);
tft.print ("45");
tft.setCursor (150, 55);
tft.print ("90");
tft.setCursor(270, 100);
tft.print ("135");
tft.setCursor (270, 210);
tft.print ("180");
// Test
tft.drawLine (160, 230, 200, 120, BLANC);
tft.fillCircle (200, 120, 4, ROUGE);
tft.drawLine (160, 230, 80, 120, JAUNE);
tft.fillCircle (80, 120, 4, ROUGE);
delay(1500);
// Démarrage de Signal.
blip();
flashGreen();
blip();
flashYellow();
blip();
flashRed();
blip();
delay(500);
tft.drawLine (160, 230, 200, 120, DARKGREEN);
tft.fillCircle (200, 120, 4, DARKGREEN);
tft.drawLine (160, 230, 80, 120, DARKGREEN);
tft.fillCircle (80, 120, 4, DARKGREEN);
)
/
Le code de la boucle principale à exécuter à répétition :
/
void loop()
{
// Balayer le servo
pour (servoAngle = 20 ; servoAngle <= 160 ; servoAngle += 2) // balayer de 20 à 160 par incréments de 2.
{
servo01.write(servoAngle); // envoyer le servo à la position "servoAngle"
delay(50); // Attendre 50 ms pour que le servo se déplace.
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DISTANCE en cm ");
lcd.setCursor(0, 1);
lcd.print(sensor.readRangeSingleMillimeters() / 10);
si (le capteur a détecté un dépassement du délai d'attente)
{
lcd.print("Délai d'attente dépassé");
}
}
pour (servoAngle = 160 ; servoAngle >= 20 ; servoAngle -= 2) // balayer de 160 à 20 par incréments de 2.
{
servo01.write(servoAngle); // envoyer le servo à "servoAngle"
delay(50);
}
}
/
D'autres fonctions à appeler :
/
void beep() // fait sonner le buzzer pendant 200/1000 secondes
{
digitalWrite(buzzer, HIGH);
delay(100);
digitalWrite(buzzer, LOW);
retour ;
}
void blip() // Le buzzer bipe pendant 100/1000 secondes.
{
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
retour ;
}
void flashRed() // faire cligner la LED RGB en rouge pendant 300/1000 secondes
{
digitalWrite(LED_R, HIGH);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, LOW);
delay(300);
digitalWrite(LED_R, LOW);
retour ;
}
void flashYellow() // faire cligner la LED RGB en jaune pendant 300/1000 secondes
{
digitalWrite(LED_R, HIGH);
digitalWrite(LED_G, HIGH);
digitalWrite(LED_B, LOW);
delay(300);
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
retour ;
}
void flashGreen() // faire cligner la LED RGB en vert pendant 300/1000 secondes
{
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, HIGH);
digitalWrite(LED_B, LOW);
delay(300);
digitalWrite(LED_G, LOW);
retour ;
}
void flashBlue() // faire cligner la LED RGB en bleu pendant 300/1000 secondes
{
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, HIGH);
delay(300);
digitalWrite(LED_B, LOW);
retour ;
}
void flickBlue() // clignote la LED RGB en bleu pendant 100/1000 secondes
{
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, HIGH);
delay(100);
digitalWrite(LED_B, LOW);
retour ;
}
Tags
Source du modèle
