Télémètre Arduino
Ce télémètre permet de mesurer des distances et utilise un capteur laser. Ce projet comporte une carte Arduino reliée à un afficheur OLED et un capteur de distance.
Le projet
J'utilise un capteur de distance VL53L1X sur une carte Breakout de Sparkfun qui permet des mesures de 40 mm à 4 m. Il se connecte au bus I2C.
La carte Arduino sert à la programmation d'un Atmega328 qui sera placé sur une petite carte avec son circuit oscillant. Pour rendre le télémètre autonome, j'utilise 2 batteries LR03 et un convertisseur élévateur réglable en sortie à 5 V. Le tout se loge dans un boîtier au couvercle transparent de chez Diptal.
Les composants
Un télémètre autonome
Une carte Arduino et une plaque de connexions ce n'est pas très pratique pour effectuer une mesure de distance.
Pour mettre en boîtier, je réalise le montage suivant et je soude le tout sur une plaque d'epoxy pastillée.
Le schéma structurel permet de mieux comprendre le câblage.
L'atmega328 possède un bootloader. Il se programme, placé sur le support à 28 broches de la carte Arduino, puis on le retire et on le place sur le montage définitif.
Pour graver le bootloader dans l'artmega328, je vous propose 3 méthodes.
Pour intégrer tous les composants dans le boitier Diptal, j'ai réalisé 2 pièces support à l'imprimante 3D. 2 découpes sont à prévoir dans le boîtier pour la mise en place d'un interrupteur et une fenêtre pour le capteur.
Pour la fixation des pièces dans le boîtier, j'utilise un peu de colle thermofusible.
la mise en boitier | support OLED | support capteur |
---|---|---|
Fichiers au format .STL |
Le montage
J'utilise une carte Arduino pour le développement en réalisant les connections suivantes sur plaque d'essai. Attention au capteur de distance qui doit être alimenté en 3,3 V.
Le programme
Le programme mesure la distance et l'affiche en mm dans un rectangle. Il faut charger les bibliothèques U8g2lib et Sparkfun_VL53L1X dans l'environnement Arduino.
// **** Mesure de distance **** //
// Jmd mai 2021 //
// radar avec VL53L1X et Oled //
#include < Arduino.h >
#include < U8g2lib.h >
#include < Wire.h >
#include "SparkFun_VL53L1X.h"
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
//Optional interrupt and shutdown pins.
#define SHUTDOWN_PIN 2
#define INTERRUPT_PIN 3
SFEVL53L1X distanceSensor(Wire, SHUTDOWN_PIN, INTERRUPT_PIN);
void setup(void)
{
Wire.begin();
u8g2.begin();
Serial.begin(19200);
Serial.println("VL53L1X Qwiic Test");
if (distanceSensor.init() == false)
Serial.println("Sensor online!");
}
void loop(void)
{
distanceSensor.startRanging(); //Write configuration bytes to initiate measurement
int distance = distanceSensor.getDistance(); //Get the result of the measurement from the sensor
distanceSensor.stopRanging();
Serial.print("Distance(mm): ");
Serial.print(distance);
Serial.println();
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
u8g2.drawStr(30,10,"Distance:"); // write something to the internal memory
u8g2.drawStr(85,63,"JMD");
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.drawGlyph(115, 63, 0x00a9);
u8g2.drawLine(30, 12, 80, 12);
u8g2.drawFrame(25,25,70,20); // draw a box
u8g2.setCursor(30,40);
u8g2.print(distance);
u8g2.drawStr(70,40,"mm");
u8g2.sendBuffer(); // transfer internal memory to the display
delay(200);
}