สารบัญ:
- ขั้นตอนที่ 1: การตั้งค่าซอฟต์แวร์
- ขั้นตอนที่ 2: การเขียนโปรแกรมไมโครคอนโทรลเลอร์
- ขั้นตอนที่ 3: แผนผัง
วีดีโอ: โคมไฟ LED Mood ราคา $1 พร้อม ATtiny13 และ WS2812: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:02
โดย arduinocelentanoติดตามเพิ่มเติมโดยผู้เขียน:
นี่คือโคมไฟอารมณ์ราคาประหยัดที่มีสี่โหมด
1. ประกายรุ้ง ประกายไฟจะเคลื่อนขึ้นด้านบนครั้งแล้วครั้งเล่าและค่อยๆ เปลี่ยนสี
2. เรืองแสงสีรุ้ง เรืองแสงคงที่ซึ่งค่อยๆเปลี่ยนสี
3. การจำลองไฟเทียน
4. ปิด
คุณสามารถเปลี่ยนโหมดได้โดยแตะปุ่มสัมผัสที่ด้านบน โหมดปัจจุบันจะถูกบันทึกไว้ในหน่วยความจำ EEPROM หลังจากปิดเครื่อง
ATtiny13 มีขนาดเล็กแค่ไหน?
แนวคิดคือการได้คุณสมบัติสูงสุดจากฮาร์ดแวร์ขั้นต่ำ ซึ่งมีความซับซ้อนมากกว่าสวิตช์อัตโนมัติหรือเทอร์โมมิเตอร์ ซึ่งเป็นโครงการที่ใกล้กับขอบของไมโครคอนโทรลเลอร์ขนาดเล็กนี้ ท้ายที่สุด ข้อจำกัดทำให้คุณมีความคิดสร้างสรรค์ใช่ไหม? อืม ดูเหมือนตอนแรกๆ
ความท้าทายที่สุดในโปรเจ็กต์นี้คือการใส่โค้ดทั้งหมดลงใน ATtiny13 ไมโครคอนโทรลเลอร์มีแฟลช 1K ไบต์และ RAM เพียง 64 ไบต์ ใช่ เมื่อฉันพูดว่า "ไบต์" ฉันหมายถึงสิ่งที่ประกอบด้วยแปดบิต 64 ไบต์สำหรับตัวแปรในเครื่องและ call stack ทั้งหมดของคุณ เพื่อให้ชัดเจน พิจารณาว่าเราต้องควบคุมไฟ LED RGB 8 ดวง แต่ละรายการถูกกำหนดโดย 3 ไบต์ (หนึ่งรายการสำหรับช่องสีแดง สีเขียว และสีน้ำเงินตามลำดับ) ดังนั้น เพื่อจัดเก็บสถานะของ LED 8 ดวง เราจำเป็นต้องใช้โครงสร้างอาร์เรย์ 8 โครงสร้าง 3 ไบต์แต่ละอัน และตัวชี้ไปยังจุดเริ่มต้นของอาร์เรย์นี้จะใช้เวลาเพิ่มอีก 1 ไบต์ ดังนั้น 25 จาก 64 ไบต์จึงหมด เราเพิ่งใช้ RAM 39% และยังไม่ได้เริ่มจริงๆ นอกจากนี้ ในการจัดเก็บสีรุ้งพื้นฐานเจ็ดสี คุณจะต้องมี 7×3 = 21 ไบต์ ดังนั้น RAM ถึง 72% จะหมด สำหรับสีพื้นฐาน ฉันพูดเกินจริง: เราไม่ต้องการสีทั้งหมดพร้อมกันใน RAM และสีไม่เคยเปลี่ยน ดังนั้นสีเหล่านี้จึงอาจถูกนำมาใช้เป็นอาร์เรย์คงที่เพื่อเก็บไว้ในแฟลชแทนที่จะเป็น RAM อย่างไรก็ตาม มันให้ความประทับใจโดยรวมเกี่ยวกับฮาร์ดแวร์ที่ใช้
เมื่อนึกถึงคำกล่าวของ Knuth เกี่ยวกับการเพิ่มประสิทธิภาพก่อนกำหนด ฉันเริ่มจากการสร้างต้นแบบโหมดหลอดไฟสามโหมดแยกกันเพื่อดูว่าจะเกิดอะไรขึ้น ฉันได้ทดสอบแยกกันเพื่อให้แน่ใจว่าทำงานได้อย่างถูกต้องและแต่ละอันพอดีกับไมโครคอนโทรลเลอร์ของฉัน ใช้เวลาสองสามเย็นกว่าจะสำเร็จ และทุกอย่างเป็นไปด้วยดี… จนกระทั่งฉันพยายามรวมมันเข้าด้วยกันในคำสั่ง switch ยูทิลิตี้ขนาด avr รายงานขนาดส่วนข้อความ 1.5 Kb (พร้อมแฟล็ก -s ของ avr-gcc) ในขณะนั้นความตั้งใจเดิมของฉันคือการคว้า ATtiny25 ด้วยแฟลช 2Kb และนั่นอาจเป็นจุดจบของเรื่องนี้อย่างมีความสุข
แต่อย่างใดฉันรู้สึกว่าหลังจากการเพิ่มประสิทธิภาพอย่างมากฉันสามารถย่อโค้ดเส็งเคร็งนั้นให้เหลือ 1Kb ได้ อย่างไรก็ตาม มันต้องใช้เวลาอีกหนึ่งสัปดาห์กว่าจะรู้ว่ามันเป็นไปไม่ได้ และอีกหนึ่งสัปดาห์กว่าจะสำเร็จ ฉันต้องตัดรุ้งเป็นสีพื้นฐานห้าสี ฉันกำจัดคำสั่ง case และใช้ chain ของ if-then-if เพื่อลดขนาดโค้ดไบนารี แอนิเมชั่นไฟต้องใช้ตัวสร้างตัวเลขสุ่มปลอมซึ่งค่อนข้างเทอะทะ ดังนั้นฉันจึงใช้ LFSR เวอร์ชันที่เรียบง่ายพร้อมค่าเริ่มต้นคงที่ ฉันไม่สนใจความยาวเต็มรอบของ PRNG และเพียงแค่มองหาความสมดุลระหว่างขนาดโค้ดและ "แอนิเมชั่นไฟที่สมจริง" ฉันยังใช้การเพิ่มประสิทธิภาพเล็กๆ น้อยๆ มากมายที่ฉันจำไม่ได้ในตอนนี้ และยังสามารถแฟลชโหมดทั้งหมดได้ ยกเว้นไฟในชิป เมื่อฉันไม่มีไอเดีย โค้ดทั้งหมดของฉันอยู่ที่ประมาณ 1200 ไบต์
ฉันหมดเวลาและได้อ่านเกี่ยวกับการเพิ่มประสิทธิภาพโค้ด AVR มามากแล้ว ฉันเกือบจะยอมแพ้และเขียนทุกอย่างใหม่ในภาษาแอสเซมบลี แต่ให้โอกาสเป็นครั้งสุดท้าย ในระหว่างการเร่งรีบในการเพิ่มประสิทธิภาพขั้นสุดท้าย ฉันได้ตัดรุ้งเป็นสีพื้นฐานสามสี และทำให้สีอื่นๆ คำนวณได้ทันที ฉันตรวจสอบทุกอย่างและทำตามคำแนะนำในการปรับ AVR ให้เหมาะสม และสุดท้าย…
avrdude: กำลังเขียนแฟลช (1004 ไบต์):
การเขียน | ####################################################### | 100% 0.90s
ไม่จำเป็นต้องบอกว่าฉันใช้ RAM เกือบทั้งหมดและ EEPROM เพียงหนึ่งไบต์ในการจัดเก็บโหมดปัจจุบัน ฉันไม่ได้หมายความว่านี่เป็นการนำไปใช้ในอุดมคติและขั้นสูงสุด มันใช้งานได้และพอดีกับไมโครคอนโทรลเลอร์ ฉันแน่ใจว่าคุณทำได้ดีกว่านี้ ฉันเป็นจริงๆ ฉันแค่ต้องการแบ่งปันความสนุกในการแก้ปัญหาที่ดูเหมือนทำไม่ได้จริง ซึ่งคุณคิดว่าแทบจะเป็นไปไม่ได้เลยในตอนเริ่มต้น “ดังนั้น การแฮ็กหมายถึงการสำรวจขีดจำกัดของสิ่งที่เป็นไปได้…” -Richard Stallman
เสบียง:
1x ATtiny13 MCU (0.28 ดอลลาร์ = 0.24 ดอลลาร์สำหรับ MCU ในแพ็คเกจ SOP-8 และ 0.04 ดอลลาร์สำหรับอะแดปเตอร์ DIP8)
8x WS2812 RGB LEDs (ฉันแนะนำบอร์ดหรือแถบ LED หนึ่งชิ้น) ($0.42)
1x ปุ่มสัมผัส TTP223 (0.10 เหรียญ)
1x Micro USB เข้ากับอะแดปเตอร์ DIP ($ 0.14)
ตัวต้านทาน 1x10kΩ (<$0.01)
ตัวเก็บประจุเซรามิก 1x 100nF (<$0.01)
ตัวเก็บประจุอิเล็กโทรไลต์ 1x 10–47µF (<$0.01)
รวม <$0.97
ขั้นตอนที่ 1: การตั้งค่าซอฟต์แวร์
คุณจะต้องมี avr-gcc toolchain เพื่อคอมไพล์ซอร์สโค้ดและยูทิลิตี้ avrdude สำหรับการอัปโหลด ROM ของไมโครคอนโทรลเลอร์ ขั้นตอนการติดตั้งค่อนข้างง่ายและตรงไปตรงมา แต่ขึ้นอยู่กับระบบปฏิบัติการของคุณ หากคุณใช้ GNU/Linux บางประเภท คุณอาจมีแพ็คเกจที่เหมาะสมอยู่แล้วในแผนผังที่เก็บของคุณ ซอร์สโค้ดของโครงการนี้สามารถดาวน์โหลดได้ที่นี่:
github.com/arduinocelentano/t13_ws2812_lamp
คุณจะต้องมีไลบรารี light_ws2812 ด้วย:
github.com/cpldcpu/light_ws2812
เมื่อคุณมี avr-gcc toolchain และแหล่งที่มาของโปรเจ็กต์แล้ว ให้รันเทอร์มินัลแล้วพิมพ์โค้ดต่อไปนี้:
เส้นทาง cd/to/project
ทำ
ขั้นตอนที่ 2: การเขียนโปรแกรมไมโครคอนโทรลเลอร์
หากคุณมีโปรแกรมเมอร์ USBASP เพียงเชื่อมต่อกับ Attiny ตาม pinout โดยปกติแล้วจะมีลักษณะเช่นนี้ แต่ฉันขอแนะนำอย่างยิ่งให้ตรวจสอบพินเอาต์จริงของคุณ!
หรือคุณอาจใช้บอร์ด Arduino เป็นโปรแกรมเมอร์ก็ได้ เปิด Arduino IDE และค้นหาตัวอย่าง Arduino ISP ในเมนู "ไฟล์→ตัวอย่าง" หลังจากอัปโหลดภาพร่างแล้ว บอร์ด Arduino ของคุณจะทำหน้าที่เป็นโปรแกรมเมอร์ ความคิดเห็นในโค้ดสเก็ตช์จะให้เบาะแสแก่คุณในการปักหมุด
ตอนนี้วิ่ง
ทำแฟลช
เพื่อแฟลช MCU และ
ทำฟิวส์
เพื่อตั้งค่าบิตฟิวส์
ขั้นตอนที่ 3: แผนผัง
แนะนำ:
Sega Genesis Controller เป็น USB Adapter ราคา $2: 4 ขั้นตอน
Sega Genesis Controller to USB Adapter ราคา $2: อะแดปเตอร์นี้อนุญาตให้ตัวควบคุม Sega Genesis / Mega Drive จำลองเกมแพด XBox 360 คู่สำหรับใช้กับ retroarch หรือซอฟต์แวร์อื่นๆ ใช้ยาเม็ดสีน้ำเงิน stm32f103c8t6 ที่เข้ากันได้กับ Arduino สำหรับอุปกรณ์อิเล็กทรอนิกส์ ส่วนผสม:stm32f103c8t6 blue pilltwo DB9 ม
All Band Receiver พร้อม SI4732 / SI4735 (FM / RDS, AM และ SSB) พร้อม Arduino: 3 ขั้นตอน
All Band Receiver พร้อม SI4732 / SI4735 (FM / RDS, AM และ SSB) พร้อม Arduino: เป็นโปรเจ็กต์เครื่องรับย่านความถี่ทั้งหมด ใช้ห้องสมุด Arduino Si4734 ห้องสมุดนี้มีตัวอย่างมากกว่า 20 ตัวอย่าง คุณสามารถฟัง FM ด้วย RDS สถานี AM (MW) ในพื้นที่ SW และสถานีวิทยุสมัครเล่น (SSB) เอกสารทั้งหมดที่นี่
PWM พร้อม ESP32 - Dimming LED พร้อม PWM บน ESP 32 พร้อม Arduino IDE: 6 ขั้นตอน
PWM พร้อม ESP32 | Dimming LED พร้อม PWM บน ESP 32 พร้อม Arduino IDE: ในคำแนะนำนี้เราจะดูวิธีสร้างสัญญาณ PWM ด้วย ESP32 โดยใช้ Arduino IDE & โดยทั่วไปแล้ว PWM จะใช้เพื่อสร้างเอาต์พุตแอนะล็อกจาก MCU ใดๆ และเอาต์พุตแอนะล็อกนั้นอาจเป็นอะไรก็ได้ระหว่าง 0V ถึง 3.3V (ในกรณีของ esp32) & จาก
3 โครงการควบคุมสมอง / จิตใจที่น่าตื่นตาตื่นใจ ไฟ LED Strip LED พร้อม Arduino และ Neurosky: 6 ขั้นตอน (พร้อมรูปภาพ)
3 โครงการควบคุมสมอง / จิตใจที่น่าตื่นตาตื่นใจ ไฟ LED Strip LED พร้อม Arduino และ Neurosky: คุณเคยต้องการเปิดหรือปิดไฟเพียงแค่คิดหรือไม่? หรือคุณต้องการที่จะรู้ว่าคุณเครียดแค่ไหนโดยดูจากสีของไฟ LED RGB? ขณะนี้คุณสามารถปฏิบัติตามคำแนะนำนี้! เพื่อรับความรู้สึกกับสิ่งที่เรากำลังจะ
ไฟกล้อง LED ราคา $2 สำหรับวิดีโอและภาพถ่าย: 11 ขั้นตอน
ไฟกล้อง LED ราคา $ 2 สำหรับวิดีโอและภาพถ่าย: อัปเดต: ฉันมีรุ่นใหม่และปรับปรุงแล้วที่มีความสว่าง 180 ลูเมนนับตั้งแต่กล้องดิจิทัลถ่ายวิดีโอที่ดี ฉันหยุดพกกล้องวิดีโอ DV ของฉัน และใช้จุดและถ่ายกล้องดิจิตอลแทนเพื่อใช้เวลาสักครู่ ของวิดีโอ MOV หรือ MPG ที่นี่และเ