Guides · 20 min de lecture

Données Arduino vers Excel : Data Streamer, PLX-DAQ et Python

Envoie les données de ton Arduino vers Excel : moniteur série en CSV, Data Streamer, PLX-DAQ et Python, avec horodatage, graphiques et tableau de mesures.

Envoyer des données Arduino vers Excel, c'est transmettre à l'ordinateur, par le câble USB, les valeurs que l'Arduino lit sur ses capteurs, puis les rassembler ligne par ligne dans un tableur. L'Arduino écrit chaque mesure sur le port série sous la forme d'une seule ligne séparée par des virgules ; côté ordinateur, il existe quatre façons courantes de faire entrer ces lignes dans Excel : enregistrer la sortie du moniteur série en CSV, le complément Data Streamer de Microsoft, la macro PLX-DAQ et l'enregistrement automatique avec Python. Le principe est toujours le même : chaque ligne envoyée par l'Arduino devient une ligne dans Excel, et chaque virgule ouvre une nouvelle colonne.

Dans ce guide, nous prenons comme exemple un capteur de température et d'humidité DHT11 et un capteur de lumière LDR. Nous comparons d'abord les quatre méthodes pour que tu choisisses celle qui te convient, puis nous les mettons en place une par une, étape par étape. Tu verras ensuite comment ajouter un horodatage à tes mesures, comment choisir le bon type de graphique dans Excel et comment préparer un tableau de mesures pour ton compte rendu de TP, utilisable en classe ou pour un concours scientifique. Les dernières sections montrent comment faire la même chose avec un ESP32 et un Raspberry Pi Pico, et comment corriger les erreurs les plus fréquentes.

Carte Arduino Uno et prise USB
Arduino Uno : les mesures arrivent à l'ordinateur par le port série virtuel du câble USB ; aucun module supplémentaire n'est nécessaire pour les envoyer vers Excel.

Comment fonctionne l'envoi de données Arduino vers Excel ?

L'Arduino ne sait pas écrire directement dans Excel ; il se contente d'envoyer du texte sur le port série avec Serial.print(). L'ordinateur accède à ce port sous un nom comme COM3 sous Windows, /dev/cu.usbmodem… sous macOS ou /dev/ttyACM0 sous Linux. La langue commune entre Excel et l'Arduino est le CSV (Comma Separated Values, valeurs séparées par des virgules) : une ligne comme 12.0,23.0,45,78 est découpée en quatre colonnes. Ton programme n'a donc que deux règles à respecter : mettre toujours le même séparateur entre les valeurs et terminer chaque mesure par Serial.println(). Tu trouveras les bases du port série en détail dans le guide du moniteur série Arduino.

MéthodePlateformeTransfert en directInformation de tempsIdéal pour
Moniteur série + CSVWindows, macOS, LinuxNon, copié après l'essaiOption d'horodatage de l'IDEEssais courts, vérifications rapides
Excel Data StreamerWindows, Excel de bureau de Microsoft 365Ouimillis() envoyé par l'ArduinoGraphiques en direct en classe
PLX-DAQ v2Windows, Excel de bureau (macro)OuiCommandes DATE, TIME et TIMERLongs enregistrements dans une feuille prête
Python (pyserial + openpyxl)Windows, macOS, LinuxOui, dans un fichierHorloge de l'ordinateurRapports automatiques, enregistrements de plusieurs heures
Module carte SDPas besoin d'ordinateurNon, la carte est lue plus tardModule RTCMesures sur le terrain, sur batterie

Montage d'exemple : branchement du DHT11 et de la LDR

Le montage d'exemple comporte deux capteurs. Le DHT11 mesure la température avec une résolution de 1 °C et l'humidité avec une résolution de 1 % ; sa précision est d'environ ±2 °C et ±5 % d'humidité relative, et une seule broche de données lui suffit. La LDR est une photorésistance dont la résistance baisse quand la lumière augmente ; avec une résistance de 10 kΩ, tu formes un pont diviseur de tension et tu relies le point milieu à une entrée analogique. Avec le câblage ci-dessous, la valeur analogique augmente quand la lumière devient plus forte. Le nombre fourni par une LDR n'est pas en lux mais un niveau de lumière relatif ; il est donc honnête de l'indiquer comme "lumière (%)" dans ton compte rendu. Si tu as besoin de vrais lux, utilise un capteur de lumière étalonné comme le BH1750.

BranchementArduino UnoESP32Raspberry Pi Pico
DHT11 VCC (+)5V3V3Capteur intégré utilisé
DHT11 DATA (OUT)D2GPIO 4Capteur intégré (ADC4)
DHT11 GND (-)GNDGND-
Patte 1 de la LDR5V3V33V3(OUT), broche 36
Patte 2 de la LDR + 10 kΩA0GPIO 34GP26 (ADC0), broche 31
Autre extrémité de la 10 kΩGNDGNDAGND, broche 33
Sur les modules DHT11 à 3 broches, la résistance de tirage (pull-up) de la ligne de données est déjà sur la carte ; si tu utilises le capteur nu à 4 pattes, tu dois ajouter toi-même une résistance de 4,7 à 10 kΩ entre DATA et VCC, sinon le programme lira nan en permanence. Sur l'ESP32 et le Pico, alimente toujours le pont diviseur de la LDR en 3,3 V : en 5 V, l'entrée analogique recevrait une tension plus élevée que ce que la carte supporte.
Module capteur de température et d'humidité DHT11
DHT11 : envoie la température et l'humidité par une seule broche de données ; il faut attendre au moins 1 seconde entre deux lectures.

Code Arduino : envoyer les mesures sous forme de lignes CSV

C++ (Arduino IDE)
1// DHT11 + LDR ölçümlerini CSV satırı olarak gönderir / Sends DHT11 + LDR readings as CSV lines
2#include <DHT.h>
3
4const int DHT_PIN = 2;                 // DHT11 veri pini / DHT11 data pin
5const int LDR_PIN = A0;                // LDR + 10k gerilim bölücü / LDR + 10k voltage divider
6const unsigned long ARALIK = 2000;     // ölçüm aralığı, ms (DHT11 için en az 1000) / interval in ms (at least 1000 for DHT11)
7
8DHT dht(DHT_PIN, DHT11);               // DHT22 kullanıyorsan DHT22 yaz / write DHT22 if you use one
9unsigned long sonOlcum = 0;
10
11void setup() {
12  Serial.begin(9600);                  // Data Streamer ve PLX-DAQ varsayılanı / default of Data Streamer and PLX-DAQ
13  dht.begin();
14  Serial.println("zaman_s,sicaklik_C,nem_yuzde,isik_yuzde");   // başlık satırı / header row
15}
16
17void loop() {
18  if (millis() - sonOlcum < ARALIK) return;   // zamanı gelmediyse çık / not time yet
19  sonOlcum = millis();
20
21  float sicaklik = dht.readTemperature();     // santigrat derece / degrees Celsius
22  float nem = dht.readHumidity();             // bağıl nem, % / relative humidity, %
23  int isik = map(analogRead(LDR_PIN), 0, 1023, 0, 100);   // göreli ışık, % / relative light, %
24
25  if (isnan(sicaklik) || isnan(nem)) {
26    Serial.println("HATA,DHT okunamadi");     // sayı olmadığı için kolay ayıklanır / easy to filter out, not a number
27    return;
28  }
29
30  Serial.print(sonOlcum / 1000.0, 1);         // açılıştan beri geçen saniye / seconds since power-up
31  Serial.print(',');                          // sütun ayırıcı / column separator
32  Serial.print(sicaklik, 1);
33  Serial.print(',');
34  Serial.print(nem, 0);
35  Serial.print(',');
36  Serial.println(isik);                       // satır sonu = yeni Excel satırı / line end = new Excel row
37}

Le programme utilise la DHT sensor library d'Adafruit ; quand tu l'installes depuis le gestionnaire de bibliothèques, accepte aussi d'installer sa dépendance, Adafruit Unified Sensor. Les mesures sont prises toutes les 2 secondes et cadencées avec millis() au lieu de delay(), si bien que loop() n'est jamais bloquée (détails dans le guide millis et delay). Chaque ligne contient, dans cet ordre, les colonnes temps, température, humidité et lumière. Serial.print(sicaklik, 1) écrit le nombre avec une décimale et toujours avec un point. Si le capteur ne répond pas, le programme écrit "HATA" (erreur) à la place d'un nombre ; tu repères ainsi tout de suite la ligne défectueuse dans le tableau et tu peux la filtrer. La ligne d'en-tête de setup() est pratique pour le moniteur série et pour Python ; tu peux la supprimer si tu utilises Data Streamer. Pour des grandeurs qui varient lentement, comme la température d'une pièce, règle ARALIK (intervalle) sur 60000 pour faire une mesure par minute.

Méthode 1 : enregistrer la sortie du moniteur série en CSV

  1. Téléverse le programme, ouvre Outils > Moniteur série et choisis 9600 bauds dans le menu de vitesse.
  2. Si tu veux, active l'horodatage : dans Arduino IDE 2, clique sur l'icône d'horloge en haut à droite de la fenêtre ; dans l'IDE 1.8, sur la case d'horodatage en bas. L'heure de l'ordinateur est ajoutée au début de chaque ligne sous la forme 14:03:21.512 ->.
  3. À la fin de l'expérience, sélectionne les lignes à la souris et copie-les avec Ctrl+C (Cmd+C sur macOS). Si tu veux garder les données brutes, colle-les dans le Bloc-notes et enregistre-les sous olcum.csv en choisissant le type Tous les fichiers.
  4. Dans Excel, clique sur la cellule A1 d'une feuille vide et colle avec Ctrl+V ; toutes les lignes se retrouvent dans la colonne A.
  5. La colonne A étant sélectionnée, ouvre Données > Convertir, choisis Délimité et coche Virgule comme séparateur. Si l'horodatage est activé, coche aussi Espace : l'heure va dans la première colonne et les signes "->" dans la deuxième, que tu supprimes ensuite.
  6. À la dernière étape, clique sur Avancé et choisis le point comme séparateur décimal ; ainsi, l'Excel français reconnaît des valeurs comme 23.5 comme des nombres. Clique sur Terminer et enregistre le fichier au format .xlsx.

Cette méthode est très pratique jusqu'à quelques centaines de lignes ; au-delà de quelques milliers, la sélection devient pénible et la fenêtre de l'IDE ralentit. Pour des enregistrements de plusieurs heures, des programmes de terminal comme PuTTY (Session > Logging > All session output) ou CoolTerm, qui fonctionne sous Windows, macOS et Linux (Connection > Capture to Text/Binary File), écrivent chaque ligne reçue directement dans un fichier. Tu importes ensuite ce fichier dans Excel avec les mêmes étapes. N'oublie pas : tant qu'un programme de terminal ou le moniteur série utilise le port, ni les compléments Excel ni Python ne peuvent s'y connecter.

Avec les paramètres régionaux français, Excel attend dans les fichiers CSV un point-virgule comme séparateur de colonnes et une virgule comme séparateur décimal. C'est pourquoi, en double-cliquant sur un CSV séparé par des virgules, tout peut se retrouver dans une seule colonne, ou une valeur comme 23.5 peut devenir du texte, voire une date. La solution consiste à ne pas ouvrir le fichier par double-clic, mais à découper les données avec Convertir comme ci-dessus, ou à produire dès le départ le fichier avec des points-virgules et une virgule décimale ; c'est exactement ce que fait le script Python plus bas.

Méthode 2 : données en direct avec Excel Data Streamer

Data Streamer est un complément gratuit que Microsoft a conçu pour l'enseignement ; il fait couler les lignes CSV du port série directement dans une feuille de calcul. Il est fourni avec l'Excel de bureau de Microsoft 365 (version 1902 et suivantes), il suffit donc de l'activer. Comme c'est un complément COM, il fonctionne uniquement sous Windows ; il n'existe ni dans Excel pour macOS ni dans Excel pour le web. Côté Arduino, rien à changer : le programme ci-dessus fonctionne tel quel à 9600 bauds, la vitesse par défaut du complément.

  1. Dans Excel, ouvre Fichier > Options > Compléments, choisis Compléments COM dans la liste Gérer en bas et clique sur Atteindre.
  2. Coche Microsoft Data Streamer for Excel et clique sur OK ; l'onglet Data Streamer apparaît dans le ruban.
  3. Ferme le moniteur série de l'Arduino IDE ; un port série ne peut être ouvert que par un seul programme à la fois.
  4. Avec le bouton Connect a Device, choisis le port COM de l'Arduino, puis clique sur Start Data. Selon la langue d'Excel, les boutons peuvent apparaître traduits.
  5. Excel crée trois feuilles : Data In (données entrantes), Data Out (données envoyées à l'Arduino) et Settings (réglages). Dans la feuille Settings, règle Data Channels sur 4 et augmente Data Rows pour voir davantage d'historique dans le tableau.
  6. Pour garder une trace permanente, lance l'enregistrement avec Record Data ; quand tu l'arrêtes avec Stop Recording, les mesures sont sauvegardées dans un fichier CSV. Tu pourras rejouer ce fichier plus tard avec Import Data File.

En haut de la feuille Data In se trouvent les dernières valeurs reçues (Current Data) et, en dessous, un tableau où défilent les mesures précédentes (Historical Data). Si tu sélectionnes ce tableau et ajoutes un graphique en courbes ou en nuage de points avec Insertion > Graphiques recommandés, le graphique se met à jour tout seul à chaque nouvelle donnée ; idéal pour montrer à la classe comment la courbe de lumière chute dès que tu mets la main au-dessus du capteur. Dans la feuille Settings, Data Interval (ms) fixe la fréquence de mise à jour de la feuille, et Data Orientation indique si les données les plus récentes apparaissent en haut ou en bas du tableau. Les valeurs que tu saisis dans la feuille Data Out sont aussi envoyées à l'Arduino sous forme de ligne CSV ; l'Arduino peut les lire avec Serial.parseInt(), ce qui te permet par exemple de régler un seuil d'alarme depuis Excel.

Si l'onglet Data Streamer n'apparaît pas du tout, tu utilises très probablement une autre version d'Office que Microsoft 365, ou macOS ; passe alors à la méthode PLX-DAQ ou Python. Si ton programme utilise une autre vitesse que 9600, règle la même vitesse en bauds dans les paramètres de la fenêtre Advanced ; sinon le tableau se remplit de caractères incompréhensibles.

Méthode 3 : écrire dans Excel ligne par ligne avec la macro PLX-DAQ

PLX-DAQ (Parallax Data Acquisition) est une macro VBA qui tourne dans Excel et transforme en cellules des commandes spéciales reçues sur le port série. Comme la version originale de Parallax ne fonctionne qu'avec Excel 32 bits, on utilise aujourd'hui PLX-DAQ v2, développée par la communauté Arduino ; elle prend en charge Excel 64 bits et se présente sous la forme d'un unique fichier .xlsm. Comme la macro s'appuie sur l'API Windows, elle ne fonctionne elle aussi que sous Windows. La différence avec Data Streamer, c'est que l'Arduino pilote Excel : il écrit les en-têtes, efface la feuille et fait ajouter la date et l'heure par Excel.

C++ (Arduino IDE)
1// PLX-DAQ v2: Excel'e tarih, saat ve ölçüm satırı yazar / PLX-DAQ v2: writes date, time and readings into Excel
2#include <DHT.h>
3
4DHT dht(2, DHT11);                     // DHT11 veri pini D2 / DHT11 data pin D2
5const int LDR_PIN = A0;
6
7void setup() {
8  Serial.begin(9600);                  // PLX-DAQ'ta da 9600 seç / choose 9600 in PLX-DAQ too
9  dht.begin();
10  Serial.println("CLEARDATA");         // eski ölçümleri sil / clear old readings
11  Serial.println("LABEL,Tarih,Saat,Sure (s),Sicaklik (C),Nem (%),Isik (%)");   // 1. satır başlıkları / row 1 headers
12  Serial.println("RESETTIMER");        // TIMER sayacını sıfırla / reset the TIMER counter
13}
14
15void loop() {
16  float sicaklik = dht.readTemperature();
17  float nem = dht.readHumidity();
18  int isik = map(analogRead(LDR_PIN), 0, 1023, 0, 100);
19
20  if (!isnan(sicaklik) && !isnan(nem)) {
21    Serial.print("DATA,DATE,TIME,TIMER,");   // DATE, TIME, TIMER'ı Excel doldurur / Excel fills in DATE, TIME, TIMER
22    Serial.print(sicaklik, 1);
23    Serial.print(',');
24    Serial.print(nem, 0);
25    Serial.print(',');
26    Serial.println(isik);
27  }
28  delay(2000);                         // DHT11 saniyede en fazla 1 ölçüm verir / DHT11 gives at most 1 reading per second
29}
CommandeCe qu'elle fait
CLEARDATAEfface les anciennes mesures de la feuille
LABEL,Tarih,Saat,...Écrit les en-têtes de colonnes sur la ligne 1
DATA,...Écrit une nouvelle mesure sur la ligne vide suivante
DATE et TIMERemplacés dans une ligne DATA par la date et l'heure de l'ordinateur
TIMERSecondes écoulées depuis le début de l'enregistrement ou depuis RESETTIMER
RESETTIMERRemet le compteur TIMER à zéro
ROW,SET,2Définit la ligne où seront écrites les prochaines données
CELL,SET,G2,25 / CELL,GET,G2Écrit une valeur dans une cellule ou renvoie la valeur d'une cellule à l'Arduino
SAVEWORKBOOKEnregistre le fichier Excel
  1. Télécharge le fichier PLX-DAQ v2 et extrais-le du zip. Fais un clic droit sur le fichier .xlsm et, dans Propriétés, coche la case Débloquer ; Office bloque par défaut les macros des fichiers venant d'internet.
  2. Ouvre le fichier et clique sur Activer le contenu dans la barre jaune en haut.
  3. Ferme le moniteur série de l'Arduino IDE et clique sur le bouton Open PLX DAQ UI de la feuille.
  4. Dans la fenêtre qui s'ouvre, saisis seulement le numéro du port COM dans la case Port (5 pour COM5), choisis 9600 pour Baud et clique sur Connect.
  5. Si les en-têtes n'apparaissent pas, appuie sur le bouton reset de l'Arduino : setup() s'exécute à nouveau, les commandes CLEARDATA et LABEL arrivent dans Excel et les lignes commencent à défiler.
  6. Quand tu as fini, clique sur Disconnect et, si tu veux, enregistre les données dans un fichier .xlsx séparé.

Méthode 4 : fichiers CSV et Excel automatiques avec Python

Si tu es sur Mac ou sous Linux, si tu veux enregistrer pendant des heures ou si tu en as assez de préparer le rapport à la main à chaque fois, Python est la solution la plus souple. Installe d'abord les deux paquets dans un terminal avec python -m pip install pyserial openpyxl. Le premier script ci-dessous écoute l'Arduino et écrit chaque mesure, avec l'heure de l'ordinateur, dans le fichier deney_olcumleri.csv. Nous avons expliqué en détail la recherche du port, la réinitialisation automatique et les graphiques en direct dans le guide sur la communication série entre Arduino et Python.

Python
1import csv
2import time
3from datetime import datetime
4
5import serial
6
7PORT = "COM3"               # macOS: /dev/cu.usbmodem…, Linux: /dev/ttyACM0
8BAUD = 9600                 # Arduino'daki Serial.begin ile aynı / same as Serial.begin on the Arduino
9DOSYA = "deney_olcumleri.csv"
10AYIRICI = ";"               # Türkçe Excel ; bekler, İngilizce Excel , / Turkish Excel expects ;, English Excel ,
11ONDALIK = ","               # Türkçe Excel ondalık virgül, İngilizce nokta / decimal comma in Turkish Excel, dot in English
12
13
14def sayi(x):
15    return f"{x:.1f}".replace(".", ONDALIK)   # 23.5 -> "23,5"
16
17
18with serial.Serial(PORT, BAUD, timeout=3) as ser, \
19        open(DOSYA, "w", newline="", encoding="utf-8-sig") as f:   # BOM: Excel Türkçe harfleri doğru gösterir / BOM keeps accents readable
20    time.sleep(2)                       # Uno port açılınca resetlenir / the Uno resets when the port opens
21    ser.reset_input_buffer()            # yarım kalmış satırları at / drop partial lines
22    yazici = csv.writer(f, delimiter=AYIRICI)
23    yazici.writerow(["Zaman", "Süre (s)", "Sıcaklık (°C)", "Nem (%)", "Işık (%)"])
24    print("Kayıt başladı, durdurmak için Ctrl+C / logging, press Ctrl+C to stop")
25    try:
26        while True:
27            satir = ser.readline().decode("utf-8", errors="ignore").strip()
28            parca = satir.split(",")
29            if len(parca) != 4:
30                continue                # boş, hata ya da başlık satırı / empty, error or header line
31            try:
32                sure, sicaklik, nem, isik = (float(p) for p in parca)
33            except ValueError:
34                continue                # sayı olmayan satır / non-numeric line
35            simdi = datetime.now()
36            yazici.writerow([simdi.strftime("%Y-%m-%d %H:%M:%S"),   # bilgisayar saati / PC clock
37                             sayi(sure), sayi(sicaklik), sayi(nem), sayi(isik)])   # süre Arduino'dan gelir / elapsed time comes from the Arduino
38            f.flush()                   # satırı hemen diske yaz / write the row to disk now
39            print(simdi.strftime("%H:%M:%S"), sicaklik, nem, isik)
40    except KeyboardInterrupt:
41        print("Kayıt bitti / logging stopped:", DOSYA)

Trois détails du script assurent la compatibilité avec Excel. L'encodage utf-8-sig ajoute une marque BOM invisible au début du fichier ; sans elle, Excel affiche mal des caractères comme "°C" ou les lettres accentuées. Les constantes AYIRICI (séparateur) et ONDALIK (décimale) sont réglées sur le point-virgule et la virgule décimale, ce qui correspond déjà à l'Excel français ; avec des paramètres régionaux anglais, remplace-les simplement par une virgule et un point. f.flush() écrit chaque ligne sur le disque immédiatement : si l'ordinateur s'éteint ou si le câble se débranche, tu perds au plus la dernière mesure. Après avoir arrêté le script avec Ctrl+C, un double-clic sur le fichier suffit et les colonnes s'ouvrent correctement séparées. Si tu veux consulter le fichier pendant que l'enregistrement continue, ouvre une copie, car Excel peut verrouiller les fichiers qu'il ouvre.

Python
1import csv
2from datetime import datetime
3
4from openpyxl import Workbook
5from openpyxl.chart import Reference, ScatterChart, Series
6
7GIRIS = "deney_olcumleri.csv"
8CIKIS = "deney_raporu.xlsx"
9
10wb = Workbook()
11ws = wb.active
12ws.title = "Olcumler"
13
14with open(GIRIS, encoding="utf-8-sig", newline="") as f:
15    okuyucu = csv.reader(f, delimiter=";")
16    ws.append(next(okuyucu))                               # başlık satırı / header row
17    for satir in okuyucu:
18        zaman = datetime.strptime(satir[0], "%Y-%m-%d %H:%M:%S")
19        degerler = [float(x.replace(",", ".")) for x in satir[1:]]   # "23,5" -> 23.5
20        ws.append([zaman] + degerler)                      # .xlsx sayıyı sayı olarak saklar / .xlsx stores real numbers
21
22son = ws.max_row
23for hucre in ws["A"][1:]:
24    hucre.number_format = "hh:mm:ss"                       # zaman sütunu biçimi / time column format
25ws.column_dimensions["A"].width = 12
26
27# Özet tablo: formüller İngilizce yazılır, Excel kendi diline çevirir
28# Summary: formulas are written in English, Excel shows them in its own language
29ws["G1"], ws["H1"], ws["I1"], ws["J1"] = "Özet", "Sıcaklık (°C)", "Nem (%)", "Işık (%)"
30for i, (ad, fonk) in enumerate([("Ortalama", "AVERAGE"), ("En düşük", "MIN"),
31                                ("En yüksek", "MAX"), ("Std. sapma", "STDEV")], start=2):
32    ws.cell(row=i, column=7, value=ad)
33    for sutun, harf in ((8, "C"), (9, "D"), (10, "E")):
34        ws.cell(row=i, column=sutun, value=f"={fonk}({harf}2:{harf}{son})")
35
36# Her ölçüm için süre-değer (XY dağılım) grafiği / one time-value (XY scatter) chart per reading
37x = Reference(ws, min_col=2, min_row=2, max_row=son)       # Süre (s) sütunu / elapsed time column
38for sutun, baslik, konum in ((3, "Sıcaklık (°C)", "G8"), (5, "Işık (%)", "G24")):
39    grafik = ScatterChart()
40    grafik.title = baslik + " - süre"
41    grafik.x_axis.title = "Süre (s)"
42    grafik.y_axis.title = baslik
43    grafik.x_axis.delete = False                           # yeni Excel'de eksenler görünsün / keep axes visible
44    grafik.y_axis.delete = False
45    y = Reference(ws, min_col=sutun, min_row=1, max_row=son)
46    grafik.series.append(Series(y, x, title_from_data=True))
47    grafik.width, grafik.height = 18, 8                    # cm
48    ws.add_chart(grafik, konum)
49
50wb.save(CIKIS)
51print(son - 1, "ölçüm yazıldı / readings written:", CIKIS)

Le second script convertit le CSV en un vrai fichier .xlsx. Dans un .xlsx, les nombres sont stockés en tant que nombres et non en tant que texte, si bien que le problème des séparateurs et des décimales disparaît complètement ; le fichier s'ouvre de la même façon dans un Excel français, anglais ou allemand. Le script ajoute aussi un tableau récapitulatif avec la moyenne, le minimum, le maximum et l'écart type, ainsi que deux graphiques en nuage de points pour la température et la lumière. Les formules sont écrites dans le fichier avec leurs noms anglais (AVERAGE, MIN, MAX, STDEV) et Excel les traduit à l'ouverture : dans un Excel français, tu verras MOYENNE, MIN, MAX et ECARTYPE. Les lignes delete = False évitent un problème où les étiquettes des axes n'apparaissent pas dans les graphiques créés avec les versions récentes d'openpyxl.

Ajouter un horodatage : millis(), horloge de l'ordinateur ou RTC

SourceComment l'obtenirAvantagesInconvénients
millis()millis() / 1000.0 dans le programme ArduinoAucun matériel en plus, résolution à la millisecondeRepart de zéro à chaque reset, ce n'est pas une vraie date, déborde au bout de 49,7 jours
Horloge de l'ordinateurdatetime en Python, DATE et TIME de PLX-DAQ, horodatage du moniteur sérieVraies date et heure, aucune configurationL'ordinateur doit rester branché
Module RTC (DS3231, DS1307)rtc.now() avec RTClibFonctionne sans ordinateur, une pile garde l'heureModule supplémentaire ; un DS1307 peut dériver de quelques secondes par jour
Heure internet (NTP)configTime() sur l'ESP32Heure exacte à la seconde, sans réglageNécessite une connexion Wi-Fi

Pour les expériences reliées à un ordinateur, son horloge est le plus simple, et notre script Python l'écrit sur chaque ligne. C'est tout de même une bonne habitude de garder aussi le temps envoyé par l'Arduino : il montre l'intervalle réel entre les mesures et te permet de remarquer tout de suite qu'une ligne manque. Si tu envoies la valeur brute de millis() depuis l'Arduino, tu la convertis dans Excel en secondes avec =B2/1000 ou en minutes avec =B2/60000. Si l'Arduino doit fonctionner sans ordinateur, par exemple en enregistrant sur une carte SD, prends la date et l'heure d'un module horloge RTC ; tous les détails de l'enregistrement CSV sur carte SD sont dans le guide du module carte SD. Avec un ESP32, tu peux aussi récupérer l'heure sur internet : l'heure NTP avec l'ESP32.

Créer un graphique dans Excel

  1. Sélectionne les colonnes de temps et de température avec leurs en-têtes ; si elles ne sont pas côte à côte, maintiens la touche Ctrl enfoncée en sélectionnant la deuxième.
  2. Choisis un type de nuage de points avec courbes dans Insertion > Graphiques > Nuage de points (XY).
  3. Avec le bouton + à côté du graphique, active les Titres des axes et nomme les axes avec leurs unités : "Temps (s)" et "Température (°C)".
  4. Pour ajouter la série de lumière, fais un clic droit sur le graphique et ajoute la colonne de lumière avec Sélectionner des données > Ajouter ; comme les échelles sont très différentes, fais un clic droit sur la série et choisis Mettre en forme une série de données > Axe secondaire.
  5. Fais un clic droit sur l'axe vertical et fixe les valeurs minimale et maximale dans Mise en forme de l'axe, pour qu'une variation de 1 °C ne ressemble pas à une énorme oscillation.

Pourquoi un nuage de points plutôt qu'un graphique en courbes ? Le graphique Courbes d'Excel traite les valeurs de l'axe horizontal comme des étiquettes régulièrement espacées ; si une mesure manque ou si tu changes l'intervalle, l'axe du temps est faussé sans prévenir. Le Nuage de points (XY), lui, place chaque point à son temps réel, ce qu'on attend d'un graphique scientifique. Si tu compares seulement quelques valeurs fixes, comme la température moyenne de trois pièces, un histogramme est plus lisible. Si le capteur est bruité, fais un clic droit sur la série et lisse la courbe avec Ajouter une courbe de tendance > Moyenne mobile.

Exemple de tableau de mesures pour le compte rendu de TP

Imaginons que la question de ton expérience soit : "Comment la température, l'humidité et le niveau de lumière de l'air près d'une lampe de bureau évoluent-ils quand on l'allume ?" Nous avons placé les capteurs à environ 15 cm de la lampe et réglé ARALIK sur 60000 dans le programme, soit une mesure par minute. Nous avons allumé la lampe à la minute 1 et l'avons éteinte à la minute 6. Les valeurs ci-dessous sont des valeurs d'exemple typiques que l'on peut obtenir avec ce montage ; les deux dernières lignes sont des résumés calculés avec des formules Excel :

Temps (min)Température (°C)Humidité (%)Lumière (%)État
0234614Lampe éteinte
1234681Allumage de la lampe
2244582Lampe allumée
3254482Lampe allumée
4264383Lampe allumée
5264283Lampe allumée
6264215Extinction de la lampe
7254314Lampe éteinte
8244514Lampe éteinte
Moyenne24,744,052,0-
Minimum / maximum23 / 2642 / 4614 / 83-

Tu calcules les lignes de résumé dans Excel avec =MOYENNE(B2:B10), =MIN(B2:B10) et =MAX(B2:B10) ; pour montrer la dispersion des mesures, tu peux aussi ajouter =ECARTYPE(B2:B10). En interprétant les résultats, décris le schéma du tableau : dès que la lampe s'est allumée, la lumière est passée de 14 % à 81 %, alors que la température n'est montée que lentement, de 3 °C en environ 3 minutes ; c'est ce qu'on appelle l'inertie thermique. Quand la lampe s'est éteinte, la lumière a chuté aussitôt, mais la température est restée élevée encore quelques minutes. L'humidité relative a baissé pendant que la température montait, car un air plus chaud peut contenir plus de vapeur d'eau même si la quantité d'eau qu'il contient ne change pas. Une ampoule à incandescence ou halogène montre bien cet effet ; avec une lampe LED, la hausse de température est beaucoup plus faible.

  • Objectif : ta question de recherche et ton hypothèse en une phrase.
  • Matériel : modèle de carte, capteurs, résistances et logiciels utilisés (Arduino IDE, Excel).
  • Protocole : position des capteurs, intervalle de mesure (par exemple 60 s), durée de l'expérience et méthode utilisée pour transférer les données vers Excel.
  • Tableau de mesures : chaque en-tête de colonne indique son unité ; utilise le tableau récapitulatif dans le texte et joins toutes les données brutes en annexe.
  • Graphique : un nuage de points avec titres des axes, unités et événements repérés (lampe allumée, éteinte).
  • Conclusion et sources d'erreur : compare tes résultats à l'hypothèse et cite les limites, comme la précision de ±2 °C du DHT11, la LDR non étalonnée et la distance entre le capteur et la lampe.

Envoyer les données d'un ESP32 vers Excel

Sur l'ESP32, toutes les méthodes fonctionnent de la même façon ; pour Data Streamer et PLX-DAQ, l'ESP32 n'est qu'un port série de plus. Trois choses changent : la lecture analogique est sur 12 bits (0–4095), le pont diviseur de la LDR est alimenté en 3,3 V et, comme entrée analogique, il vaut mieux choisir une des broches ADC1 (GPIO 32–39), car elles continuent de fonctionner quand le Wi-Fi est actif. Les cartes ESP32 s'utilisent généralement à 115200 bauds ; adapte la vitesse dans le script Python, dans Data Streamer et dans PLX-DAQ. Les messages du chargeur de démarrage qui apparaissent sur le port série à l'allumage ne sont pas des nombres, le script Python les ignore donc de toute façon. Si tu veux envoyer les mesures dans le cloud sans aucun ordinateur, jette un œil au guide pour enregistrer les données d'un ESP32 dans Google Sheets.

C++ (Arduino IDE)
1// ESP32: aynı CSV çıktısı, 12 bit ADC ve 3,3 V / ESP32: same CSV output, 12-bit ADC and 3.3 V
2#include <DHT.h>
3
4const int DHT_PIN = 4;                 // güvenli bir GPIO / a safe GPIO
5const int LDR_PIN = 34;                // ADC1 pini, Wi-Fi açıkken de okur / ADC1 pin, still reads with Wi-Fi on
6DHT dht(DHT_PIN, DHT11);
7
8void setup() {
9  Serial.begin(115200);                // Python'da ve Data Streamer'da da 115200 / 115200 in Python and Data Streamer too
10  dht.begin();
11  analogReadResolution(12);            // 0-4095
12}
13
14void loop() {
15  float sicaklik = dht.readTemperature();
16  float nem = dht.readHumidity();
17  int isik = map(analogRead(LDR_PIN), 0, 4095, 0, 100);   // göreli ışık, % / relative light, %
18
19  if (!isnan(sicaklik) && !isnan(nem)) {
20    // zaman_s,sicaklik,nem,isik biçimi, Uno koduyla aynı / same zaman_s,temp,hum,light format as the Uno sketch
21    Serial.printf("%.1f,%.1f,%.0f,%d\n", millis() / 1000.0, sicaklik, nem, isik);
22  }
23  delay(2000);
24}

Enregistrement CSV avec le Raspberry Pi Pico (MicroPython)

Si tu utilises MicroPython sur un Raspberry Pi Pico, tu peux écrire les mesures dans un fichier CSV de la mémoire flash de la carte au lieu de les envoyer à un ordinateur ; tu n'as alors plus besoin d'ordinateur et tu peux laisser le Pico, alimenté par une batterie externe, à l'endroit où tu veux mesurer. Le code ci-dessous utilise le capteur de température intégré (ADC4), qui ne demande aucun matériel supplémentaire, et une LDR reliée à GP26, et il écrit le fichier avec des points-virgules et une virgule décimale pour convenir à l'Excel français. Comme le capteur intégré mesure la température de la puce, il peut indiquer quelques degrés de plus que la température ambiante ; pour des mesures précises, utilise un capteur externe. Si tu débutes avec MicroPython, commence par le guide Qu'est-ce que le Raspberry Pi Pico.

Carte microcontrôleur Raspberry Pi Pico
Raspberry Pi Pico : avec MicroPython, il écrit les mesures dans un fichier CSV de sa propre mémoire flash ; tu télécharges ensuite le fichier sur l'ordinateur avec Thonny.
MicroPython
1import os
2import time
3
4import machine
5
6ldr = machine.ADC(26)                 # GP26 = ADC0, LDR + 10k bölücü / LDR + 10k divider
7ic_sensor = machine.ADC(4)            # yongadaki sıcaklık sensörü / on-chip temperature sensor
8DOSYA = "olcum.csv"
9ARALIK_S = 10                         # ölçüm aralığı, saniye / interval in seconds
10
11
12def tr(x):
13    return "{:.1f}".format(x).replace(".", ",")   # Türkçe Excel için ondalık virgül / decimal comma for Turkish Excel
14
15
16try:
17    os.stat(DOSYA)                    # dosya varsa silme, sonuna ekle / keep an existing file, append to it
18except OSError:
19    with open(DOSYA, "w") as f:
20        f.write("Sure (s);Sicaklik (C);Isik (%)\n")   # ASCII başlık / ASCII header
21
22baslangic = time.ticks_ms()
23while True:
24    volt = ic_sensor.read_u16() * 3.3 / 65535
25    sicaklik = 27 - (volt - 0.706) / 0.001721       # RP2040 veri sayfası formülü / RP2040 datasheet formula
26    isik = ldr.read_u16() * 100 / 65535             # göreli ışık, % / relative light, %
27    sure = time.ticks_diff(time.ticks_ms(), baslangic) / 1000
28    satir = "{};{};{}".format(tr(sure), tr(sicaklik), tr(isik))
29    print(satir)                                    # Thonny kabuğunda da görünür / also shown in the Thonny shell
30    with open(DOSYA, "a") as f:                     # her satırda aç-kapat / open and close for every line
31        f.write(satir + "\n")                       # elektrik kesilse de veri kalır / data survives a power cut
32    time.sleep(ARALIK_S)

Si tu enregistres le code sur le Pico depuis Thonny sous le nom main.py, la carte commence l'enregistrement toute seule à chaque mise sous tension ; si le fichier existe déjà, il n'est pas effacé et les nouvelles lignes s'ajoutent à la fin. Une fois la mesure terminée, branche le Pico à l'ordinateur, clique sur Stop dans Thonny, fais un clic droit sur olcum.csv dans le panneau Affichage > Fichiers, télécharge-le sur ton ordinateur et ouvre-le dans Excel. Avec une ligne d'environ 20 octets toutes les 10 secondes, le fichier grossit d'environ 170 Ko par jour ; le système de fichiers du Pico a largement la place pour plusieurs jours d'enregistrement. Si ton Excel utilise le point décimal, il suffit de supprimer l'appel à replace() dans la fonction tr().

Erreurs fréquentes et solutions

SymptômeCauseSolution
Le port ne s'ouvre pas, "Accès refusé" (Access is denied)Le moniteur série, le traceur série ou un autre programme utilise le portFerme toutes les fenêtres qui utilisent le port ; un seul programme peut l'ouvrir à la fois
Toutes les valeurs sont dans une seule colonneLe séparateur du CSV ne correspond pas aux paramètres régionaux d'ExcelDécoupe à la virgule avec Données > Convertir ou mets le séparateur ; dans Python
23.5 est devenu une date ou est resté du texteL'Excel français attend une virgule décimaleChoisis le point comme séparateur décimal dans Convertir > Avancé ou décoche Utiliser les séparateurs système dans Fichier > Options > Options avancées
Les accents et le signe ° sont illisiblesLe CSV a été enregistré en UTF-8 sans BOMUtilise encoding="utf-8-sig" en Python ou évite les caractères spéciaux dans les en-têtes
Le tableau se remplit de caractères bizarresLa vitesse en bauds ne correspond pasAligne la vitesse de Serial.begin() sur celle de Data Streamer, PLX-DAQ ou Python
Pas d'onglet Data StreamerLe complément n'est pas activé ou ta version d'Excel ne le prend pas en chargeActive-le dans Compléments COM ; il n'existe pas dans Excel pour macOS ni sur le web
Les boutons de PLX-DAQ ne fonctionnent pasLes macros sont bloquéesCoche Débloquer dans les Propriétés du fichier, puis clique sur Activer le contenu
PLX-DAQ ne se connecte pas au portNuméro de port COM faux ou trop élevéDans le Gestionnaire de périphériques, attribue un petit numéro (par exemple COM4) dans Paramètres du port > Avancé
HATA ou nan au lieu de la température et de l'humiditéCâblage du DHT11, résistance de tirage absente ou lectures trop fréquentesVérifie les fils et attends au moins 1 seconde entre deux lectures
Choisis l'intervalle de mesure selon tes besoins : pour des grandeurs qui varient lentement, comme la température d'une pièce, une mesure par minute suffit largement, et une journée entière d'enregistrement tient en 1 440 lignes. Une feuille Excel contient au maximum 1 048 576 lignes ; à 10 mesures par seconde, tu atteindrais cette limite en 29 heures environ. Avec des capteurs bruités, faire la moyenne de plusieurs lectures sur l'Arduino et envoyer une seule ligne réduit la taille du fichier et lisse le graphique.

Idées de projets avec l'enregistrement de données dans Excel

  • Courbe de refroidissement : mesure comment un verre d'eau chaude refroidit avec un DS18B20 étanche, ajoute une courbe de tendance exponentielle dans Excel et étudie la loi de refroidissement de Newton.
  • Mini station météo : enregistre la température, l'humidité et la pression avec un BME280 pendant une semaine et représente l'écart entre le jour et la nuit.
  • Journal d'arrosage : note la valeur du capteur d'humidité du sol avant et après l'arrosage et découvre en combien de temps la terre sèche.
  • Analyse de mouvement : dresse un tableau distance-temps avec un HC-SR04 et calcule dans Excel la vitesse et l'accélération à partir des différences entre lignes successives.
  • Courbe de décharge d'une pile : mesure la tension d'une pile avec un pont diviseur de tension, enregistre-la pendant des heures et étudie comment elle baisse avec le temps.
  • Projet pour un concours scientifique : compare l'échauffement au soleil de boîtes de différentes couleurs ; pour d'autres idées, consulte le guide des idées de projets Arduino pour concours scientifiques.

Quelle que soit la méthode choisie, la base reste la même : produire sur l'Arduino des lignes CSV propres et cohérentes, puis les faire entrer dans Excel avec le bon séparateur sur l'ordinateur. Le moniteur série est idéal pour une vérification rapide, Data Streamer pour une démonstration en direct en classe, PLX-DAQ pour piloter Excel depuis l'Arduino et Python pour les enregistrements longs et automatiques. Dans l'application BlueGrays, tu trouveras des projets comme la mesure de la température et de l'humidité avec un DHT11, la lecture de l'intensité lumineuse avec une LDR et un enregistreur de température à ESP32, pas à pas avec schémas et code, et tu pourras envoyer vers Excel les données mesurées grâce à ces méthodes.

Questions fréquentes

Comment transférer les données d'un Arduino vers Excel ?

Le plus simple est d'envoyer les mesures depuis l'Arduino sous forme de lignes séparées par des virgules avec Serial.println(), puis de faire entrer ces lignes dans Excel. Sous Windows avec Microsoft 365, le complément Data Streamer transfère les données en direct, et la macro PLX-DAQ fait un travail similaire. Sur Mac et sous Linux, enregistrer un fichier CSV avec Python et pyserial est la solution la plus pratique.

Excel Data Streamer fonctionne-t-il sur Mac ?

Non. Data Streamer est un complément COM disponible uniquement dans l'Excel de bureau de Microsoft 365 sous Windows ; il n'existe ni dans Excel pour macOS ni dans la version web. Sur Mac, tu peux créer un fichier CSV ou .xlsx avec Python, ou enregistrer la sortie série dans un fichier avec un programme de terminal comme CoolTerm.

PLX-DAQ fonctionne-t-il avec Excel 64 bits ?

Le PLX-DAQ original de Parallax ne fonctionne qu'avec Excel 32 bits. PLX-DAQ v2, développé par la communauté Arduino, prend aussi en charge Excel 64 bits et utilise les mêmes commandes CLEARDATA, LABEL et DATA. Les deux versions sont des macros VBA : elles ne fonctionnent donc que sous Windows, avec les macros activées.

Comment enregistrer les données du moniteur série Arduino ?

Le moniteur série n'a pas de bouton d'enregistrement ; tu sélectionnes les lignes à la souris, tu les copies avec Ctrl+C et tu les colles dans un fichier texte ou directement dans Excel. Si tu actives l'option d'horodatage, l'heure de l'ordinateur est ajoutée à chaque ligne. Pour de longs enregistrements, il est plus sûr d'utiliser la fonction de capture dans un fichier de PuTTY ou de CoolTerm, ou un script Python.

Pourquoi mon fichier CSV s'ouvre-t-il dans une seule colonne dans Excel ?

Avec les paramètres régionaux français, Excel attend un point-virgule comme séparateur de colonnes ; en double-cliquant sur un fichier séparé par des virgules, toutes les valeurs restent dans la colonne A. Tu peux découper les données à la virgule avec Données > Convertir, ou importer le fichier avec Données > À partir d'un fichier texte/CSV et choisir toi-même le délimiteur. Si tu génères le fichier avec Python, utiliser dès le départ un point-virgule comme séparateur est la solution la plus durable.

Comment enregistrer les données d'un Arduino sans ordinateur ?

Sans ordinateur, tu peux écrire les mesures dans un fichier CSV sur un module carte SD et prendre la date et l'heure d'un module RTC ; plus tard, tu mets la carte dans l'ordinateur et tu ouvres le fichier dans Excel. Avec un ESP32 doté du Wi-Fi, tu peux envoyer les données directement vers Google Sheets. Un Raspberry Pi Pico peut écrire un fichier CSV dans sa propre mémoire flash avec MicroPython.

Voir tous les projets
Température et humidité avec DHT11
#55Intermédiaire

Température et humidité avec DHT11

Quelle température fait-il dans ta chambre, et l'air est-il humide ou sec ? Le capteur DHT11 mesure la température et l'humidité, et l'Arduino affiche les valeurs sur un écran LCD à deux lignes, mises

4.7(47)
73
Mesurer l'intensité lumineuse avec une LDR
#11Débutant

Mesurer l'intensité lumineuse avec une LDR

Envie de voir en chiffres à quel point ta chambre est lumineuse ? Le LDR, une petite pièce sensible à la lumière, mesure la lumière ambiante, et l'Arduino écrit la valeur sur l'écran de ton ordinateur

4.6(81)
139
HC-SR04 Mesure de la distance (affichage en série)
#27Débutant

HC-SR04 Mesure de la distance (affichage en série)

Le capteur HC-SR04 fonctionne comme une chauve-souris qui trouve son chemin dans le noir : il envoie un son que tu ne peux pas entendre, écoute l'écho et mesure à quelle distance se trouve l'objet dev

4.6(46)
71
Mesure de l'intensité lumineuse avec le module LDR ESP32
#113Débutant

Mesure de l'intensité lumineuse avec le module LDR ESP32

Suivi en temps réel sur le moniteur série de la valeur brute de l'ADC du module LDR et du pourcentage relatif de luminosité calculé à partir de références dans l'obscurité et à la lumière. Ce pourcentage n'est pas une mesure en lux. Permet de comprendre le principe de calibrage du module. Il est préférable de réaliser cet exercice avant le projet 10, car il sert à déterminer la valeur seuil.

4.6(36)
55
Enregistreur de Température ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
#144Avancé
Premium

Enregistreur de Température ESP32 (DHT22 + DS1307 RTC + microSD + OLED)

Construis un enregistreur de température horodaté avec ESP32 ! Lis la température/humidité du DHT22 chaque minute, obtiens l'heure réelle du DS1307 RTC et enregistre sur carte microSD au format CSV. L'OLED affiche en direct la température (grande police), le pourcentage d'humidité, l'horodatage et le compteur. Le fichier /temp_log.csv sur la carte SD s'ouvre dans Excel, Google Sheets ou Python pandas pour analyse — parfait pour surveillance de serre, suivi de température à domicile, c

4.7(7)
12
ESP32 DHT22 Température et humidité (avec écran LCD)
#117Intermédiaire

ESP32 DHT22 Température et humidité (avec écran LCD)

Il s'agit d'un projet permettant de mesurer la température ambiante et le taux d'humidité à l'aide d'un capteur DHT22 et d'afficher ces données en temps réel sur un écran LCD I2C 16x2. Les données du capteur sont lues à l'aide du protocole one-wire grâce à la bibliothèque Adafruit DHT. Ce projet constitue la base des stations météo IoT, de la domotique ou des systèmes de surveillance de l'environnement dans les serres.

4.8(38)
56
Mesure de la température avec NTC et écran LCD 2x16
#44Débutant
Premium

Mesure de la température avec NTC et écran LCD 2x16

Mesure la température ambiante avec un capteur qui ressemble à une petite perle. Cette pièce, appelée NTC, laisse passer l'électricité de plus en plus facilement en chauffant ; l'Arduino lit ce change

4.5(33)
44
Horloge numérique avec ESP32 et RTC DS1307 (I2C + LCD)
#120Intermédiaire
Premium

Horloge numérique avec ESP32 et RTC DS1307 (I2C + LCD)

Dans ce projet, nous affichons l'heure et la date sur un écran LCD 16x2 I2C à l'aide du module d'horloge en temps réel (RTC) DS1307. Le DS1307 est une RTC avec batterie de secours qui conserve l'heure même si l'ESP32 s'éteint. Les deux modules partagent la même ligne I2C (SDA/SCL), ce qui nous permet d'apprendre à contrôler plusieurs appareils avec seulement deux fils de signal. Vous decouvrirez ainsi le protocole I2C et le fonctionnement des modules RTC en pratique.

4.6(26)
40