در این پروژه ما یک PCB افزودنی کوچک حاوی مدار تحلیلگر طیف MSGEQ7 ایجاد می کنیم و نشان می دهیم که چگونه می تواند کیت مکعب LED RGB را از Freetronics هدایت کند. این به مکعب اجازه می دهد تا هفت نوار را در چهار صفحه افقی نمایش دهد.
مقدار کمی دانش فرضی برای این پروژه وجود دارد - برای صرفه جویی در تکرار، لطفاً با آموزش آی سی تحلیلگر طیف MSGEQ7 در فصل 48 از آموزش های آردوینو ما آشنا شوید . و از بررسی ما و صفحه محصول درباره مکعب LED بیشتر بیاموزید .
مدار
شما می توانید آی سی های MSGEQ7 خالی را از Sparkfun و سایر مظنونین معمولی تهیه کنید. داشتن یک یدک هرگز ضرری ندارد، بنابراین دو عدد سوکت آی سی و مطابق با آن سفارش دهید. در نهایت باید بتوانید یک مدار ساده را به تابلوی نمونه سازی ترجمه کنید.
مرحله 1: مدار
مکعب LED قبلاً دارای یک آردوینو لئوناردو سازگار در PCB اصلی است، بنابراین تنها کاری که باید انجام دهید این است که یک مدار کوچک بسازید که حاوی تحلیلگر طیف است که به پین های ورودی/خروجی روی PCB مکعبی متصل می شود و همچنین دارای ورودی صوتی است. و اتصالات خروجی ابتدا شماتیک این مرحله را در نظر بگیرید.
برای اهداف این پروژه، تحلیلگر طیف ما فقط نتایج را از یک کانال صوتی نمایش می دهد - اگر استریو می خواهید، به دو کانال نیاز دارید! و توجه داشته باشید که پین های strobe، reset و DCOUT روی MSGEQ7 با اتصالات PCB مکعبی برچسب گذاری شده اند. علاوه بر این، پینآوتهای MSGEQ7 با واقعیت فیزیکی مطابقت ندارند، بنابراین آنها را با پینآوتهای تصویر دوم مقایسه کنید.
خود مدار بسیار کوچک خواهد بود و بر روی مقدار کمی تخته استریپ برد یا Veroboard قرار می گیرد. فضای زیادی در زیر مکعب وجود دارد تا در صورت تمایل، مدار را تنظیم کنید.
مرحله 2: سیم کشی آن
با چند لحظه باید بتوانید مدار خود را ردیابی کنید تا با نوع بردی که دارید مطابقت داشته باشد، به یاد داشته باشید که قبل از لحیم کاری دوباره چک کنید. همچنین باید صدا را در نقطه ای بعد از خازن 1000 pF به یک منبع صدا وصل کنید و همچنین آن را از طریق آن عبور دهید تا بتوانید بلندگوها، هدفون ها و غیره را متصل کنید.
یکی از روشهای انجام این کار، بریدن یک کابل صوتی نر و ماده، و اتصال محافظ به GND مدار و خط سیگنال به ورودی صوتی در مدار است. یا اگر قطعات دستی دارید و مقداری کابل محافظ دارید، کافی است سیم ورودی و خروجی خود را همانطور که در تصویر نشان داده شده است برای این مرحله بسازید.
قبل از لحیم کاری به برد مدار، حتماً اتصالات بین سیگنال و محافظ را تست کنید. پس از اتمام، باید چیزی تمیز داشته باشید که بتوانید آن را زیر مکعب یا جای دیگری پنهان کنید. لحیم کاری خود را از نظر شورت و طرح تخته خود دوباره بررسی کنید، سپس به همراه منبع صوتی و بلندگوها (و غیره) روی مکعب قرار دهید.
مرحله 3: طرح آردوینو - قسمت اول
این طرح دارای دو عملکرد اصلی است – اولی گرفتن سطوح از MSGEQ7 و قرار دادن مقادیر برای هر باند فرکانس در یک آرایه، و عملکرد دوم روشن کردن LED هایی است که سطح هر باند را نشان می دهد. اگر دقت کردهاید، ممکن است تعجب کنید که چگونه میتوانیم هفت باند فرکانس را با یک مکعب LED 4x4x4 نشان دهیم. ساده - با چرخش مکعب 45 درجه می توانید هفت ستون عمودی LED را ببینید (تصویر مکعب را با ستون های شماره گذاری شده ببینید).
بنابراین هنگامی که همانطور که در بالا نشان داده شده است از زاویه نگاه کنید، هفت ستون عمودی دارید که هر کدام دارای چهار سطح LED هستند. بنابراین قدرت هر فرکانس را می توان به چهار سطح تقسیم کرد و سپس LED های مناسب را روشن کرد.
پس از انجام این کار برای هر باند، تمام LED ها خاموش می شوند و روند تکرار می شود.
برای سادگی، من از کتابخانه آردوینو مکعب برای فعال کردن LED ها استفاده کرده ام، که همچنین درک طرح را آسان تر می کند. طرح نمونه اول فقط از یک رنگ استفاده می کند.
// ---------------------------------------------------------------------------------------------------------------------- // Freetronics CUBE4: and MSGEQ7 spectrum analyser // MSGEQ7 strobe on A4, reset on D5, signal into A0 #include "SPI.h" #include "Cube.h" Cube cube; int res = 5; // reset pins on D5 int left[7]; // store band values in these arrays int band; void setup() { pinMode(res, OUTPUT); // reset pinMode(A4, OUTPUT); // strobe digitalWrite(res,LOW); digitalWrite(A4,HIGH); cube.begin(-1, 115200); Serial.begin(9600); } void readMSGEQ7() // Function to read 7 band equalizers { digitalWrite(res, HIGH); digitalWrite(res, LOW); for(band=0; band <7; band++) { digitalWrite(A4,LOW); // strobe pin on the shield - kicks the IC up to the next band delayMicroseconds(30); // left[band] = analogRead(0); // store band reading digitalWrite(A4,HIGH); } } void loop() { readMSGEQ7(); for (band = 0; band < 7; band++) { // div each band strength into four layers, each band then one of the odd diagonals // band one ~ 63 Hz if (left[0]>=768) { cube.set(3,3,3, BLUE); } else if (left[0]>=512) { cube.set(3,3,2, BLUE); } else if (left[0]>=256) { cube.set(3,3,1, BLUE); } else if (left[0]>=0) { cube.set(3,3,0, BLUE); } // band two ~ 160 Hz if (left[1]>=768) { cube.set(3,2,3, BLUE); cube.set(2,3,3, BLUE); } else if (left[1]>=512) { cube.set(3,2,2, BLUE); cube.set(2,3,2, BLUE); } else if (left[1]>=256) { cube.set(3,2,1, BLUE); cube.set(2,3,1, BLUE); } else if (left[1]>=0) { cube.set(3,2,0, BLUE); cube.set(2,3,0, BLUE); } // band three ~ 400 Hz if (left[2]>=768) { cube.set(3,1,3, BLUE); cube.set(2,2,3, BLUE); cube.set(1,3,3, BLUE); } else if (left[2]>=512) { cube.set(3,1,2, BLUE); cube.set(2,2,2, BLUE); cube.set(1,3,2, BLUE); } else if (left[2]>=256) { cube.set(3,1,1, BLUE); cube.set(2,2,1, BLUE); cube.set(1,3,1, BLUE); } else if (left[2]>=0) { cube.set(3,1,0, BLUE); cube.set(2,2,0, BLUE); cube.set(1,3,0, BLUE); } // band four ~ 1 kHz if (left[3]>=768) { cube.set(3,0,3, BLUE); cube.set(2,1,3, BLUE); cube.set(1,2,3, BLUE); cube.set(0,3,3, BLUE); } else if (left[3]>=512) { cube.set(3,0,2, BLUE); cube.set(2,1,2, BLUE); cube.set(1,2,2, BLUE); cube.set(0,3,2, BLUE); } else if (left[3]>=256) { cube.set(3,0,1, BLUE); cube.set(2,1,1, BLUE); cube.set(1,2,1, BLUE); cube.set(0,3,1, BLUE); } else if (left[3]>=0) { cube.set(3,0,0, BLUE); cube.set(2,1,0, BLUE); cube.set(1,2,0, BLUE); cube.set(0,3,0, BLUE); } // band five ~ 2.5 kHz if (left[4]>=768) { cube.set(2,0,3, BLUE); cube.set(1,1,3, BLUE); cube.set(0,2,3, BLUE); } else if (left[4]>=512) { cube.set(2,0,2, BLUE); cube.set(1,1,2, BLUE); cube.set(0,2,2, BLUE); } else if (left[4]>=256) { cube.set(2,0,1, BLUE); cube.set(1,1,1, BLUE); cube.set(0,2,1, BLUE); } else if (left[4]>=0) { cube.set(2,0,0, BLUE); cube.set(1,1,0, BLUE); cube.set(0,2,0, BLUE); } // band six ~ 6.25 kHz if (left[5]>=768) { cube.set(1,0,3, BLUE); cube.set(0,1,3, BLUE); } else if (left[5]>=512) { cube.set(1,0,2, BLUE); cube.set(0,1,2, BLUE); } else if (left[5]>=256) { cube.set(1,0,1, BLUE); cube.set(0,1,1, BLUE); } else if (left[5]>=0) { cube.set(1,0,0, BLUE); cube.set(0,1,0, BLUE); } // band seven ~ 16 kHz if (left[6]>=768) { cube.set(0,0,3, BLUE); } else if (left[6]>=512) { cube.set(0,0,2, BLUE); } else if (left[6]>=256) { cube.set(0,0,1, BLUE); } else if (left[6]>=0) { cube.set(0,0,0, BLUE); } } // now clear the CUBE, or if that's too slow - repeat the process but turn LEDs off cube.all(BLACK); } // --------------------------------------------------------------------------------------------- -------------------------
برای جزئیات بیشتر: آنالایزر طیف مکعب ال ای دی آردوینو