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? - จะได้เรียนรู้อะไร

  1. Multiple Sensor APIs: อ่านค่าจาก ADC (potentiometer) และ IMU (accelerometer) พร้อมกัน

  2. TabView + Real Data: รวม Lab 5 (TabView) กับ Lab 7 (Real IMU) เข้าด้วยกัน

  3. Data Mapping: แปลงค่า sensor แต่ละตัวให้เหมาะกับ widget ที่แสดงผล

  4. Hardware Polling: อ่านค่าจากหลาย sensor ใน timer เดียว

  5. Graceful Degradation: จัดการเมื่อ sensor บางตัวไม่พร้อม

How? - จะทำอย่างไร

  1. เรียก aic_sensors_init() ก่อนสร้าง UI

  2. สร้าง TabView 2 tabs: IMU Charts + ADC Gauge

  3. Timer callback อ่านค่าจากทุก sensor API

  4. Tab 1: แสดง ADC ด้วย Bar + Value label

  5. Tab 2: แสดง accelerometer X/Y/Z ด้วย Line Chart

  6. 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 นี้

Function
Return
Description

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 ที่ใช้

Tab
Widget
Key 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) % 10

  • Time format: `lv_label_set_text_fmt(label, "%02d:%02d", min, sec)


7. References


Last updated

Was this helpful?