Arduino Excel Veri Aktarma: Data Streamer, PLX-DAQ ve Python
Arduino Excel veri aktarma rehberi: Serial Monitor'den CSV, Data Streamer, PLX-DAQ ve Python ile canlı kayıt, zaman damgası, grafik ve deney raporu tablosu.
Arduino Excel veri aktarma, Arduino'nun sensörlerden okuduğu değerleri USB kablosu üzerinden bilgisayara gönderip bir Excel tablosunda satır satır toplamaktır. Arduino her ölçümü virgülle ayrılmış tek bir satır olarak seri porta yazar; bilgisayar tarafında bu satırları Excel'e taşımanın dört yaygın yolu vardır: Serial Monitor çıktısını CSV olarak kaydetmek, Microsoft'un Data Streamer eklentisi, PLX-DAQ makrosu ve Python ile otomatik kayıt. Hepsinde mantık aynıdır: Arduino'nun gönderdiği her satır Excel'de bir satıra, her virgül de yeni bir sütuna dönüşür.
Bu rehberde örnek olarak bir DHT11 sıcaklık ve nem sensörüyle bir LDR ışık sensörü kullanıyoruz. Önce dört yöntemi karşılaştırıp sana uygun olanı seçmeni kolaylaştıracağız, sonra her birini adım adım kuracağız. Ardından ölçümlere zaman damgası eklemeyi, Excel'de doğru grafik türünü seçmeyi ve okulda ya da bilim fuarında kullanabileceğin bir deney raporu ölçüm tablosu hazırlamayı göreceğiz. Son bölümlerde aynı işi ESP32 ve Raspberry Pi Pico ile yapmayı ve en sık karşılaşılan hataların çözümlerini bulacaksın.

Arduino'dan Excel'e veri aktarma nasıl çalışır?
Arduino'nun Excel'e doğrudan yazma yeteneği yoktur; yalnızca Serial.print() ile seri porta metin gönderir. Bilgisayar bu porta Windows'ta COM3, macOS'ta /dev/cu.usbmodem…, Linux'ta /dev/ttyACM0 gibi bir adla erişir. Excel ile Arduino arasındaki ortak dil CSV'dir (Comma Separated Values, virgülle ayrılmış değerler): 12.0,23.0,45,78 gibi bir satır dört sütuna bölünür. Bu yüzden kodda iki kurala uyman yeterli: değerlerin arasına her zaman aynı ayırıcıyı koy ve her ölçümü Serial.println() ile bitir. Seri portun temellerini Arduino Serial Monitor yazısında ayrıntılı bulabilirsin.
| Yöntem | Platform | Canlı aktarım | Zaman bilgisi | En uygun olduğu iş |
|---|---|---|---|---|
| Serial Monitor + CSV | Windows, macOS, Linux | Hayır, ölçüm bitince kopyalanır | IDE'nin zaman damgası seçeneği | Kısa deneyler, hızlı kontrol |
| Excel Data Streamer | Windows, Microsoft 365 masaüstü Excel | Evet | Arduino'dan millis() gönderilir | Sınıfta canlı grafik |
| PLX-DAQ v2 | Windows, masaüstü Excel (makro) | Evet | DATE, TIME ve TIMER komutları | Hazır tabloya uzun kayıt |
| Python (pyserial + openpyxl) | Windows, macOS, Linux | Evet, dosyaya | Bilgisayar saati | Otomatik rapor, saatlerce kayıt |
| SD kart modülü | Bilgisayar gerekmez | Hayır, kart sonradan okunur | RTC modülü | Sahada, pille ölçüm |
Örnek devre: DHT11 ve LDR bağlantısı
Örnek devrede iki sensör var. DHT11 sıcaklığı 1 °C, nemi %1 çözünürlükle ölçer; doğruluğu yaklaşık ±2 °C ve ±%5 bağıl nemdir ve tek bir veri pini yeterlidir. LDR ise ışık arttıkça direnci düşen bir fotodirençtir; 10 kΩ'luk bir dirençle gerilim bölücü kurup orta noktayı analog pine bağlarsın. Aşağıdaki bağlantıda ışık arttıkça analog değer de artar. LDR'nin verdiği sayı lüks cinsinden değil, göreli bir ışık düzeyidir; raporunda bunu "ışık (%)" diye belirtmen dürüst olur. Gerçek lüks değeri gerekiyorsa BH1750 gibi kalibre edilmiş bir ışık sensörü kullanmalısın.
| Bağlantı | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| DHT11 VCC (+) | 5V | 3V3 | Yerleşik sensör kullanılır |
| DHT11 DATA (OUT) | D2 | GPIO 4 | Yerleşik sensör (ADC4) |
| DHT11 GND (-) | GND | GND | - |
| LDR 1. bacak | 5V | 3V3 | 3V3(OUT), pin 36 |
| LDR 2. bacak + 10 kΩ | A0 | GPIO 34 | GP26 (ADC0), pin 31 |
| 10 kΩ'un diğer ucu | GND | GND | AGND, pin 33 |

Arduino kodu: ölçümleri CSV satırı olarak göndermek
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}Kod Adafruit'in DHT sensor library kütüphanesini kullanır; Kütüphane Yöneticisi'nden kurarken bağımlılığı olan Adafruit Unified Sensor'ı da kurmayı kabul et. Ölçümler 2 saniyede bir, delay() yerine millis() ile zamanlanır; böylece loop() hiç bloklanmaz (ayrıntılar millis ve delay yazısında). Her satır sırasıyla süre, sıcaklık, nem ve ışık sütunlarından oluşur. Serial.print(sicaklik, 1) sayıyı tek ondalık basamakla ve her zaman nokta ile yazar. Sensör okunamazsa sayı yerine "HATA" yazılır; böylece tabloda bozuk satırı hemen görür ve filtrelersin. Setup'taki başlık satırı Serial Monitor ve Python yöntemlerinde işine yarar; Data Streamer kullanacaksan bu satırı silebilirsin. Oda sıcaklığı gibi yavaş değişen ölçümlerde ARALIK değerini 60000 yaparak dakikada bir ölçüm alabilirsin.
Yöntem 1: Serial Monitor çıktısını CSV olarak kaydetmek
- Kodu yükle, Araçlar > Seri Port Ekranı'nı (Serial Monitor) aç ve hız menüsünden 9600 baud seç.
- İstersen zaman damgasını aç: Arduino IDE 2'de pencerenin sağ üstündeki saat simgesine, IDE 1.8'de alttaki zaman damgası kutusuna tıkla. Her satırın başına 14:03:21.512 -> biçiminde bilgisayarın saati eklenir.
- Deney bitince satırları fareyle seç ve Ctrl+C ile kopyala (macOS'ta Cmd+C). Ham veriyi saklamak istersen Not Defteri'ne yapıştırıp kayıt türünü Tüm Dosyalar seçerek olcum.csv adıyla kaydet.
- Excel'de boş bir sayfanın A1 hücresine tıkla ve Ctrl+V ile yapıştır; tüm satırlar A sütununa yerleşir.
- A sütunu seçiliyken Veri > Metni Sütunlara Dönüştür'ü aç, Sınırlandırılmış'ı seç ve ayırıcı olarak Virgül'ü işaretle. Zaman damgası açıksa Boşluk'u da işaretle: saat ilk sütuna, "->" işaretleri ikinci sütuna düşer, o sütunu sonra silersin.
- Son adımda Gelişmiş düğmesine bas ve ondalık ayırıcıyı nokta yap; böylece 23.5 gibi değerler Türkçe Excel'de de sayı olarak tanınır. Son'a bas ve dosyayı .xlsx olarak kaydet.
Bu yöntem birkaç yüz satıra kadar çok pratiktir; binlerce satırda hem seçmek zorlaşır hem de IDE penceresi yavaşlar. Saatler süren kayıtlarda PuTTY (Session > Logging > All session output) ya da Windows, macOS ve Linux'ta çalışan CoolTerm (Connection > Capture to Text/Binary File) gibi terminal programları gelen her satırı doğrudan bir dosyaya yazar. Bu dosyayı da aynı adımlarla Excel'e alırsın. Unutma: bir terminal programı ya da Serial Monitor portu kullanırken Excel eklentileri ve Python aynı porta bağlanamaz.
Yöntem 2: Excel Data Streamer ile canlı veri aktarma
Data Streamer, Microsoft'un eğitim için geliştirdiği ve seri porttan gelen CSV satırlarını doğrudan bir çalışma sayfasına akıtan ücretsiz bir eklentidir. Microsoft 365'teki masaüstü Excel ile (sürüm 1902 ve sonrası) birlikte gelir; yalnızca etkinleştirmen gerekir. Bir COM eklentisi olduğu için yalnızca Windows'ta çalışır, macOS'taki Excel'de ve tarayıcıdaki Excel'de bulunmaz. Arduino tarafında ek bir şey yapmana gerek yoktur: yukarıdaki kod, eklentinin varsayılan hızı olan 9600 baud ile olduğu gibi çalışır.
- Excel'de Dosya > Seçenekler > Eklentiler'i aç, alttaki Yönet listesinden COM Eklentileri'ni seçip Git'e bas.
- Microsoft Data Streamer for Excel kutusunu işaretle ve Tamam'a bas; şeritte Data Streamer sekmesi belirir.
- Arduino IDE'deki Serial Monitor'ü kapat; seri port aynı anda yalnızca bir programa açılabilir.
- Connect a Device düğmesinden Arduino'nun COM portunu seç, ardından Start Data'ya bas. Excel'in diline göre düğme adları çevrilmiş görünebilir.
- Excel üç sayfa oluşturur: Data In (gelen veriler), Data Out (Arduino'ya gidecek veriler) ve Settings (ayarlar). Settings sayfasında Data Channels değerini 4 yap ve tabloda daha fazla geçmiş görmek için Data Rows değerini artır.
- Kalıcı kayıt için Record Data ile kaydı başlat; Stop Recording ile durdurduğunda ölçümler bir CSV dosyasına kaydedilmiş olur. Bu dosyayı daha sonra Import Data File ile yeniden oynatabilirsin.
Data In sayfasının üst kısmında en son gelen değerler (Current Data), altında da geçmiş ölçümlerin aktığı bir tablo (Historical Data) bulunur. Bu tabloyu seçip Ekle > Önerilen Grafikler ile bir çizgi ya da dağılım grafiği eklersen grafik her yeni veride kendiliğinden güncellenir; sensörün önüne elini tuttuğunda ışık eğrisinin anında düştüğünü sınıfa göstermek için idealdir. Settings sayfasındaki Data Interval (ms) sayfanın ne sıklıkla yenileneceğini, Data Orientation ise en yeni verinin tablonun üstünde mi altında mı görüneceğini belirler. Data Out sayfasına yazdığın değerler de CSV satırı olarak Arduino'ya gönderilir; Arduino bunları Serial.parseInt() ile okuyarak örneğin bir alarm eşiğini Excel'den ayarlayabilir.
Yöntem 3: PLX-DAQ makrosu ile Excel'e satır satır yazmak
PLX-DAQ (Parallax Data Acquisition), Excel'in içinde çalışan bir VBA makrosudur ve seri porttan gelen özel komutları Excel hücrelerine dönüştürür. Parallax'ın orijinal sürümü yalnızca 32 bit Excel'de çalıştığı için bugün Arduino topluluğunun geliştirdiği PLX-DAQ v2 kullanılır; 64 bit Excel'i destekler ve tek bir .xlsm dosyası olarak gelir. Makro Windows API'sine dayandığından o da yalnızca Windows'ta çalışır. Data Streamer'dan farkı, Excel'i Arduino'nun yönetmesidir: başlıkları kendisi yazar, sayfayı temizler, tarihi ve saati Excel'e ekletir.
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}| Komut | Ne yapar? |
|---|---|
| CLEARDATA | Sayfadaki eski ölçümleri siler |
| LABEL,Tarih,Saat,... | 1. satıra sütun başlıklarını yazar |
| DATA,... | Bir sonraki boş satıra yeni ölçümü yazar |
| DATE ve TIME | DATA satırında bilgisayarın tarihi ve saatiyle değiştirilir |
| TIMER | Kayıt başladığından ya da RESETTIMER'dan beri geçen saniye |
| RESETTIMER | TIMER sayacını sıfırlar |
| ROW,SET,2 | Sonraki verinin yazılacağı satırı belirler |
| CELL,SET,G2,25 / CELL,GET,G2 | Bir hücreye değer yazar ya da hücredeki değeri Arduino'ya geri gönderir |
| SAVEWORKBOOK | Excel dosyasını kaydeder |
- PLX-DAQ v2 dosyasını indirip zip'ten çıkar. .xlsm dosyasına sağ tıkla, Özellikler'de Engellemeyi kaldır kutusunu işaretle; Office internetten gelen dosyalardaki makroları varsayılan olarak engeller.
- Dosyayı aç ve üstteki sarı çubukta İçeriği Etkinleştir'e tıkla.
- Arduino IDE'deki Serial Monitor'ü kapat ve sayfadaki Open PLX DAQ UI düğmesine bas.
- Açılan pencerede Port kutusuna yalnızca COM numarasını yaz (COM5 için 5), Baud olarak 9600 seç ve Connect'e bas.
- Başlıklar gelmediyse Arduino'nun reset düğmesine bas: setup() yeniden çalışır, CLEARDATA ve LABEL komutları Excel'e ulaşır ve satırlar akmaya başlar.
- Kaydı bitirince Disconnect'e bas ve verileri istersen ayrı bir .xlsx dosyası olarak kaydet.
Yöntem 4: Python ile otomatik CSV ve Excel dosyası
Mac ya da Linux kullanıyorsan, saatlerce kayıt yapacaksan ya da raporu her seferinde elle hazırlamaktan sıkıldıysan en esnek yol Python'dur. Önce terminalde python -m pip install pyserial openpyxl komutuyla iki paketi kur. Aşağıdaki ilk betik Arduino'yu dinler ve her ölçümü bilgisayarın saatiyle birlikte deney_olcumleri.csv dosyasına yazar. Port bulma, otomatik reset ve canlı grafik gibi konuların ayrıntılarını Arduino Python seri haberleşme yazısında anlattık.
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)Betikteki üç ayrıntı Excel uyumunu sağlar. utf-8-sig kodlaması dosyanın başına görünmez bir BOM işareti ekler; bu işaret olmadan Excel "Sıcaklık" ve "°C" gibi karakterleri bozuk gösterir. AYIRICI ve ONDALIK sabitleri Türkçe Excel için noktalı virgül ve ondalık virgüle ayarlıdır; İngilizce bölge ayarlı bir bilgisayarda bunları virgül ve nokta yapman yeterli. f.flush() ise her satırı anında diske yazar; bilgisayar kapanırsa ya da kablo çıkarsa en fazla son ölçümü kaybedersin. Ctrl+C ile durdurduktan sonra dosyaya çift tıklaman yeterlidir, sütunlar doğru ayrılmış olarak açılır. Kayıt sürerken dosyayı incelemek istersen Excel açtığı dosyaları kilitleyebildiği için bir kopyasını aç.
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)İkinci betik CSV'yi gerçek bir .xlsx dosyasına çevirir. .xlsx içinde sayılar metin olarak değil sayı olarak saklandığı için ayırıcı ve ondalık sorunu tamamen ortadan kalkar; dosya Türkçe, Almanca ya da İngilizce Excel'de aynı şekilde açılır. Betik ayrıca ortalama, en düşük, en yüksek ve standart sapmayı hesaplayan bir özet tablo ile sıcaklık ve ışık için iki dağılım grafiği ekler. Formüller dosyaya İngilizce adlarıyla (AVERAGE, MIN, MAX, STDEV) yazılır; Excel açarken bunları kendi diline çevirir, Türkçe Excel'de ORTALAMA, MİN, MAK ve STDSAPMA olarak görürsün. delete = False satırları, openpyxl'in yeni sürümleriyle oluşturulan grafiklerde eksen etiketlerinin görünmemesi sorununu önler.
Zaman damgası eklemek: millis(), bilgisayar saati ya da RTC
| Kaynak | Nasıl alınır? | Artısı | Eksisi |
|---|---|---|---|
| millis() | Arduino kodunda millis() / 1000.0 | Ek donanım gerekmez, milisaniye hassasiyeti | Her resette sıfırlanır, gerçek tarih değildir, 49,7 günde taşar |
| Bilgisayar saati | Python datetime, PLX-DAQ DATE ve TIME, Serial Monitor zaman damgası | Gerçek tarih ve saat, kurulum gerekmez | Bilgisayar sürekli bağlı olmalı |
| RTC modülü (DS3231, DS1307) | RTClib ile rtc.now() | Bilgisayarsız çalışır, pil saati korur | Ek modül gerekir; DS1307 günde birkaç saniye kayabilir |
| İnternet saati (NTP) | ESP32'de configTime() | Ayar gerektirmeyen, saniye hassasiyetinde doğru saat | Wi-Fi bağlantısı gerekir |
Bilgisayara bağlı deneylerde en kolayı bilgisayar saatidir; Python betiğimiz de her satıra bunu yazar. Arduino'nun gönderdiği süre değerini de saklamak iyi bir alışkanlıktır: ölçümler arasındaki gerçek aralığı gösterir ve bir satır kaybolursa hemen fark edersin. Arduino'dan ham millis() değeri gönderirsen Excel'de =B2/1000 formülüyle saniyeye, =B2/60000 ile dakikaya çevirebilirsin. Arduino bilgisayardan bağımsız çalışacaksa, örneğin bir SD karta kayıt yapacaksa, tarih ve saati bir RTC saat modülünden almalısın; SD karta CSV kaydının ayrıntıları SD kart modülü yazısında. ESP32 kullanıyorsan saati internetten de çekebilirsin: ESP32 ile NTP saat.
Excel'de grafik oluşturmak
- Süre ve sıcaklık sütunlarını başlıklarıyla birlikte seç; sütunlar yan yana değilse ikincisini Ctrl tuşuna basılı tutarak seç.
- Ekle > Grafikler > Dağılım (X, Y) menüsünden çizgili bir dağılım türü seç.
- Grafiğin yanındaki + düğmesinden Eksen Başlıkları'nı aç ve eksenlere birimleriyle ad ver: "Süre (s)" ve "Sıcaklık (°C)".
- Işık serisini eklemek için grafiğe sağ tıkla, Veri Seç > Ekle ile ışık sütununu ekle; ölçekler çok farklı olduğu için seriye sağ tıklayıp Veri Serisini Biçimlendir > İkincil Eksen'i seç.
- Dikey eksene sağ tıklayıp Ekseni Biçimlendir'den en küçük ve en büyük değerleri sabitle; böylece 1 °C'lik bir değişim dev bir dalgalanma gibi görünmez.
Neden çizgi grafik değil de dağılım grafiği? Excel'in Çizgi grafiği yatay eksendeki değerleri eşit aralıklı etiketler olarak görür; bir ölçüm kaçtığında ya da ölçüm aralığını değiştirdiğinde zaman ekseni sessizce bozulur. Dağılım (X, Y) grafiği ise her noktayı gerçek zamanına göre yerleştirir; bilimsel bir grafikte beklenen de budur. Yalnızca birkaç sabit değeri karşılaştıracaksan, örneğin üç farklı odadaki ortalama sıcaklığı, sütun grafik daha okunaklıdır. Sensör gürültülüyse seriye sağ tıklayıp Eğilim Çizgisi Ekle > Hareketli Ortalama seçeneğiyle eğriyi yumuşatabilirsin.
Deney raporu için ölçüm tablosu örneği
Diyelim ki deneyin sorusu şu: "Masa lambası açıldığında yakınındaki havanın sıcaklığı, nemi ve ışık düzeyi nasıl değişir?" Sensörleri lambadan yaklaşık 15 cm uzağa yerleştirip koddaki ARALIK değerini 60000 yaptık, yani dakikada bir ölçüm aldık. 1. dakikada lambayı açtık, 6. dakikada kapattık. Aşağıdaki değerler bu düzenekle elde edilebilecek tipik örnek değerlerdir; son iki satır Excel formülleriyle hesaplanan özetlerdir:
| Süre (dk) | Sıcaklık (°C) | Nem (%) | Işık (%) | Durum |
|---|---|---|---|---|
| 0 | 23 | 46 | 14 | Lamba kapalı |
| 1 | 23 | 46 | 81 | Lamba açıldı |
| 2 | 24 | 45 | 82 | Lamba açık |
| 3 | 25 | 44 | 82 | Lamba açık |
| 4 | 26 | 43 | 83 | Lamba açık |
| 5 | 26 | 42 | 83 | Lamba açık |
| 6 | 26 | 42 | 15 | Lamba kapandı |
| 7 | 25 | 43 | 14 | Lamba kapalı |
| 8 | 24 | 45 | 14 | Lamba kapalı |
| Ortalama | 24,7 | 44,0 | 52,0 | - |
| En düşük / en yüksek | 23 / 26 | 42 / 46 | 14 / 83 | - |
Özet satırlarını Excel'de =ORTALAMA(B2:B10), =MİN(B2:B10) ve =MAK(B2:B10) formülleriyle hesaplarsın; ölçümlerin ne kadar dağıldığını göstermek için =STDSAPMA(B2:B10) de ekleyebilirsin. Sonuçları yorumlarken tablodaki örüntüyü anlat: lamba açılır açılmaz ışık %14'ten %81'e sıçradı, sıcaklık ise yaklaşık 3 dakikada yavaş yavaş 3 °C yükseldi; buna ısıl eylemsizlik denir. Lamba kapanınca ışık hemen düştü ama sıcaklık birkaç dakika daha yüksek kaldı. Bağıl nem sıcaklık artarken azaldı, çünkü havadaki su miktarı değişmese de ısınan hava daha fazla nem taşıyabilir. Akkor ya da halojen lamba bu etkiyi belirgin gösterir; LED lambada sıcaklık artışı çok daha küçük olur.
- Amaç: Tek cümlelik araştırma sorusu ve hipotezin.
- Malzemeler: Kart modeli, sensörler, dirençler ve kullandığın yazılımlar (Arduino IDE, Excel).
- Yöntem: Sensörlerin konumu, ölçüm aralığı (örneğin 60 s), deneyin süresi ve verilerin Excel'e hangi yöntemle aktarıldığı.
- Ölçüm tablosu: Her sütun başlığında birim olsun; metinde özet tabloyu kullan, ham verinin tamamını ek olarak ver.
- Grafik: Eksen başlıkları, birimler ve olayların (lamba açıldı, kapandı) işaretlendiği bir dağılım grafiği.
- Sonuç ve hata kaynakları: Bulguların hipotezle karşılaştırması; DHT11'in ±2 °C doğruluğu, LDR'nin kalibre olmaması ve sensörün lambaya uzaklığı gibi sınırlamalar.
ESP32 ile Excel'e veri aktarma
ESP32'de de bütün yöntemler aynı şekilde çalışır; Data Streamer ve PLX-DAQ için ESP32 yalnızca başka bir seri porttur. Değişen üç şey var: analog okuma 12 bittir (0–4095), LDR bölücüsü 3,3 V ile beslenir ve analog pin olarak Wi-Fi açıkken de çalışan ADC1 pinlerinden birini (GPIO 32–39) seçmelisin. ESP32'ler genellikle 115200 baud ile kullanılır; Python betiğinde, Data Streamer'da ve PLX-DAQ'ta hızı buna göre değiştir. Açılışta seri porta düşen önyükleyici mesajları sayı olmadığı için Python betiği tarafından zaten atlanır. Bilgisayara hiç bağlamadan ölçümleri buluta göndermek istersen ESP32 ile Google E-Tablolar'a veri kaydı yazısına göz at.
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}Raspberry Pi Pico ile CSV kaydı (MicroPython)
Raspberry Pi Pico'da MicroPython kullanıyorsan ölçümleri bilgisayara göndermek yerine kartın kendi flaş belleğindeki bir CSV dosyasına yazabilirsin; böylece bilgisayar gerekmez, Pico'yu bir powerbank ile besleyip ölçüm yapılacak yere bırakırsın. Aşağıdaki kod ek sensör gerektirmeyen yerleşik sıcaklık sensörünü (ADC4) ve GP26'ya bağlı LDR'yi kullanır, dosyayı da Türkçe Excel'e uygun olsun diye noktalı virgül ve ondalık virgülle yazar. Yerleşik sensör yonganın sıcaklığını ölçtüğü için ortam sıcaklığından birkaç derece yüksek okuyabilir; hassas ölçüm için harici bir sensör kullan. MicroPython'a yeni başlıyorsan Raspberry Pi Pico nedir yazısıyla başlayabilirsin.

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)Kodu Thonny'de main.py adıyla Pico'ya kaydedersen kart her açıldığında kayda kendiliğinden başlar; dosya zaten varsa silinmez, yeni satırlar sonuna eklenir. Ölçüm bitince Pico'yu bilgisayara bağla, Thonny'de Stop'a bas, Görünüm > Dosyalar panelinde olcum.csv'ye sağ tıklayıp bilgisayarına indir ve Excel'de aç. 10 saniyede bir yazılan yaklaşık 20 baytlık satırlar günde 170 KB civarında yer tutar; Pico'nun dosya sisteminde bu, birkaç günlük kayda rahatça yer demektir. Ondalık ayırıcısı nokta olan İngilizce bir Excel kullanıyorsan tr() fonksiyonundaki replace() çağrısını kaldırman yeterli.
Sık yapılan hatalar ve çözümleri
| Belirti | Neden | Çözüm |
|---|---|---|
| Port açılmıyor, "Access is denied" (Erişim engellendi) | Serial Monitor, Serial Plotter ya da başka bir program portu kullanıyor | Portu kullanan tüm pencereleri kapat; port aynı anda tek programa açılır |
| Tüm değerler tek sütunda | CSV ayırıcısı Excel'in bölge ayarıyla uyuşmuyor | Veri > Metni Sütunlara Dönüştür ile virgülden böl ya da Python'da ayırıcıyı ; yap |
| 23.5 değeri 23 Mayıs oldu ya da metin kaldı | Türkçe Excel ondalık ayırıcı olarak virgül bekliyor | Metni Sütunlara Dönüştür > Gelişmiş'te ondalık ayırıcıyı nokta yap ya da Dosya > Seçenekler > Gelişmiş'te Sistem ayırıcılarını kullan kutusunu kaldır |
| Türkçe harfler ve ° işareti bozuk | CSV, BOM olmadan UTF-8 kaydedilmiş | Python'da encoding="utf-8-sig" kullan ya da başlıklarda Türkçe karakter kullanma |
| Tabloya anlamsız karakterler doluyor | Baud hızı uyuşmuyor | Serial.begin() ile Data Streamer, PLX-DAQ ya da Python'daki hızı eşitle |
| Data Streamer sekmesi yok | Eklenti etkin değil ya da Excel sürümü desteklemiyor | COM Eklentileri'nden etkinleştir; macOS ve web Excel'de bu eklenti yoktur |
| PLX-DAQ düğmeleri çalışmıyor | Makrolar engellenmiş | Dosya Özellikleri'nde Engellemeyi kaldır'ı işaretle, ardından İçeriği Etkinleştir'e tıkla |
| PLX-DAQ porta bağlanamıyor | Yanlış ya da çok yüksek COM numarası | Aygıt Yöneticisi'nde portun Bağlantı Noktası Ayarları > Gelişmiş bölümünden COM numarasını küçük bir değere (örneğin COM4) çek |
| Sıcaklık ve nem yerine HATA ya da nan | DHT11 bağlantısı, eksik pull-up ya da çok sık okuma | Kabloları kontrol et, iki okuma arasında en az 1 saniye bekle |
Excel'e veri aktarma ile proje fikirleri
- Soğuma eğrisi: Sıcak bir bardak suyun soğumasını su geçirmez DS18B20 ile ölç, Excel'de üstel eğilim çizgisi ekleyerek Newton'un soğuma yasasını incele.
- Mini hava istasyonu: BME280 ile sıcaklık, nem ve basıncı bir hafta boyunca kaydet, gece ve gündüz arasındaki farkı grafikle göster.
- Bitki sulama günlüğü: Toprak nem sensörünün değerini sulamadan önce ve sonra kaydedip toprağın ne kadar sürede kuruduğunu bul.
- Hareket analizi: HC-SR04 ile mesafe-zaman tablosu çıkar, Excel'de ardışık satırların farkından hız ve ivme hesapla.
- Pil boşalma eğrisi: Bir pilin gerilimini gerilim bölücüyle ölçerek saatlerce kaydet ve gerilimin zamana göre nasıl düştüğünü incele.
- Bilim fuarı projesi: Farklı renkteki kutuların güneş altında ne kadar ısındığını karşılaştır; daha fazla fikir için TÜBİTAK Arduino proje fikirleri yazısına bak.
Hangi yöntemi seçersen seç temel aynıdır: Arduino'da temiz ve tutarlı CSV satırları üret, bilgisayarda bunları doğru ayırıcıyla Excel'e taşı. Hızlı bir kontrol için Serial Monitor, sınıfta canlı gösteri için Data Streamer, Excel'i Arduino'dan yönetmek için PLX-DAQ, uzun ve otomatik kayıt için Python en iyi sonucu verir. BlueGrays uygulamasında DHT11 ile sıcaklık ve nem ölçümü, LDR ile ışık şiddeti okuma ve ESP32 sıcaklık kaydedici gibi projeleri devre şemaları ve kodlarıyla adım adım bulabilir, ölçtüğün verileri bu yöntemlerle Excel'e aktarabilirsin.
Sıkça sorulan sorular
Arduino verileri Excel'e nasıl aktarılır?
En kolay yol, Arduino'da ölçümleri virgülle ayrılmış satırlar hâlinde Serial.println() ile göndermek ve bu satırları Excel'e almaktır. Windows'ta Microsoft 365 kullanıyorsan Data Streamer eklentisi veriyi canlı aktarır, PLX-DAQ makrosu da benzer işi yapar. Mac ve Linux'ta ise Python ve pyserial ile CSV dosyasına kaydetmek en pratik çözümdür.
Excel Data Streamer Mac'te çalışır mı?
Hayır. Data Streamer bir COM eklentisidir ve yalnızca Windows'taki Microsoft 365 masaüstü Excel'de bulunur; macOS'taki Excel'de ve web sürümünde yoktur. Mac'te Python ile CSV ya da .xlsx dosyası oluşturabilir veya CoolTerm gibi bir terminal programıyla seri çıktıyı dosyaya kaydedebilirsin.
PLX-DAQ 64 bit Excel'de çalışır mı?
Parallax'ın orijinal PLX-DAQ'ı yalnızca 32 bit Excel'de çalışır. Arduino topluluğunun geliştirdiği PLX-DAQ v2 ise 64 bit Excel'i de destekler ve aynı CLEARDATA, LABEL ve DATA komutlarını kullanır. İki sürüm de VBA makrosu olduğu için yalnızca Windows'ta çalışır ve makroların etkinleştirilmesi gerekir.
Arduino Serial Monitor verileri nasıl kaydedilir?
Serial Monitor'de bir kaydet düğmesi yoktur; satırları fareyle seçip Ctrl+C ile kopyalar, bir metin dosyasına ya da doğrudan Excel'e yapıştırırsın. Zaman damgası seçeneğini açarsan her satıra bilgisayarın saati eklenir. Uzun kayıtlarda PuTTY ya da CoolTerm'in dosyaya kaydetme özelliğini veya bir Python betiğini kullanmak daha güvenlidir.
CSV dosyası Excel'de neden tek sütunda açılıyor?
Türkçe bölge ayarlı Windows'ta Excel, sütun ayırıcı olarak noktalı virgül bekler; virgülle ayrılmış bir dosyaya çift tıklayınca tüm değerler A sütununda kalır. Verileri Veri > Metni Sütunlara Dönüştür ile virgülden bölebilir ya da dosyayı Veri > Metinden/CSV'den ile içe aktarıp sınırlayıcıyı elle seçebilirsin. Dosyayı Python ile üretiyorsan ayırıcıyı baştan noktalı virgül yapmak en kalıcı çözümdür.
Arduino verileri bilgisayar olmadan nasıl kaydedilir?
Bilgisayar yoksa ölçümleri bir SD kart modülüne CSV dosyası olarak yazabilir, tarih ve saati bir RTC modülünden alabilirsin; kartı sonra bilgisayara takıp dosyayı Excel'de açarsın. Wi-Fi'li bir ESP32 kullanıyorsan verileri doğrudan Google E-Tablolar'a gönderebilirsin. Raspberry Pi Pico ise MicroPython ile kendi flaş belleğine CSV dosyası yazabilir.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
DHT11 İle Sıcaklık Ve Nem
Odan kaç derece, hava nemli mi, kuru mu? DHT11 sensörü sıcaklığı ve nemi ölçer, Arduino da bu değerleri iki satırlık LCD ekrana yazar ve birkaç saniyede bir yeniler. Sensöre bir şey olursa ekranda hat

Ldr İle Işık Şiddeti Okuma
Odanın ne kadar aydınlık olduğunu sayıyla görmek ister misin? Işığa duyarlı küçük bir parça olan LDR ortam ışığını ölçer ve Arduino bu değeri yarım saniyede bir bilgisayar ekranına yazar. Elinle üstün

HC-SR04 Mesafe Ölçme (Serial Ekran)
Yarasalar karanlıkta yollarını nasıl buluyorsa HC-SR04 sensörü de öyle çalışır: duyamadığın bir ses gönderir, yankısını dinler ve önündeki cismin ne kadar uzakta olduğunu ölçer. Arduino bu mesafeyi sa

ESP32 LDR Modülü ile Işık Şiddeti Okuma
LDR modülünün ham ADC değerini ve karanlık/aydınlık referanslarına göre hesaplanan göreli ışık yüzdesini Serial Monitor'da gerçek zamanlı izleme. Bu yüzde lux ölçümü değildir. Modülün kalibrasyon mantığını öğretir. Proje 10'un öncesinde yapılması ideal; çünkü eşik değerini belirlemek için kullanılır.

ESP32 Sıcaklık Loglayıcı (DHT22 + DS1307 RTC + microSD + OLED)
ESP32 ile zamanlı sıcaklık ve nem kayıt sistemi kur! Bu projede DHT22 sensörü ile dakikada bir sıcaklık/nem okuyup DS1307 RTC modülünden aldığın gerçek zaman etiketiyle microSD karta CSV formatında kaydediyoruz. OLED ekranda büyük font ile son sıcaklık değeri, nem yüzdesi, timestamp ve toplam kayıt sayısı canlı gösterilir. SD kart üzerindeki /temp_log.csv dosyası Excel/Google Sheets/Python pandas ile açılıp analiz edilebilir — sera monitörü, ev/oda sıcaklık takibi, laboratuvar veri toplama,

ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı)
DHT22 sensörü ile ortam sıcaklığını ve nem oranını ölçüp 16x2 I2C LCD ekranda gerçek zamanlı olarak gösteren bir projedir. Adafruit DHT kütüphanesi kullanılarak tek kablo (one-wire) protokolü ile sensörden veri okunur. Bu proje, IoT hava istasyonu, akıllı ev otomasyonu veya seralarda ortam takip sistemlerinin temelini oluşturur. ESP32'nin GPIO 4 pini üzerinden DHT22 ile haberleşme sağlanır.

NTC ve 2x16 Lcd Ekran İle Sıcaklık Ölçümü
Ortamın sıcaklığını küçük bir boncuk gibi görünen sensörle ölç. NTC adlı bu parça ısındıkça elektriği daha kolay geçirir; Arduino bu değişimi okuyup bir formülle santigrat dereceye çevirir ve iki satı

ESP32 RTC DS1307 ile Dijital Saat (I2C + LCD)
Bu projede DS1307 gerçek zaman saati (RTC) modülü ile 16x2 I2C LCD ekrana saat ve tarih bilgisi yansıtıyoruz. DS1307 pil destekli bir RTC'dir; ESP32 kapansa bile zamanı korur. Her iki modül de aynı I2C hattını (SDA/SCL) paylaşır, böylece sadece iki sinyal kablosu ile çoklu cihaz kontrolü öğrenmiş oluruz. Bu proje sayesinde I2C haberleşme protokolünü, RTC modüllerinin çalışma prensibini ve LCD ekranda dinamik veri gösterimini pratik bir şekilde öğreneceksiniz.
Diğer yazılar
BlueGrays uygulaması
Bu devreyi telefonunda adım adım kur
Devre şeması, kod ve parça listesi tek ekranda. 200'den fazla Arduino, ESP32 ve Pico projesi seni bekliyor.
Telefonunla tara
Kamerayı koda tut; telefonunun uygulama mağazası açılır.
ya da mağazada aç

