Sensor Dashboard
Lab 8: Real Sensor Dashboard
Part 2 - Sensor Visualization
1. โครงสร้างภาพรวมของ Lab
Why? - ทำไมต้องเรียนรู้เรื่องนี้
Multi-Sensor Integration: ในระบบ IoT จริง มี sensor หลายตัวที่ต้องอ่านค่าและแสดงผลพร้อมกัน
Real APIs: ใช้
aic_adc_read()+imu_shared_read_accel()ร่วมกันTabView Organization: จัดการข้อมูลจากหลาย sensor ด้วย tabs
Single Timer Pattern: อัพเดทข้อมูลจากหลาย sensor ใน callback เดียว
What? - จะได้เรียนรู้อะไร
Multiple Sensor APIs: อ่านค่าจาก ADC (potentiometer) และ IMU (accelerometer) พร้อมกัน
TabView + Real Data: รวม Lab 5 (TabView) กับ Lab 7 (Real IMU) เข้าด้วยกัน
Data Mapping: แปลงค่า sensor แต่ละตัวให้เหมาะกับ widget ที่แสดงผล
Hardware Polling: อ่านค่าจากหลาย sensor ใน timer เดียว
Graceful Degradation: จัดการเมื่อ sensor บางตัวไม่พร้อม
How? - จะทำอย่างไร
เรียก
aic_sensors_init()ก่อนสร้าง UIสร้าง TabView 2 tabs: IMU Charts + ADC Gauge
Timer callback อ่านค่าจากทุก sensor API
Tab 1: แสดง ADC ด้วย Bar + Value label
Tab 2: แสดง accelerometer X/Y/Z ด้วย Line Chart
Tab 3: แสดง Gyro ด้วย Arc gauge + Value label

2. หลักการทำงานและ Flowchart
2.1 Dashboard Architecture
2.2 TabView Layout
2.3 Data Mapping
3. ฟังก์ชันสำคัญ
3.1 Sensor APIs ที่ใช้ใน Lab นี้
aic_sensors_init()
void
Initialize ทุก sensor (เรียกครั้งเดียว)
aic_adc_read(AIC_ADC_CH0)
uint16_t
อ่าน ADC channel 0 (0-4095)
imu_shared_read_accel(&ax, &ay, &az)
bool
อ่าน accelerometer (m/s2)
3.2 ADC API Detail
3.3 Widget Functions ที่ใช้
IMU
lv_chart (LINE)
lv_chart_set_next_value()
ADC
lv_bar
lv_bar_set_value(), lv_bar_set_range()
ADC
lv_arc
lv_arc_set_value(), lv_arc_set_range()
Both
lv_label
lv_label_set_text_fmt()
3.4 Include Files
4. โค้ดตัวอย่าง
4.1 Global Variables
4.2 Simulation Helpers (PC Simulator)
4.3 Timer Callback - อ่านค่าจากทุก Sensor
4.4 สร้าง IMU Tab
4.5 สร้าง ADC Tab (Arc + Bar)
4.6 Main Function
5. องค์ความรู้และเทคนิค
5.1 Single Timer สำหรับ Multiple Sensors
5.2 Graceful Degradation
5.3 ADC Arc Color Change ตามค่า
5.4 Active Tab Optimization
5.5 Tab Content Styling Tips
6. แบบฝึกหัด
Exercise 1: Min/Max Tracking
โจทย์: เพิ่มระบบ Min/Max Tracking สำหรับแต่ละ sensor:
Requirements:
สำหรับ ADC: แสดง Min voltage, Max voltage, Current voltage
สำหรับ IMU: แสดง Min/Max ของแต่ละแกน (X, Y, Z)
เพิ่มปุ่ม "Reset" เพื่อ clear ค่า min/max
แสดงเป็น label ใต้ widget หลัก
Layout:
การประยุกต์ใช้งานจริง:
Quality Control: ตรวจสอบว่าค่า sensor อยู่ในช่วงที่กำหนด
Predictive Maintenance: ติดตาม peak values เพื่อวิเคราะห์สภาพเครื่องจักร
Environmental Monitoring: บันทึกค่าสูงสุด/ต่ำสุดของอุณหภูมิ
Hint:
ใช้
static float min_x = FLT_MAX, max_x = -FLT_MAX;ปุ่ม Reset:
lv_btn_create()+ event callback
Exercise 2: Data Logging Table
โจทย์: เพิ่ม Tab ที่ 3 "Log" แสดงข้อมูล 10 readings ล่าสุดในรูปแบบตาราง:
Requirements:
ใช้
lv_table_create()สร้างตาราง4 คอลัมน์: Time, ADC, Accel X, Accel Z
10 แถว (circular buffer - เมื่อครบ 10 แถวให้เริ่มเขียนทับแถวเก่า)
บันทึกค่าทุก 1 วินาที (ไม่ใช่ทุก 100ms)
แถวล่าสุดแสดงด้วยสีพื้นหลังเด่น
Layout:
การประยุกต์ใช้งานจริง:
Data Logger ในอุตสาหกรรมอาหาร (บันทึกอุณหภูมิห้องเย็น)
Flight Data Recorder (บันทึกข้อมูลระหว่างบิน)
Process Control: บันทึกค่า parameter ย้อนหลัง
Hint:
lv_table_set_cell_value(table, row, col, "text")Circular buffer:
write_idx = (write_idx + 1) % 10Time format: `lv_label_set_text_fmt(label, "%02d:%02d", min, sec)
7. References
Last updated