DIY Goedkope Laser Afstandsmeter voor Arduino – Snel, Betrouwbaar & Betaalbaar
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino Nano R3 | 1 |
| Elecrow OLED 0.96'' 128x64 | 1 |
| X-40 laser afstandsmeter | 1 |
| LM2596 DC-DC module | 1 |
Nodige tools en machines
- Soldeerbout (generic)
- ST-LINK programmeerder
Apps en online diensten
- STMicroelectronics ST-LINK Utility
Over dit project
Heb je een snelle en goedkope laser-afstandsmeter-module nodig voor je Arduino-project?
Natuurlijk kun je gespecialiseerde modules hiervoor gebruiken, maar de meeste hebben een hoge prijs. VL53L0X/VL53L1X modules zijn goedkoop, maar ze hebben een heel groot zichtveld.
Dus ik vond een oplossing: het gebruik van een goedkope "X-40" laser-afstandsmeter als laser-afstandsmeter. Deze apparaten kosten $20 of minder en kunnen afstanden meten tot 40m met een nauwkeurigheid van ~3mm. Maar er zijn twee problemen - er is geen manier om metingen uit te lezen van de meter en de metingen zijn traag - minder dan 1 Hz.
Om die problemen op te lossen, heb ik reverse engineering gedaan op die laser-afstandsmeter en mijn eigen firmware geschreven voor de STM32 MCU van de laser-afstandsmeter-module. Meet snelheid was belangrijk voor mij en ik kan ~60 Hz bereiken, maar de maximale stabiele afstand daalde tot ~6 m (volledig maximaal bereik is 37 m, maar ik heb het niet getest).
Meetnauwkeurigheid kan variëren van 1 mm tot 10 mm afhankelijk van doelkleur en afstand.
Moduledimensies: 25x13x50 mm.
BELANGRIJKE MEDDELING: JE VERLIEST DE OORSPRONKELIJKE FIRMWARE, DUS HET APPARAAT KAN NIET MEER ALS LASER AFSTANDSMETER GEBRUIKT WORDEN!
Let op dat "X-40" laser-afstandsmeters verschillende revisies van de laser-afstandsmeter-module kunnen hebben, en mijn firmware ondersteunt er alleen enkele!
"X-40" is niet de enige naam voor laser-afstandsmeters met dergelijke modules - ik weet dat er verschillende Chinese laser-afstandsmeters met geschikte modules bestaan.
Stap 1: Laser-afstandsmeter demontage
Laten we de laser-afstandsmeter demonteren om de laser-afstandsmeter-module eruit te halen.

Je moet 7 schroeven uit de behuizing draaien:

Ontmonterde laser-afstandsmeter:

Je ziet een kleine laser-afstandsmeter-module in de behuizing. Je moet de lintkabels van de module loskoppelen en de module uit de behuizing halen:

Let op dat de module gemarkeerd is als "701A". Mijn firmware ondersteunt alleen "512A" en "701A" moduleversies. Verschillende gebruikers bevestigden dat "703A" modules ook werken (ik heb het niet getest).
UPD 11/2019:
Let op: Er is ontdekt dat nieuwere "x-40" laser-afstandsmeters geleverd worden met "M88B" modules. Markering is "88B" op de PCB bij de MCU. Die modules zijn gebaseerd op STM32F0 MCU (het heeft QFN-32 package). Die modules worden NIET ondersteund door mijn firmware!
UPD 10/2021:
Let op: ondersteuning toegevoegd voor U85B modules: zie link! Ze worden gebruikt in moderne typen laser-afstandsmeters.

Als jouw module ondersteund wordt, moet je de voedingslijnen van de module ontlodden.
Stap 2: Laser-afstandsmeter-module programmeren
Je moet een gespecialiseerde firmware naar de MCU van de module schrijven om de benodigde functionaliteit te krijgen.
1. Ten eerste moet je enkele draden solderen voor het programmeren van de MCU. De pinout is in de afbeelding getoond:

Verbind pennen 7-8 van de toetsenbordconnector - dit is nodig voor voeding.
Lijnen "GND" en "Vbat" moeten verbonden worden met de voedingsbron. Spanningbereik is +2.7...+3.3V. Er moet +3.5 V op de "Vdd" lijn zijn wanneer de module gevoed wordt.
Lijnen "GND", "SWDIO", "SWCLK", "NRST" moeten verbonden worden met de ST-LINK programmeerder. Lijn "NRST" is heel belangrijk - de originele firmware van de MCU is vergrendeld, dus deze lijn is nodig om de MCU in programmamodus te brengen.
Sommige programmeerders hebben deze lijn, en sommige (goedkope) niet, maar er is een workaround voor dit probleem.
Ook hebben sommige programmeerders (zoals originele "ST-LINK/V2") de "Vbat" lijn nodig om verbonden te zijn met de "VCC/TVCC" lijn van de programmeerder.
Voorbeeld van verbindingen (deze programmeerder heeft geen "NRST" lijn):

2. Installeer "ST-LINK utility" op de PC. Als je geen ervaring hebt met die software, zijn er veel tutorials op het web.
Je moet de utility configureren (Target -> Settings):

Als je programmeerder "NRST" output heeft, kun je gewoon de voeding aanzetten en "Target -> Connect" drukken in de utility.
Als die lijn er niet is, moet je deze stappen doen:
- Zet de voeding aan.
- Verbind "NRST" lijn van de module met GND.
- Druk "Target -> Connect" in de utility.
- Snel "NRST" lijn loskoppelen van GND.
- Utility moet de verbinding tonen
Je moet zo'n plaatje krijgen:

3. MCU flash is vergrendeld voor lezen, dus je moet "Read Out Protection" uitschakelen. Je verliest de originele firmware bij deze stap!
Open Target -> "Option Bytes" menu. Er moeten dergelijke instellingen zijn:

Zet "Read Out Protection" op "Disabled" en druk op "Unselect all" knop, dan druk op "Apply" knop. Probeer de module te herstarten (door voeding los te koppelen).
Druk Target -> Connect. Er moet informatie over succesvolle verbinding in het log-venster staan en je moet geheugeninhoud zien - gevuld met 0xFF. Nu kun je aangepaste firmware naar de MCU flash laden.
4. De benodigde firmware staat hier: https://github.com/iliasam/Laser_tape_reverse_engineering/tree/master/Code/Firmware_dist_calculation_fast
Selecteer geschikte HEX-bestand voor jouw module en download het naar de MCU Flash met "ST-LINK utility".
Stap 3: Laser-afstandsmeter-module verbinden met de Arduino
Je moet een draad of een connector aan de TX-pad op het bord solderen:

Zie het verbindingsschema hieronder.
Ten eerste moet je controleren of de afstandsmeter-module goed werkt. In deze stap hoef je het OLED-display niet aan de Arduino te koppelen - verbind gewoon de TX-lijn van de laser-afstandsmeter-module met de TX-lijn van de Arduino, en de voedingslijnen van de module met de +3V voedingsbron.
Maak een lege sketch en laad het naar de Arduino. Open "Serial Monitor" in de Arduino IDE. Selecteer baudrate: 250000
Als de afstandsmeter-module goed werkt, krijg je dezelfde data:
Eigenlijk is het beter om een gespecialiseerde USB-UART converter te gebruiken voor deze test. Selecteer 256000 baudrate in de utility (dit is de echte baudrate van de x-40 MCU).
Ten tweede, moet je het volledige schema met display samenstellen.
Verbind de TX-lijn van de laser-afstandsmeter-module met de RX-lijn van de Arduino (je moet die draad loskoppelen tijdens het laden van het programma naar de Arduino).
Als alles goed werkt, krijg je hetzelfde resultaat:

Je ziet een display met 3 getallen:
- "COUNT" - teller van ontvangen waarden
- "AMPL" - amplitude van het signaal. Symbolische balk ("<--->") daaronder toont amplitude grafisch (in logaritmische schaal).
- De grootste waarde - afstand in meters en millimeters.
Stap 4: Nulkalibratie
Na een eerste start, moet de laser-afstandsmeter-module gekalibreerd worden.
Je moet een wit object op een bepaalde afstand van de module plaatsen. De afstand tot dit object wordt de nulafstand voor de afstandsmeter-module. Om het kalibratieproces te starten, moet je het toetsenbord van de laser-afstandsmeter aansluiten en de onderste knop indrukken. De module piept twee keer - aan het begin van de kalibratie en aan het einde (kalibratieduur is ongeveer 10 seconden).

Nu kun je deze laser-afstandsmeter-module gebruiken.
Links:
- Github - reverse engineering resultaten en broncode.
- Habr.com - Google-vertaling van artikel over reverse engineering proces van laser-afstandsmeter.
Sorry voor mijn Engels - ik kom uit een niet-Engelstalig land.
Code
Arduino sketch
No preview (download only).
Github
Code voor de laser-afstandsmeter: https://github.com/iliasam/Laser_tape_reverse_engineering
Schema's
Breadboard montage schema
Productieproces
- Luchtkwaliteit meten met OpenSensors: Een Arduino & Python Handleiding
- Slim Temperatuurmonitoring Systeem voor Scholen: Nauwkeurig, Real-time en Beveiligd
- Efficiënte 8-bit IO-poort bibliotheek voor Arduino – Uitbreiding digitale controle
- Arduino 64-toets Prototoetsenbord Matrix – Bouw een Aangepast Toetsenbord met Shift Registers
- Hoogwaardige 2,8″ TFT Shield voor Arduino Nano – 320×240 SPI Display
- Geïsoleerde analoge ingangsschakeling voor Arduino bouwen
- Betaalbare Arduino Ademcontroller met USB-MIDI-integratie
- DC-motorbeheersing onder de knie: Expert Tips & Trucs met PID-regeling
- Slim Indoor Navigatie Robot Kit voor Arduino Projecten
- Lasersnijder Toepassingen: Van Hout Tot Luchtvaart
- Waarom 5G Essentieel is voor Moderne Slimme Productie