Radarpistole, Umbau aus vorhandenem Scheinwerfer

adminAllgemeinLeave a Comment

Das fertige Projekt

Zerlegen

Der eingebaute 6V Blei-Gel Akku soll nicht weiter verwendet werden, ebenso kommt die Ladeelektronik und das Leuchtmittel weg. Die Ladebuchse wird weiterverwendet. Die Ladeelektronik wird ersetzt durch eine J5019. Diese vereint eine Ladeelektronik mit einem StepUp Modul, sodaß als Akku eine 18650 verwendet werden kann und die Aussgangsspannung auf 5V eingestellt werden kann.

Umbauten

Um den CDM324 Radarsensor einzubauen habe ich eine Adapterplatte auf dem 3D Drucker gedruckt und um das 1,3 Zoll OLED Display einzubauen einen Rahmen.
Der Mikroschalter bleibt vorhanden und schaltet die komplette Schaltung mit dem Nano und den Modulen ein. Dies verhindert, daß sich bei Nichtbenutzung der Akku leert, bedeutet aber auch, daß der Einschaltvorgang ein paar Sekunden dauert.

Module

Die Module im Überblick

Hier sieht man die Module vor dem Einbau: Links der Batteriehalter mit dem 18650 Akku, in der Mitte die J5019 Ladeplatine, rechts unten das 1,3 Zoll OLED Display. Darüber der Arduino Nano und im Reflektor der CDM324 Radarsensor.

Programmierung

Der Sketch basiert auf einem modifizierten Beispielsketch und ist im wesentlichen erweitert um eine Grafikbibliothek für das 1,3 Zoll Display.

#define PIN_NUMBER 4   // pin number for FOUT
#define AVERAGE 4      // number of samples for averaging
unsigned int doppler_div = 44;
unsigned int samples[AVERAGE];
unsigned int x;

#include <Arduino.h>
#include <U8x8lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif

U8X8_SH1106_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);

void setup(void)
{
  Serial.begin(115200);
  pinMode(PIN_NUMBER, INPUT);
  u8x8.begin();
  u8x8.setPowerSave(0);
}

void loop(void)
{
  noInterrupts();
  pulseIn(PIN_NUMBER, HIGH);
  unsigned int pulse_length = 0;
  for (x = 0; x < AVERAGE; x++)
  {
    pulse_length = pulseIn(PIN_NUMBER, HIGH);
    pulse_length += pulseIn(PIN_NUMBER, LOW);    
    samples[x] =  pulse_length;
  }
  interrupts();

  // Check for consistency
  bool samples_ok = true;
  unsigned int nbPulsesTime = samples[0];
  for (x = 1; x < AVERAGE; x++)
  {
    nbPulsesTime += samples[x];
    if ((samples[x] > samples[0] * 2) || (samples[x] < samples[0] / 2))
    {
      samples_ok = false;
    }
  }

  if (samples_ok)
  {
    unsigned int Ttime = nbPulsesTime / AVERAGE;
    unsigned int Freq = 1000000 / Ttime;

   u8x8.setFont(u8x8_font_inr21_2x4_r);
   u8x8.setCursor(0,0);
   u8x8.println(Freq/doppler_div);
   u8x8.print("   km/h");
  }
}

Ladebuchse

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.