Zusammenfassung
Versuchen, ein Projekt zu erstellen/programmieren, das einen Arduino, einen VL53L0X Laser-Entfernungsmesser verwendet.
Ein 1602 LCD zur Anzeige von Distanztexten, ein TFT LCD zur Anzeige des schwenkbaren RADAR/SONAR-Bereichs.
Mit roten Punkten für nahegelegene Kontakte und einem Servo, um den Entfernungsmesser hin und her zu schwenken.
Der Testbed-3D-Druck ist eine Grundlage für das oben Genannte. Der Code ist noch in Arbeit, da es einige Probleme beim Löschen der Sweep-Linien gibt, nachdem die roten Kontakte angezeigt wurden.
Druckeinstellungen
Füllung:
15
Hinweise:
Sollte Stützen verwenden aufgrund der Servohalterung.
Post-Druck




Arduino-Code
/***
Name: RadarTestBed02
Version: 02
Datum: 08-01-22
Letzte Überarbeitung: 08
Von: dcc
Beschreibung: Versucht habe, ein Projekt zu erstellen/codieren, das einen Arduino verwendet.
Ein VL53L0X Laser-Entfernungsmesser, ein 1602 LCD zur Anzeige von Entfernungstexten,
Ein TFT-LCD, um einen umfassenden RADAR/SONAR-Bereich mit roten Punkten anzuzeigen.
Für nahegelegene Kontakte und einen Servo, um den Entfernungsmesser zurückzuschwenken.
Und so weiter. Es ist eine laufende Arbeit, da wir immer noch Schwierigkeiten beim Löschen haben.
Sweep-Linien nachdem rote Kontakte angezeigt werden. War auch vorhaben zu
Füge einen Piepton und einen Lichtblitz hinzu, wenn ein Kontakt auf dem RADAR-Bildschirm erscheint.
Andere Dateien:
-- <2022_RadarTestBed.stl> = Hauptkörperbasis
-- <2022_RadarMastShort.stl> & <2022_RadarMastLong.stl>
-- <67x8x3_4_5_Bars.stl> = für Größenunterschiede in Batterieboxen
-- und ein paar ".jpg"-Fotos
-- <Kann Projekt verwenden & &
---- um das Servo vor der Montage einzustellen
Hardware:
-- Arduino MEGA 2560 (oder gleichwertig) mit montiertem 2,8-Zoll-TFT-LCD
-- Zwei Twin-9V-Batterien in geschalteten Boxen mit Standard-Steckern
-- Halbe Brotkiste mit einer Stromversorgung
-- 1602 LCD-Display - montierte I2C-Version
-- Aktiver Summer und montierte RGB-LED
-- 2 jeweils 24,7k bis 10k Pull-up-Widerstände für i2c-Bus
****/
/***
Bibliotheken einbeziehen, Pin-Definitionen, Deklarieren und Definieren
Konstanten & Variablen, und Objekte initialisieren:
****/
// Bibliotheken
Einfügen von // für den I2C.
Einfügen // für den seriellen Monitor
Einbeziehen // für das 1602 LCD
Einbeziehen // für den Servo
Einbeziehen // Kern-Grafikbibliothek
Einbeziehen // Hardware-spezifische Bibliothek
//#include "Adafruit_VL53L0X.h" // Laser-Entfernungsmesser (konnte es nicht zum Laufen bringen)
beinhalten // Pololu-Version
// Setze die LCD-Adresse auf 0x27 für eine Anzeige mit 16 Zeichen und 2 Zeilen.
LiquidCrystal_I2C lcd(0x27, 16, 2); // das andere ist 0x29 (VL53L0X ???)
// Setze den Laser-Flugzeit-Distanzsensor
//Adafruit_VL53L0X lox = Adafruit_VL53L0X(); // hatte Probleme
VL53L0X-Sensor;
// TFT-LCD
Definieren Sie LCD_CS A3 // Chip Select geht zu Analog 3
Definiere LCD_CD A2 // Befehl/Daten gehen an Analog 2
Definiere LCD_WR A1 // LCD Write geht zu Analog 1
Definieren Sie LCD_RD A0 // LCD Read geht zu Analog 0
Definiere LCD_RESET A4 // Kann alt an den Reset-Pin des Arduino angeschlossen werden
int X1, Y1, X2, Y2, X3, Y3, X4, Y4, L1, L2, L3; // Koordinaten der Linienendpunkte und Länge
int mm, cm, in; // Entfernung in Millimetern, Zentimetern und Zoll
int D1, D2, D3; // Winkel in Grad
float R1, R2, R3; // Winkel (in Radianen)
Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Weisen Sie Namen den 16-Bit-Farbwerten zu.
Definiere SCHWARZ 0x0000
Definiere BLUE 0x001F
Definiere CYAN 0x07FF
Definiere DARKCYAN 0x03EF
Definiere DARKGREEN 0x03E0
Definiere DARKGREY 0x7BEF
DEFINIERE GRÜN 0x07E0
Definiere GREENYELLOW 0xAFE5
Definiere LIGHTGREY 0xC618
Definiere MAGENTA 0xF81F
Definiere MAROON 0x7800.
Definieren Sie NAVY 0x000F
Definiere OLIVE 0x7BE0
DEFINIERE ORANGE 0xFD20
Definiere PINK 0xF81F
Definiere PURPLE 0x780F
Definiere ROT 0xF800
DEFINIERE WEISS 0xFFFF
Definiere GELB 0xFFE0
// Servo, Buzzer und Lichter (RGB-LED-Modul)
// oder schließe 220 Ohm Widerstände ein)
Servo servo01; // erstelle ein Servo-Objekt
float servoAngle = 20; // um den Winkel des Servohorns (Arms) zu speichern
const int servoPin = 37; // Servo-Pin für die Bewegung der Schüssel
const int buzzer = 49; // aktiver Buzzer-Pin (direkter Anschluss von 49 an Grnd)
const int LED_R = 39; // montierter roter Pin der RGB-LED
const int LED_G = 41; // montierter RGB-LED-grüner Pin
const int LED_B = 43; // montierter RGB-LED blauer Pin
/***
Initialer 'Setup'-Code, der einmal ausgeführt werden soll:
****/
void setup()
{
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
// Servo, Buzzer und Lichter
servo01.attach(servoPin); // befestige den Servo am Servo-Objekt
servo01.write(90); // Das Servo beginnt, nach vorne zu zeigen.
pinMode(buzzer, OUTPUT); // setzt Pins auf "Output"
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
digitalWrite(LED_R, LOW); // Setzt die LEDs standardmäßig auf "aus".
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, LOW);
// Initialisieren Sie das LCD, schalten Sie die Hintergrundbeleuchtung ein und drucken Sie eine Nachricht aus.
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hochfahren....");
delay(100);
// Zeichne RADAR/SONAR-Scope-Hintergrund auf 320x240 TFT-LCD
// Das Zentrum des Hubs ist x=160, y=230 (Mitte des Bildschirms, 10 Pixel vom unteren Rand entfernt)
tft.reset();
tft.begin(0x9341); // oder verwenden, um eine Variable zum Einfügen zu erhalten
tft.setRotation(3);
tft.fillScreen (DARKGREEN);
tft.setTextColor (GELB);
tft.setTextSize (2);
tft.println ("Radar/Sonar-Testbett");
tft.setTextSize (1);
tft.println ("(Jul 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, WEISS);
tft.fillCircle (200, 120, 4, ROT);
tft.drawLine (160, 230, 80, 120, GELB);
tft.fillCircle (80, 120, 4, ROT);
delay(1500);
// Signal Startup
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);
)
/
Haupt-'Schleifen'-Code, der wiederholt ausgeführt werden soll:
/
void loop()
{
// Den Servo fegen
Für (servoAngle = 20; servoAngle <= 160; servoAngle += 2) // Kehre von 20 bis 160 in Schritten von 2
{
servo01.write(servoAngle); // Sende den Servo zur Position "servoAngle"
delay(50); // Warte 50 ms, damit sich der Servo bewegt
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ENTFERNUNG in cm ");
lcd.setCursor(0, 1);
lcd.print(sensor.readRangeSingleMillimeters() / 10);
wenn (sensor.timeoutOccurred())
{
lcd.print("Timeout");
}
)
für (servoAngle = 160; servoAngle >= 20; servoAngle -= 2) // Schwenken von 160 auf 20 in Schritten von 2
{
servo01.write(servoAngle); // Sende das Servo an "servoAngle"
delay(50);
)
}
/
Andere Funktionen, die aufgerufen werden sollen:
/
void beep() // lässt den Summer 200/1000 Sekunden lang ertönen
{
digitalWrite(buzzer, HIGH);
delay(100);
digitalWrite(buzzer, LOW);
return;
}
void blip() // Blippt den Buzzer für 100/1000 Sekunden
{
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
return;
}
void flashRed() // Blinkt die RGB-LED rot für 300/1000 Sekunden
{
digitalWrite(LED_R, HIGH);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, LOW);
delay(300);
digitalWrite(LED_R, LOW);
return;
}
void flashYellow() // Blinkt die RGB-LED 300/1000 Sekunden lang gelb.
{
digitalWrite(LED_R, HIGH);
digitalWrite(LED_G, HIGH);
digitalWrite(LED_B, LOW);
delay(300);
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
return;
}
void flashGreen() // Blinkt die RGB-LED grün für 300/1000 Sekunden
{
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, HIGH);
digitalWrite(LED_B, LOW);
delay(300);
digitalWrite(LED_G, LOW);
return;
}
void flashBlue() // Blaues Blinken der RGB-LED für 300/1000 Sekunden
{
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, HIGH);
delay(300);
digitalWrite(LED_B, LOW);
return;
}
void flickBlue() // Blinkt die RGB-LED blau für 100/1000 Sekunden
{
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, HIGH);
delay(100);
digitalWrite(LED_B, LOW);
return;
}
태그
모델 소스
