![สร้าง Illuminated Rainbow Synthesizer ด้วย Arduino! 8 ขั้นตอน (พร้อมรูปภาพ) สร้าง Illuminated Rainbow Synthesizer ด้วย Arduino! 8 ขั้นตอน (พร้อมรูปภาพ)](https://img.gwsigeps.com/img/img/blank.jpg)
สารบัญ:
- วัสดุ:
- ขั้นตอนที่ 1: หน้าจอสัมผัสที่ใช้ในคำสั่งนี้
- ขั้นตอนที่ 2: เตรียมหน้าจอ
- ขั้นตอนที่ 3: ทางเลือก: พิมพ์ขาตั้ง LCD และเพิ่มส่วนแทรกทองเหลือง
- ขั้นตอนที่ 4: นำฟิล์มออกแล้วติดตั้งจอแสดงผล
- ขั้นตอนที่ 5: ประสานหัวกับโมดูล LED
- ขั้นตอนที่ 6: วางสายวงจร
- การออกแบบของเอาต์พุตเสียง:
- ขั้นตอนที่ 7: การติดตั้งไลบรารี FastLED และเรียกใช้รหัส
- ขั้นตอนที่ 8: ภาพรวมของรหัส
คำสั่งนี้แสดงวิธีการเพิ่มหน้าจอสัมผัสความละเอียดสูงให้กับ Arduino ของคุณและสร้างเครื่องสังเคราะห์ที่ควบคุมไฟ LED สี! เทคนิคที่คุณเรียนรู้ที่นี่สามารถใช้เป็นรากฐานสำหรับโครงการหน้าจอสัมผัสอื่น ๆ !
ในคำแนะนำนี้คุณจะได้เรียนรู้:
- สถานที่รับหน้าจอสัมผัสความละเอียดสูง 800x480
- ประสานหัวบนหน้าจอสัมผัสได้อย่างไร
- วิธีการพิมพ์ 3 มิติและประกอบขาตั้ง LCD (ขั้นตอนเพิ่มเติม)
- วิธีเชื่อมต่อหน้าจอสัมผัสสีเข้ากับ Arduino Uno
- วิธีการสร้างแจ็ค Line out ให้กับหน้าจอสัมผัสโดยใช้ส่วนประกอบแบบพาสซีฟ
- วิธีเชื่อมโยง LED matrix เข้ากับ Arduino ของคุณ
สำหรับคำแนะนำนี้คุณจะต้อง:
- หน้าจอสัมผัสความละเอียดสูงที่ใช้ชิป FT810 (ดูขั้นตอนต่อไปสำหรับคำแนะนำของฉัน)
- ส่วนหัวตัวผู้ 2x5 และ 1x4 (คุณสามารถซื้อได้แล้วตัดให้ยาว)
- หัวแร้ง
- เทปไฟฟ้า
- สายจัมเปอร์หญิงกับชาย
- สายจัมเปอร์ชายกับชาย
- Arduino Uno
- เขียงหั่นขนม
- ชุดไฟ LED WS2812 (ฉันได้รับโมดูล 4x4 ราคา $ 5 จาก eBay)
- ตัวต้านทาน 220Ohm และ 100Ohm ตัวเก็บประจุเซรามิก 100nF และตัวเก็บประจุแบบฟิล์มบาง 1uF และแจ็คเสียง 3.5 มม.
- เขียงหั่นขนม
- Arduino Uno
- ชุดลำโพงคอมพิวเตอร์หรือหูฟังที่มีการขยายเสียง
เครดิต / Disclaimer: โครงการนี้ใช้ประโยชน์ได้อย่างอิสระและมีไลบรารี่ลิขสิทธิ์ GPL ที่ฉันทำงานในขณะที่ทำงานอยู่ที่ AlephObjects ผู้สร้างเครื่องพิมพ์ 3D โอเพนซอร์ซ LulzBot โครงการและวิดีโอที่เกี่ยวข้องนี้ทำขึ้นตามเวลาที่บ้านโดยใช้อุปกรณ์ของตัวเอง
วัสดุ:
ขั้นตอนที่ 1: หน้าจอสัมผัสที่ใช้ในคำสั่งนี้
สำหรับคำแนะนำนี้ฉันจะใช้หน้าจอสัมผัสจาก Haoyu Electronics ฉันใช้สิ่งต่อไปนี้:
- หน้าจอสัมผัสแบบกราฟิกขนาด 5 นิ้ว, 800x480, SPI, FT810
หน้าจอนี้มีราคาประมาณ $ 36 พร้อมการจัดส่ง นี่เป็นมากกว่าหน้าจอ Arduino อื่น ๆ แต่คุณจะได้รับเงินมากมาย:
- หน้าจอสัมผัสความละเอียดสูงที่คมชัดพร้อมความละเอียด 800x480
- Co-processor กราฟิกออนบอร์ดและ RAM ช่วยให้สามารถควบคุมได้โดยไม่จำเป็นต้องใช้ Arduino
- สร้างเสียงสังเคราะห์พร้อมตัวอย่างเสียงคุณภาพและเครื่องมือต่าง ๆ ให้เลือก
- การสนับสนุนแนวนอนและแนวตั้ง (บน FT810 หรือดีกว่า)
- รองรับมัลติทัช
- JPEG ในตัว, คลื่นเสียงและตัวถอดรหัสวิดีโอสำหรับโครงการขั้นสูง
ขั้นตอนที่ 2: เตรียมหน้าจอ
เมื่อคุณได้รับหน้าจอของคุณคุณจะต้องประสานส่วนหัวไว้ หน้าจอ Haoyu นั้นยอดเยี่ยมเพราะมาพร้อมกับช่องเสียบที่ง่ายต่อการบัดกรีและคุณมีตัวเลือกในการประสานส่วนหัวที่ด้านหลังของหน้าจอโดยตรงหรือที่ปลายสายริบบิ้นขนาดเล็กที่ติดกับกระดานฝ่าวงล้อมที่ถอดออกได้
เพื่อให้งานบัดกรีเสร็จสมบูรณ์คุณจะต้องถอดสายริบบิ้นชั่วคราวและนำบอร์ด PCB ออกจากด้านหลังของแผง ใช้เล็บมือของคุณค่อยๆยกคลิปยึดบนตัวเชื่อมต่อ LCD แล้วปล่อยสายริบบิ้น จากนั้นถอดสกรูสี่ตัวที่ยึดบอร์ดเข้าที่
ตอนนี้ประสานส่วนหัว 5x2 (หรือส่วนหัว 5x1 สอง) ที่คุณต้องการ หุ้มด้านหลังด้วยเทปไฟฟ้าเพื่อหลีกเลี่ยงกางเกงขาสั้น จากนั้นขันสกรู PCB กลับเข้าที่แล้วเสียบสายริบบิ้นกลับเข้าไปใหม่
ขั้นตอนที่ 3: ทางเลือก: พิมพ์ขาตั้ง LCD และเพิ่มส่วนแทรกทองเหลือง
ฉันเลือกที่จะพิมพ์แบบสามมิติเพื่อยืนแผงจอแอลซีดีของฉัน 1
แผงมาพร้อมกับเม็ดมีดทองเหลืองสี่อัน สิ่งเหล่านี้จะถูกนำไปอัดเป็นพลาสติกด้วยความร้อนในขณะที่มันเย็นตัวลงฟันเล็ก ๆ ของพวกมันกัดลงในพลาสติกและป้องกันไม่ให้หลุดออกมา เม็ดมีดเหล่านี้เป็นวิธีการทั่วไปในการเพิ่มหัวข้อที่คงทนให้กับชิ้นส่วนที่พิมพ์ 3 มิติ
เมื่อขาตั้งพิมพ์เสร็จฉันคลายเกลียวทองเหลืองสี่อันออกจากแผง
ฉันทำให้เตารีดของฉันร้อนขึ้นและถือด้วยปลายที่ทำมุมขึ้นปรับสมดุลของเม็ดมีดที่ปลาย จากนั้นฉันก็นำส่วนที่เป็นพลาสติกลงมาแล้วค่อย ๆ ดันเม็ดมีดเข้าไปในรูที่เกิดขึ้นก่อนจนกว่าพวกเขาจะล้างออกด้วยพื้นผิว
ขั้นตอนนี้จะทำงานได้ดีขึ้นหากคุณมีหัวแร้งที่มีปลายเรียวแคบ หากคุณไม่เคยทำสิ่งนี้มาก่อนคุณอาจต้องการฝึกฝนในขณะที่เหล็กเย็น - คุณมีโอกาสทำเพียงครั้งเดียวเมื่อเหล็กร้อน!
ระวังด้วยขั้นตอนนี้เนื่องจากเม็ดมีดทองเหลืองจะร้อนมากและคุณไม่ต้องการให้มันหล่นบนตัก ทำงานบนพื้นผิวที่ทนความร้อนและหากตกจากปลายเหล็กให้ต้านทานการล่อลวงให้เข้าถึงพวกเขาทันที!
1 แหล่งที่มา: ไฟล์ LCD STL และ CAD
ขั้นตอนที่ 4: นำฟิล์มออกแล้วติดตั้งจอแสดงผล
ทีนี้ให้พลิกจอแสดงผลและนำกรอบอะคริลิกด้านหน้าออกแล้วลอกฟิล์มป้องกันออกจากแผง LCD (สิ่งนี้จะช่วยเพิ่มความคมชัดของจอแสดงผล) ใช้สกรูเพื่อยึดจอแสดงผลบนขาตั้งพิมพ์ 3 มิติ
ขั้นตอนที่ 5: ประสานหัวกับโมดูล LED
ใช้หัวกัดด้านข้างเพื่อแยกส่วนหัวความยาวสี่พินแล้วบัดกรีเข้ากับโมดูล LED ดังที่แสดงในภาพ คุณสามารถลดความยาวของสายจัมเปอร์ได้ครึ่งหนึ่งและบัดกรีสายตรงถ้าต้องการ
ขั้นตอนที่ 6: วางสายวงจร
รันสายจัมเปอร์สามเส้นจาก Arduino ไปยังโมดูล LED ดังนี้:
- 5V ไปยังรางสีแดงบนเขียงหั่นขนม
- GND เป็นรางสีดำบนเขียงหั่นขนม
- ในการ pin ~ 5 บน Arduino
สำหรับจอ LCD ให้เชื่อมต่อ:
- 5V ไปยังรางสีแดงบนเขียงหั่นขนม
- GND เป็นรางสีดำบนเขียงหั่นขนม
- SCK เพื่อ pin ~ 13 บน Arduino
- MISO เพื่อ pin ~ 12 บน Arduino
- MOSI เพื่อ pin ~ 11 บน Arduino
- CS เพื่อ pin ~ 10 บน Arduino
- PD เพื่อ pin ~ 9 บน Arduino
- AUDIO ไปที่วงจรเสียงตามที่แสดงใน breadboard และ schematic
- GND ไปที่รางสีดำบนเขียงหั่นขนม
จาก Arduino:
- รันสายจัมเปอร์จากขา 5V ไปยังรางสีแดงบนเขียงหั่นขนม
- ใช้สายจัมเปอร์จากพิน GND ไปยังรางสีดำบนเขียงหั่นขนม
เมื่อวงจรเอาท์พุทเสียงเสร็จสมบูรณ์คุณสามารถเสียบหูฟังหูฟังหรือชุดลำโพงคอมพิวเตอร์ขยายเสียงเข้ากับแจ็คเสียง
การออกแบบของเอาต์พุตเสียง:
เอาต์พุต AUDIO ของจอแสดงผลเป็นสัญญาณดิจิตอลที่ไม่ได้มีไว้เพื่อขับลำโพงโดยตรง การพยายามทำเช่นนั้นอาจทำให้แผงหรือลำโพงเสียหาย ในการให้สัญญาณเสียงที่เหมาะสมคุณจะต้องสร้างวงจรการปรับสภาพที่ทำงานดังต่อไปนี้:
- แปลงสัญญาณดิจิตอล PWM (ปรับความกว้างพัลส์) เป็นแรงดันไฟฟ้าอะนาล็อก
- จำกัด กระแสไฟขาออกและแรงดันไฟฟ้าให้อยู่ในระดับที่ปลอดภัย
งานสามารถทำได้ด้วยตัวต้านทานสองตัวและตัวเก็บประจุสองตัว
ฉันตรวจสอบแผ่นข้อมูลสำหรับชิป FTDI FT810 และพบว่าพิน AUDIO สามารถขับได้สูงสุด 16mA ที่ 3.3V ซึ่งหมายความว่าโหลดจะต้องมีความต้านทานไม่น้อยกว่า 206 โอห์ม เพื่อป้องกันไม่ให้พินเกิดขึ้นฉันเริ่มต้นด้วยการวางตัวต้านทาน 220 โอห์มในซีรีย์ด้วย AUDIO pin ฉันเพิ่มตัวต้านทานอีก 100 โอห์มลงในกราวด์เพื่อสร้างตัวแบ่งแรงดัน เมื่อไม่มีอะไรเชื่อมต่อกับแจ็คสิ่งนี้จะลดระดับ 3.3V ลงไปที่ระดับประมาณ 1V ซึ่งปลอดภัยสำหรับเสียงระดับสาย 100nF สร้างตัวกรองความถี่ต่ำผ่านซึ่งทำให้สัญญาณ PWM ความถี่สูงราบรื่นขึ้นในขณะที่ผ่านความถี่เสียง ตัวเก็บประจุ 1uF ที่เหลือเรียกว่า AC coupling มันบล็อกกระแสตรงจากการไหลออกแจ็คเสียงในขณะที่ปล่อยให้สัญญาณเสียงซึ่งเป็น AC ผ่าน
ขั้นตอนที่ 7: การติดตั้งไลบรารี FastLED และเรียกใช้รหัส
ดาวน์โหลดไฟล์. zip ที่มีร่าง Arduino จากที่เก็บ github ของฉัน
เปิด Arduino IDE และไปที่ "Sketch" -> "Include Library" -> "Manage Libraries … " ติดตั้งไลบรารี "FastLED" โดย Daniel Garcia จากนั้นเปิดไฟล์ "RainbowPiano.ino" และอัปโหลดไปยัง Arduino Uno ของคุณ!
ขั้นตอนที่ 8: ภาพรวมของรหัส
รหัสใช้ประโยชน์จากเฟรมเวิร์ก UI ที่ฉันพัฒนาใน C ++ เฟรมเวิร์กนี้อนุญาตให้คุณสร้างอินเทอร์เฟซจากหนึ่งในหน้าจอ UI เพิ่มเติม แอพเปียโนมีหน้าจอเดียวเท่านั้นซึ่งกำหนดโดยรหัสต่อไปนี้:
คลาส PianoScreen: public InterfaceScreen {… public: void คงที่ onEntry (); โมฆะคงที่ onRedraw (draw_mode_t อะไร); โมฆะคงที่ onTouchStart (แท็ก uint8_t); โมฆะคงที่ onIdle (); }; // แสดงหน้าจอทั้งหมดในแอปของคุณในตารางต่อไปนี้ SCREEN_TABLE {DECL_SCREEN (PianoScreen)}; SCREEN_TABLE_POST โมฆะ PianoScreen:: onEntry () {// รหัสที่ดำเนินการเมื่อหน้าจอปรากฏขึ้น} void PianoScreen:: onRedraw (draw_mode_t what) {// รหัสที่ทำงานเพื่อวาดหน้าจอ} void PianoScreen:: onTouchStart (uint8_t tag) // รหัสที่ทำงานเมื่อผู้ใช้สัมผัสหน้าจอ} void PianoScreen:: onIdle () {// รหัสสำหรับงานที่ทำงานในขณะที่หน้าจอทำงานอยู่}
วิธีการที่สำคัญที่สุดคือ onRedraw (). มันวาดส่วนติดต่อผู้ใช้โดยการเรียกวิธีการใน CommandProcessor วัตถุซึ่งส่งคำสั่งการวาดไปยังแผงจอแสดงผล ชุดคำสั่งแรกจะล้างหน้าจอด้วยสีดำ (0x000000):
CommandProcessor cmd; cmd.cmd (CLEAR_COLOR_RGB (0x000000)).cmd (CLEAR (จริง, จริง, จริง));
จากนั้นรหัสจะดึงปุ่มเลือกเครื่องมือที่ด้านบนของหน้าจอ:
#define GRID_ROWS 8 #define GRID_COLS 6 cmd.font (font_small).fgcolor (สีดำ).tag (241).button (BTN_POS (1,1), BTN_SIZE (1,1), F ("เปียโน")
มีสองสิ่งที่ควรทราบที่นี่ ก่อนอื่นไลบรารี UI ให้คุณจัดวางอินเทอร์เฟซบนกริด ในกรณีนี้ฉันจัดวางอินเทอร์เฟซของฉันบนตารางขนาด 6x8 ฉันจะตั้งค่าแบบอักษรและสีตามด้วยแท็ก
ปุ่มอินเตอร์เฟสแต่ละปุ่มเชื่อมโยงกับแท็ก เมื่อผู้ใช้คลิกที่ปุ่ม onTouchStart () เมธอดถูกเรียกพร้อมกับแท็กนั้นเพื่อให้คุณสามารถดำเนินการที่เหมาะสมสำหรับปุ่มนั้น แท็กนำหน้าคำสั่งปุ่มซึ่งจะส่งคำแนะนำในการวางตำแหน่งปุ่มที่มีชื่อว่า "เปียโน" ที่ตำแหน่ง (1,1) ในขณะที่ใช้พื้นที่ 1x1 บนกริด รหัสสำหรับการจัดวางคีย์เปียโนนั้นคล้ายกัน แต่เกิดขึ้นในวง
ต่อมาในรหัสคุณจะพบฟังก์ชั่นที่ตอบสนองต่อปุ่มโดยกดแท็ก 241:
เป็นโมฆะ PianoScreen:: onTouchStart (แท็ก uint8_t) {เปลี่ยน (แท็ก) {เคส 241: highlighted_instrument = tag; เครื่องดนตรี = PIANO; ทำลาย; … } onRefresh (); }
เมื่อผู้ใช้กดปุ่มรหัสจะปรับเปลี่ยนตัวแปรบางอย่างเพื่อตั้งค่าเครื่องมือเป็น เปียโน แล้วโทร onRefresh () เพื่ออัปเดตหน้าจอด้วยปุ่มใหม่ที่ไฮไลต์ การไฮไลต์ทำได้โดยการ highlightCallback () ฟังก์ชั่นซึ่งในระหว่าง onRefresh () ถูกเรียกใช้สำหรับแต่ละปุ่มเพื่อให้คุณสามารถเปลี่ยนสีของปุ่มตามแท็กและสถานะการไฮไลต์
รหัสสำหรับเล่นเสียงต่างออกไปเล็กน้อย:
void PianoScreen:: onTouchStart (แท็ก uint8_t) {สวิตช์ (แท็ก) {… ค่าเริ่มต้น: // รหัสสำหรับการตั้งค่าสี LED … ถ้า (เครื่องดนตรี == HIHAT) {// กรณีพิเศษสำหรับบันทึกกลองชุด} อื่น { // ปิดเสียงโน้ตเล่น (เครื่องดนตรี, NOTE_C3 + แท็ก - 1); } highlighted_note = แท็ก; } onRefresh (); }
นี่เป็นการสรุปสำหรับการเดินที่รวดเร็วนี้ ฉันหวังว่าการแนะนำนี้เพียงพอที่จะให้คุณเริ่มต้นในการออกแบบส่วนต่อประสานกราฟิกของคุณสำหรับโครงการ Arduino ของคุณ!