
สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12

วันนี้ ฉันได้จอแสดงผลไดรฟ์พอร์ตอนุกรมของ STONE ซึ่งสามารถสื่อสารผ่านพอร์ตอนุกรมของ MCU และการออกแบบตรรกะ UI ของจอแสดงผลนี้สามารถออกแบบได้โดยตรงโดยใช้ซอฟต์แวร์ VGUS ที่ให้ไว้บนเว็บไซต์ทางการของ STONE ซึ่งสะดวกมากสำหรับเรา ดังนั้นฉันจึงวางแผนที่จะใช้มันเพื่อสร้างตัวควบคุมอุปกรณ์ง่ายๆ ซึ่งรวมถึงการควบคุมไฟต่างๆ (ห้องนั่งเล่น ห้องครัว ห้องเด็ก ห้องน้ำ) ในเวลาเดียวกัน สามารถเก็บอุณหภูมิในร่มและกลางแจ้ง ความชื้น และคุณภาพอากาศได้ นี่เป็นเพียงตัวอย่างง่ายๆ และคุณสามารถดำเนินการพัฒนารองผ่านรหัสที่ฉันให้ไว้ บทแนะนำพื้นฐานเกี่ยวกับหน้าจอ STONE สามารถไปที่เว็บไซต์:
เว็บไซต์มีข้อมูลหลากหลายเกี่ยวกับแบบจำลอง ผู้ใช้ และเอกสารการออกแบบ รวมถึงวิดีโอสอนการใช้งาน ฉันจะไม่ลงรายละเอียดมากเกินไปที่นี่
ขั้นตอนที่ 1: การออกแบบส่วนต่อประสาน UI




Photoshop
ฉันออกแบบหน้า UI สองหน้าต่อไปนี้ด้วย photoshop:
โครงการนี้มีทั้งหมดสองหน้าข้างต้น "Light" และ "Sensor" ที่มุมขวาบนคือปุ่มสวิตช์ของสองหน้านี้
ในหน้า "แสงสว่าง" คุณสามารถควบคุมไฟทุกชนิดในบ้านของคุณได้ ในหน้า "เซ็นเซอร์" คุณสามารถตรวจสอบค่าที่เซ็นเซอร์ต่างๆ ตรวจพบได้
หลังจากการออกแบบสองหน้าข้างต้นแล้ว เราสามารถออกแบบปุ่มลอจิกผ่านซอฟต์แวร์ STONE TOOL ที่ให้ไว้บนเว็บไซต์ทางการของ STONE
เป็นที่น่าสังเกตว่าแหล่งสัญญาณนาฬิกาที่ใช้สำหรับการแสดงเวลาที่นี่เป็นแหล่งสัญญาณนาฬิกาของหน้าจอแสดงผล ไม่ใช่แหล่งสัญญาณนาฬิกาของ MCU
เอฟเฟกต์การสลับหน้า TAB
ไม่พบองค์ประกอบการสลับหน้า TAB ในซอฟต์แวร์ STONE TOOL ดังนั้นฉันจึงคิดหาวิธีอื่นเพื่อให้ได้เอฟเฟกต์การสลับหน้า TAB
จากการสังเกตที่ฉันให้ภาพ UI สองภาพพบว่าสองภาพด้านบนเป็นข้อความ "Light" และ "Sensor" ความแตกต่างคือขนาดพิกเซลต่างกันดังนั้นเราจึงต้องวางตำแหน่งสองพิกเซลเป็น ข้อความเดียวกันแล้วผ่านมุมบนซ้ายของเวลาและวันที่สำหรับการอ้างอิง คุณสามารถบรรลุ TAB เพื่อสลับผล
ตรรกะของปุ่ม
ใช้ปุ่ม "ห้องนั่งเล่น" เป็นตัวอย่าง เมื่อผู้ใช้กดปุ่มนี้ หน้าจอแสดงผลพอร์ตอนุกรมของ STONE จะส่งคำแนะนำโปรโตคอลที่สอดคล้องกันผ่านพอร์ตอนุกรม หลังจากได้รับคำแนะนำนี้ MCU ของผู้ใช้จะแยกวิเคราะห์โปรโตคอลเพื่อควบคุมสถานะการสลับของไฟที่เชื่อมต่อกับ MCU
การได้มาซึ่งเซ็นเซอร์
ยกตัวอย่าง "คุณภาพอากาศ" ถ้าคุณต้องการได้คุณภาพอากาศภายในอาคาร เราต้องมี MCU เพื่อรวบรวมคุณภาพอากาศ เซ็นเซอร์คุณภาพอากาศเมื่อตัวเลข MCU รวบรวมผ่านอัลกอริทึมการเปรียบเทียบข้อดีข้อเสียของคุณภาพอากาศแล้ว MCU ส่งผ่านพอร์ตอนุกรมเพื่อแสดงพื้นที่จัดเก็บของ "ดี" หรือ "ไม่ดี" เพื่อเปลี่ยนเนื้อหาที่แสดง "ตัวแปรข้อความ0" จากนั้นผู้ใช้จะมองเห็นข้อดีของการควบคุมคุณภาพอย่างสังหรณ์ใจ สิ่งเหล่านี้จะอธิบายในภายหลังในรหัส MCU
ขั้นตอนที่ 2: การสื่อสาร MCU




STM32 คือ MCU ที่ทุกคนคุ้นเคย และเป็นรูปแบบ MCU ทั่วไปในต่างประเทศ ดังนั้น รุ่นเฉพาะของ STM32 MCU ที่ฉันใช้ในโปรเจ็กต์นี้คือ STM32F103RCT6
มีหลายรุ่นของ STM32 ซึ่งสามารถตอบสนองความต้องการที่หลากหลายของตลาด เคอร์เนลสามารถแบ่งออกเป็น cortex-m0, M3, M4 และ M7 และแต่ละเคอร์เนลสามารถแบ่งออกเป็นกระแสหลัก ประสิทธิภาพสูง และใช้พลังงานต่ำ
จากมุมมองของการเรียนรู้ล้วนๆ คุณสามารถเลือก F1 และ F4, F1 หมายถึงประเภทพื้นฐาน ตามเคอร์เนล cortex-m3 ความถี่หลักคือ 72MHZ, F4 หมายถึงประสิทธิภาพสูง ตามเคอร์เนล cortex-m4 หลัก ความถี่ 180M.
สำหรับ F1, F4 (รุ่น 429 ขึ้นไป) นอกเหนือจากเมล็ดที่แตกต่างกันและการปรับปรุงความถี่หลัก คุณลักษณะที่ชัดเจนของการอัพเกรดคือตัวควบคุม LCD และอินเทอร์เฟซของกล้อง การรองรับ SDRAM ความแตกต่างนี้จะมีความสำคัญในการเลือกโครงการ อย่างไรก็ตาม จากมุมมองของการสอนในมหาวิทยาลัยและการเรียนรู้เบื้องต้นของผู้ใช้ ซีรีส์ F1 ยังคงเป็นตัวเลือกแรก ปัจจุบัน STM32 ของซีรีส์ F1 มีวัสดุและผลิตภัณฑ์มากที่สุดในตลาด
เกี่ยวกับการติดตั้งสภาพแวดล้อมการพัฒนา STM32 SCM และวิธีการดาวน์โหลดโปรแกรม ฉันจะไม่แนะนำ
การเริ่มต้น GPIO
ในโครงการนี้ เราใช้ GPIO ทั้งหมด 4 ตัว หนึ่งในนั้นคือพินเอาต์พุต PWM มาดูการเริ่มต้นของพอร์ต GPIO ธรรมดาสามพอร์ตกันก่อน:
ฟังก์ชันนี้เริ่มต้น PB0\PB1\PB2 ของ STM32F103C8 เป็นพินเอาต์พุตและเรียกจากฟังก์ชันหลัก หลังจากการเริ่มต้น เราจำเป็นต้องมีตรรกะในการควบคุมสถานะเอาต์พุต GPIO ระดับสูงและต่ำ ดังนั้นฉันจึงเขียนฟังก์ชันดังต่อไปนี้:
นี่คือฟังก์ชันที่คุณสามารถเข้าใจโดยสัญชาตญาณโดยใช้ชื่อของตัวแปร
การเริ่มต้นพอร์ตอนุกรม
ส่วนการเริ่มต้นของพอร์ตอนุกรมอยู่ใน uart.c:
จากนั้นเรียก uart_init ในฟังก์ชันหลักเพื่อเริ่มต้นอัตรา baud ของพอร์ตอนุกรมที่ 115200 พินใช้ PA9/PA10
การเริ่มต้น PWM
ขั้นตอนเฉพาะ:
1. ตั้งนาฬิกา RCC;
2. ตั้งค่านาฬิกา GPIO ควรตั้งค่าโหมด GPIO เป็น GPIO_Model_AF_PP หรือเป็นฟังก์ชัน GPIO_PinRemapConfig() หากจำเป็นต้องทำการแมปพินใหม่
3. ตั้งค่าการลงทะเบียนที่เกี่ยวข้องของตัวจับเวลา TIMx;
4. ตั้งค่าการลงทะเบียนที่เกี่ยวข้องกับ PWM ของตัวจับเวลา TIMx;
A. ตั้งค่าโหมด PWM
ข. กำหนดรอบการทำงาน (การคำนวณสูตร)
C. ตั้งค่าขั้วเปรียบเทียบเอาท์พุต (แนะนำก่อนหน้านี้)
D. สิ่งสำคัญที่สุดคือเปิดใช้งานสถานะเอาต์พุตของ TIMx และเปิดใช้งานเอาต์พุต PWM ของ TIMx หลังจากการตั้งค่าที่เกี่ยวข้องเสร็จสิ้น ตัวจับเวลา TIMx จะถูกเปิดโดย TIMx_Cmd () เพื่อรับเอาต์พุต PWM เรียก TIM3_PWM_Init นี้จากฟังก์ชันหลัก
ขั้นตอนที่ 3: การเขียนโค้ดลอจิก



แสดงการกำหนดที่อยู่ส่วนประกอบ
ส่วนประกอบของจอแสดงผลมีที่อยู่แยกต่างหาก และที่นี่ฉันได้เขียนทั้งหมดเป็นคำจำกัดความของมาโคร: การรับข้อมูลแบบอนุกรม
เมื่อดูข้อมูลเกี่ยวกับจอแสดงผล STONE คุณจะเห็นว่าเมื่อกดปุ่ม พอร์ตอนุกรมบนจอแสดงผลจะส่งโปรโตคอลในรูปแบบที่เหมาะสม ซึ่ง MCU ของผู้ใช้สามารถรับและแยกวิเคราะห์ได้ เมื่อกดปุ่ม พอร์ตอนุกรมบนจอแสดงผลจะส่งข้อมูลเก้าไบต์ รวมทั้งข้อมูลผู้ใช้ การรับข้อมูลแบบอนุกรมเขียนด้วย Handler: ข้อมูลที่ได้รับจะถูกจัดเก็บไว้ในอาร์เรย์ "USART_RX_BUF" ในโปรเจ็กต์นี้ ความยาวในการรับจะคงที่ เมื่อความยาวการรับมากกว่า 9 ไบต์ สิ้นสุดการรับจะถูกตัดสิน
ควบคุมสถานะการสลับของหลอดไฟ
ในฟังก์ชันหลัก ฉันเขียนรหัสลอจิกเพื่อควบคุมสถานะสวิตช์ของหลอดไฟ: ดังที่เราเห็น รหัสก่อนกำหนดว่าได้รับข้อมูลพอร์ตอนุกรมหรือไม่ และเมื่อได้รับข้อมูลพอร์ตอนุกรม กำหนดปุ่มที่ผู้ใช้ กดบนหน้าจอแสดงผล ปุ่มต่างๆ บนจอแสดงผลมีที่อยู่ที่แตกต่างกัน ซึ่งสามารถเห็นได้ในซอฟต์แวร์ STONE TOOL: เมื่อผู้ใช้กดปุ่ม "ห้องนั่งเล่น" บิตที่สี่และห้าของข้อมูลที่ส่งออกโดยพอร์ตอนุกรมของหน้าจอแสดงผลคือ ที่อยู่ของปุ่ม เนื่องจากบิตที่สี่ของปุ่มทั้งหมดที่ตั้งค่าไว้ที่นี้คือ 0x00 เราจึงสามารถตัดสินได้ว่าผู้ใช้กดปุ่มใดโดยพิจารณาจากข้อมูลของบิตที่ห้าโดยตรง หลังจากได้รับปุ่มที่กดโดยผู้ใช้แล้ว เราต้องตัดสินข้อมูลผู้ใช้ที่ได้รับเมื่อกดปุ่ม ซึ่งเป็นตัวเลขหลักที่แปดของข้อมูลที่ส่งจากหน้าจอแสดงผล ดังนั้นเราจึงทำการควบคุมดังต่อไปนี้: เขียนพารามิเตอร์ที่อยู่ของปุ่มและข้อมูลผู้ใช้ลงในฟังก์ชัน "Light_Contral" เพื่อควบคุมสถานะการเปิด-ปิดของไฟ เอนทิตีของฟังก์ชัน Light_Contral มีดังนี้: อย่างที่คุณเห็น หากที่อยู่ปุ่มคือ "ห้องนั่งเล่น" และข้อมูลผู้ใช้คือ "LightOn" หมุด PB0 ของ MCU จะถูกตั้งค่าเป็นเอาต์พุตระดับสูง และไฟติดสว่าง. อีกสามปุ่มคล้ายกัน แต่ฉันจะไม่พูดถึงที่นี่
เอาต์พุต PWM
ใน UI ที่ออกแบบโดยฉัน มีตัวควบคุมแบบเลื่อนซึ่งใช้เพื่อควบคุมความสว่างของแสงของ "ห้องเด็ก" MCU ถูกใช้งานโดยพินเอาต์พุต PWM. PWM คือ PB5 รหัสมีดังต่อไปนี้: ตัวปรับการเลื่อนถูกตั้งค่าเป็นค่าต่ำสุดที่ 0x00 และค่าสูงสุดคือ 0x64 เมื่อเลื่อน พอร์ตอนุกรมของหน้าจอแสดงผลจะส่งที่อยู่และข้อมูลที่เกี่ยวข้อง จากนั้นตั้งค่าอัตราส่วนหน้าที่ของเอาต์พุต PWM โดยเรียกใช้ฟังก์ชันต่อไปนี้:
ขั้นตอนที่ 4: การได้มาซึ่งเซ็นเซอร์



ในหน้า "เซนเซอร์" ของหน้าจอแสดงผล มีข้อมูลเซนเซอร์สี่ตัว
ข้อมูลยังมีที่อยู่ที่เก็บข้อมูลในจอแสดงผล และเราสามารถเปลี่ยนเนื้อหาจริงได้โดยเพียงแค่เขียนข้อมูลไปยังที่อยู่เหล่านี้ผ่านพอร์ตอนุกรมของ MCU
ที่นี่ฉันทำการติดตั้งโค้ดอย่างง่าย:
ข้อมูลการแสดงผลจะอัปเดตทุกๆ 5 วินาที และฉันเขียนเพียงตัวอย่างง่ายๆ ของฟังก์ชันการรวบรวมเซ็นเซอร์ที่เกี่ยวข้อง เนื่องจากฉันไม่มีเซ็นเซอร์เหล่านี้อยู่ในมือ
ในการพัฒนาโครงการจริง เซ็นเซอร์เหล่านี้อาจเป็นข้อมูลที่รวบรวมโดย ADC หรือข้อมูลที่รวบรวมโดยอินเทอร์เฟซการสื่อสาร IIC, UART และ SPI สิ่งที่คุณต้องทำคือเขียนข้อมูลเหล่านี้ลงในฟังก์ชันที่เกี่ยวข้องเป็นค่าส่งคืน
ขั้นตอนที่ 5: เอฟเฟกต์การใช้งานจริง
แนะนำ:
หน้าจอ LCD STONE สำหรับแผงหน้าปัดรถยนต์: 5 ขั้นตอน

หน้าจอ LCD หินสำหรับแผงหน้าปัดรถยนต์: ด้วยการพัฒนาอย่างรวดเร็วของเศรษฐกิจและการพัฒนากำลังการบริโภคของผู้คนอย่างค่อยเป็นค่อยไป รถยนต์ได้กลายเป็นสิ่งจำเป็นในชีวิตประจำวันของครอบครัวทั่วไป และทุกคนให้ความสำคัญกับความสะดวกสบายและความปลอดภัยของรถยนต์มากขึ้น อุตสาหกรรมยานยนต์
เครื่องช่วยหายใจทางการแพทย์ +STONE LCD + Arduino UNO: 6 ขั้นตอน

เครื่องช่วยหายใจทางการแพทย์ +STONE LCD + Arduino UNO: ตั้งแต่วันที่ 8 ธันวาคม 2019 มีรายงานผู้ป่วยปอดบวมหลายรายที่ไม่ทราบสาเหตุในเมืองหวู่ฮั่น มณฑลหูเป่ย ประเทศจีน ในช่วงไม่กี่เดือนที่ผ่านมา มีผู้ป่วยที่ได้รับการยืนยันเกือบ 80000 รายเกิดขึ้นทั่วประเทศ และผลกระทบของการแพร่ระบาดทำให้เ
วิธีแสดงอัตราการเต้นของหัวใจบน LCD STONE ด้วย Ar: 31 ขั้นตอน

วิธีแสดงอัตราการเต้นของหัวใจบน LCD STONE ด้วย Ar: บทนำสั้นๆ เมื่อก่อน ฉันพบโมดูลเซ็นเซอร์วัดอัตราการเต้นของหัวใจ MAX30100 ในการช็อปปิ้งออนไลน์ โมดูลนี้สามารถรวบรวมข้อมูลออกซิเจนในเลือดและอัตราการเต้นของหัวใจของผู้ใช้ ซึ่งง่ายและสะดวกต่อการใช้งาน จากข้อมูลพบว่ามี
อัตราการเต้นของหัวใจบนหน้าจอ LCD ของ STONE: 7 ขั้นตอน

อัตราการเต้นของหัวใจบนจอ LCD ของ STONE: เมื่อไม่นานมานี้ ฉันพบโมดูลเซ็นเซอร์วัดอัตราการเต้นของหัวใจ MAX30100 ในการช็อปปิ้งออนไลน์ โมดูลนี้สามารถรวบรวมข้อมูลออกซิเจนในเลือดและอัตราการเต้นของหัวใจของผู้ใช้ ซึ่งยังง่ายและสะดวกต่อการใช้งาน จากข้อมูลพบว่ามีไลบรารีของ M
จอ LCD I2C / IIC - ใช้ SPI LCD กับจอแสดงผล LCD I2C โดยใช้โมดูล SPI เป็น IIC กับ Arduino: 5 ขั้นตอน

จอ LCD I2C / IIC | ใช้ SPI LCD กับจอแสดงผล LCD I2C โดยใช้โมดูล SPI เป็น IIC กับ Arduino: สวัสดีทุกคน เนื่องจาก SPI LCD 1602 ปกติมีสายเชื่อมต่อมากเกินไป ดังนั้นจึงยากมากที่จะเชื่อมต่อกับ Arduino แต่มีโมดูลเดียวในตลาดที่สามารถทำได้ แปลงจอแสดงผล SPI เป็นจอแสดงผล IIC ดังนั้นคุณต้องเชื่อมต่อเพียง 4 สายเท่านั้น