LED POVstick พร้อม Bluetooth Low Energy: 10 ขั้นตอน (พร้อมรูปภาพ)
LED POVstick พร้อม Bluetooth Low Energy: 10 ขั้นตอน (พร้อมรูปภาพ)
Anonim
LED POVstick พร้อม Bluetooth Low Energy
LED POVstick พร้อม Bluetooth Low Energy

คำแนะนำนี้แสดงวิธีสร้างแท่งไฟเขียนด้วยไฟ LED RGB ซึ่งสามารถควบคุมผ่าน BLE จากโทรศัพท์ของคุณ!

ตอนนี้ ฤดูมืดเริ่มต้นขึ้น และคุณต้องถ่ายภาพโดยเปิดรับแสงนาน: ด้วยแท่งไม้นี้ คุณสามารถเขียนลายเซ็นของคุณลงในรูปภาพ หรือคำพูดที่สร้างแรงบันดาลใจ หรือการประกาศความรัก รหัส QR ที่อยู่เว็บ หรืออีกมากมาย สิ่งอื่น…

ครอบคลุมหัวข้อการพัฒนาหลายหัวข้อ:

  • การสร้างฮาร์ดแวร์
  • การเขียนโปรแกรมชิปเซ็ต Cypress BLE ด้วย C
  • สร้างแอปของคุณเองเพื่อควบคุม

ขั้นตอนที่ 1: ฮาร์ดแวร์สำหรับ BLE-LED-Stick

ฮาร์ดแวร์สำหรับ BLE-LED-Stick
ฮาร์ดแวร์สำหรับ BLE-LED-Stick
ฮาร์ดแวร์สำหรับ BLE-LED-Stick
ฮาร์ดแวร์สำหรับ BLE-LED-Stick
ฮาร์ดแวร์สำหรับ BLE-LED-Stick
ฮาร์ดแวร์สำหรับ BLE-LED-Stick
ฮาร์ดแวร์สำหรับ BLE-LED-Stick
ฮาร์ดแวร์สำหรับ BLE-LED-Stick

สำหรับแท่งคุณต้องมีสิ่งต่อไปนี้:

  • โมดูล Cypress BLE (CY8C4247LQI-BL583)
  • WS2812b RGB-LED-Strip (64LEDs จากแถบ 144Led ต่อเมตร)
  • แบตเตอรี่ Li-Ion พร้อมตัวยึดที่เหมาะสม (18650)
  • ปุ่มกด
  • เขียงหั่นขนมชิ้นหนึ่ง

ฮาร์ดแวร์ของแท่งนั้นค่อนข้างง่าย

โมดูล Cypress BLE ติดตั้งอยู่บนเขียงหั่นขนมและไฟ LED ปุ่มและแหล่งจ่ายไฟเชื่อมต่อกับเขียงหั่นขนมนี้

ทุกอย่างถูกติดตั้ง ติดกาว หรือขันให้เป็นแผ่นไม้ชิ้นเล็กๆ ซึ่งส่วนหนึ่งถูกสอดเข้าไปในท่อโพลีอะคริลใสบางส่วน แต่นี่ไม่ใช่สิ่งที่จำเป็น ฉันต้องการติดตั้งทุกอย่างในหลอด แต่ฉันไม่พบโมดูล BLE และแบตเตอรี่ที่ค่อนข้างใหญ่เมื่อเปรียบเทียบกับ LED สำหรับช็อตแรกคุณไม่จำเป็นต้องใช้หลอดอะคริล

ขั้นตอนที่ 2: การประกอบอุปกรณ์อิเล็กทรอนิกส์

แอสเซมบลีอิเล็กทรอนิกส์
แอสเซมบลีอิเล็กทรอนิกส์
แอสเซมบลีอิเล็กทรอนิกส์
แอสเซมบลีอิเล็กทรอนิกส์

ขั้นตอนนี้แสดงวิธีการติดตั้งโมดูล BLE และพินที่ใช้เพื่อวัตถุประสงค์ใด

เช่นเดียวกับในหลายคำแนะนำของฉัน ฉันใช้ Cypress BLE Development Kit CY8CKIT-042-BLE คู่มือเริ่มต้นอย่างรวดเร็ว

หากคุณต้องการใช้งานโมดูลด้วยตัวเอง สิ่งที่คุณต้องทำคือเชื่อมต่อแหล่งพลังงานและพินที่ใช้แล้ว

สำหรับโครงการของเรา เราใช้พิน 3.5 เพื่อขับเคลื่อน LED-Strip เท่านั้น แต่แน่นอน คุณสามารถเปลี่ยนสิ่งนั้นได้ด้วย PSoC Creator

ดังที่คุณเห็นในภาพ PCB ฉันเพิ่มพินเฮดในทุกมุมของชิป แต่ฉันข้ามพิน VREF

วิธีนี้จะติดตั้งโมดูลอย่างถูกต้องและไม่สามารถเชื่อมต่อโมดูลผิดพลาดได้

ขั้นตอนที่ 3: วิธีสร้างแบบอักษร

จะสร้างฟอนต์ได้อย่างไร?
จะสร้างฟอนต์ได้อย่างไร?

ฉันคิดว่านี่เป็นหนึ่งในปัญหาที่น่าสนใจที่สุดที่ฉันแก้ไขในระหว่างโครงการนี้

แน่นอนว่าเราสามารถออกแบบฟอนต์ใหม่และเขียนลงในอาร์เรย์ได้ แต่นั่นก็ใช้ได้ผลจริงๆ!

แล้วฉันทำอะไรลงไป?

ฉันรู้ว่าฉันต้องการ ASCII เพื่อแปลง hex-bitmap และฉันโชคดีเพราะฉันไม่ใช่คนแรกที่มีปัญหานี้!:-)

ซอฟต์แวร์ "GLCD Font Generator" ทำสิ่งที่ถูกต้อง:

เนื่องจากฉันต้องการใช้แท่งไฟ LED ให้เกิดประโยชน์สูงสุด ฉันจึงนำเข้าแบบอักษรในขนาดที่ค่อนข้างใหญ่ (~32 พิกเซล) หากคุณใช้เฉพาะอักษรตัวพิมพ์ใหญ่ คุณไม่จำเป็นต้องสนใจเกี่ยวกับเครื่องหมายดอกจัน ซึ่งจะเพิ่มขนาดแบบอักษรที่มองเห็นได้ของคุณอีกสองสามพิกเซล แต่ฉันเลือกใช้ทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก (https://en.wikipedia.org/wiki/Ascender_%28typography%29)

เมื่อคุณนำเข้าแบบอักษรลงในตัวสร้างแบบอักษร GLCD คุณสามารถเลือกส่งออกในรูปแบบต่างๆ

ฉันพยายามส่งออกไปยังส่วนหัวโดยตรงซึ่งดี แต่ไม่สมบูรณ์แบบ ผลลัพธ์ที่ได้คืออาร์เรย์ shorts (16 บิต) ที่มีค่าไบต์-ฐานสิบหกสำหรับคอลัมน์สำหรับอักขระแต่ละตัวของอักขระ 128-ascii ตัวแรก ไม่ใช่สิ่งที่ฉันต้องการหรือจำเป็น…

ดังนั้นฉันจึงนำเข้าอาร์เรย์ลงในเวิร์กชีต calc ของ office แบบเปิด จากนั้นฉันก็ลบ "0x" ออกจากค่าสามในสี่ค่าและรวมเป็นค่ายาว 32 บิตหนึ่งค่า ฉันยังแก้ไข endianess ที่ไม่ถูกต้องของแต่ละไบต์

อาร์เรย์ที่เป็นผลลัพธ์คืออาร์เรย์ N*M ของค่า 32 บิต M คืออักขระตามลำดับ และ N คือคอลัมน์ที่แสดงตัวอักษรนี้ ในฉบับร่างแรกนี้ อักขระทั้งหมดมีจำนวนคอลัมน์เท่ากัน ซึ่งหมายความว่าตัวอักษรทั้งหมดมีความกว้างเท่ากัน เช่นเดียวกับแบบอักษร Courier ที่รู้จักกันดี อักขระขนาดเล็กเช่น "i" หรือ "t" ดูเหมือนหายไปในอวกาศ

ดังนั้นฉันจึงเพิ่มพารามิเตอร์ใหม่ในตอนต้นของอักขระแต่ละตัวเพื่อบอกว่าอักขระนี้มีคอลัมน์เท่าใด หรืออักขระนี้กว้างเพียงใด ช่วยประหยัดหน่วยความจำและทำให้ข้อความดูดีขึ้น!

ขั้นตอนที่ 4: ซอฟต์แวร์ควบคุม BLE

ซอฟต์แวร์ควบคุม BLE
ซอฟต์แวร์ควบคุม BLE

หลักการของซอฟต์แวร์ BLE นั้นง่ายมาก:

  • ตอนแรกก็ไม่ได้ทำอะไรเลย
  • ผ่าน BLE คุณสามารถตั้งค่าภาพเคลื่อนไหวหรือข้อความต่างๆ ที่จะแสดงได้
  • เมื่อคุณกดปุ่ม ระบบจะแสดงแต่ละคอลัมน์ของภาพเคลื่อนไหวหรือข้อความ
  • หลังจากแสดงข้อความแล้ว จะรออีกครั้ง

เพียงนำเข้าโปรเจ็กต์ไซเปรสไปยัง PSoC-Creator ของคุณแล้วแก้ไขหากต้องการ

PSoC-4 มี RAM และแฟลชไม่มากนักเพื่อให้สามารถเก็บภาพ RGB ของแบบอักษรได้อย่างสมบูรณ์ ดังนั้นฉันจึงต้องการวิธีสร้างเนื้อหา LED แบบไดนามิกจากข้อความ นั่นค่อนข้างตรงไปตรงมา ไม่มีอะไรพิเศษจนถึงตอนนี้ จากข้อความที่มีตัวอักษรหลายตัว อัลกอริทึมจะใช้ตัวอักษรหนึ่งตัวและแปลงเป็นอาร์เรย์บิตแมปขาวดำ จากนั้นจะใช้แต่ละคอลัมน์ของหนึ่งบิตแมปนี้และแทนที่จะเป็นสีขาว มันจะเขียนสี RGB ปัจจุบันไปยังอาร์เรย์ LED ด้วยวิธีนี้ คุณสามารถสร้างข้อความสีเดียวหรือโดยฟังก์ชันเพิ่มเติม เปลี่ยนสีหลังแต่ละคอลัมน์ ตัวอักษรแต่ละตัว หรือแม้แต่หลังแต่ละพิกเซล

"จดหมาย" สามารถจัดเก็บในตัวแปรไบต์เดียวในขณะที่ต้องเก็บบิตแมปขาวดำในอาร์เรย์บางประเภท

โครงสร้างข้อมูลคือ:

สตริง: newtext = "สวัสดี";

แบบอักษร: uint32 อักขระ = { FirstCharacter_ColumnCount, FirstCharacter_FirstColumn, FirstCharacter_SecondColumn, … SecondCharacter_ColumnCount, SecondCharacter_FirstColumn, … … LastCharacter_ColumnCount, … LastCharacter_LastColumn }; สี: uint32 rgbcolor = 0xHHBBGGRR; // ความสว่าง, น้ำเงิน, เขียว, แดง โดยแต่ละค่าเป็น 8 บิต

ในการแปลงสตริงสำหรับการแสดงผล เราทำดังต่อไปนี้:

getCharacter(): H (8 บิต)

getColumn(int i): คอลัมน์ (32 บิต) (ฉันเริ่มต้นด้วยคอลัมน์แรก รันจนถึงคอลัมน์สุดท้าย) ถ้า (บิตในคอลัมน์คือ 1) LED ใน Strip ถูกตั้งค่าเป็นสี LED-Strip Array เป็น LED 64 ดวงพร้อมสี 32 บิตแต่ละสี!

และถ้าคอลัมน์นี้แสดงขึ้น เราจะดำเนินการต่อไปในคอลัมน์ถัดไป

มันง่ายอย่างนี้

ขั้นตอนที่ 5: การทดสอบครั้งแรก

การทดสอบครั้งแรก
การทดสอบครั้งแรก
การทดสอบครั้งแรก
การทดสอบครั้งแรก
การทดสอบครั้งแรก
การทดสอบครั้งแรก

เมื่อซอฟต์แวร์ทำงาน เราก็พร้อมสำหรับการทดสอบครั้งแรก

วิธีที่ง่ายที่สุดในการทดสอบฟังก์ชันฝังตัวคือการใช้แอปทดสอบบลูทูธพลังงานต่ำ เช่นเดียวกับแอปนอร์ดิกหรือไซเปรส

นอร์ดิก: nRF Connect for Mobile

ไซเปรส: CySmart

เริ่ม Pov-Stick และสังเกตว่าจะแสดงสตริงสาธิตอย่างไร เมื่อเสร็จแล้วก็ถึงเวลาเริ่มต้นแอป ค้นหาอุปกรณ์ Povstick และคลิกเชื่อมต่อ

เมื่อสร้างการเชื่อมต่อแล้ว แอปจะค้นหาบริการและคุณลักษณะที่กำหนดไว้ทั้งหมดโดยอัตโนมัติ

มองหาบริการแรก (ควรเริ่มต้นด้วย 0000ccce…) คลิกเพื่อเปิดและแสดงคุณสมบัติแรก (เริ่มต้นด้วย 0000ccc1) จากนั้นกดปุ่มเขียน (หรืออัปโหลด) และเขียน 01 ให้กับคุณลักษณะนี้

เมื่อคุณกดส่ง POVstick จะเริ่มแอนิเมชั่น Color-Knight-rider aka Larson Scanner ด้วยการเปลี่ยนสี

ขอแสดงความยินดีที่คุณส่งค่าแรกของคุณผ่าน BLE!

ขั้นตอนที่ 6: เลือกแอนิเมชั่น

เลือกแอนิเมชั่น
เลือกแอนิเมชั่น
เลือกแอนิเมชั่น
เลือกแอนิเมชั่น
เลือกแอนิเมชั่น
เลือกแอนิเมชั่น
เลือกแอนิเมชั่น
เลือกแอนิเมชั่น

ในซอฟต์แวร์ เราได้กำหนด enum "e_Animation" ด้วยค่าต่อไปนี้:

typedef enum { Knightrider = 0, ColorKnightRider, Rainbowswirl, Valueswirl, WS_CandyCane, WS_CandyCane_2, WS_CandyCane_3, WS_Twinkle, WS_Icicle, WS_ColorWheel, RGB_Control, TextAnimation, Animation_Maxation } e_Animation

ค่าเหล่านี้เป็นค่าที่ถูกต้องสำหรับคุณลักษณะ ccc1 หากคุณต้องการดู CandyCane-Animation คุณต้องเขียน 4, 5 หรือ 6 ให้กับคุณลักษณะนี้ พวกเขาแตกต่างกันในสี

แอนิเมชั่นพิเศษสองแบบคือ RGB_Control และ TextAnimation หากคุณเลือกเปิดใช้งานสิ่งเหล่านี้ แท่งไม้จะไม่แสดงอะไรเลยในตอนแรก แต่มีตัวเลือกเพิ่มเติมให้คุณควบคุมบริการอื่นๆ

ขั้นตอนที่ 7: การควบคุม RGB

การควบคุม RGB
การควบคุม RGB
การควบคุม RGB
การควบคุม RGB
การควบคุม RGB
การควบคุม RGB
การควบคุม RGB
การควบคุม RGB

RGB-Control สามารถทดสอบได้ง่ายมากด้วย CySmart App เพราะฉันใช้ UUID เดียวกันสำหรับคุณลักษณะนี้เช่นเดียวกับใน Cypress Demo

เริ่มแอป CySmart และเชื่อมต่อกับ Povstick ก่อนอื่น คุณต้องเขียน "0x0A" ไปที่คุณลักษณะ ccc1

0x0A คือค่าฐานสิบหกสำหรับ 10 ซึ่งเป็นแอนิเมชั่น RGB-Control ใน enum

จากนั้นคุณสามารถเปลี่ยนไปใช้แผงควบคุม RGB-LED ในแอป CySmart บางทีคุณอาจต้องรีสตาร์ทแอปเพื่อไปที่หน้าจอนี้ จากนั้น คุณสามารถควบคุมสีของไฟ LED ทั้งหมดด้วยไดอะแกรม RGB นี้

แน่นอน คุณสามารถเขียนค่าลงในคุณลักษณะได้โดยตรง

ขั้นตอนที่ 8: Text_Animation Service และ Persistent Storage Service

Text_Animation Service และ Persistent Storage Service
Text_Animation Service และ Persistent Storage Service

บริการเหล่านี้ไม่ใช่เรื่องง่ายที่จะทดสอบ

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

ดังนั้นหากคุณต้องการทดสอบสิ่งเหล่านี้ คุณควรดูที่โครงการ PSoC ซึ่งมีลักษณะเฉพาะที่มี UUID

สิ่งสำคัญคือคุณลักษณะ "Set-Speed" ด้วยคุณสมบัตินี้ คุณสามารถควบคุมความเร็วของแอนิเมชั่นได้

ด้วยคุณลักษณะ "Set_Animation" ของ PersistentStorageService คุณสามารถควบคุมแบบอักษรและสีของสตริงข้อความได้ ค่าที่ถูกต้องถูกกำหนดใน "povanimation.h" สองแบบอักษร "mono" และ "serif" และสีเดียวและสีรุ้ง ค่า 0 และ 1 จะแสดงข้อความด้วยสีคงที่ ซึ่งสามารถควบคุมได้ผ่านคุณสมบัติ RGB_Control ค่า 2 และ 3 เปลี่ยนสีสำหรับแต่ละคอลัมน์และทำให้สตริงมีสายรุ้งที่สวยงาม

"Write_Text_Service" นั้นแตกต่างออกไป คุณสามารถเขียนสตริงใหม่ไปยังอุปกรณ์โดยการเขียนอักขระแต่ละตัวไปที่คุณลักษณะ "Set_Character" ในการเขียนแต่ละครั้ง คุณจะได้รับการแจ้งเตือนกลับถึงความยาวปัจจุบันของสตริง

ในการเริ่มสตริงใหม่ ให้เขียน "true" ถึง "Clear_String"

นี่ไม่ใช่การใช้งานที่ดีที่สุด แต่ใช้ได้กับสตริงใดๆ ที่มีอักขระไม่เกิน 250 ตัวโดยไม่ต้องเปลี่ยนขนาด MTU

การแสดงสตริงใหม่พร้อมการเริ่มต้นเมื่อกดปุ่มบน Povstick

ขั้นตอนที่ 9: เริ่มแอพ Android

นี่เป็นขั้นตอนที่สำคัญ แต่อยู่นอกเหนือขอบเขตของคำแนะนำนี้ ขอโทษสำหรับสิ่งนั้น!

บางทีฉันอาจอัปโหลดแอปทดสอบของฉันไปที่ play store แต่ยังไม่เสร็จสิ้นหรือเผยแพร่ไม่ได้

ขั้นตอนที่ 10: เขียนข้อความในรูปภาพ

เขียนข้อความในรูปภาพ
เขียนข้อความในรูปภาพ
เขียนข้อความในรูปภาพ
เขียนข้อความในรูปภาพ
เขียนข้อความในรูปภาพ
เขียนข้อความในรูปภาพ

นี่คือเหตุผลที่ฉันสร้าง povstick นี้ตั้งแต่แรก: เพื่อเขียนข้อความในรูป

คุณต้องมีขาตั้งกล้อง กล้องที่มีฟังก์ชั่นเปิดรับแสงนาน และตำแหน่งที่ดี

ตั้งค่ากล้องและปรับเวลาเปิดรับแสงเป็น 10 วินาทีสำหรับการทดสอบครั้งแรก

กระตุ้นการปล่อยและเริ่มเดินผ่านภาพโดยเริ่มแสดงข้อความบนไม้เท้า

Et Voila เราอยู่ที่นั่น!

ด้วยการผสมผสานที่ลงตัวระหว่างความสว่าง LED รูรับแสง และเวลาเปิดรับแสง คุณจึงสามารถถ่ายภาพในยามเช้าได้

ภาพสามภาพในขั้นตอนนี้แสดงความเป็นไปได้ทั้งหมด

ในขั้นแรก ไฟ LED จะเปิดรับแสงมากเกินไปและสร้างแสงที่น่าอัศจรรย์ แต่นั่นเป็นเหตุผลว่าทำไมเงาสะท้อนบนพื้นจึงมองเห็นได้และแบ็คกราวด์ก็ค่อนข้างดี

ภาพที่สองถูกเปิดเผยสำหรับ LED แต่นั่นทำให้พื้นหลังเป็นสีดำสนิท

และอันที่สามแสดงไฟ LED ที่ค่อนข้างสลัวหลังจากพระอาทิตย์ตกดินไม่นาน ไฟ LED สว่างเหมือนในภาพอื่นๆ แต่สภาพแวดล้อมนั้นสว่างมากจนฉันต้องใช้รูรับแสงต่ำและ ISO ต่ำ เพื่อให้ไฟ LED ดูค่อนข้างมืด

Make it Glow Contest 2018
Make it Glow Contest 2018
Make it Glow Contest 2018
Make it Glow Contest 2018

รางวัลที่สองในการประกวด Make it Glow 2018