Skip to Content

Mesureur d’indice UV avec VEML6070 et Arduino

Mesureur d’indice UV avec VEML6070 et Arduino

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

Arduino Uno

USB Data Sync cable Arduino

Câble USB pour Arduino UNO

Dupont wire set

Jeu de fils Dupont

Half_breadboard56a

Plaque d’essai (breadboard)

OLED display

É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 :

Spectral Response of VEML6070
Réponse spectrale du VEML6070 (source)

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 :

Block Diagram of VEML6070
Schéma fonctionnel du VEML6070 (source)

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.

Typical Application Circuit of VEML6070
Circuit d’application typique du VEML6070 (source)

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).

Breakout board for VEML6070
Carte d’adaptation pour VEML6070

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.

Wiring of VEML6070 sensor with Arduino
Câblage du capteur VEML6070 avec Arduino

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 :

arduino-VEML6070 library installed in Library Manager
Bibliothèque arduino-VEML6070 installée dans le Library Manager

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 :

Serial Plotter showing response of VEML6070 to light
Serial Plotter montrant la réponse du VEML6070 à la lumière

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.

Wiring of OLED & VEML6070 with Arduino
Câblage de l’OLED & VEML6070 avec Arduino

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é 😉

Wiring of OLED & VEML6070 with Arduino
Câblage de l’OLED & VEML6070 avec Arduino

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 :

Adafruit_SSD1306 library installed in Library Manager
Bibliothèque Adafruit_SSD1306 installée dans le Library Manager

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.

VEML6070 Output on OLED
Sortie VEML6070 sur OLED

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 ; )