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 1 Gast