

So bin ich wohl die nächten Paar Tage wieder aufgräumt

Franz

Forum zur gegenseitigen Hilfe für Hobby´s, Spass und Technik, im Raum Penzberg, Garmisch, Bad Tölz, Seeshaupt
Code: Alles auswählen
/* Parkhilfe mit VL53L0X
Weitere Infos und Tutorial auf https://www.makerblog.at
Einparkhilfe z.B. zur fixen Montage an der rückseitigen Garagenwand,
misst den Abstand zwischen Sensor und Objekt (Auto) und visualisiert die
korrekte Einparkposition mit WS2812B RGB LEDs
Setup:
- Arduino Uno
- VL53LX0 Laser Sensor
- Arduino 5V an Sensor VIN
- Arduino GND an Sensor GND
- Arduino A4 an Sensor SDA (I2C Data)
- Arduino A5 an Sensor SCL (I2C Clock)
- WS2812B RGB LED Stripe
- Arduino D6 über 220Ohm Widerstand an LED Data In
- Stromversorgung über Arduino bei wenigen LEDs oder
mit eigener Stromquelle an +/- des LED Stripes
Achtung: Kondensator zwischen 5V und GND
Siehe Tutorials zu WS2812B Neopixel LEDs
*/
// Libraries für I2C, Sensor und RGB LEDs einbinden. Alle Bibliotheken
// können über den Library Manager der Arduino IDE installiert werden
#include "Wire.h"
#include "VL53L0X.h"
#include "Adafruit_NeoPixel.h"
// Sensorobjekt
VL53L0X distanceSensor;
// Datenpin für den WS2812B LED Streifen
#define LEDPIN 6
#define LEDCOUNT 48
#define RANGESTARTMM 2000
#define RANGEENDMM 500
#define ORANGESTARTLED 34
#define REDSTARTLED 48
// LEDs initialisieren
// in diesem Fall 48 LEDs mit den Adressen 0 bis 47
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDCOUNT, LEDPIN, NEO_GRB + NEO_KHZ800);
// Standardfarben für die LEDs definieren
uint32_t rgbRed = strip.Color(255, 0, 0);
uint32_t rgbOrange = strip.Color(255, 90, 0);
uint32_t rgbGreen = strip.Color(0, 255, 0);
uint32_t rgbBlack = strip.Color(0, 0, 0);
uint32_t activeColor = rgbBlack;
uint32_t savedTime;
int savedPixel;
void setup()
{
Serial.begin(9600);
Wire.begin();
// Distanzsensor initialisieren und konfigurieren
distanceSensor.setTimeout(500);
if (!distanceSensor.init())
{
Serial.println("VL53L0X Sensor nicht gefunden! Ablauf angehalten.");
while (1) {}
}
// Sensor auf 10 Messungen pro Sekunde
distanceSensor.setMeasurementTimingBudget(100000);
// LED Streifen starten und Helligkeit setzen
strip.begin();
strip.setBrightness(100); // Helligkeit 0-255
strip.show();
}
void loop()
{
// Entfernung in mm lesen
int dist = distanceSensor.readRangeSingleMillimeters();
// Falls TIMEOUT dann Fehler seriell ausgeben und dist auf 0 setzen
if (distanceSensor.timeoutOccurred())
{
Serial.println("TIMEOUT");
dist = 0;
}
int lastPixel = 0;
// Sensorbereich in mm in Anzahl der LEDs umwandeln, im Beispiel
// den Bereich von 50mm bis 200mm auf die LEDs 16 bis 0 mappen
// D.h. bei bei dist=200 ist lastPixel = 0, bei dist=50 ist
// lastPixel = 16 und der Wertebereich dazwischen wird ebenfalls
// richtig umgerechnet.
// ACHTUNG: eine Range von 50-200mm ist zum Testen auf dem Schreibtisch,
// in der Garage passen Werte zwischen 500 und 2000mm besser :)
// Mit den Konstanten ersetzt heisst diese Zeile
// lastPixel = map(dist, 500, 2000, 47, 0);
lastPixel = map(dist, RANGEENDMM, RANGESTARTMM, LEDCOUNT - 1, 0);
if (lastPixel != savedPixel)
{
savedTime = millis();
savedPixel = lastPixel;
}
// Zur Kontrolle Ausgabe der Distanz und der ermittelten LED
// am seriellen Monitor
Serial.print("dist = ");
Serial.print(dist);
Serial.print(" => ");
Serial.print("lastPixel = ");
Serial.println(lastPixel);
// Alle LEDs löschen (= auf schwarz setzen)
for (int i = 0; i < LEDCOUNT; i++)
{
strip.setPixelColor(i, rgbBlack);
}
// Entsprechend der Anzahl der aktiven LEDs ändert
// ändert sich auch die Farbe aller LEDs
if (millis() - savedTime < 5000)
{
if (lastPixel >= REDSTARTLED)
{
activeColor = rgbRed;
}
else if (lastPixel >= ORANGESTARTLED)
{
activeColor = rgbOrange;
}
else if (lastPixel >= 0)
{
activeColor = rgbGreen;
}
else
{
activeColor = rgbBlack;
}
}
else
{ activeColor = rgbBlack; }
// Wenn lastPixel >= LEDCOUNT dann auf LEDCOUNT-1 setzen
if (lastPixel >= LEDCOUNT)
{
lastPixel = LEDCOUNT - 1;
}
// Nummerierung der LEDs beginnt bei 0!
for (int i = 0; i <= lastPixel; i++)
{
strip.setPixelColor(i, activeColor);
}
// LEDs aktualisieren
strip.show();
}
Habe aber heute noch nichts dran gemacht. Habe zur Zeit noch ein paar andere Baustellen
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste