Dans ce tutoriel, vous apprendrez à construire un mesureur d’indice UV avec un capteur de lumière UV VEML6070, un écran OLED et un Arduino Uno.
L’UV Index est une mesure de l’intensité du rayonnement ultraviolet (UV) du soleil. L’objectif de l’indice UV est d’aider les gens à se protéger des rayons UV, qui peuvent provoquer des coups de soleil, le vieillissement de la peau, des dommages à l’ADN, un cancer de la peau, une immunosuppression et des lésions oculaires.
Notre mesureur d’indice UV lira l’intensité de la lumière UV à partir d’un capteur UV VEML6070 et l’affichera avec un niveau de risque sur un écran OLED pour vous tenir informé du risque UV actuel. Pour contexte, les recommandations de l’Cancer Council sont de vérifier l’indice UV lorsque vous :
- planifiez ou participez à une activité ou un événement en plein air
- pratiquez des activités récréatives comme la course, la natation, le cyclisme ou les sports d’équipe
- assistez à un sport en tant que spectateur, comme le tennis ou le cricket
- travaillez en extérieur, ou êtes responsable de travailleurs en extérieur, ou
- êtes responsable de jeunes enfants et de leurs activités en plein air.
Commençons ce projet en regardant d’abord la liste des pièces nécessaires.
Pièces requises
J’ai utilisé un Arduino Uno pour ce projet, mais n’importe quel autre Arduino ou une carte ESP32/ESP8266 fonctionnera aussi. Notez que les capteurs VEML6070 peuvent être assez chers. J’ai listé le moins cher que j’ai trouvé sur Amazon, mais je vous recommande de comparer les prix un peu.

Capteur de lumière UV VEML6070

Arduino Uno

Câble USB pour Arduino UNO

Jeu de fils Dupont

Plaque d’essai (breadboard)

Écran OLED
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Le capteur de lumière UV VEML6070
Le capteur de lumière UV VEML6070 est un capteur numérique qui mesure l’intensité de la lumière ultraviolette (UV). Il utilise une photodiode pour convertir la lumière UV en un signal électrique, qui est ensuite traité par un circuit interne pour fournir une sortie numérique. Il a une sensibilité maximale pour la lumière UVA à une longueur d’onde de 355 nm. Le graphique ci-dessous montre la réponse spectrale du VEML6070 :

Le capteur VEML6070 est conçu pour être facilement intégré dans divers appareils électroniques et projets grâce à sa petite taille et sa faible consommation d’énergie. Il dispose d’un mode d’arrêt qui réduit la consommation à moins de 1 μA.
Schéma fonctionnel
Le capteur communique avec les microcontrôleurs via une interface I2C, ce qui le rend compatible avec des cartes de développement populaires comme Arduino et ESP32. L’image ci-dessous montre le schéma fonctionnel des composants internes et des broches IO :

SDA et SCL sont les broches pour l’interface I2C. Vdd et GND sont pour l’alimentation et le capteur fonctionne de 2,7 V à 5,5 V. Le VEML6070 dispose d’une compensation de température qui assure une sensibilité linéaire à la lumière UV solaire. La sensibilité peut être ajustée par une résistance externe connectée à RSET. La broche d’acquittement actif (ACK) permet au capteur d’envoyer un signal d’alerte d’indice UV si un seuil est dépassé. Pour plus de détails, consultez la fiche technique :
Ce capteur est couramment utilisé dans des applications où la surveillance de l’exposition aux UV est importante, comme dans les dispositifs portables, les mesureurs d’indice UV et les systèmes de stérilisation UV. Sa haute sensibilité et précision en font un outil précieux pour mesurer les niveaux de lumière UV en intérieur comme en extérieur.
Carte d’adaptation (Breakout Board)
Si vous souhaitez utiliser le capteur brut avec un microcontrôleur, vous aurez besoin de quelques composants supplémentaires (résistances, condensateurs). Voir le circuit d’application typique du VEML6070 selon la fiche technique.

Pour éviter ces complications, vous pouvez acheter des cartes d’adaptation qui intègrent déjà ces composants. L’image ci-dessous montre une carte d’adaptation typique pour le VEML6070, avec l’interface I2C (SCL, SDA), l’alimentation (VCC, GND) et la sortie d’acquittement (ACK).

Dans la suite, nous utiliserons une telle carte d’adaptation pour connecter le capteur VEML6070 à un Arduino.
Connexion du VEML6070 à l’Arduino
Grâce à l’interface I2C, connecter le capteur VEML6070 à un Arduino Uno est très simple. Il suffit de connecter les broches SCL et SDA de la carte d’adaptation VEML6070 aux broches correspondantes de la carte Arduino comme montré ci-dessous.

Ensuite, connectez la masse et le VCC. Vous pouvez utiliser 5V ou 3,3V pour le VCC ; j’ai choisi 3,3V.
Et c’est tout ce qu’il faut faire pour connecter le capteur.
Code pour lire l’indice UV depuis le VEML6070
Dans cette section, nous allons écrire un petit bout de code pour tester le capteur. D’abord, il faudra installer une bibliothèque adaptée.
Il existe trois bibliothèques pour lire les données du capteur VEML6070. Il y a la bibliothèque Adafruit_VEML6070, la bibliothèque Seeed_VEML6070, et la bibliothèque arduino-VEML6070. J’ai utilisé la dernière, car elle est facile à utiliser et calcule l’indice et le niveau de risque. Vous pouvez l’installer comme d’habitude via le Library Manager et après installation, cela devrait ressembler à ceci :

Maintenant, nous pouvons écrire un peu de code. L’exemple très simple suivant lit l’intensité UV mesurée par le capteur VEML6070 et l’affiche dans le moniteur série :
#include "VEML6070.h"
void setup() {
Serial.begin(9600);
VEML.begin();
}
void loop() {
uint16_t uvs = VEML.read_uvs_step();
Serial.print("UVS:");
Serial.println(uvs);
delay(1000);
}
Si vous téléversez ce code et ouvrez votre Serial Plotter, vous devriez voir apparaître une courbe pour UVS. Et lorsque vous exposez le capteur à une source lumineuse (par exemple une lampe torche), vous devriez voir un pic :

Comme vous pouvez le voir, lire les données du capteur VEML6070 est très simple. Pour rendre les choses un peu plus intéressantes, nous allons ajouter un écran OLED dans la section suivante.
Ajout d’un écran OLED
Au lieu d’afficher les données d’intensité UV sur le moniteur série, il serait plus agréable de les afficher sur un écran séparé. Cela nous permettrait de construire un mesureur d’indice UV portable. Dans cette section, nous ajoutons donc un écran OLED au circuit et affichons les données UV dessus.
Connexion de l’OLED à l’Arduino
Comme l’OLED est aussi un dispositif I2C, sa connexion est simple. Nous connectons simplement SDA et SCL aux mêmes broches que le capteur VEML6070. Comme l’OLED fonctionne en 3,3V, nous pouvons aussi partager les lignes d’alimentation. L’image ci-dessous montre le câblage complet.

Si vous avez des difficultés avec l’OLED, consultez le tutoriel How to Interface the SSD1306 I2C OLED Graphic Display With Arduino.
Et voici à quoi ressemble le circuit en fonctionnement dans la réalité 😉

Code pour afficher l’indice UV sur OLED
Dans cette section, nous allons écrire le code pour afficher les données UV sur l’OLED. Pour contrôler l’OLED, nous utiliserons la bibliothèque Adafruit_SSD1306. Vous devrez l’installer via le Library Manager et après installation, cela devrait ressembler à ceci :

Et voici le code complet. Regardez-le d’abord, puis nous en discuterons les détails.
#include "VEML6070.h"
#include "Adafruit_SSD1306.h"
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
void oled_init() {
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.clearDisplay();
oled.setTextSize(2);
oled.setTextColor(WHITE);
}
void centered(const char* text, int y) {
int16_t x1, y1;
uint16_t w, h;
oled.getTextBounds(text, 0, 0, &x1, &y1, &w, &h);
oled.setCursor(64 - w / 2, y);
oled.print(text);
}
void display_uvs() {
static char text[30];
uint16_t uvs = VEML.read_uvs_step();
int risk_level = VEML.convert_to_risk_level(uvs);
char* risk = VEML.convert_to_risk_char(risk_level);
oled.clearDisplay();
centered(risk, 15);
sprintf(text, "%d", uvs);
centered(text, 45);
oled.display();
}
void setup() {
oled_init();
VEML.begin();
}
void loop() {
display_uvs();
delay(1000);
}
Le code ci-dessus lit l’intensité de la lumière UV depuis le capteur et l’affiche avec un niveau de risque sur l’écran OLED, où les niveaux de rayonnement UV sont :
- faible (1-2)
- modéré (3-5)
- élevé (6-7)
- très élevé (8-10)
- extrême (11 et plus).
Bibliothèques et initialisation de l’affichage
Nous commençons par inclure les bibliothèques nécessaires pour le capteur VEML6070 et l’écran OLED Adafruit SSD1306. Nous initialisons ensuite l’écran OLED dans la fonction oled_init(). Cette fonction configure l’écran, le nettoie, définit la taille du texte et la couleur du texte.
#include "VEML6070.h"
#include "Adafruit_SSD1306.h"
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
void oled_init() {
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.clearDisplay();
oled.setTextSize(2);
oled.setTextColor(WHITE);
}
Notez que l’adresse I2C pour l’écran OLED est définie à 0x3C dans oled.begin(). La plupart de ces petits OLED utilisent cette adresse, mais la vôtre pourrait être différente. Si vous ne voyez rien sur l’OLED, il est probable qu’il ait une adresse I2C différente et vous devrez changer l’adresse passée à oled.begin(). Si vous ne connaissez pas l’adresse I2C, consultez le tutoriel How to Interface the SSD1306 I2C OLED Graphic Display With Arduino.
Fonctions d’affichage
La fonction centered() est utilisée pour afficher du texte centré sur l’écran OLED à une coordonnée y spécifiée. La fonction display_uvs() lit l’intensité de la lumière UV depuis le capteur, calcule le niveau de risque, et l’affiche avec l’intensité UV sur l’écran OLED.
void centered(const char* text, int y) {
// Function to center text on OLED display
}
void display_uvs() {
// Function to display UV index and risk level on OLED display
}
Fonction Setup
Dans la fonction setup(), nous initialisons la communication série pour le débogage, initialisons l’écran OLED, et commençons la communication avec le capteur VEML6070.
void setup() {
oled_init();
VEML.begin();
}
Fonction Loop
La fonction loop() appelle continuellement la fonction display_uvs() pour mettre à jour et afficher l’indice UV et le niveau de risque sur l’écran OLED. Elle ajoute ensuite un délai d’une seconde avant la prochaine mise à jour.
void loop() {
display_uvs();
delay(1000);
}
Affichage sur OLED
Si vous téléversez le code, vous devriez voir la sortie suivante sur l’OLED. La ligne du haut montre le niveau de risque et le nombre en dessous est l’intensité UV.

Conclusions
Ce tutoriel vous a montré comment construire un mesureur d’indice UV avec un capteur de lumière UV VEML6070. Nous avons utilisé un Arduino Uno et un écran OLED dans ce projet. Mais vous pourriez facilement utiliser un ESP32 alimenté par batterie et un écran e-Paper pour construire un mesureur d’indice UV portable et à faible consommation.
Alternativement, un mesureur d’indice UV serait aussi un bon ajout à une station météo pour avertir d’une forte exposition aux UV. Pour les détails techniques sur la réalisation, consultez les tutoriels Simple ESP32 Internet Weather Station et Weather Station on e-Paper Display.
Enfin, si vous souhaitez simplement mesurer la lumière (et pas spécifiquement la lumière UV), vous pouvez utiliser le capteur BH1750. Son utilisation est décrite dans le tutoriel : Ambient Light Sensor BH1750 with Arduino.
Si vous avez d’autres questions, n’hésitez pas à demander.
Bon bricolage ; )

