สารบัญ:

ที่ใส่กุญแจแจ็คกีต้าร์ Arduino พร้อมการจดจำแจ็คและ OLED: 7 ขั้นตอน
ที่ใส่กุญแจแจ็คกีต้าร์ Arduino พร้อมการจดจำแจ็คและ OLED: 7 ขั้นตอน

วีดีโอ: ที่ใส่กุญแจแจ็คกีต้าร์ Arduino พร้อมการจดจำแจ็คและ OLED: 7 ขั้นตอน

วีดีโอ: ที่ใส่กุญแจแจ็คกีต้าร์ Arduino พร้อมการจดจำแจ็คและ OLED: 7 ขั้นตอน
วีดีโอ: สายสูงเล่นเจ็บนิ้วแก้งี้! 2024, กรกฎาคม
Anonim
Image
Image
ที่ใส่กุญแจแจ็คกีตาร์ Arduino พร้อมการจดจำแจ็ค & OLED
ที่ใส่กุญแจแจ็คกีตาร์ Arduino พร้อมการจดจำแจ็ค & OLED

บทนำ:

คำแนะนำนี้จะให้รายละเอียดเกี่ยวกับการสร้างของที่ใส่คีย์ปลั๊กอิน Guitar Jack ที่ใช้ Arduino

นี่เป็นครั้งแรกที่ฉันสอนได้ดังนั้นโปรดอดทนกับฉันในขณะที่ฉันอาจทำการเปลี่ยนแปลง / อัปเดตไปพร้อมกัน

ขั้นตอนที่ 1: ชิ้นส่วนและเครื่องมือ

อะไหล่และเครื่องมือ
อะไหล่และเครื่องมือ
อะไหล่และเครื่องมือ
อะไหล่และเครื่องมือ
อะไหล่และเครื่องมือ
อะไหล่และเครื่องมือ

ชิ้นส่วนส่วนใหญ่ที่ฉันซื้อจาก Amazon.co.uk หรือ eBay บางส่วนฉันเคยใช้งานมาแล้ว นี่คือรายการของสิ่งที่คุณต้องการ

ลิงก์ของ Amazon เป็นลิงก์ของ Affiliate ทั้งหมด คุณอาจหาซื้อได้ในที่อื่นที่ถูกกว่า - ฉันใช้ Amazon Prime เป็นจำนวนมาก ดังนั้น Amazon จึงเป็นช่องทางที่ฉันชอบ

ฉันต้องการให้งานสร้างนี้มีต้นทุนต่ำและเป็นมิตรกับงบประมาณ คุณสามารถใช้หน้าจอ TFT ที่ใหญ่ขึ้นได้ตามต้องการ เช่นเดียวกับ Arduino ตัวอื่น อย่าใช้ NANO เนื่องจากจะขัดข้องเนื่องจากการใช้หน่วยความจำสูง รหัสนี้ใช้ RAM ของ Pro Micro ประมาณ 72% และมีความเสถียร แต่จากการทดสอบ NANO จะขัดข้องและค้าง

(รายละเอียดเพิ่มเติมในขั้นตอนรหัส)

PARTS

1x Arduino Pro Micro -

1x 0.96 OLED พร้อมจอแสดงผลสีเหลืองและสีน้ำเงิน -

4x WS2812 'พิกเซล' -

1x DS3231 RTC -

แจ็คโมโน 4x 1/4 (หรือมากเท่าที่คุณต้องการ) - Amazon (Gold) หรือ Amazon (Silver) หรือ eBay.co.uk

1x แพ็คตัวต้านทานแบบผสม -

แจ็คกีต้าร์ 4x 1/4 -

สายเคเบิลต่อขยายไมโคร USB 1x -

สกรู M3 4x

เครื่องมือและวัสดุ

- หัวแร้ง (นี่คืออันที่ฉันซื้อ - TS100 - เพราะมันมาพร้อมเคล็ดลับเพิ่มเติม

- ประสาน

- ปืนกาวร้อน (https://amzn.to/2UTd9PN)

- ลวด (https://amzn.to/2VK2ILU)

- เครื่องตัด/ปอกสายไฟ (https://amzn.to/2KzqUzp)

- เครื่องพิมพ์ 3 มิติ หรือ บริการพิมพ์ 3 มิติ

ไม่บังคับ - รายการเหล่านี้เป็นทางเลือก ขึ้นอยู่กับว่าคุณเลือกเชื่อมต่อทุกอย่างอย่างไร

- เวโรบอร์ด / สตริปบอร์ด (https://amzn.to/2KzMFPE)

- ขั้วต่อขั้วต่อแบบสกรู (2 ขั้ว | 3 ขั้ว | 4 ขั้ว)

- ส่วนหัว PCB (https://amzn.to/2X7RjWf)

ขั้นตอนที่ 2: การพิมพ์เคส 3 มิติ

การพิมพ์ 3 มิติเคส
การพิมพ์ 3 มิติเคส
การพิมพ์ 3 มิติเคส
การพิมพ์ 3 มิติเคส
การพิมพ์ 3 มิติเคส
การพิมพ์ 3 มิติเคส
การพิมพ์ 3 มิติเคส
การพิมพ์ 3 มิติเคส

ฉันพิมพ์ของฉันบน Creality CR-10S โดยใช้ Black PLA+ (https://amzn.to/2X2SDtE)

ฉันพิมพ์ที่ความสูง 0.2 ชั้น โดยเติม 25%

ขั้นตอนที่ 3: นำทุกอย่างมารวมกัน + แผนผัง

นำทุกอย่างมารวมกัน + แผนผัง
นำทุกอย่างมารวมกัน + แผนผัง
นำทุกอย่างมารวมกัน + แผนผัง
นำทุกอย่างมารวมกัน + แผนผัง
นำทุกอย่างมารวมกัน + แผนผัง
นำทุกอย่างมารวมกัน + แผนผัง
นำทุกอย่างมารวมกัน + แผนผัง
นำทุกอย่างมารวมกัน + แผนผัง

วิธีที่คุณเลือกเชื่อมต่อ Arduino นั้นขึ้นอยู่กับคุณทั้งหมด - ฉันเองเลือกที่จะทำให้ตัวเองเป็น "เกราะป้องกัน" เพื่อที่จะพูด ในการสร้างโล่ ฉันได้บัดกรีส่วนหัวของตัวเมียกับ veroboard เพื่อให้เข้ากับ Pro Micro จากนั้นจึงเพิ่มราง +5v และ GND ที่ปลายอีกด้าน ฉันใช้สายจัมเปอร์เพื่อเชื่อมต่อ +5v กับ 'ราง' 5v ตอนนี้และทำเช่นเดียวกันกับ GND จากนั้นฉันก็เพิ่มตัวต้านทาน 4x 100k ของฉัน ปลายด้านหนึ่งเชื่อมต่อกับ +5v สำหรับตัวต้านทานทั้งหมด จากนั้นอีกด้านหนึ่งเชื่อมต่อกับ A0, A1, A2 & A3 ตามลำดับ ฉันได้เพิ่มขั้วสกรูเข้ากับพินอะนาล็อก A0, A1, A2 & A3 และพิน 2 (SDA), 3 (SCL) & 4

วัดการเดินสายของคุณและตัดให้ได้ความยาวที่เหมาะสม ฉันเริ่มต้นด้วย WS2812 Pixel LEDs ก่อน - FIRST WS2812 LED เชื่อมต่อกับ +5v จาก Arduino, GND จาก Arduino และ DIN เชื่อมต่อกับ Pin 4 หลังจากนั้นอีก 3 ตัวที่เหลือจะถูกล่ามโซ่เข้าด้วยกันโดยผูกมัด 5v > 5v ทั้งหมด GND > GND พินและ DOUT จากพิกเซลหนึ่ง เชื่อมต่อกับ DIN ถัดไป เมื่อบัดกรีแล้ว ให้กดเบา ๆ ลงในรูสี่เหลี่ยมที่ด้านบน และกาวร้อนเข้าที่ และเพื่อป้องกันด้านหลังจากการเชื่อมต่อหรือกางเกงขาสั้นโดยไม่ได้ตั้งใจ

หลังจากไฟ LED ฉันก็ขันซ็อกเก็ตแจ็คกีตาร์ หนึ่งพินของแต่ละตัวเชื่อมต่อกับ GND จากนั้นพินที่ 2 ของแต่ละอันเชื่อมต่อกับ A0, A1, A2 & A3 ตามลำดับ นั่นคือซ็อกเก็ต 1 ถึง A0, ซ็อกเก็ต 2 ถึง A1, ซ็อกเก็ต 3 ถึง A2 และซ็อกเก็ต 4 ถึง A3

ต่อไปฉันบัดกรีสายไฟ 4 เส้นเข้ากับการเชื่อมต่อ OLED และตัดแต่งบัดกรีส่วนเกินให้มากที่สุด คุณต้องการต่อสายไฟจากด้านหลังของหน้าจอ ดังนั้นคุณจึงบัดกรีไปที่ด้านหน้าของหน้าจอ

ให้ความสนใจกับหมุด! OLED บางตัวมี GND ที่ด้านนอก จากนั้น VCC บางตัวมี VCC ที่ด้านนอก และ GND

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

เชื่อมต่อทุกอย่างให้เข้ากับ Schematic และรูปภาพ และเมื่อพอใจแล้ว คุณสามารถติด Pro Micro และ RTC Clock ให้เข้าที่ด้วย จากนั้นเชื่อมต่อส่วนขยาย USB กับ Pro Micro

ฉันใช้ส่วนขยาย micro USB เพื่อที่ a) สามารถใช้ USB เพื่อจ่ายไฟได้ แต่ยิ่งกว่านั้น b) เพื่อให้สามารถตั้งโปรแกรม Pro Micro ใหม่ได้หากต้องการโดยไม่ต้องแยกทุกอย่างออกจากกัน

เมื่อพอใจแล้ว ขันสกรูตัวเรือนเข้าด้วยกันโดยใช้สกรู 4 ตัว

ขั้นตอนที่ 4: ปลั๊ก

ปลั๊ก!
ปลั๊ก!
ปลั๊ก!
ปลั๊ก!
ปลั๊ก!
ปลั๊ก!

วิธีการทำงานก็คือ ส่วนหนึ่งของการออกแบบทำงานเป็น "โอห์มมิเตอร์" สำหรับจุดประสงค์และวัตถุประสงค์ทั้งหมด โอห์มมิเตอร์เป็นเครื่องมือสำหรับวัดความต้านทานไฟฟ้า มัลติมิเตอร์ส่วนใหญ่มีฟังก์ชันนี้โดยให้คุณเลือกมาตราส่วนแล้ววัดตัวต้านทานเพื่อหาค่าของมัน หลักการทำงานคือคุณเชื่อมต่อตัวต้านทาน KNOWN กับ +ve ซึ่งเชื่อมต่อกับตัวต้านทาน UNKNOWN ซึ่งเชื่อมต่อกับ -ve ข้อต่อระหว่างตัวต้านทาน 2 ตัวเชื่อมต่อกับขาอะนาล็อก Arduino เพื่อให้สามารถอ่านแรงดันไฟฟ้าและคำนวณความต้านทานได้

มันทำงานเหมือนตัวแบ่งแรงดันไฟและคำนวณความต้านทานของตัวต้านทานที่ไม่รู้จัก

ในฐานะที่เป็นเครือข่ายตัวแบ่งแรงดันของตัวต้านทาน R1 และ R2

Vout = Vin * R2 / (R1 + R2) - เราใช้ 100k สำหรับตัวต้านทาน (R1) ที่รู้จักของเรา สิ่งนี้ทำให้เรา "แรงดันตก"

จากนี้ เราสามารถหาค่าความต้านทานของตัวต้านทานที่ไม่รู้จัก (R2) ได้แล้ว

R2 = Vout * R1 / (Vin – Vout) - โดยที่ R1 คือตัวต้านทาน 100k (100, 000 โอห์ม) ของเรา

ด้วยการใช้ตัวต้านทานที่แตกต่างกันในแต่ละแจ็คของปลั๊กที่คุณต้องการใช้ จากนั้น คุณสามารถปรับโค้ดให้สอดคล้องตามแจ็คที่ใช้

ผมใช้ปลั๊ก 4 หัว ฉันเลือกใช้:

ตัวต้านทานที่รู้จัก (x4) - 100k

แจ็คปลั๊ก 1 - 5.6k

แจ็คปลั๊ก 2 - 10k

แจ็คปลั๊ก 3 - 22k

แจ็คปลั๊ก 4 - 39k

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

ขั้นตอนที่ 5: รหัส

รหัส
รหัส

ประการแรก คุณจะต้องมี Arduino IDE จากที่นี่:

คุณจะต้องแน่ใจว่าคุณมี Arduino Libraries ด้วยเช่นกัน:

อดาฟรุ๊ต NeoPixel:

u8g2:

Adafruit RTClib:

Adafruit SleepyDog (ไม่บังคับ):

หมายเหตุเกี่ยวกับการเลือกบอร์ด "Arduino" ที่เหมาะสม เดิมทีฉันเริ่มโครงการนี้ด้วย Arduino Nano เพราะมันราคาถูกสุด ๆ ที่ประมาณ 3- £4 ในสหราชอาณาจักรหรือเพียง 1.50 ปอนด์หากคุณซื้อจาก AliExpress (แต่ไม่เป็นไรกับการรอ 30-50 วัน). ปัญหาของนาโนคือ SRAM คือ 2 KB (2048 ไบต์) แบบร่างนี้ใช้หน่วยความจำแบบไดนามิก 1728 ไบต์พร้อม Global Variables นั่นคือ 84% ของ SRAM เหลือเพียง 320 ไบต์สำหรับตัวแปรในเครื่อง สิ่งนี้ไม่เพียงพอและจะทำให้นาโนล็อคและหยุดนิ่ง

Pro Micro (Leonardo) มี 2.5K SRAM (2560 ไบต์) ซึ่งหมายความว่ามี 694 ไบต์ฟรีสำหรับตัวแปรในเครื่อง (ภาพร่างใช้ 72% ของ SRAM ของ Pro Micro) จนถึงตอนนี้ได้พิสูจน์แล้วว่าเพียงพอและเสถียรสำหรับการใช้งานของฉันอย่างสมบูรณ์ หากคุณต้องการใช้ปลั๊กหลายตัว คุณอาจต้องพิจารณาใช้บางอย่างที่มี SRAM มากกว่า

เท่าที่เก็บข้อมูล Flash ร่างนี้ใช้ 88% (25252 ไบต์) จาก 30k (ATMEGA328p [Nano] และ ATMega32u4 [Pro Micro] ทั้งคู่มี 32k แต่ 2k สงวนไว้สำหรับ bootloader)

ฉันเขียนภาพสเก็ตช์ Arduino มาหลายร้อยแบบในช่วงหลายปีที่ผ่านมา แต่ฉันเป็นงานอดิเรก ดังนั้น โปรดจำไว้ว่าโค้ดบางส่วนอาจไม่มีประสิทธิภาพหรืออาจมี "วิธีที่ดีกว่าในการทำเช่นนี้" อย่างที่บอก มันใช้งานได้ดีสำหรับฉัน และฉันพอใจกับมัน ฉันใช้ไลบรารี่ที่ควรทำงานกับบอร์ดส่วนใหญ่ ไม่ว่าจะเป็น AVR (Arduino พื้นฐานส่วนใหญ่) หรือ SAMD21 (ฉันมีอุปกรณ์ Cortex M0 จำนวนหนึ่ง)

ฉันต้องการแสดงกราฟิกที่แตกต่างกันตามแจ็คที่ใช้เช่นกัน หากคุณต้องการสร้างภาพของคุณเอง นี่คือคำแนะนำง่ายๆ ที่ยอดเยี่ยมเกี่ยวกับวิธีสร้าง C Array สำหรับรูปภาพที่จะใช้กับจอแสดงผลนี้:

sandhansblog.wordpress.com/2017/04/16/interfacing-displaying-a-custom-graphic-on-an-0-96-i2c-oled/

อย่าลืมใช้ PROGMEM สำหรับกราฟิกของคุณ เช่น:

คงที่ const unsigned char YOUR_IMAGE_NAME PROGMEM = { }

โดยการออกแบบ หน้าจอจะ "หมดเวลา" หลังจาก 5 วินาทีและเปลี่ยนกลับเป็นการแสดงเวลา

การตั้งค่าส่วนใหญ่สามารถพบได้ใน Settings.h โดยเฉพาะอย่างยิ่ง ชื่อของปลั๊กแจ็คที่เกี่ยวข้องจะถูกเข้ารหัสไว้ที่นี่:

#กำหนด PLUG1 "คีย์"

#define PLUG2 "P2" #define PLUG3 "P3" #define PLUG4 "P4" #define GENERIC "NA"

นอกจากนี้ยังมีส่วนสำคัญของโค้ดใน Variables.h

ลอย R1=96700.0;

ลอย R2=96300.0; ลอย R3=96500.0; ลอย R4=96300.0;

ค่าเหล่านี้เป็นค่าความต้านทาน KNOWN ในหน่วยโอห์ม ของตัวต้านทาน 4 ตัวแต่ละตัว

R1 เชื่อมต่อกับ A0, R2 ถึง A1, R3 ถึง A2 และ R4 ถึง A3

ขอแนะนำให้วัดตัวต้านทาน 100k ของคุณโดยใช้มัลติมิเตอร์และใช้ค่าที่แน่นอนของตัวต้านทาน ทำการวัดค่าตัวต้านทานเมื่อเชื่อมต่อทุกอย่างแล้ว (แต่ไม่ได้เปิดเครื่อง)

เมื่อเลือกตัวต้านทานสำหรับปลั๊กแจ็ค ตรวจสอบให้แน่ใจว่ามีช่องว่างระหว่างโอห์มที่ดีและเมื่อเข้ารหัส ให้ช่วงที่ดีที่ต่ำกว่าและสูงกว่าตัวต้านทานที่คุณเลือก นี่คือสิ่งที่ฉันใช้ในรหัสของฉัน:

ลอย P1_MIN=4000.0,P1_MAX=7000.0; // 5.6K

ลอย P2_MIN=8000.0, P2_MAX=12000.0; // 10K ลอย P3_MIN=20000.0, P3_MAX=24000.0; // 22K ลอย P4_MIN=36000.0, P4_MAX=42000.0; // 39K

เหตุผลนี้คือการคำนึงถึงการอ่านแบบแอนะล็อกและความผันผวนของแรงดันไฟฟ้าเล็กน้อย ฯลฯ

สิ่งที่เกิดขึ้นคือ ถ้าความต้านทานที่ตรวจพบอยู่ระหว่าง 4000 โอห์ม ถึง 7000 โอห์ม เรากำลังสันนิษฐานว่าคุณใช้ตัวต้านทาน 5.6k ดังนั้นโค้ดจะเห็นว่านี่เป็นปลั๊กแจ็ค 1 หากความต้านทานที่วัดได้อยู่ระหว่าง 8000 โอห์มถึง 12000 โอห์ม สันนิษฐานว่าเป็นตัวต้านทาน 10k และเป็นแจ็คปลั๊ก 2 เป็นต้น

หากคุณต้องการทำการดีบั๊ก (อย่าปล่อยให้ไม่มีความคิดเห็นใน 'การผลิต' เนื่องจากการดีบักแบบอนุกรมใช้ RAM อันมีค่า) เพียงแค่ยกเลิกการใส่เครื่องหมายบรรทัดที่คุณต้องการที่ด้านบนของ Settings.h

//#define SERIAL_DEBUG

//#define WAIT_FOR_SERIAL

หากต้องการยกเลิกความคิดเห็น ให้ลบ // …. หากต้องการแสดงความคิดเห็นบรรทัดกลับให้เพิ่ม // ที่ด้านหน้าของบรรทัดอีกครั้ง

SERIAL_DEBUG เปิดใช้งานการดีบักแบบอนุกรมและการใช้งานสิ่งต่าง ๆ เช่น (ตัวอย่าง)

Serial.println(F("สวัสดีชาวโลก"));

WAIT_FOR_SERIAL เป็นขั้นตอนเพิ่มเติม ซึ่งหมายความว่า จนกว่าคุณจะเปิด Serial Monitor โค้ดจะไม่ทำงานต่อ ซึ่งช่วยให้มั่นใจได้ว่าคุณจะไม่พลาดข้อความซีเรียลที่สำคัญ - อย่าปล่อยให้สิ่งนี้เปิดใช้งาน

หากคุณปล่อยให้ WAIT_FOR_SERIAL เปิดใช้งาน คุณจะไม่สามารถใช้ที่ใส่กุญแจของคุณในสภาพแวดล้อม "โลกแห่งความจริง" ได้ เนื่องจากระบบจะรอการมอนิเตอร์ Arduino IDE Serial ก่อนจึงจะสามารถดำเนินการต่อในลูปหลักของภาพร่างได้ เมื่อคุณแก้ไขจุดบกพร่องเสร็จแล้ว อย่าลืมยกเลิกหมายเหตุบรรทัดนี้อีกครั้ง และอัปโหลดภาพสเก็ตช์ของคุณอีกครั้งสำหรับการผลิต/เสร็จสิ้น

เมื่อใช้ตัวเลือก SERIAL_DEBUG รหัสของฉันมีดังต่อไปนี้:

#ifdef SERIAL_DEBUG

Serial.print(F("ACTIVE JACK = ")); Serial.println (ACTIVE_JACK); int len = sizeof(SOCKET_1234_HAS_PLUGTYPE_X)/sizeof(SOCKET_1234_HAS_PLUGTYPE_X[0]); สำหรับ (int i=0;i<len;i++) { Serial.print(F("SOCKET_1234_HAS_PLUGTYPE_X[")); Serial.print(i); Serial.print(F("] = ")); Serial.println(SOCKET_1234_HAS_PLUGTYPE_X); } Serial.println(); ถ้า (INSERTED [ซ็อกเก็ต]) { Serial.print (F ("เสียบปลั๊ก ")); Serial.print(ซ็อกเก็ต+1); Serial.print(F(" has a resitance of: ")); Serial.println(ความต้านทาน); } #endif

บรรทัด Serial.print สุดท้ายจะบอกคุณว่าความต้านทานเป็นโอห์มของแจ็คที่เสียบล่าสุดคืออะไร ดังนั้น คุณยังสามารถใช้แบบร่างนี้เป็นโอห์มมิเตอร์เพื่อตรวจสอบความต้านทานของปลั๊กแจ็ค

ขั้นตอนที่ 6: หมายเหตุ

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

ขออภัยสำหรับวิดีโอที่ค่อนข้างแย่ - ฉันไม่มีขาตั้งกล้อง การตั้งค่าการถอดรหัส หรือพื้นที่ทำงานที่เหมาะสม ดังนั้นจึงถ่ายทำ (ไม่ดี) โดยถือโทรศัพท์ไว้ในมือข้างหนึ่งและพยายามสาธิตกับอีกมือหนึ่ง

ขอบคุณที่อ่าน.

แนะนำ: