Resumen
Intento crear/codificar un proyecto que utilice un Arduino, un buscador de rango láser VL53L0X,
Un LCD de 1602 para mostrar el texto de la distancia, un LCD TFT para mostrar el alcance de barrido del RADAR/SONAR.
Con puntos rojos para los contactos cercanos, y un servo para barrer el buscador de rango de un lado a otro.
La impresión 3D del banco de pruebas es una base para lo anterior. El código aún está en proceso de desarrollo, ya que hay algunos problemas al borrar las líneas de barrido después de que se muestren los contactos rojos.
Ajustes de impresión.
Relleno:
15
Notas:
Debería usar soportes debido al soporte del servo.
Post-impresión.




Código de Arduino.
/***
Nombre: RadarTestBed02
Versión: 02
Fecha: 08-01-22
Última revisión: 08=03-22
Por: dcc
Descripción: Intenté crear/codificar un proyecto que utiliza un Arduino,
Un telémetro láser VL53L0X, un LCD 1602 para mostrar el texto de la distancia,
Un LCD TFT para mostrar un alcance de RADAR/SONAR barrido con puntos rojos.
para contactos cercanos, y un servo para barrer el buscador de rango de vuelta.
Y así sucesivamente. Es un trabajo en progreso, ya que todavía tenemos problemas para borrar.
Barrer las líneas después de que se muestren los contactos rojos. También iba a hacerlo.
Añade un pitido y un destello de luz cuando un contacto aparece en la pantalla del RADAR.
Otros archivos:
-- <2022_RadarTestBed.stl> = base del cuerpo principal
-- <2022_RadarMastShort.stl> y <2022_RadarMastLong.stl>
-- <67x8x3_4_5_Bars.stl> = para diferencias de tamaño en cajas de baterías.
-- y un par de fotos ".jpg"
-- <Puedo usar proyecto & &
---- para configurar el servo antes del ensamblaje.
Hardware:
-- Arduino MEGA 2560 (o equivalente) con LCD TFT de 2,8 pulgadas montado.
-- Baterías gemelas de 9V en cajas conmutable con enchufes estándar.
-- Medio tablero de montaje con una fuente de alimentación.
-- Pantalla LCD 1602 - versión montada I2C.
-- Buzón activo y LED RGB montado.
-- 2 cada uno de resistores de pull-up de 24.7k a 10k para el bus i2c.
****/
/***
Incluye bibliotecas, definiciones de pines, declara y define.
Constantes y variables, e inicializar objetos:
****/
// Bibliotecas
Incluye // para el I2C.
Incluye // para el monitor serie.
Incluye // para el LCD 1602.
Incluye // para el servo.
Incluye // biblioteca de gráficos básicos.
Incluye // biblioteca específica de hardware.
//#include "Adafruit_VL53L0X.h" // buscador de rango láser (no pude hacer que funcionara)
Incluye // versión de Pololu.
LiquidCrystal_I2C lcd(0x27, 16, 2); // el otro es 0x29 (VL53L0X ???)
// Configura el sensor de distancia de tiempo de vuelo del láser.
//Adafruit_VL53L0X lox = Adafruit_VL53L0X(); // tuve problemas
Sensor VL53L0X;
// LCD TFT
Defina LCD_CS A3 // Chip Select va a Analógico 3
Defina LCD_CD A2 // El comando/datos va a Analógico 2
Defina LCD_WR A1 // La escritura LCD va a Analógico 1
Defina LCD_RD A0 // La lectura del LCD va al Analógico 0.
Defina LCD_RESET A4 // ¿Puede alt conectarse al pin de reinicio de Arduino?
int X1, Y1, X2, Y2, X3, Y3, X4, Y4, L1, L2, L3; // coordenadas del punto final de la línea y longitud.
int mm, cm, in; // distancia en milímetros, centímetros e pulgadas
int D1, D2, D3; // ángulo en grados
float R1, R2, R3; // ángulo (en radianes)
Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// Asignar nombres a los valores de color de 16 bits.
Defina BLACK 0x0000.
Define AZUL 0x001F.
Defina CYAN 0x07FF.
Define DARKCYAN 0x03EF.
Define DARKGREEN 0x03E0
Defina DARKGREY 0x7BEF.
Define VERDE 0x07E0
Defina GREENYELLOW 0xAFE5
Defina LIGHTGREY 0xC618
Defina MAGENTA 0xF81F.
Defina MAROON 0x7800.
Defina NAVY 0x000F.
Define OLIVE 0x7BE0
Defina NARANJA 0xFD20
Define PINK 0xF81F.
Define PURPLE 0x780F.
Define RED 0xF800.
Define BLANCO 0xFFFF
Define AMARILLO 0xFFE0
// Servo, Buzzer y Luces (módulo LED RGB)
// o incluya resistores de 220 ohmios)
Servo servo01; // crea un objeto servo
float servoAngle = 20; // para almacenar el ángulo de la palanca (brazo) del servo.
const int servoPin = 37; // pin del servo para el movimiento del plato.
const int buzzer = 49; // pin del zumbador activo (ajuste directo de 49 a Grnd)
const int LED_R = 39; // pin rojo del LED RGB montado.
const int LED_G = 41; // pin verde del RGB-LED montado.
const int LED_B = 43; // pin azul del LED RGB montado.
/***
Código de 'Configuración' inicial para ejecutar una sola vez:
****/
void setup()
{
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
servo01.attach(servoPin); // adjunta el servo al objeto servo
servo01.write(90); // el servo comienza a mirar hacia adelante.
pinMode(buzzer, OUTPUT); // establece los pines en "salida"
pinMode(LED_R, SALIDA);
pinMode(LED_G, SALIDA);
pinMode(LED_B, SALIDA);
digitalWrite(LED_R, LOW); // Establece los LEDs por defecto a "apagados"
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, LOW);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Iniciando....");
retraso(100);
// El centro del hub es x=160, y=230 (en medio de la pantalla, a 10 píxeles del fondo)
tft.reset();
tft.begin(0x9341); // o usar para obtener la variable para insertar
tft.setRotation(3);
tft.fillScreen (DARKGREEN);
tft.setTextColor (AMARILLO);
tft.setTextSize (2);
tft.println ("Banco de pruebas de radar/sonar");
tft.setTextSize (1);
tft.println ("(Jul 2022)");
tft.drawCircle (160, 230, 150, NARANJA);
tft.drawCircle (160, 230, 148, NARANJA);
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 (NARANJA);
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");
// Prueba
tft.drawLine (160, 230, 200, 120, BLANCO);
tft.fillCircle (200, 120, 4, ROJO);
tft.drawLine (160, 230, 80, 120, AMARELO);
tft.fillCircle (80, 120, 4, ROJO);
delay(1500);
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);
}
/
Código del 'Bucle' Principal para Ejecutarse Repetidamente:
/
void loop()
{
// Barriendo el servo.
para (servoAngle = 20; servoAngle <= 160; servoAngle += 2) // barrer de 20 a 160 en incrementos de 2
{
servo01.write(servoAngle); // envía el servo a la posición "servoAngle"
delay(50); // espera 50 ms para que el servo se mueva.
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DISTANCIA en cm");
lcd.setCursor(0, 1);
lcd.print(sensor.readRangeSingleMillimeters() / 10);
si (el sensor ha superado el tiempo límite)
{
lcd.print("Tiempo límite");
}
}
para (servoAngle = 160; servoAngle >= 20; servoAngle -= 2) // barrido de 160 a 20 en pasos de 2
{
servo01.write(servoAngle); // enviar el servo a "servoAngle"
retraso(50);
}
}
/
Otras funciones que se llamarán:
/
void beep() // hace sonar el zumbador durante 200/1000 segundos.
{
digitalWrite(buzzer, HIGH);
delay(100);
digitalWrite(buzzer, LOW);
return;
}
void blip() // Hace sonar el zumbador durante 100/1000 segundos.
{
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
return;
}
void flashRed() // parpadea el LED RGB en rojo durante 300/1000 segundos.
{
digitalWrite(LED_R, ALTO);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, LOW);
delay(300);
digitalWrite(LED_R, LOW);
return;
}
void flashYellow() // parpadea el LED RGB amarillo durante 300/1000 segundos.
{
digitalWrite(LED_R, ALTO);
digitalWrite(LED_G, ALTO);
digitalWrite(LED_B, LOW);
delay(300);
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
return;
}
void flashGreen() // parpadea el LED RGB verde durante 300/1000 segundos.
{
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, ALTO);
digitalWrite(LED_B, LOW);
delay(300);
digitalWrite(LED_G, LOW);
return;
}
void flashBlue() // parpadea el LED RGB azul durante 300/1000 segundos.
{
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, ALTO);
delay(300);
digitalWrite(LED_B, LOW);
return;
}
void flickBlue() // parpadea el LED RGB azul durante 100/1000 segundos.
{
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, ALTO);
delay(100);
digitalWrite(LED_B, LOW);
return;
}
标签
模型来源
