สารบัญ:

STONE LCD พร้อมสมาร์ทโฮม: 5 ขั้นตอน
STONE LCD พร้อมสมาร์ทโฮม: 5 ขั้นตอน

วีดีโอ: STONE LCD พร้อมสมาร์ทโฮม: 5 ขั้นตอน

วีดีโอ: STONE LCD พร้อมสมาร์ทโฮม: 5 ขั้นตอน
วีดีโอ: อะไรเอ่ย #สิว #สิวอุดตัน #สิวอักเสบ #สิวเห่อ #รอยสิว #รักษาสิว #เล็บเท้า #satisfying 2024, พฤศจิกายน
Anonim
STONE LCD พร้อมสมาร์ทโฮม
STONE LCD พร้อมสมาร์ทโฮม

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

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

ขั้นตอนที่ 1: การออกแบบส่วนต่อประสาน UI

การออกแบบส่วนต่อประสาน UI
การออกแบบส่วนต่อประสาน UI
การออกแบบส่วนต่อประสาน UI
การออกแบบส่วนต่อประสาน UI
การออกแบบส่วนต่อประสาน UI
การออกแบบส่วนต่อประสาน UI
การออกแบบส่วนต่อประสาน UI
การออกแบบส่วนต่อประสาน 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

MCU Communication
MCU Communication
MCU Communication
MCU Communication
MCU Communication
MCU Communication
MCU Communication
MCU Communication

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: เอฟเฟกต์การใช้งานจริง

แนะนำ: