Nuzzle — ระบบติดตามสุขภาพสัตว์เลี้ยง
Nuzzleระบบติดตามสุขภาพสัตว์เลี้ยง
iOS · SwiftUI · Design proposal v1 · 8 ส.ค. 2026

ปลอกคอ Nuzzle Tag อ่านชีพจร ความแปรปรวนหัวใจ อุณหภูมิผิว และการเคลื่อนไหวทุก 2 นาที แล้วส่งเข้าแอปบนมือถือ — เจ้าของดูสัตว์เลี้ยงได้หลายตัวจากบัญชีเดียว และรู้ก่อนว่าตัวไหนกำลังผิดปกติ

ดีไซน์ยึดภาษา iOS ของจริง (Large Title, inset grouped list, segmented control, sheet, tab bar แบบ blur) แต่ตัวเลขค่าชีพเป็นพระเอก — วางบนกระดาษ ECG จำลอง ใช้สีแยกตามชนิดของค่า ไม่ใช่ตามลำดับ ทุกจอด้านล่างคือหน้าจอจริงขนาด 390×844 ที่เรนเดอร์สดในหน้านี้ ลองสลับธีมสว่าง/มืดดูได้

SwiftUI + HealthKit-style charts BLE 5.2 · GATT custom service PPG + accel + skin temp multi-pet, 1 บัญชี iPhone 15/16 · 390×844 pt TH / EN

จอหลักที่ใช้ทุกวัน

4 จอ

ลำดับความสำคัญคือ “ตัวไหนต้องดูตอนนี้” มาก่อน “ค่าอะไรบ้าง” — หน้าแรกจึงเริ่มด้วยแถวสลับสัตว์เลี้ยง แล้วค่อยลงรายละเอียดของตัวที่เลือก

09:41

ข้าวปั้น · ตอนนี้

เชื่อมต่อ · แบต 82%
ชีพจร 88bpm
เคลื่อนไหว 74% ของเป้า
พักผ่อน 11:20ชม.

ชีพจร 60 นาทีล่าสุด

54–121 bpm
อยู่ในช่วงปกติ HRV 62 MS · หายใจ 22/นาที
ความเครียด 24/100สงบ · ต่ำกว่าเมื่อวาน 8
อุณหภูมิผิว 38.4°Cปกติ 37.5–39.2
ชีพจรสูงกว่าปกตินาน 12 นาที
09:12 · 148 BPM · ระหว่างเดินเล่น
วันนี้
สุขภาพ
สด
อุปกรณ์
ตั้งค่า

วันนี้ — จอเปิดแอป

แถวสัตว์เลี้ยงอยู่บนสุดของ Large Title ไม่ใช่ในเมนู เพราะการสลับตัวคือสิ่งที่ทำบ่อยที่สุด วงแหวนสามชั้นสรุปสามค่าที่ต่างชนิดกัน (หัวใจ/เคลื่อนไหว/พักผ่อน) และมีตัวเลขกำกับทุกวงเสมอ

กติกาสีบอก “ชนิดของค่า” ไม่ใช่ลำดับ — ข้าวปั้นกับมะลิใช้สีแดงตัวเดียวกันสำหรับชีพจร ตัวสัตว์แยกด้วยอวตารและชื่อ
09:41
ชีพจรตอนนี้
88bpm
สงบ อ่านทุก 2 วินาที
กำลังรับสัญญาณจาก Tag 25 MM/S · GAIN 10
HRV 62msดี
หายใจ 22/นาทีปกติ
ผิว 38.4°ปกติ

ระดับความเครียด

24 / 100

คำนวณจาก HRV + ชีพจรพัก + การเคลื่อนไหวกระตุก เทียบกับค่าพื้นฐาน 14 วันของข้าวปั้นเอง

สงบตื่นตัวเครียดเครียดมาก
บันทึกช่วงนี้เป็นบันทึกอาการ สั่ง Tag ให้ส่งเสียงเรียก

โหมดสด — ดูชีพจรแบบเรียลไทม์

จอนี้คือเหตุผลที่คนซื้ออุปกรณ์ จึงตัดทุกอย่างที่ไม่ใช่สัญญาณออก: ตัวเลขใหญ่ กราฟ ECG บนกระดาษตารางแบบเครื่องวัดจริง และเส้นกวาดที่วิ่งจากซ้ายไปขวาให้รู้ว่ายังมีสัญญาณอยู่

กติกา“เครียด” ไม่ตัดสินจากค่าดิบ แต่เทียบกับค่าพื้นฐาน 14 วันของสัตว์ตัวนั้น — แมวกับหมาใช้เกณฑ์เดียวกันไม่ได้
09:41

ชีพจรรายวัน

เฉลี่ย 92 bpm
0006121824
ค่าเฉลี่ยรายชั่วโมง ช่วงต่ำสุด–สูงสุด

ความเครียดรายชั่วโมง

พีค 13:00
0006121823
สงบ ตื่นตัว เครียด

การนอน 7 คืน

เฉลี่ย 11 ชม. 4 น.
ศ.
11:20
พฤ.
10:05
พ.
8:12
อ.
11:48
หลับลึก หลับตื้น ตื่นกลางดึก
วันนี้
สุขภาพ
สด
อุปกรณ์
ตั้งค่า

สุขภาพ — แนวโน้มย้อนหลัง

สามการ์ด สามคำถาม: หัวใจเต้นเป็นยังไงทั้งวัน / เครียดตอนไหน / นอนพอไหม กราฟชีพจรลากนิ้วดูค่ารายชั่วโมงได้จริง (ลองลากบนกราฟดูครับ) แถบความเครียดใช้เฉดเดียวไล่เข้ม เพราะมันคือ “ระดับ” ไม่ใช่ “ประเภท”

กติกาไม่มีกราฟสองแกน — ถ้าอยากเทียบชีพจรกับการนอน ให้ซ้อนเป็นสองการ์ดที่ใช้แกนเวลาเดียวกัน ไม่ยัดสองสเกลในกราฟเดียว
09:41
ข้าวปั้น สงบ
โกลเด้น รีทรีฟเวอร์ · 4 ปี · 28.4 กก.
88 BPM เครียด 24 TAG 82% 09:38
มะลิ ตื่นตัวผิดปกติ
แมวขาวมณี · 2 ปี · 4.1 กก.
168 BPM เครียด 61 TAG 42% 09:37
บอส ออฟไลน์
เฟรนช์ บูลด็อก · 6 ปี · 12.8 กก.
ไม่มีข้อมูล 2 ชม. 14 นาที
ค่าล่าสุด 104 BPM 07:24
เพิ่มสัตว์เลี้ยงและจับคู่ Tag
วันนี้
สุขภาพ
สด
อุปกรณ์
ตั้งค่า

สัตว์เลี้ยงหลายตัวในบัญชีเดียว

ทุกใบเล่าเรื่องเดียวกันด้วยโครงเดียวกัน: ใครกำลังโอเค / ใครต้องดู / ใครขาดการติดต่อ ตัวที่ออฟไลน์ไม่โชว์ตัวเลขเก่าเป็นค่าปัจจุบัน แต่บอกตรง ๆ ว่าไม่มีข้อมูลมานานแค่ไหน

กติกาค่าที่หมดอายุแล้วห้ามแสดงเหมือนค่าสด — สถานะแทนที่กราฟไปเลย ไม่ใช่แค่จางลง

อุปกรณ์ การแจ้งเตือน และโปรไฟล์

3 จอ

ส่วนที่ทำให้แอปเป็น “ระบบ” ไม่ใช่แค่หน้าจอสวย — สถานะฮาร์ดแวร์ที่อ่านรู้เรื่อง เกณฑ์เตือนที่ตั้งเองได้ และข้อมูลตัวสัตว์ที่ส่งต่อให้สัตวแพทย์ได้

09:41
Tag ของข้าวปั้น
NZ-M1 · SN N2-4F91-C8
82% สัญญาณ −58 dBm
การวัด
ชีพจรและ HRVPPG สีเขียว · ทุก 2 นาที
อุณหภูมิผิวเทอร์มิสเตอร์สัมผัสคอ
การเคลื่อนไหวและการนอน6 แกน · ทำงานตลอด
ตำแหน่งและพื้นที่ปลอดภัยกินแบตเพิ่มราว 18% ต่อวัน
อุปกรณ์
ความถี่การส่งข้อมูลทุก 2 นาที
ซิงก์ล่าสุด09:38
เฟิร์มแวร์2.4.1 → มีเวอร์ชัน 2.5.0 อัปเดต
สลับไปใส่ให้ตัวอื่น
ยกเลิกการจับคู่ Tag นี้

ข้อมูลที่เก็บไว้ในเครื่อง 30 วันจะยังอยู่แม้ยกเลิกการจับคู่

อุปกรณ์ — Nuzzle Tag

เปิด/ปิดเซ็นเซอร์รายตัวได้ พร้อมบอกราคาที่ต้องจ่าย (GPS = แบตหายไป 18%/วัน) ตรงจุดที่ตัดสินใจ ไม่ใช่ซ่อนไว้ในหน้าช่วยเหลือ

กติกาสวิตช์ทุกตัวมีบรรทัดรองที่อธิบายผลของการปิด — ไม่มีสวิตช์ลอยที่ต้องเดาเอง
09:41
วันนี้
ชีพจรมะลิสูงต่อเนื่อง 18 นาที

194 bpm ขณะไม่มีการเคลื่อนไหว — สูงกว่าช่วงปกติที่ตั้งไว้ (140–200) ร่วมกับความเครียด 61

มะลิ09:21 · ยังเป็นอยู่
ข้าวปั้นชีพจรสูงกว่าปกติ 12 นาที

148 bpm ระหว่างเดินเล่น กลับสู่ปกติแล้วเมื่อ 09:26

ข้าวปั้น09:12 · จบแล้ว
มะลิออกนอกพื้นที่ “บ้าน”

ห่างจากจุดกึ่งกลาง 140 ม. นาน 6 นาที แล้วกลับเข้าพื้นที่

มะลิ07:48
เมื่อวาน
แบต Tag ของบอสเหลือ 15%

ชาร์จภายใน 8 ชั่วโมง ไม่งั้นจะหยุดส่งข้อมูล

บอส21:30
ข้าวปั้นนอนน้อยกว่าปกติ 2 คืนติด

เฉลี่ย 8 ชม. 12 น. ต่ำกว่าค่าพื้นฐาน 2 ชม. 50 น. — ลองดูว่ามีอะไรเปลี่ยนไปในบ้าน

ข้าวปั้น08:00
วันนี้
สุขภาพ
สด
อุปกรณ์
เตือน

การแจ้งเตือน — เรียงตามความเร่งด่วน

แถบสีด้านซ้าย + ไอคอน + ข้อความ บอกความรุนแรงพร้อมกันสามทาง ไม่พึ่งสีอย่างเดียว ทุกใบตอบว่า “เกิดอะไร ค่าเท่าไหร่ เทียบกับอะไร และตอนนี้ยังเป็นอยู่ไหม”

กติกาห้ามเตือนโดยไม่บอกเกณฑ์ — “194 bpm สูงกว่าช่วงปกติ 140–200 ที่ตั้งไว้” ไม่ใช่แค่ “ชีพจรผิดปกติ”
09:41
ข้าวปั้น
โกลเด้น รีทรีฟเวอร์ · ผู้ · 4 ปี 2 เดือน
ทำหมันแล้ว28.4 กก.ไมโครชิป
ช่วงค่าปกติของตัวนี้
ชีพจรขณะพักค่าเรียนรู้จาก 14 วัน · แก้เองได้60–140
อุณหภูมิผิว37.5–39.2°
เป้าการเคลื่อนไหว8,000 ก้าว
ปรับเกณฑ์อัตโนมัติอัปเดตช่วงปกติทุกสัปดาห์
สุขภาพและนัดหมาย
วัคซีนพิษสุนัขบ้า12 มี.ค. 2026 · ครบกำหนดถัดไป มี.ค. 2027
ถ่ายพยาธิเลยกำหนด 11 วัน
นัดตรวจประจำปี20 ส.ค. 2026 · 14:30 · คลินิกสัตว์เพื่อนบ้าน
ส่งรายงาน 30 วันให้สัตวแพทย์

โปรไฟล์สัตว์เลี้ยง

ที่นี่คือที่ที่ “ปกติ” ถูกนิยาม — ระบบเรียนรู้ช่วงปกติเองจาก 14 วันแรก แต่เจ้าของและหมอแก้ทับได้เสมอ และมีปุ่มเดียวสำหรับส่งออกรายงานให้คลินิก

กติกาเกณฑ์เตือนผูกกับสัตว์รายตัว ไม่ผูกกับสายพันธุ์แบบตายตัว — ค่าเริ่มต้นมาจากสายพันธุ์ แต่ปรับตามตัวจริง

โฟลว์เชื่อมอุปกรณ์

3 ขั้น · ทำครั้งเดียวต่อ 1 ตัว

ลำดับนี้เรียงเลขได้จริง เพราะมันคือลำดับที่ต้องทำตามกัน — ค้นหา → ผูกกับสัตว์ตัวไหน → ปรับเทียบเซ็นเซอร์กับตัวจริง ขั้นที่สามคือขั้นที่แอปคู่แข่งมักข้าม แล้วค่าที่ได้ก็เพี้ยนตั้งแต่วันแรก

09:41

กำลังค้นหา Tag ใกล้ตัว

กดปุ่มบน Tag ค้างไว้ 3 วินาทีจนไฟกะพริบเขียว แล้ววางไว้ใกล้ ๆ เครื่อง

พบแล้ว 2
Nuzzle TagN2-4F91-C8 · สัญญาณแรง · แบต 96% เชื่อม
Nuzzle TagN2-77A0-B1 · สัญญาณอ่อน · ใช้กับบอสอยู่ ใช้แล้ว

ไม่เจอ? ลองชาร์จ Tag 10 นาทีแล้วค้นหาใหม่ หรือดูวิธีรีเซ็ต

01  ค้นหาและเลือก Tag

บอกวิธีทำให้ Tag เข้าโหมดจับคู่ก่อนเสมอ และแสดง Tag ที่ถูกใช้แล้วพร้อมชื่อสัตว์ที่ใช้อยู่ แทนที่จะซ่อนหายไปเฉย ๆ

09:41

ใส่ให้ตัวไหน

Tag หนึ่งอันผูกกับสัตว์ได้หนึ่งตัว สลับทีหลังได้ในหน้าอุปกรณ์

ข้าวปั้นโกลเด้น รีทรีฟเวอร์ · 4 ปี มี Tag แล้ว
มะลิแมวขาวมณี · 2 ปี
บอสเฟรนช์ บูลด็อก · 6 ปี
สร้างโปรไฟล์ใหม่กรอกชนิด สายพันธุ์ อายุ น้ำหนัก
ผูกกับมะลิ

02  ผูกกับสัตว์เลี้ยง

ใช้ sheet ครึ่งจอตามภาษา iOS เพราะเป็นการเลือกสั้น ๆ ที่ไม่ควรพาออกจากโฟลว์ ปุ่มยืนยันสะกดสิ่งที่จะเกิดขึ้นจริง — “ผูกกับมะลิ” ไม่ใช่ “ตกลง”

09:41
68%
CALIBRATING

สวมปลอกคอแล้วปล่อยให้อยู่นิ่ง 2 นาที

รัดให้สอดนิ้วได้ 2 นิ้ว โดยให้ตัว Tag แนบใต้คอ ถ้าหลวมเกินไปสัญญาณชีพจรจะขาด ๆ หาย ๆ

จับคู่ผ่านบลูทูธแล้ว
เฟิร์มแวร์เป็นเวอร์ชันล่าสุด2.5.0
กำลังจับสัญญาณชีพจรอ่านได้ 172 bpm · คุณภาพสัญญาณดี
เรียนรู้ค่าพื้นฐานต้องใช้ข้อมูล 14 วัน — เริ่มนับหลังปรับเทียบเสร็จ

เหลืออีกประมาณ 40 วินาที · ปิดหน้านี้ได้ ระบบจะทำต่อเบื้องหลัง

03  ปรับเทียบกับตัวจริง

สอนวิธีสวมให้ถูกในจอเดียวกับที่รอผล เพราะความหลวมของปลอกคอคือสาเหตุอันดับหนึ่งของค่าเพี้ยน และบอกชัดว่าค่าพื้นฐานต้องใช้ 14 วัน — ตั้งความคาดหวังตั้งแต่วันแรก

ระบบดีไซน์

tokens

ทุกสีในจอด้านบนมาจากตัวแปรชุดนี้ชุดเดียว ทั้งโหมดสว่างและมืด — ไม่มีสีลอยฝังในคอมโพเนนต์

สีของค่าชีพ — แยกตามชนิด ไม่ใช่ลำดับ

หัวใจ / ชีพจร / อุณหภูมิสูงค่าที่เกี่ยวกับหัวใจใช้สีนี้เท่านั้น #D8452E
#F05A45
การเคลื่อนไหว / ปกติ / แบรนด์เป็น tint ของแอปด้วย #0E8F72
#17A87F
การนอน / ตำแหน่งค่าที่เกิดตอนสัตว์อยู่นิ่ง #3F5FC9
#5B84E8
ความเครียด — เฉดเดียวไล่เข้มเป็น “ระดับ” จึงห้ามใช้หลายสี s1 → s5
เตือนสงวนไว้สำหรับสถานะ ห้ามใช้เป็นสีข้อมูล#A8620B
วิกฤต / ทำลายมาพร้อมไอคอนและข้อความเสมอ#C0392B
  • ผ่านการตรวจตาบอดสี: คู่ที่แย่สุด ΔE 10.8 (deutan) — เกณฑ์คือ ≥ 8
  • คอนทราสต์กับพื้นหลังทุกสี ≥ 3:1 ทั้งสองโหมด
  • โหมดมืดเลือกเฉดใหม่ ไม่ใช่กลับสีอัตโนมัติ

ตัวอักษร

วันนี้Large Title · 34/700 · -0.035em
ข้าวปั้น · สดNav Title · 17/640
88Readout · 56/700 · tabular
รายการและเนื้อความปกติBody · 15/400
25 mm/s · gain 10Mono · 11.5 · +0.08em

ตัวหลักคือฟอนต์ระบบ (SF บน iOS) เพื่อให้ dynamic type และภาษาไทยทำงานได้จริง ส่วน monospace ใช้เป็น “เสียงของเครื่องวัด” — หน่วย เวลา รหัสอุปกรณ์ ค่าดิบ ทำให้ตัวเลขวิ่งแล้วความกว้างไม่ขยับ

คอมโพเนนต์

สงบ ตื่นตัวผิดปกติ ต้องดูตอนนี้ ออฟไลน์
วันสัปดาห์เดือน
สวิตช์ iOS 51×31 · แตะได้ทั้งแถว
แถวรายการมาตรฐานบรรทัดรองอธิบายผลของการกด 88
เส้นคั่นเริ่มหลังไอคอน
  • มุมโค้ง 20 การ์ด · 14 ปุ่ม · 999 พิลล์ — สามค่าเท่านั้น
  • พื้นที่แตะขั้นต่ำ 44×44 pt ทุกจุด
  • สถานะบอกด้วย สี + ไอคอน + คำ เสมอ ไม่ใช้สีลำพัง

ถ้าจะสร้างจริง

สิ่งที่ต้องตัดสินใจต่อ

Aโครงข้อมูล

  • Owner → มี Pet ได้หลายตัว → แต่ละตัวมี Device ได้ 0–1 ตัว (สลับได้ มีประวัติการผูก)
  • Reading เก็บเป็น time-series: ts, petId, hr, hrv, temp, motion, battery, rssi — เขียนถี่ อ่านเป็นช่วง
  • Baseline ต่อสัตว์ 1 แถวต่อสัปดาห์ (ค่าเฉลี่ย+เบี่ยงเบน) ใช้เป็นตัวตัดสินว่า “ผิดปกติ” ไม่ใช่ค่าคงที่ในโค้ด
  • Alert ต้องเก็บ เกณฑ์ที่ใช้ตอนนั้น ไว้ด้วย ไม่งั้นย้อนหลังไปดูจะอธิบายไม่ได้ว่าทำไมถึงเตือน

Bฝั่งอุปกรณ์

  • BLE GATT custom service: notify ค่าเป็นชุดทุก 2 นาที + ถ่ายข้อมูลย้อนหลังตอนกลับเข้าระยะ (Tag ต้องเก็บ log ในตัวได้ ~48 ชม.)
  • โหมดสดกินแบตมาก — ต้องมี ขีดจำกัดเวลา และปิดเองเมื่อออกจากหน้าจอ
  • สัญญาณ PPG บนสัตว์ขนยาวไม่นิ่ง ต้องมี ค่าคุณภาพสัญญาณ ติดมากับทุก reading และซ่อนค่าที่คุณภาพต่ำแทนที่จะโชว์มั่ว

Cคำถามที่ต้องเคาะก่อนลงมือ

  • ทำเป็น SwiftUI เนทีฟ (ได้ HealthKit-grade charts, BLE background, widget) หรือ React Native / Expo เพื่อออก Android พร้อมกัน?
  • อุปกรณ์เป็นของเราเองหรือใช้ปลอกคอที่มีในตลาด (เช่นรุ่นที่เปิด BLE spec)? มีผลกับหน้าจอจับคู่ทั้งหมด
  • ต้องมีบัญชีร่วม (คนในบ้านหลายคนดูสัตว์ตัวเดียวกัน) ในเวอร์ชันแรกไหม? กระทบโครงสิทธิ์ตั้งแต่ต้น
  • แผนที่/พื้นที่ปลอดภัยอยู่ในเฟสไหน — ตอนนี้ผมออกแบบไว้แค่เป็นการแจ้งเตือน ยังไม่มีจอแผนที่