Test Your Radar Detector or Laser Jammer With This Traffic Enforcement LIDAR Gun Simulator

46,145

72

15

This LIDAR gun simulator mimics eleven different traffic enforcement LIDAR guns.  Each Lidar
gun operates at 904nM wavelength with short pulse bursts, some guns operate 100 pulses per second, some guns at 238 pulses per second, etc.  The Laser Atlanta LIDAR guns offers a special stealth mode" to defeat early laser jammers by hiding some of the pulses and confusing their detection circuit.  This simulator can reproduce the "stealth mode" to see if your equipment
is vulnerable.  Only radar detectors that detect LIDAR threats are useful for testing, as this
only transmits light not radar.

The following is a list of LIDAR guns it can simulate:
Jenoptik Laveg
Jenoptik LaserPatrol
Kustom Prolaser 1
Kustom Prolaser 2   
Kustom Prolaser 3
Kustom ProLite
Laser Atlanta
Stalker LZ-1
Ultralyte 100/200 LR Revision 1
Ultralyte 100/200 LR Revision 2
Ultralyte Non-LR

Parts required:
16x2 LCD (HD44780 compatible)
(purchased on ebay for $7.50)  It helps to search as 1602 LCD.

940nM LED (close enough to 904nM) 1.5V voltage, 60mA continous
(purchased on ebay for $2.99 for ten)

Arduino board with 3.3V power available
(purchased on ebay for $21.59 Duino 328)

90 ohm resistor (or larger)
10K ohm resistor
10K ohm potentiometer
pushbutton
wires

Step 1: Schematics, LCD

The schematics are broken into four segments.  I suggest wiring the LCD first and make sure that works before continuing on, as this makes troubleshooting much easier.

Step 2: Schematic

Next wire up the 10K ohm Potentiometer, one lead goes to ground, the other lead to AREF (+5V), and the middle lead (selector) to analog pin 0 on the arduino.  This pot will allow you to make your selection of twelve lidar guns -- one of them is the same gun but with stealth mode activated.


Step 3: Schematic LED

Next wire in your 904nM LED.  Take note that one lead is shorter, this lead must go to ground.  The other longer lead goes to the 90 ohm resistor.  And finally the last lead of the resistor goes to arduino digital output pin 13.

Step 4: Schematic Push Button

Next we wire in your push button, one lead goes to ground, and the other lead goes to arduino digital input pin 11.  The 10Kohm resistor is necessary so stray signals don't accidentally fire on pin 11 so attach the resistor to 5 volts.  If you haven't guess it yet, but the push button is the trigger button to activate your simulated LIDAR gun.


Step 5: Arduino Code

#include

LiquidCrystal lcd(8,7,6,5,4,2); // setup LCD 4 bit mode
int pulse=1; // pulse size length in microseconds
int choice;  // select laser gun model type
int lastchoice=0; // recall last selection choice
int fire; // trigger fire button

void setup() {
  lcd.begin(16,2);    // 16x2 LCD
  analogWrite(10,90); // foreground LCD
  analogWrite(9,150); // background LCD ~3.3 volts
  lcd.clear();
  pinMode(13, OUTPUT);  // 940nM LED output (mimic 904nM laser diode)
  pinMode(11, INPUT);   // setup trigger button as input
}

void loop() {
  choice=analogRead(0);  // read laser gun model selection from 10K pot
  choice=(int)(choice/85.25);  // only 12 valid choices, 11 guns + stealth mode

  if (choice != lastchoice) // clear display only if it's different
    lcd.clear();
  lastchoice=choice;

  switch (choice) {
  case 0:
    lcd.setCursor(0, 0);
    lcd.print("Ultralyte Non-LR"); // 100 pulses per second
    fire=digitalRead(11);
    if (fire==0) {
      lcd.setCursor(0, 1);
      lcd.print("Fire");
      for (int a=1; a<=3; a++) {
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(9999); // 10ms
      }
      lcd.setCursor(0, 1);
      lcd.print("    ");
    }
    break;
  case 1:
    lcd.setCursor(0, 0);
    lcd.print("Ultralyte Rev.1"); // 100pps
    fire=digitalRead(11);
    if (fire==0) {
      lcd.setCursor(0, 1);
      lcd.print("Fire");
      for (int a=1; a<=3; a++) {
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(9999); // 10ms
      }
      lcd.setCursor(0, 1);
      lcd.print("    ");
    }
    break;
  case 2:
    lcd.setCursor(0, 0);
    lcd.print("Jenoptik LaserPL"); // 100pps
    fire=digitalRead(11);
    if (fire==0) {
      lcd.setCursor(0, 1);
      lcd.print("Fire");
      for (int a=1; a<=3; a++) {
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(9999); // 10ms
      }
      lcd.setCursor(0, 1);
      lcd.print("    ");
    }
    break; 
  case 3:
    lcd.setCursor(0, 0);
    lcd.print("Kustom Prolaser3"); // 200 pps
    fire=digitalRead(11);
    if (fire==0) {
      lcd.setCursor(0, 1);
      lcd.print("Fire");
      for (int a=1; a<=3; a++) {
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(4999); // 5ms
      }
      lcd.setCursor(0, 1);
      lcd.print("    ");
    }
    break;
  case 4:
    lcd.setCursor(0, 0);
    lcd.print("Jenoptik Laveg"); // 600pps
    fire=digitalRead(11);
    if (fire==0) {
      lcd.setCursor(0, 1);
      lcd.print("Fire");   
      for (int a=1; a<=3; a++) {
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(1666);
      }
      lcd.setCursor(0, 1);
      lcd.print("    ");
    }
    break;
  case 5:
    lcd.setCursor(0, 0);
    lcd.print("Kustom Prolaser1"); // 380pps
    fire=digitalRead(11);
    if (fire==0) {
      lcd.setCursor(0, 1);
      lcd.print("Fire");   
      for (int a=1; a<=3; a++) {
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(2631);
      }
      lcd.setCursor(0, 1);
      lcd.print("    ");
    }
    break;
  case 6:
    lcd.setCursor(0, 0);
    lcd.print("Ultralyte Rev.2"); // 125 pps
    fire=digitalRead(11);
    if (fire==0) {
      lcd.setCursor(0, 1);
      lcd.print("Fire");   
      for (int a=1; a<=3; a++) {
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(8000);
      }
      lcd.setCursor(0, 1);
      lcd.print("    ");
    }
    break;
  case 7:
    lcd.setCursor(0, 0);
    lcd.print("Stalker LZ-1"); // 130pps
    fire=digitalRead(11);
    if (fire==0) {
      lcd.setCursor(0, 1);
      lcd.print("Fire");   
      for (int a=1; a<=3; a++) { 
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(7691);
      }
      lcd.setCursor(0, 1);
      lcd.print("    ");
    }
    break;
  case 8:
    lcd.setCursor(0, 0);
    lcd.print("Kustom Prolaser2"); // 238pps
    fire=digitalRead(11);
    if (fire==0) {
      lcd.setCursor(0, 1);
      lcd.print("Fire");   
      for (int a=1; a<=3; a++) {
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(4201);
      }
      lcd.setCursor(0, 1);
      lcd.print("    ");
    }
    break;
  case 9:
    lcd.setCursor(0, 0);
    lcd.print("Laser Atlanta"); // 238pps
    fire=digitalRead(11);
    if (fire==0) {
      lcd.setCursor(0, 1);
      lcd.print("Fire");   
      for (int a=1; a<=3; a++) {
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(4201);
      }
      lcd.setCursor(0, 1);
      lcd.print("    ");
    }
    break;
  case 10:
    lcd.setCursor(0, 0);
    lcd.print("Laser Atlanta"); // 238pps stealth mode
    lcd.setCursor(0,1);
    lcd.print("Stealth Mode");    // 2 pulses fire followed by 5 missing pulses
    fire=digitalRead(11);
    if (fire==0) {
      lcd.setCursor(12,1);
      lcd.print("Fire");   
      for (int a=1; a<=2; a++) {
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(4201);
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(12603);  // need 6 delays units (4201*3)
        delayMicroseconds(12603);  // (4201*3)
      }
      lcd.setCursor(12,1);
      lcd.print("    ");
    }
    break;
  case 11:
    lcd.setCursor(0, 0);
    lcd.print("Kustom ProLite"); // 200 pps
    fire=digitalRead(11);
    if (fire==0) {
      lcd.setCursor(0, 1);
      lcd.print("Fire");
      for (int a=1; a<=3; a++) {
        digitalWrite(13, HIGH);
        delayMicroseconds(pulse);
        digitalWrite(13, LOW);
        delayMicroseconds(4999); // 5ms
      }
      lcd.setCursor(0, 1);
      lcd.print("    ");
    }
    break;
  }
}

Step 6: Conclusion

With this project I was able to determine how effective my old LP904 laser jammer is at detecting all these LIDAR guns.  It could detect all LIDAR guns except Laser Atlanta in stealth mode, Jenoptik Laveg, and Jenoptik LaserPatrol.  The last two guns are non-USA so that doesn't surprise me at all.

If you purchase a photodiode or phototransistor that operates close to 904nM and count the number of pulses and measure the time between the pulses you could make your own LIDAR detector using an arduino.  That might be a cool project to add on next.


Share

Recommendations

  • Make it Glow Contest 2018

    Make it Glow Contest 2018
  • Big and Small Contest

    Big and Small Contest
  • First Time Author

    First Time Author

15 Discussions

0
None
Kenjy AitcA

4 months ago

Can this setup be used as a Laser Jammer ?

0
None
stnky1

11 months ago

Got this working. I modified the code a bit to remove some of the redundant frequencies so that I could add a few more different models and I also lengthened the "fire" command so it stayed on longer without disrupting the pulses. I also modified the frequencies to match with the counter on my cheap meter. (It may be different for you.) Here is what I came up with:

#include <LiquidCrystal.h>

LiquidCrystal lcd(8,7,6,5,4,2); // setup LCD 4 bit mode
int pulse=1; // pulse size length in microseconds
int choice; // select laser gun model type
int lastchoice=0; // recall last selection choice
int fire; // trigger fire button

void setup() {
lcd.begin(16,2); // 16x2 LCD
analogWrite(10,90); // foreground LCD
analogWrite(9,150); // background LCD ~3.3 volts
lcd.clear();
pinMode(13, OUTPUT); // 940nM LED output (mimic 904nM laser diode)
pinMode(11, INPUT); // setup trigger button as input
}

void loop() {
choice=analogRead(0); // read laser gun model selection from 10K pot
choice=(int)(choice/85.25); // only 12 valid choices, 11 guns + stealth mode

if (choice != lastchoice) // clear display only if it's different
lcd.clear();
lastchoice=choice;

switch (choice) {
case 0:
lcd.setCursor(0, 0);
lcd.print("Ultralyte Non-LR");
lcd.setCursor(0,1);
lcd.print("/Rev.1 100Hz"); // 100pps
fire=digitalRead(11);
if (fire==0) {
lcd.setCursor(12, 1);
lcd.print("Fire");
for (int a=1; a<=200; a++) {
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(9918); // 10ms
}
lcd.setCursor(12, 1);
lcd.print(" ");
}
break;
case 1:
lcd.setCursor(0, 0);
lcd.print("Ultralyte Rev.2");
lcd.setCursor(0,1);
lcd.print("125Hz"); // 125pps
fire=digitalRead(11);
if (fire==0) {
lcd.setCursor(6, 1);
lcd.print("Fire");
for (int a=1; a<=250; a++) {
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(7932);
}
lcd.setCursor(6, 1);
lcd.print(" ");
}
break;
case 2:
lcd.setCursor(0, 0);
lcd.print("Stalker LZ-1/LR");
lcd.setCursor(0,1);
lcd.print("130Hz"); // 130pps
fire=digitalRead(11);
if (fire==0) {
lcd.setCursor(6, 1);
lcd.print("Fire");
for (int a=1; a<=260; a++) {
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(7627);
}
lcd.setCursor(6, 1);
lcd.print(" ");
}
break;
case 3:
lcd.setCursor(0, 0);
lcd.print("Riegl");
lcd.setCursor(0,1);
lcd.print("160Hz"); // 160pps
fire=digitalRead(11);
if (fire==0) {
lcd.setCursor(6, 1);
lcd.print("Fire");
for (int a=1; a<=320; a++) {
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(6195);
}
lcd.setCursor(6, 1);
lcd.print(" ");
}
break;
case 4:
lcd.setCursor(0, 0);
lcd.print("Laser Ally");
lcd.setCursor(0,1);
lcd.print("185.12Hz"); // 185.12pps
fire=digitalRead(11);
if (fire==0) {
lcd.setCursor(10, 1);
lcd.print("Fire");
for (int a=1; a<=370; a++) {
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(5352);
}
lcd.setCursor(10, 1);
lcd.print(" ");
}
break;
case 5:
lcd.setCursor(0, 0);
lcd.print("Kustom Pro 3/4");
lcd.setCursor(0,1);
lcd.print("/Lite 200Hz"); // 200pps
fire=digitalRead(11);
if (fire==0) {
lcd.setCursor(12, 1);
lcd.print("Fire");
for (int a=1; a<=400; a++) {
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(4953); // 5ms
}
lcd.setCursor(12, 1);
lcd.print(" ");
}
break;
case 6:
lcd.setCursor(0, 0);
lcd.print("LTI TruSpeed");
lcd.setCursor(0,1);
lcd.print("200.3Hz"); // 200.3pps
fire=digitalRead(11);
if (fire==0) {
lcd.setCursor(9, 1);
lcd.print("Fire");
for (int a=1; a<=400; a++) {
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(4946);
}
lcd.setCursor(9, 1);
lcd.print(" ");
}
break;
case 7:
lcd.setCursor(0, 0);
lcd.print("Laser Atlanta");
lcd.setCursor(0,1);
lcd.print("Pro2 238.4Hz"); // 238.4pps
fire=digitalRead(11);
if (fire==0) {
lcd.setCursor(12, 1);
lcd.print("Fire");
for (int a=1; a<=476; a++) {
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(4154);
}
lcd.setCursor(12, 1);
lcd.print(" ");
}
break;
case 8:
lcd.setCursor(0, 0);
lcd.print("Laser Atlanta"); // 238.4pps/68.1pps stealth mode
lcd.setCursor(0,1);
lcd.print("Stealth Mode"); // 2 pulses fire followed by 5 missing pulses
fire=digitalRead(11);
if (fire==0) {
lcd.setCursor(12,1);
lcd.print("Fire");
for (int a=1; a<=68; a++) {
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(4154);
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(12462); // need 6 delays units (4154*3)
delayMicroseconds(12462); // (4154*3)
}
lcd.setCursor(12,1);
lcd.print(" ");
}
break;
case 9:
lcd.setCursor(0, 0);
lcd.print("Kustom Prolaser1");
lcd.setCursor(0,1);
lcd.print("381.5Hz"); // 381.5pps
fire=digitalRead(11);
if (fire==0) {
lcd.setCursor(9, 1);
lcd.print("Fire");
for (int a=1; a<=763; a++) {
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(2591);
}
lcd.setCursor(9, 1);
lcd.print(" ");
}
break;
case 10:
lcd.setCursor(0, 0);
lcd.print("Jenoptik Laveg");
lcd.setCursor(0,1);
lcd.print("600Hz"); // 600pps
fire=digitalRead(11);
if (fire==0) {
lcd.setCursor(6, 1);
lcd.print("Fire");
for (int a=1; a<=1200; a++) {
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(1642);
}
lcd.setCursor(6, 1);
lcd.print(" ");
}
break;
case 11:
lcd.setCursor(0, 0);
lcd.print("NJL SCS 102");
lcd.setCursor(0,1);
lcd.print("3200Hz"); // 3200pps
fire=digitalRead(11);
if (fire==0) {
lcd.setCursor(7, 1);
lcd.print("Fire");
for (int a=1; a<=6400; a++) {
digitalWrite(13, HIGH);
delayMicroseconds(pulse);
digitalWrite(13, LOW);
delayMicroseconds(299);
}
lcd.setCursor(7, 1);
lcd.print(" ");
}
break;
}
}

0
None
hakk3r

2 years ago

Nice job. Been looking for something like this for awhile. Can't wait to try it out. Looks like you're code is missing the #include <LiquidCrystal.h>.

BTW. Don't know what the other commenters are complaining about. Obviously they didn't get what you're trying to accomplish.

0
None
laserjammersuk

2 years ago

Beware, most or maybe all AL, LI, RB-905 Snooper, Stinger Laser Jammer Testers Emit a Crude DC damaging signal. See videos on you tube from a Limey dude . Theses garbage $60 devices have Destroyed very many expensive Jammers. The instruct able signal I have seen on scope and is superior and safer by far, so make it

0
None
laserjammersuk

2 years ago

That's me below with a new username. I now only use a 75 Watt laser. My Video channel ran for 9 Years,120+ helpful Videos, stolen by a RD Forum Liars.

0
None
handymandavebritain

2 years ago

Guy below like rdf trolls want to dissuade all from trying to make a DIY Jammer, but with sufficient aptitude it IS possible. I only use the awesome Splpl90-3 laser. A big leap ahead in area coverage compared to the cheaply made USA sold crappy variants. But if u want to pay x4 as much for same protection, not an M60 jammer, by all means be my guest. No power problems suggest to me these guys are not connecting the ground Earth, skip the 90 Ohm on ir led also. Dave

0
None
NathanM53

3 years ago

Can you email me? I need to ask you something I may be not understanding your instructions on how to complete my build of this laser gun tester I literally have it where it should be working but I must be missing something because it won't power! Please email me natismati @ aol com

I also simplified the sketch and had it running constantly, routed through my Oscilloscope. You Tube Video Paste into a tab and remove the gap. https ://www.youtube.com/watch?v=6WHEWhlFutk&list=PLwRovs-f9TKBxck-D6biGlblEiSj4ExIN&index=1

0
None
pchua

6 years ago on Introduction

Wow! This is really cool. Speeding tickets are a right pain in the rear. A lot of people think that a radar detector will help them see the police coming and thereby keep away from a ticket. It might, but there are a few things to find out first. Read more here..

But if you notice he aims right at the light on the car, which will mess it up if you aim at it, but you are not supposed to aim like that!

1 reply

I see that you don't know about how LIDAR operates. It will reflect of any reflectable surface, especially license plates and headlights. That is why there is a substance called VEIL, so it decreases LIDAR reflection of all glossy surfaces.

The police officer will aim to your headlight when you don't have front LP, cause it's the most reflective surface.

There are more videos on youtube, or you may google using laser jammer video as keyword.

0
None
gentry

9 years ago on Introduction

This is indeed pretty cool.  The giant switch statement is ripe for factoring, though.