ATmega328P ตัวเดียวก็ทำ Data Logger ได้ ไม่ต้องใช้ Arduino Board

เวลาเห็น ATmega328P หลายคนนึกถึง Arduino Uno แต่จริง ๆ แล้ว Microcontroller ตัวเดียวกัน สามารถถูกนำไปวางบนวงจรของเราโดยตรง โดยไม่จำเป็นต้องใช้ Development Board ทั้งแผ่น

Project นี้ทดลองสร้าง Environmental Data Logger ด้วย ATmega328P-AUR แบบ Standalone ต่อ DHT22 สำหรับอุณหภูมิและความชื้น, BH1750 สำหรับแสง, SSD1306 OLED สำหรับแสดงผล และ MicroSD สำหรับบันทึกข้อมูลเป็น CSV

Firmware จะอ่าน Sensor และบันทึกข้อมูลทุก 10 วินาที พร้อมปุ่มสำหรับสั่ง Log ทันที ทำให้ Project นี้เป็นตัวอย่างที่ดีว่า จาก Arduino Prototype เราจะลดระบบ ให้เหลือเฉพาะ MCU และวงจรที่จำเป็นได้อย่างไร

Standalone ATmega328P-AUR Environmental Data Logger
Standalone ATmega328P-AUR Environmental Data Logger สำหรับวัดอุณหภูมิ ความชื้น และแสง พร้อมบันทึกข้อมูลลง MicroSD
Key Takeaways
  • ใช้ ATmega328P-AUR แบบ Standalone แทน Arduino Development Board สำเร็จรูป
  • DHT22 วัดอุณหภูมิและความชื้น
  • BH1750FVI วัดระดับแสงเป็น lux
  • SSD1306 OLED และ BH1750 ใช้ I2C Bus ร่วมกัน
  • MicroSD เชื่อมต่อผ่าน SPI และเก็บไฟล์ชื่อ ENVLOG.CSV
  • Firmware บันทึกอัตโนมัติทุก 10 วินาที
  • มีปุ่มสำหรับบันทึกค่าเพิ่มทันที และ LED แสดงผลเมื่อเขียนข้อมูลสำเร็จ
  • ไม่มี RTC ดังนั้น Time ใน CSV เป็นตัวนับวินาที ไม่ใช่วันและเวลาจริง
  • Project ยังมีสถานะ Work in progress และมีจุดที่ควรตรวจ Schematic ก่อนสร้าง PCB จริง

โปรเจกต์นี้คืออะไร?

Environmental Data Logger ตัวนี้ออกแบบมาเพื่อเก็บข้อมูล Temperature, Relative Humidity และ Ambient Light สำหรับการทดลองในพื้นที่อย่าง Workshop, Storage Room, Greenhouse หรือ Laboratory

แทนที่จะใช้ Arduino Uno ทั้งบอร์ด ผู้สร้างเลือกวาง ATmega328P-AUR ลงบนวงจรโดยตรง แล้วต่อ Peripheral เท่าที่ระบบต้องใช้

DHT22 + BH1750ATmega328P-AUROLED + MicroSD

จุดประสงค์หลักจึงไม่ได้มีแค่ “สร้างเครื่องวัดอากาศ” แต่ยังสาธิตขั้นต่อไปของ Embedded Design: จาก Development Board ไปสู่ Standalone Microcontroller Circuit

ทำไมไม่ใช้ Arduino Uno ทั้งบอร์ด?

Development Board เหมาะมากตอน Prototype เพราะรวม Clock, Reset, Power, USB Interface และ Connector มาให้แล้ว

แต่เมื่อ Project เริ่มนิ่ง การวาง Microcontroller โดยตรง ทำให้ผู้ออกแบบเลือกเฉพาะ Hardware ที่จำเป็น และรวมวงจรเข้าไปใน Custom PCB ได้ง่ายขึ้น

ATmega328P-AUR ใน Project นี้เป็น Package แบบ TQFP ซึ่งเหมาะกับการนำไปออกแบบลง PCB มากกว่าการเสียบลง Breadboard โดยตรง

สิ่งที่เปลี่ยนเมื่อถอด Arduino Board ออก:
เราต้องรับผิดชอบเองทั้ง Power, Clock, Reset, Programming Header, Decoupling และ Interface ของ Peripheral ต่าง ๆ

Standalone ATmega328P ต้องมีอะไรเพิ่ม?

Source สร้าง Minimum System รอบ MCU ด้วยองค์ประกอบหลักดังนี้:

  • ATmega328P-AUR
  • External Crystal
  • Crystal Load Capacitors
  • RESET Pull-up
  • Decoupling Capacitors
  • 3.3 V Power Rail
  • ICSP Header สำหรับ Programming

Power Rail ตาม Project

Source ต่อ VCC และ AVCC เข้ากับ 3.3 V พร้อม 100 nF Decoupling Capacitor และใช้ 10 µF Capacitor สำหรับ Supply Stabilization

AREF ถูกต่อผ่าน 100 nF Capacitor ลง Ground ตาม Wiring ที่ Project ระบุ

Clock และ Reset

Source ใช้ External Crystal 16 MHz ระหว่าง XTAL1 และ XTAL2 พร้อม 22 pF Capacitor สองตัว

RESET มี 10 kΩ Pull-up ไปที่ Supply และ Wiring Description ยังกล่าวถึง Reset Push Button ที่ต่อไป Ground

Programming

ICSP Header ใช้ MISO, MOSI, SCK, RESET, VCC และ GND สำหรับ Programming MCU และสามารถใช้ติดตั้ง Bootloader ได้

จุดสำคัญ: Project ระบุ 3.3 V + 16 MHz แต่ Official Datasheet ต้องตรวจอีกครั้ง

Technical Conflict ที่ไม่ควรมองข้าม:
Hackster Project ระบุให้ ATmega328P-AUR ทำงานที่ 3.3 V และใช้ External Crystal 16 MHz แต่ Speed Grade ในเอกสาร Microchip ไม่รองรับ 16 MHz ที่ Supply 3.3 V ตามช่วงที่ระบุใน Datasheet

เอกสารทางการของ ATmega328P ระบุ Speed Grade โดยทั่วไปว่า:

Supply Range Speed Grade ที่ Official Source ระบุ
1.8–5.5 V 0–4 MHz
2.7–5.5 V 0–10 MHz
4.5–5.5 V 0–20 MHz

ดังนั้น Combination 3.3 V + 16 MHz ที่อยู่ใน Project ไม่ควรถูกนำไปถือว่าอยู่ใน Operating Speed Grade ที่ Microchip รับรอง

หากจะสร้างวงจรจริง ควรตรวจ Official Datasheet ของ Part และออกแบบ Clock / Supply ให้สัมพันธ์กับ Speed Grade ที่ผู้ผลิตกำหนด รวมถึงตรวจ Voltage Compatibility ของ Sensor, OLED และ MicroSD ทั้งระบบใหม่

Architecture ของ Environmental Data Logger

DHT22Digital Input
BH1750I2CATmega328PI2C OLED
ATmega328PSPIMicroSD

MCU ใช้ Interface หลายแบบพร้อมกัน:

  • DHT22 ใช้ Digital Data Line
  • BH1750 และ OLED แชร์ I2C Bus
  • MicroSD ใช้ SPI
  • Push Button และ Status LED ใช้ GPIO

จึงเป็น Project ที่เหมาะกับการเรียนว่า MCU ขนาดเล็กสามารถจัดการ Peripheral หลาย Protocol ได้อย่างไรในระบบเดียว

Hardware ที่ใช้ใน Project

Component หน้าที่
ATmega328P-AUR Main Microcontroller
16 MHz Crystal External Clock ตาม Project
MCP1700-3302E/TO 3.3 V LDO Regulator ตาม BOM
DHT22 / AM2302 Temperature + Relative Humidity
BH1750FVI Ambient Light Sensor
SSD1306 128×64 OLED Local Display
MicroSD Module + Card Data Storage
Status LED แจ้งเมื่อเขียนข้อมูลสำเร็จ
Push Button Manual Logging ตาม Hardware List
ICSP Header In-system Programming

DHT22 วัดอุณหภูมิและความชื้นอย่างไร?

DHT22 ใช้ Digital Data Line แยกจาก I2C และ SPI โดย Source ระบุ Wiring ดังนี้:

DHT22 ATmega328P-AUR
VCC 3.3 V ตาม Project
GND Common Ground
DATA PD2 / Arduino Digital Pin 2
DATA Pull-up 1 kΩ ไป 3.3 V ตาม Source

Firmware ตรวจว่าค่า Temperature หรือ Humidity เป็น NaN หรือไม่ หากอ่าน Sensor ไม่สำเร็จ OLED จะแสดงข้อความ DHT22 read error

Module บางรุ่นอาจมี Pull-up ในตัว: Source เองเตือนว่า DHT22 Breakout บางตัว มี Pull-up ติดมาอยู่แล้ว ดังนั้นควรตรวจ Module ที่ใช้งานจริง

BH1750 และ OLED ใช้ I2C Bus เดียวกัน

BH1750FVI และ SSD1306 แชร์ SDA / SCL คู่เดียวกัน

Signal ATmega328P อุปกรณ์
SDA PC4 / A4 BH1750 + SSD1306
SCL PC5 / A5 BH1750 + SSD1306

Source ระบุให้ใช้ 4.7 kΩ Pull-up จาก SDA และ SCL ไป 3.3 V หาก Sensor Module หรือ OLED Module ยังไม่มี Pull-up ติดมา

ใน Firmware OLED Address ถูกกำหนดเป็น: 0x3C

ถ้าจอไม่ขึ้น: Source ระบุว่า SSD1306 Module บางรุ่น อาจใช้ Address อื่น จึงควรตรวจ Documentation ของ Module จริง แทนการสมมุติว่าเป็น 0x3C ทุกตัว

MicroSD เชื่อมต่อผ่าน SPI

Data Logging ใช้ MicroSD Card และ ATmega328P เชื่อมต่อผ่าน SPI

MicroSD ATmega328P / Arduino Pin Mapping
MOSI PB3 / D11
MISO PB4 / D12
SCK PB5 / D13
CS PB2 / D10
VCC 3.3 V ตาม Project
GND Common Ground
MicroSD Interface ต้องตรวจให้ถูก:
Source ระบุให้ใช้ MicroSD Module ที่ออกแบบสำหรับ 3.3 V และเตือนไม่ให้ต่อ Module แบบ 5 V-only เข้ากับระบบ 3.3 V โดยตรง หากยังไม่ได้ตรวจ Interface Requirements

ก่อนใช้งาน Source แนะนำให้ Format Card เป็น: FAT32

ระบบบันทึกข้อมูลทุก 10 วินาทีอย่างไร?

Code กำหนด:

LOG_INTERVAL = 10000 ms

Flow ของแต่ละรอบคือ:

Read DHT22Read BH1750Update OLEDOpen ENVLOG.CSVAppend RecordFlash LED

Function recordMeasurement() เป็นส่วนกลางที่ใช้ทั้ง Automatic Logging และ Manual Logging

ENVLOG.CSV มีข้อมูลอะไร?

เมื่อ SD Card เริ่มทำงาน Firmware เปิดไฟล์: ENVLOG.CSV

ถ้าไฟล์ยังว่าง จะเขียน Header:

Time,Temperature_C,Humidity_Percent,Light_Lux 0,24.6,48.2,125 10,24.7,48.1,128 20,24.7,48.0,132

Format แบบ CSV ทำให้เปิดต่อใน Spreadsheet, Data Analysis Tool หรือ Script ภายหลังได้ง่าย

Time ไม่ใช่วันและเวลาจริง:
Design ไม่มี RTC ดังนั้นค่า Time เป็น Elapsed Seconds Counter ไม่ใช่ Calendar Timestamp เช่น วันที่และเวลา 2026-09-18 10:00:00

หากต้องการ Calendar Timestamp ผู้สร้างเสนอ DS3231 Real-Time Clock ไว้ใน Possible Improvements แต่ยังไม่ได้อยู่ใน Prototype ปัจจุบัน

กดปุ่มเพื่อ Manual Log ได้ และ LED บอกเมื่อบันทึกสำเร็จ

Manual Log Button ใน Firmware ใช้ Digital Pin 7 และเปิด Internal Pull-up

เมื่อกดปุ่ม: recordMeasurement() จะถูกเรียกทันที

ถ้าเขียน SD สำเร็จ Status LED ที่ Digital Pin 6 จะติดประมาณ 100 ms แล้วดับ

รายละเอียดจาก Code:
การกด Manual Log ไม่ได้เพิ่ม elapsedSeconds ดังนั้น Manual Record จะใช้ค่า Time Counter ปัจจุบันในขณะนั้น

Source Code ของ Environmental Data Logger

Source ให้ Arduino Sketch เต็มชุด สำหรับอ่าน DHT22 และ BH1750, Update OLED และ Append ข้อมูลลง MicroSD

Library ที่ Code ใช้ประกอบด้วย:

  • Wire
  • SPI
  • SD
  • DHT
  • Adafruit GFX
  • Adafruit SSD1306
  • BH1750
ATmega328P Environmental Data Logger
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <DHT.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <BH1750.h>

#define DHTPIN 2
#define DHTTYPE DHT22

#define SD_CS 10
#define STATUS_LED 6
#define BUTTON_PIN 7

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

DHT dht(DHTPIN, DHTTYPE);

BH1750 lightMeter;

Adafruit_SSD1306 display(
  SCREEN_WIDTH,
  SCREEN_HEIGHT,
  &Wire,
  -1
);

unsigned long lastLog = 0;
unsigned long elapsedSeconds = 0;

const unsigned long LOG_INTERVAL = 10000;

void showMessage(const char *message)
{
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println(message);
  display.display();
}

bool writeLog(float temperature,
              float humidity,
              float lux)
{
  File file = SD.open("ENVLOG.CSV", FILE_WRITE);

  if (!file)
  {
    return false;
  }

  file.print(elapsedSeconds);
  file.print(",");
  file.print(temperature, 2);
  file.print(",");
  file.print(humidity, 2);
  file.print(",");
  file.println(lux, 2);

  file.close();

  return true;
}

void displayReadings(float temperature,
                     float humidity,
                     float lux)
{
  display.clearDisplay();

  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);

  display.setCursor(0, 0);
  display.print("Temperature: ");
  display.print(temperature, 1);
  display.println(" C");

  display.setCursor(0, 16);
  display.print("Humidity: ");
  display.print(humidity, 1);
  display.println(" %");

  display.setCursor(0, 32);
  display.print("Light: ");
  display.print(lux, 0);
  display.println(" lux");

  display.setCursor(0, 48);
  display.print("Time: ");
  display.print(elapsedSeconds);
  display.println(" s");

  display.display();
}

void recordMeasurement()
{
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  float lux = lightMeter.readLightLevel();

  if (isnan(temperature) || isnan(humidity))
  {
    showMessage("DHT22 read error");
    return;
  }

  if (lux < 0)
  {
    showMessage("BH1750 read error");
    return;
  }

  displayReadings(temperature, humidity, lux);

  if (writeLog(temperature, humidity, lux))
  {
    digitalWrite(STATUS_LED, HIGH);
    delay(100);
    digitalWrite(STATUS_LED, LOW);
  }
  else
  {
    showMessage("SD write error");
  }
}

void setup()
{
  pinMode(STATUS_LED, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);

  Serial.begin(9600);

  Wire.begin();

  dht.begin();

  lightMeter.begin();

  if (!display.begin(
        SSD1306_SWITCHCAPVCC,
        0x3C))
  {
    while (1);
  }

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("ATmega328P-AUR");
  display.println("Environmental");
  display.println("Data Logger");
  display.display();

  delay(2000);

  if (!SD.begin(SD_CS))
  {
    showMessage("SD init failed");
  }
  else
  {
    File file = SD.open("ENVLOG.CSV", FILE_WRITE);

    if (file)
    {
      if (file.size() == 0)
      {
        file.println(
          "Time,Temperature_C,Humidity_Percent,Light_Lux"
        );
      }

      file.close();
    }
  }

  recordMeasurement();

  lastLog = millis();
}

void loop()
{
  if (millis() - lastLog >= LOG_INTERVAL)
  {
    lastLog = millis();

    elapsedSeconds += 10;

    recordMeasurement();
  }

  if (digitalRead(BUTTON_PIN) == LOW)
  {
    recordMeasurement();

    delay(300);
  }
}
ดาวน์โหลด Source Code ต้นฉบับจาก Hackster
ก่อน Compile: Source ระบุให้ใช้ Arduino AVR Platform และ Clock Configuration ต้องตรงกับ Hardware จริง แต่เนื่องจาก Project ระบุ 3.3 V + 16 MHz ซึ่งขัดกับ Official Speed Grade ควร Resolve Clock / Supply Design ก่อนนำ Firmware ไปใช้กับ PCB จริง

ควร Build และ Test เป็นลำดับ แทนการต่อทุกอย่างพร้อมกัน

Source แนะนำให้ประกอบและทดสอบระบบเป็น Stage ซึ่งมีประโยชน์มากกับ Standalone MCU เพราะถ้าทุกอย่างถูกต่อพร้อมกัน การหา Fault จะยากขึ้นทันที

  1. ประกอบ Power, Clock, Reset และ ICSP
  2. ตรวจว่า MCU สามารถ Program ได้
  3. ทดสอบ OLED แยก
  4. ทดสอบ DHT22
  5. ทดสอบ BH1750
  6. ทดสอบ MicroSD
  7. ค่อยรวม Logging Flow ทั้งระบบ
Maker Lesson:
Standalone MCU Debugging ควรเริ่มจาก Minimum System ก่อน Sensor และ Storage เพราะถ้า Power หรือ Clock ยังไม่ทำงาน Peripheral ทุกชิ้นที่ต่อเพิ่มก็จะทำให้ Debug ซับซ้อนขึ้น

Testing ก่อนใช้งานจริง

1. ตรวจ Power Rail

Source แนะนำใช้ Digital Multimeter ตรวจ Supply และตรวจ Short Circuit ก่อนจ่ายไฟ

อย่างไรก็ตาม เนื่องจาก Clock / Voltage Combination ของ Project มี Conflict กับ Official Speed Grade ต้อง Resolve Design Point นี้ก่อนถือว่า Power Architecture พร้อมใช้งาน

2. ทดสอบ DHT22

เปรียบเทียบค่า Temperature และ Humidity กับค่าห้องหรือ Reference ที่ทราบโดยประมาณ เพื่อดูว่า Sensor ตอบสนองสมเหตุสมผลหรือไม่

3. ทดสอบ BH1750

ถ้ามี Light Meter Source แนะนำให้นำมาเปรียบเทียบ และทดลองเปลี่ยนสภาพแสง เพื่อดูว่าค่า Lux เปลี่ยนตามจริง

4. ทดสอบ MicroSD

Format Card เป็น FAT32 แล้วตรวจว่า Firmware สามารถสร้างและ Append ENVLOG.CSV ได้

Project ไม่ได้ Claim Laboratory-grade Accuracy: ค่าที่วัดควรใช้ในบริบท Monitoring, Learning และ Prototyping ไม่ควรนำไปถือเป็นค่าจากเครื่องมือวัดที่ผ่าน Calibration หาก Source ยังไม่ได้ให้ผลสอบเทียบ

จุดที่ Source ยังไม่ชัดและควรตรวจอีกครั้งก่อนทำ PCB

1. จำนวน Push Button ใน BOM กับ Wiring ไม่ตรงกัน

Hardware List ระบุ Push Button 1 ตัว สำหรับ Manual Logging

แต่ Wiring Description ยังระบุ Reset Push Button ที่ต่อ RESET ลง Groundอีกหนึ่ง Function

ถ้าต้องการทั้ง Dedicated Reset Button และ Manual Log Button ดูจากข้อความแล้วอาจต้องมี 2 ปุ่ม แต่ BOM ไม่ได้สะท้อนตรงนี้อย่างชัดเจน

คำแนะนำ: ตรวจ Schematic / Revision ล่าสุดของผู้สร้าง ก่อนสั่ง PCB หรือสั่งจำนวน Component ไม่ควรเดาจำนวน Push Button จาก BOM เพียงอย่างเดียว

2. Input Voltage ของ MCP1700 ไม่ได้ระบุชัด

BOM มี MCP1700-3302E/TO สำหรับสร้าง 3.3 V แต่ Source ไม่ได้ระบุชัดว่า Input ของ Regulator รับแรงดันเท่าไร

ดังนั้นบทความนี้จะไม่สร้าง Battery Voltage, USB Input หรือ VIN Wiring ขึ้นเอง

3. 3.3 V + 16 MHz ขัดกับ Official Speed Grade

นี่เป็น Conflict ที่สำคัญที่สุด และควรแก้ใน Design ก่อนนำไปผลิตจริง

ถ้าพัฒนาต่อ Project นี้ เพิ่มอะไรได้บ้าง?

ผู้สร้างเสนอ Possible Improvements ไว้หลายแนว:

  • DS3231 Real-Time Clock สำหรับ Calendar Timestamp
  • Rechargeable Battery Supply
  • Low-power Sleep Mode
  • Wireless Communication Module
  • OLED ขนาดใหญ่ขึ้น
  • Analog Sensor เพิ่มเติม
  • Web Dashboard สำหรับดูข้อมูล
  • Custom Outdoor Enclosure
ทั้งหมดนี้ยังเป็น Possible Improvements: Source ไม่ได้ระบุว่า Feature เหล่านี้ ถูกสร้างและทดสอบแล้วใน Prototype ปัจจุบัน จึงไม่ควรนำเสนอเป็น Feature ที่มีอยู่แล้ว

ATmega328P ยังเหมาะกับ Project ใหม่ไหม?

ในมุมการเรียน Embedded System ATmega328P ยังเป็น MCU ที่เข้าใจง่ายและมี Ecosystem ที่คน Maker คุ้นเคยมาก

Project นี้จึงเหมาะกับการเรียนเรื่อง:

  • Standalone MCU
  • Custom PCB
  • I2C
  • SPI
  • GPIO
  • SD Logging
  • Sensor Integration

แต่สำหรับ Product Design ใหม่ระยะยาว ปัจจุบัน Microchip ระบุ ATmega328P ว่า Not Recommended for new designs

นั่นไม่ได้หมายความว่า MCU ใช้งานไม่ได้ แต่หมายความว่าวิศวกรที่ออกแบบ Product ใหม่ ควรตรวจ Product Recommendation และตัวเลือก MCU รุ่นปัจจุบันจากผู้ผลิต ก่อน Commit กับ Design ระยะยาว

FAQ: ATmega328P Environmental Data Logger

1. Project นี้ใช้ Arduino Uno Board หรือไม่?

ไม่ใช้ Arduino Uno ทั้งบอร์ด แต่ใช้ ATmega328P-AUR เป็น Microcontroller หลัก ใน Standalone Circuit

2. ATmega328P-AUR ต่างจาก ATmega328P ที่คุ้นเคยอย่างไร?

ใน Project นี้ AUR เป็น Ordering Part ที่ใช้ Package แบบ TQFP สำหรับงาน PCB แต่ Core MCU ยังคือ ATmega328P

3. วัดค่าอะไรได้บ้าง?

Temperature, Relative Humidity และ Ambient Light ตาม Sensor ที่ใช้ใน Project

4. ใช้ Sensor อะไรวัดอุณหภูมิและความชื้น?

DHT22 / AM2302

5. ใช้ Sensor อะไรวัดแสง?

BH1750FVI Digital Ambient Light Sensor

6. OLED กับ BH1750 ต่อพร้อมกันได้อย่างไร?

ทั้งสองใช้ I2C Bus เดียวกัน ผ่าน SDA = PC4/A4 และ SCL = PC5/A5 ตาม Wiring ของ Project

7. MicroSD ใช้ Pin อะไร?

MOSI D11, MISO D12, SCK D13 และ CS D10 ตาม Arduino Pin Mapping ใน Source

8. บันทึกข้อมูลบ่อยแค่ไหน?

Automatic Logging ทุก 10 วินาที ตาม LOG_INTERVAL = 10000

9. กดบันทึกเองได้ไหม?

ได้ Firmware มี Manual Logging Button ที่ Digital Pin 7

10. ไฟล์ที่บันทึกชื่ออะไร?

ENVLOG.CSV

11. Time ใน CSV เป็นวันและเวลาจริงไหม?

ไม่ เป็น Elapsed Seconds Counter เพราะ Project ยังไม่มี Real-Time Clock

12. เพิ่ม DS3231 ได้ไหม?

Source ระบุ DS3231 RTC เป็น Possible Improvement แต่ไม่ได้รวมอยู่ใน Prototype ปัจจุบัน

13. ใช้ MicroSD Module 5 V ได้ไหม?

Source ระบุให้ใช้ Module ที่เหมาะกับ 3.3 V Interface และเตือนไม่ให้ต่อ 5 V-only Module เข้าระบบโดยไม่ตรวจ Interface Requirements

14. 3.3 V + 16 MHz ใช้ได้ตาม Datasheet หรือไม่?

Official ATmega328P Speed Grade ไม่รองรับ 16 MHz ที่ 3.3 V ดังนั้น Configuration ใน Project ควรถูก Review และปรับให้ตรงกับ Datasheet ก่อนสร้าง Hardware จริง

15. Sensor มีความแม่นยำระดับ Laboratory หรือไม่?

Project ไม่ได้ Claim Laboratory-grade หรือ Calibrated Measurement จึงไม่ควรนำผลไปใช้แทนเครื่องมือสอบเทียบ

16. Project เสร็จสมบูรณ์แล้วหรือยัง?

หน้า Hackster ระบุสถานะ Work in progress ดังนั้น Hardware, BOM หรือรายละเอียดบางส่วน ยังมีโอกาสเปลี่ยนแปลงได้

สรุป: Project นี้สอนมากกว่าแค่การเก็บข้อมูล Sensor

ถ้ามองผิวเผิน นี่คือ Data Logger ที่อ่าน Temperature, Humidity และ Light แล้วเขียนลง MicroSD

แต่สิ่งที่มีประโยชน์กว่าคือ มันแสดงขั้นตอนเปลี่ยนจาก “ต่อ Sensor เข้ากับ Arduino Board” ไปเป็น “ออกแบบระบบรอบ Microcontroller เอง”

ผู้สร้างต้องจัดการ Power, Clock, Reset, ICSP, I2C, SPI, GPIO และ Storage เองทั้งหมด ซึ่งเป็นพื้นฐานสำคัญของการขยับจาก Maker Prototype ไปสู่ Custom Embedded Board

อย่างไรก็ตาม Project ยังเป็น Work in progress และมี Conflict สำคัญเรื่อง 3.3 V + 16 MHz รวมถึงจำนวน Push Button และ Power Input ที่ควรตรวจสอบเพิ่มเติมก่อนนำ Design ไปผลิต PCB จริง

โปรเจกต์นี้มี Wiring และ Code หลายส่วน แนะนำอ่านต้นฉบับควบคู่กัน

หากต้องการ Build จริง ควรตรวจ Hackster Project, Source Code และ ATmega328P Datasheet ล่าสุด โดยเฉพาะ Clock / Supply Specification ก่อนสั่ง PCB

อ่าน Standalone ATmega328P-AUR Environmental Data Logger ฉบับเต็มบน Hackster

ดาวน์โหลด Source Code ต้นฉบับ

อ่านข้อมูล ATmega328P จาก Microchip

References / แหล่งข้อมูลต้นฉบับ

อยากลองทำ Data Logger หรือ Custom MCU Board?

ถ้ากำลังทดลอง Microcontroller, Temperature / Humidity Sensor, Light Sensor, OLED, MicroSD Module หรืออุปกรณ์สำหรับ Embedded Project สามารถสอบถามทีม Globalbyte เรื่องบอร์ดและอุปกรณ์ที่เหมาะกับ Project ได้

สำหรับงาน Standalone MCU ควรตรวจ Voltage, Clock, Logic Level และ Datasheet ของอุปกรณ์ทุกตัวก่อนออกแบบ PCB จริง

Disclaimer: บทความนี้เป็นการสรุปและเรียบเรียงจากแหล่งข้อมูลภาษาอังกฤษ อาจมีความคลาดเคลื่อน กรุณาตรวจสอบ Source ต้นฉบับก่อนลงมือทำ

Hackster Project นี้อยู่ในสถานะ Work in progress ดังนั้น BOM, Wiring, Firmware และรายละเอียด Hardware อาจมีการแก้ไขใน Revision ภายหลัง

Project Source ระบุ ATmega328P-AUR ทำงานที่ 3.3 V พร้อม External Crystal 16 MHz แต่ Official ATmega328P Speed Grade ของ Microchip ไม่รองรับ 16 MHz ที่ 3.3 V จึงควรตรวจและปรับ Clock / Supply Architecture ให้ตรงกับ Datasheet ก่อนผลิตหรือใช้งานจริง

Source มีความไม่สอดคล้องเรื่องจำนวน Push Button: Hardware List ระบุ Manual Log Button หนึ่งตัว ขณะที่ Wiring Description ยังกล่าวถึง Reset Push Button เพิ่มเติม ควรตรวจ Schematic / Revision ล่าสุดก่อนสั่ง PCB หรือ Component

Source ระบุ MCP1700-3302E/TO สำหรับระบบ 3.3 V แต่ไม่ได้ระบุ Input Voltage ของ Regulator อย่างชัดเจน บทความนี้จึงไม่ได้สร้าง Battery Voltage, USB Input หรือ VIN Wiring ขึ้นเอง

ค่า Time ใน ENVLOG.CSV เป็น Elapsed Seconds Counter ไม่ใช่ Calendar Timestamp เนื่องจาก Prototype ปัจจุบันไม่มี RTC

Project ไม่ได้ Claim Laboratory-grade Accuracy หรือ Calibrated Environmental Measurements และบทความนี้ไม่ได้เพิ่ม Accuracy, Power Consumption, Battery Runtime, SD Capacity, Maximum Logging Duration, PCB Dimensions, Cost หรือ Thailand Availability ที่ Source ไม่ได้ระบุ

 


Blog posts