สารบัญ:

เครื่องกำเนิดเพลงตามสภาพอากาศ (เครื่องกำเนิด Midi ที่ใช้ ESP8266): 4 ขั้นตอน (พร้อมรูปภาพ)
เครื่องกำเนิดเพลงตามสภาพอากาศ (เครื่องกำเนิด Midi ที่ใช้ ESP8266): 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เครื่องกำเนิดเพลงตามสภาพอากาศ (เครื่องกำเนิด Midi ที่ใช้ ESP8266): 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เครื่องกำเนิดเพลงตามสภาพอากาศ (เครื่องกำเนิด Midi ที่ใช้ ESP8266): 4 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: OLEDiTREK Update video 2, please watch later videos for finished product, thanks. 2024, กรกฎาคม
Anonim
เครื่องกำเนิดเพลงตามสภาพอากาศ (เครื่องกำเนิด Midi ที่ใช้ ESP8266)
เครื่องกำเนิดเพลงตามสภาพอากาศ (เครื่องกำเนิด Midi ที่ใช้ ESP8266)
เครื่องกำเนิดเพลงตามสภาพอากาศ (เครื่องกำเนิด Midi ที่ใช้ ESP8266)
เครื่องกำเนิดเพลงตามสภาพอากาศ (เครื่องกำเนิด Midi ที่ใช้ ESP8266)

สวัสดี วันนี้ฉันจะอธิบายวิธีสร้างเครื่องมือสร้างเพลงตามสภาพอากาศของคุณเอง

มีพื้นฐานมาจาก ESP8266 ซึ่งคล้ายกับ Arduino และตอบสนองต่ออุณหภูมิ ฝน และความเข้มของแสง

อย่าคาดหวังว่าจะทำให้ทั้งเพลงหรือคอร์ดก้าวหน้า เหมือนกับที่คน Generative Music บางครั้งทำด้วย Modular Synthesizers แต่มันสุ่มน้อยกว่านั้นเล็กน้อย

เสบียง

ESP8266 (ฉันใช้ Feather Huzzah ESP8266 จาก Adafruit)

BME280 เซ็นเซอร์อุณหภูมิ ความชื้น และความดันบรรยากาศ (เวอร์ชัน I2C)

Arduino Rain Sensor

25K LDR (ตัวต้านทานแสงขึ้นอยู่กับ)

ตัวต้านทานบางตัว (47 สองตัว 100 ตัวหนึ่ง 220 และ 1k Ohm หนึ่งตัว)

ขั้วต่อ Midi ตัวเมีย (5 Pin Din) เหมาะสำหรับการติดตั้ง PCB

สายจัมเปอร์

Breadboard หรือ Prototyping board บางชนิด

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

อุปกรณ์เสริม: แบตเตอรี่ LiPo 1250 mAh พร้อมขั้วต่อ JST จาก Adafruit (ใช้ได้กับ ESP บางรุ่นเท่านั้น)

ขั้นตอนที่ 1: ขั้นตอนที่ 1: ซอฟต์แวร์

ก่อนอื่นคุณต้องมี Arduino IDE

จากนั้นคุณต้องใช้ไดรเวอร์ SiLabs CP2104 และ ESP8266 Board Package

สิ่งนี้ทำให้คอมพิวเตอร์ของคุณสามารถตั้งโปรแกรม ESP ผ่าน UART ในตัวและอนุญาตให้ Arduino IDE ตั้งโปรแกรม ESP

คุณสามารถค้นหาข้อมูลทั้งหมดเกี่ยวกับ IDE, Driver และ Board Package ได้ในหน้านี้ในเว็บไซต์ Adafruit

คุณจะต้องใช้ Arduino Midi Library เพื่อส่งข้อมูล Midi สามารถทำได้โดยไม่ต้อง แต่สิ่งนี้ทำให้ทุกอย่างง่ายขึ้นมาก

ในการสื่อสารกับ BME280 ฉันใช้ไลบรารี BME280-I2C-ESP32 นี้ (สำหรับรุ่น I2C ของ BME280)

และไลบรารีนั้นก็ต้องการไดรเวอร์ Adafruit Unified Sensor นี่ไม่ใช่ครั้งแรกที่ฉันต้องการห้องสมุดนี้เพื่อใช้ห้องสมุดอื่นโดยไม่มีปัญหา ดังนั้นฉันจึงบุ๊กมาร์กห้องสมุดนี้ไว้ที่ใดที่หนึ่งเสมอ

ขั้นตอนที่ 2: ขั้นตอนที่ 2: ฮาร์ดแวร์

ขั้นตอนที่ 2: ฮาร์ดแวร์
ขั้นตอนที่ 2: ฮาร์ดแวร์
ขั้นตอนที่ 2: ฮาร์ดแวร์
ขั้นตอนที่ 2: ฮาร์ดแวร์
ขั้นตอนที่ 2: ฮาร์ดแวร์
ขั้นตอนที่ 2: ฮาร์ดแวร์

เอาล่ะ ในที่สุดเราก็มาถึงสิ่งที่ดี ฮาร์ดแวร์

ดังที่กล่าวไว้ฉันใช้ Adafruit ESP นี้ แต่ควรทำงานได้ดีกับ NodeMCU ฉันแนะนำเวอร์ชัน V2 เพราะฉันเชื่อว่ามันเข้ากับเขียงหั่นขนมได้ดีกว่ามาก และคุณสามารถหาซื้อได้ในราคาถูกมากจาก eBay หรือ AliExpress ฉันชอบความจริงที่ว่า Adafruit ESP มี CPU ที่เร็วกว่า มาพร้อมกับตัวเชื่อมต่อ JST ตัวเมียสำหรับ LiPo และวงจรชาร์จ นอกจากนี้ยังง่ายต่อการค้นหาว่าคุณกำลังใช้พินอะไรอยู่ ฉันเชื่อใน NodeMCU ว่าหมุดที่ติดป้าย D1 นั้นจริง ๆ แล้วเป็น GPIO5 ดังนั้นคุณจึงจำเป็นต้องมีแผนภูมิ Pinout ที่มีประโยชน์เสมอ ไม่ใช่ปัญหาใหญ่เลย แต่สะดวกสำหรับมือใหม่ พวกเขาติดป้าย Adafruit ไว้อย่างชัดเจน

ก่อนอื่น มาเชื่อมต่อ BME280 กันก่อน เพราะมีบางรูปแบบในรุ่นนี้ อย่างที่คุณเห็นจากภาพของฉันมีรูใหญ่หนึ่งรู แต่ก็มีบางรูที่มี 2 รูเช่นกัน คุณสามารถเห็นได้ว่ามี 4 In and Outputs, 1 สำหรับพลังงาน, หนึ่งช่องสำหรับกราวด์และ SCL และ SDA ซึ่งหมายความว่ามันสื่อสารผ่าน I2C ฉันเชื่อว่ารุ่นอื่นๆ สื่อสารผ่าน SPI และในบางส่วนคุณสามารถเลือก SPI หรือ I2C ได้ SPI อาจต้องใช้ Library อื่นหรืออย่างน้อยก็โค้ดที่ต่างกันและการเดินสายที่ต่างกัน ฉันยังเชื่อว่า S ใน SPI ย่อมาจาก Serial และฉันไม่สามารถพูดได้ว่าสิ่งนี้จะรบกวนส่วน Midi ของโปรเจ็กต์นี้หรือไม่เนื่องจากทำงานผ่านการเชื่อมต่อแบบอนุกรม

การเชื่อมต่อ BME นี้ค่อนข้างตรงไปตรงมา บน ESP8266 คุณสามารถเห็นพิน 4 และ 5 ติดป้ายกำกับ SDA และ SCL ตามลำดับ เพียงเชื่อมต่อพินเหล่านั้นโดยตรงกับพิน SDA และ SCL บน BME แน่นอนยังเชื่อมต่อ VIN กับ Positive Rail ของ Breadboard และ GND กับ Negative Rail สิ่งเหล่านี้จะเชื่อมต่อกับพิน 3V3 และ GND ของ ESP

ต่อไปเราจะเชื่อมต่อ LDR ในตัวอย่าง Fritzing คุณสามารถเห็นแรงดันไฟฟ้า 3.3 โวลต์ที่ไหลผ่านตัวต้านทาน จากนั้นจะถูกแยกออกเป็น LDR และตัวต้านทานอีกตัวหนึ่ง จากนั้นหลังจาก LDR จะแยกออกเป็นตัวต้านทานและ ADC อีกครั้ง

ทั้งนี้เพื่อป้องกัน ESP ไม่ให้ได้รับแรงดันไฟฟ้าสูงเกินไป และเพื่อให้แน่ใจว่าได้รับค่าที่อ่านได้ ADC สามารถรองรับ 0-1 โวลต์ แต่ 3V3 ให้ 3.3 โวลต์ มันอาจจะไม่ระเบิดอะไรเลยถ้าคุณใช้ไฟเกิน 1 โวลต์ แต่มันจะไม่ทำงานได้ดี

ก่อนอื่นเราใช้ตัวแบ่งแรงดันไฟฟ้าโดยใช้ตัวต้านทาน 220 และ 100 โอห์มเพื่อลดแรงดันไฟฟ้าจาก 3.3 เป็น 1.031 โวลต์ จากนั้น LDR 25k ohm และตัวต้านทาน 1k ohm จะสร้าง Voltage Devider อีกตัวหนึ่งซึ่งจะทำให้แรงดันไฟฟ้าลดลงจากที่ใดก็ได้ระหว่าง 1.031 ถึง 0 โวลต์ขึ้นอยู่กับปริมาณแสงที่ LDR ได้รับ

จากนั้นเราก็มี Rain Sensor ส่วนหนึ่งบอกว่า FC-37 อีกส่วนหนึ่งบอกว่า HW-103 ฉันเพิ่งซื้ออันแรกที่เจอบนอีเบย์ที่บอกว่ามันสามารถรองรับ 3.3 และ 5 โวลต์ (ฉันคิดว่าทุกคนทำได้)

สิ่งนี้ค่อนข้างตรงไปตรงมา เราสามารถใช้เอาต์พุตแบบอะนาล็อก แต่เราสามารถเปลี่ยน Trimpot ขนาดเล็กเพื่อให้เซ็นเซอร์มีความไวตามที่เราต้องการ (และเราใช้พินอะนาล็อกหนึ่งอันบน ESP แล้ว) เช่นเดียวกับเซ็นเซอร์อื่นๆ เราต้องจ่ายกำลังจาก Positive Rail และเชื่อมต่อกับ Ground rail บางครั้งลำดับของหมุดแตกต่างกันไป ของฉันคือ VCC, Ground, Digital, Analog แต่ในรูป Fritzing มันแตกต่างออกไป แต่ถ้าคุณเพียงแค่ใส่ใจสิ่งนี้ควรจะง่ายที่จะได้รับสิทธิ์

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

ดังที่คุณเห็นจากแผนผัง แรงดันบวกและสัญญาณอนุกรมทั้งคู่ต้องผ่านตัวต้านทาน 47 โอห์ม

หากคุณทำโปรเจ็กต์นี้กับ Arduino Uno ให้แน่ใจว่าได้ใช้ตัวต้านทาน 220 โอห์ม !! ESP เหล่านี้ทำงานบนลอจิก 3.3 V แต่ Arduino ส่วนใหญ่ใช้ 5.0 V ดังนั้นคุณต้องจำกัดกระแสที่ไหลผ่านสายเคเบิล Midi ให้มากขึ้น

และสุดท้ายต่อหมุดตรงกลางเข้ากับรางกราวด์ อีก 2 พินจาก 5 พินดินไม่ได้ใช้

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

และในที่สุด เราก็ได้รหัส!

ในไฟล์ Zip นี้ ฉันใส่ 2 สเก็ตช์ 'LightRainTemp' เพียงแค่ทดสอบเซ็นเซอร์ทั้งหมดและส่งค่ากลับคืน (อย่าลืมเปิดหน้าต่างเทอร์มินัล!)

และแน่นอน เรามีภาพร่าง LRTGenerativeMidi (LRT ย่อมาจาก Light, Rain, Temperature)

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

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

ขั้นตอนที่ 4: ขั้นตอนที่ 4: เชื่อมต่อและทดสอบ

และตอนนี้ก็ถึงเวลาทดสอบแล้ว!

เพียงต่อสาย Midi ตรวจสอบให้แน่ใจว่าได้ตั้งค่า Synth/Keyboard ของคุณให้ตอบสนองต่อช่องสัญญาณ 1 หรือเปลี่ยนช่องสัญญาณในโค้ด Arduino และดูว่าใช้งานได้หรือไม่!

ฉันอยากรู้จริงๆ ที่จะได้เห็นและได้ยินสิ่งที่คุณทำกับมัน หากคุณทำการเปลี่ยนแปลง อัปเกรด ปรับแต่ง (เช่น ค่าเซ็นเซอร์วัดแสงและอุณหภูมิ ภายนอกอาจทำงานได้ดีกว่าหรือแย่กว่าภายใน) อะไรก็ได้

ฉันยังอยากรู้ว่ามันใช้งานได้ดีกับซินธิไซเซอร์ทั้งหมดหรือไม่ สำหรับ Volca Bass ของฉันทำงานได้อย่างสมบูรณ์ แต่สำหรับ Neutron ของฉัน LFO จะค้างทันทีที่ฉันส่ง Midi Note ไม่เป็นไรเมื่อฉันรีบูตเครื่อง แต่แปลก ฉันไม่แน่ใจว่ามีบางอย่างใน Midi Library หรือในโค้ดของฉันหรือไม่ ฉันอาจจะลองทำมันโดยไม่ใช้ Library เร็วๆ นี้ และดูว่ามันจะดีขึ้นหรือไม่

ขอบคุณสำหรับการอ่านและการรับชมและขอให้โชคดี!!

แนะนำ: