تتناول هذه المقالة كيفية عمل موالف للغيتار الكهربائي باستخدام اردوينو! طُلب من المؤلف إنشاء هذا الجهاز من خلال تجربة إمكانية معالجة إشارة صوت اردوينو وتحديد التردد. في هذه الحالة ، تم استخدام رمز Amanda Gassei ، والذي يسمح بتحديد التردد باستخدام Arduino. كمؤشر ، يتم استخدام مصابيح LED بألوان مختلفة ، مما يشير إلى ما إذا تم ضبط السلسلة المستنسخة. يعمل الجهاز مثل أي موالف جيتار آخر ، ولكن يمكنك القيام بذلك بنفسك!
الخطوة 1. ضرورية
(x1) Arduino Uno (يمكنك استخدام Nano) (x1) مضخم تشغيلي TL082 TL082 (TL072 ، TL062) (x1) غلاف 6 × 4 × 2 بوصة (أو أي مناسبة) (x6) 5 مم LED أصفر (x6) LED أحمر 5 مم (x1) 5 مم LED أخضر (× 13) 150 أوم المقاوم (x2) بطارية 9 فولت ("كرونا") (x2) موصلات البطارية (× 1) موصل طاقة مقاس 5.5 × 2.1 مم ذكر (x1) مفتاح الطاقة (x1) مقبس أحادي مقبس 6.3 مم (مقبس 1/4 ") (2) مجلس التنمية (x3) المقاوم 100 كيلو أوم (x1) المقاوم 22 كيلو أوم (x1) مكثف كهربائيا 10 فائق التوهج (x1) مكثف 100 nF
الخطوة 2: إعداد العلبة
حفر جميع الثقوب المطلوبة. يتم تحديد قطر الثقوب بناءً على مكوناتها المحددة.
الخطوة 3: تشغيل / إيقاف
يجب لحام المفتاح في فجوة الطاقة. في هذه الحالة ، يكسر المؤلف الدائرة من التلامس الإيجابي للبطارية. من نفسي ، يمكنني أن أضيف أنه يمكنك استخدام موصلات جيتار خاصة تسمح لك بتشغيل / إيقاف الطاقة عن طريق توصيل قابس الغيتار ، في جميع تأثيرات الغيتار التي يتم تنفيذها بهذه الطريقة. في هذه الحالة ، يجب أن تكون الفجوة ناقصة.
الخطوة 4: مقبس الصوت
من أجل عدم الخلط مع المزيد من التثبيت ، أسلاك اللحام من ألوان مختلفة للموصل ، إشارة خضراء ، أسود - أرضي. بالمناسبة ، استخدم المؤلف فقط مثل هذا الرابط ، الذي كتبته عن أعلاه ، ولكن ، من الواضح ، لم يكن يعرف عن مثل هذه الوظائف لهذه الموصلات. بعد ذلك ، يمكن تركيب كلا الوصلين في السكن باستخدام الصواميل والغسالات المصاحبة.
الخطوة 5: التوصيل
قم بفك الشوكة. يجب أن يكون السلك الموجب ملحومًا بالدبوس المركزي للقابس ، والسالب إلى الخارج (ناقص "الخارج" ، بالإضافة إلى "الداخل" ، إذا نظرت إلى القابس نفسه). ثم أعد تركيب القابس.
الخطوة 6: التضخيم والتحيز
يجب تضخيم الإشارة الصوتية القادمة من الغيتار الكهربائي إلى حوالي 5 فولت من الذروة إلى الذروة ، ويجب أن يكون الإزاحة 2.5 فولت ، وليس 0 فولت.أي أن الذروة الدنيا يجب أن تكون 0 فولت ، والجزء العلوي - 5 فولت. هذا ضروري حتى يتمكن Arduino من قراءة الإشارة الصوتية المرفقة. أعلاه ، يمكنك رؤية مخطط الدائرة ، والذي ، قبل التجميع النهائي ، من المستحسن تجميعه على لوحة توصيل غير مبالية.
بعد ذلك ، يمكنك إرسال إشارة إلى أردوينو ، وملء الرسم عليها والتأكد من أن كل شيء يعمل بشكل صحيح. الكود المطلوب أدناه (الكود مخفي بواسطة المفسد).
/ *
* تعديل كشف التردد اردوينو
* بقلم نيكول جريموود
*
*
* نسخة معدلة قليلاً من:
* كشف تردد اردوينو
* تم إنشاؤه في 7 أكتوبر 2012
* بقلم أماندا الغسائي
*
* هذا الرمز في المجال العام.
* /
// متغيرات مؤشر القطع
لقطة منطقية = 0 ؛
// متغيرات تخزين البيانات
بايت newData = 0 ؛
بايت prevData = 0 ؛
الوقت غير الموقّع = 0 ؛ // يحافظ على الوقت ويرسل القيم لتخزينها في المؤقت [] في بعض الأحيان
int timer [10]؛ // تخزين لتوقيت الأحداث
int slope [10]؛ // تخزين لمنحدر الأحداث
غير موقعة int totalTimer؛ // المستخدمة لحساب الفترة
فترة int غير موقعة ؛ // تخزين لفترة الموجة
مؤشر البايت = 0 ؛ // فهرس التخزين الحالي
تعويم التردد ؛ // تخزين حسابات التردد
int maxSlope = 0؛ // يستخدم لحساب الحد الأقصى للانحدار كنقطة زناد
int newSlope؛ // تخزين بيانات المنحدرات الواردة
// variables for قرر ما إذا كان لديك تطابق
byte noMatch = 0؛ // يحسب عدد حالات عدم التطابق التي تلقيتها لإعادة تعيين المتغيرات إذا كانت طويلة جدًا
byte slopeTol = 3 ؛ // التحمل للمنحدر - اضبط هذا إذا كنت بحاجة
int timerTol = 10؛ // timer التسامح - اضبط هذا إذا كنت بحاجة
// متغيرات للكشف عن أمبير
int ampTimer int غير موقّع = 0 ؛
بايت maxAmp = 0 ؛
checkMaxAmp بايت ؛
byte ampThreshold = 30؛ // ارفع إذا كانت لديك إشارة صاخبة جدًا
إعداد باطل () {
Serial.begin (9600) ؛
pinMode (13 ، OUTPUT) ؛ // دبوس مؤشر led
pinMode (12 ، OUTPUT) ؛ // دبوس الإخراج
cli () ؛ // المقاطعات diable
// قم بإعداد المعاينة المستمرة للدبوس التناظري 0 بسرعة 38.5 كيلو هرتز
// clear تسجيلات ADCSRA و ADCSRB
ADCSRA = 0 ؛
ADCSRB = 0 ؛
ADMUX | = (1 << REFS0) ؛ // ضبط الجهد المرجعي
ADMUX | = (1 << ADLAR) ؛ // يسار محاذاة قيمة ADC - حتى نتمكن من قراءة أعلى 8 بت من سجل ADCH فقط
ADCSRA | = (1 << ADPS2) | (1 << ADPS0) ؛ // ضبط ساعة ADC مع ما قبل الضبط 32- 16 ميجا هرتز / 32 = 500 كيلو هرتز
ADCSRA | = (1 << ADATE) ؛ // تمكين المشغل التلقائي
ADCSRA | = (1 << ADIE) ؛ // تمكين المقاطعات عند اكتمال القياس
ADCSRA | = (1 << عدن) ؛ // تمكين ADC
ADCSRA | = (1 << ADSC) ؛ // ابدأ قياسات ADC
sei ()؛ // تمكين المقاطعات
}}
ISR (ADC_vect) {// عندما تكون قيمة ADC الجديدة جاهزة
PORTB & = B11101111 ؛ // set pin 12 low
prevData = newData؛ // تخزين القيمة السابقة
newData = ADCH؛ // get value from A0
if (prevData <127 && newData> = 127) {// في حالة زيادة وعبور نقطة الوسط
newSlope = newData - prevData؛ // احسب المنحدر
if (abs (newSlope-maxSlope) 9) {
إعادة () ؛
}}
}}
}}
آخر إذا كان (newSlope> maxSlope) {// إذا كان المنحدر الجديد أكبر بكثير من المنحدر الأقصى
maxSlope = newSlope ،
الوقت = 0 ؛ // إعادة تعيين الساعة
noMatch = 0 ؛
فهرس = 0 ؛ // إعادة تعيين الفهرس
}}
آخر {// المنحدر ليس حادًا بما فيه الكفاية
noMatch ++؛ // increment no counter match
إذا (noMatch> 9) {
إعادة () ؛
}}
}}
}}
if (newData == 0 || newData == 1023) {// if clipping
لقطة = 1 ؛ // لقطة حاليًا
Serial.println ("لقطة") ؛
}}
time ++ ؛ // مؤقت زيادة بمعدل 38.5 كيلو هرتز
ampTimer ++؛ // زيادة السعة الموقت
if (abs (127-ADCH)> maxAmp) {
maxAmp = القيمة المطلقة (127-ADCH) ؛
}}
if (ampTimer == 1000) {
ampTimer = 0 ؛
checkMaxAmp = maxAmp ؛
maxAmp = 0 ؛
}}
}}
void reset () {// تنظيف بعض المتغيرات
فهرس = 0 ؛ // إعادة تعيين الفهرس
noMatch = 0؛ // إعادة تعيين عداد المباراة
maxSlope = 0 ؛ // منحدر إعادة التعيين
}}
باطلة checkClipping () {/ إدارة مؤشر لقطة
if (clipping) {// if clipping now
لقطة = 0 ؛
}}
}}
حلقة فارغة () {
checkClipping () ؛
if (checkMaxAmp> ampThreshold) {
تردد = 38462 / تعويم (فترة) ؛ // احسب معدل / فترة عداد التردد
// نتائج الطباعة
Serial.print (التردد) ؛
Serial.println ("هرتز") ؛
}}
تأخير (100) ؛
}}
سيخرج مراقب المنفذ تردد السلاسل التي يتم تشغيلها. أوتار الغيتار ، مع ضبط قياسي ، لديها هذه الترددات:
سلسلة Mi السادسة - 82.4 هرتز
السلسلة الخامسة أ - 110 هرتز
إعادة الرابعة - 146.8 هرتز
الملح الثالث - 196 هرتز
الثانية C - 246.9 هرتز
First Mi - 329.6 هرتز
في المحاولات الأولى ، قد تنشأ مشاكل في تحديد ترددات السلاسل العلوية أو السفلية. رمز أماندا يحتوي على قيمة ampThreshold. عند تغيير هذه القيمة ، من الضروري تحقيق اكتشاف جيد لتردد جميع السلاسل ، يجب أن تكون هذه القيمة في النطاق من 10 إلى 30 ، ولكن يمكنك تجربة قيم أخرى.
/ *
* موالف الغيتار اردوينو
* بقلم نيكول جريموود
*
*
* بناءً على:
* كشف تردد اردوينو
* تم إنشاؤه في 7 أكتوبر 2012
* بقلم أماندا الغسائي
*
* هذا الرمز في المجال العام.
* /
// متغيرات تخزين البيانات
بايت newData = 0 ؛
بايت prevData = 0 ؛
الوقت غير الموقّع = 0 ؛ // يحافظ على الوقت ويرسل القيم لتخزينها في المؤقت [] في بعض الأحيان
int timer [10]؛ // تخزين لتوقيت الأحداث
int slope [10]؛ // تخزين لمنحدر الأحداث
غير موقعة int totalTimer؛ // المستخدمة لحساب الفترة
فترة int غير موقعة ؛ // تخزين لفترة الموجة
مؤشر البايت = 0 ؛ // فهرس التخزين الحالي
تعويم التردد ؛ // تخزين حسابات التردد
int maxSlope = 0؛ // يستخدم لحساب الحد الأقصى للانحدار كنقطة زناد
int newSlope؛ // تخزين بيانات المنحدرات الواردة
// متغيرات لتحديد ما إذا كان لديك تطابق
byte noMatch = 0؛ // يحسب عدد حالات عدم التطابق التي تلقيتها لإعادة تعيين المتغيرات إذا كانت طويلة جدًا
byte slopeTol = 3 ؛ // التحمل للمنحدر - اضبط هذا إذا كنت بحاجة
int timerTol = 10؛ // timer التسامح - اضبط هذا إذا كنت بحاجة
// متغيرات للكشف عن أمبير
int ampTimer int غير موقّع = 0 ؛
بايت maxAmp = 0 ؛
checkMaxAmp بايت ؛
byte ampThreshold = 30؛ // ارفع إذا كانت لديك إشارة صاخبة جدًا
// متغيرات الضبط
int correctFrequency؛ // التردد الصحيح للسلسلة قيد التشغيل
إعداد باطل () {
Serial.begin (9600) ؛
// دبابيس LED
pinMode (7 ، OUTPUT) ؛
pinMode (6 ، OUTPUT) ؛
pinMode (5 ، OUTPUT) ؛
pinMode (4 ، OUTPUT) ؛
pinMode (3 ، OUTPUT) ؛
pinMode (2 ، OUTPUT) ؛
pinMode (A3 ، OUTPUT) ؛
pinMode (A4 ، OUTPUT) ؛
pinMode (A5 ، OUTPUT) ؛
pinMode (A1 ، OUTPUT) ؛
pinMode (A2 ، OUTPUT) ؛
pinMode (8 ، OUTPUT) ؛
pinMode (9 ، OUTPUT) ؛
// بداية تسلسل LED
الكتابة الرقمية (7.1) ؛
الكتابة الرقمية (6.1) ؛
الكتابة الرقمية (5.1) ؛
الكتابة الرقمية (4.1) ؛
الكتابة الرقمية (3.1) ؛
الكتابة الرقمية (2.1) ؛
الكتابة الرقمية (8.1) ؛
analogWrite (A1،255) ؛
تأخير (500) ؛
الكتابة الرقمية (9.1) ؛
analogWrite (A2،255) ؛
تأخير (500) ؛
الكتابة الرقمية (A5،255) ؛
analogWrite (A3،255) ؛
تأخير (500) ؛
analogWrite (A4،255) ؛
تأخير (500) ؛
cli ()؛ // تعطيل المقاطعات
// قم بإعداد المعاينة المستمرة للدبوس التناظري 0 بسرعة 38.5 كيلو هرتز
// clear تسجيلات ADCSRA و ADCSRB
ADCSRA = 0 ؛
ADCSRB = 0 ؛
ADMUX | = (1 << REFS0) ؛ // ضبط الجهد المرجعي
ADMUX | = (1 << ADLAR) ؛ // يسار محاذاة قيمة ADC - حتى نتمكن من قراءة أعلى 8 بت من سجل ADCH فقط
ADCSRA | = (1 << ADPS2) | (1 << ADPS0) ؛ // ضبط ساعة ADC مع ما قبل الضبط 32- 16 ميجا هرتز / 32 = 500 كيلو هرتز
ADCSRA | = (1 << ADATE) ؛ // تمكين المشغل التلقائي
ADCSRA | = (1 << ADIE) ؛ // تمكين المقاطعات عند اكتمال القياس
ADCSRA | = (1 << عدن) ؛ // تمكين ADC
ADCSRA | = (1 << ADSC) ؛ // ابدأ قياسات ADC
sei ()؛ // تمكين المقاطعات
}}
ISR (ADC_vect) {// عندما تكون قيمة ADC الجديدة جاهزة
PORTB & = B11101111 ؛ // set pin 12 low
prevData = newData؛ // تخزين القيمة السابقة
newData = ADCH؛ // get value from A0
if (prevData <127 && newData> = 127) {// في حالة زيادة وعبور نقطة الوسط
newSlope = newData - prevData؛ // احسب المنحدر
if (abs (newSlope-maxSlope) 9) {
إعادة () ؛
}}
}}
}}
آخر إذا كان (newSlope> maxSlope) {// إذا كان المنحدر الجديد أكبر بكثير من المنحدر الأقصى
maxSlope = newSlope ،
الوقت = 0 ؛ // إعادة تعيين الساعة
noMatch = 0 ؛
فهرس = 0 ؛ // إعادة تعيين الفهرس
}}
آخر {// المنحدر ليس حادًا بما فيه الكفاية
noMatch ++؛ // increment no counter match
إذا (noMatch> 9) {
إعادة () ؛
}}
}}
}}
time ++ ؛ // مؤقت زيادة بمعدل 38.5 كيلو هرتز
ampTimer ++؛ // زيادة السعة الموقت
if (abs (127-ADCH)> maxAmp) {
maxAmp = القيمة المطلقة (127-ADCH) ؛
}}
if (ampTimer == 1000) {
ampTimer = 0 ؛
checkMaxAmp = maxAmp ؛
maxAmp = 0 ؛
}}
}}
void reset () {// تنظيف بعض المتغيرات
فهرس = 0 ؛ // إعادة تعيين الفهرس
noMatch = 0؛ // إعادة تعيين عداد المباراة
maxSlope = 0 ؛ // منحدر إعادة التعيين
}}
// أوقف تشغيل 5 من 6 مصابيح LED لأوتار الغيتار
مصابيح LED فارغة أخرى (int LED1 ، int LED2 ، int LED3 ، int LED4 ، int LED5) {
الكتابة الرقمية (LED1،0) ؛
الكتابة الرقمية (LED2،0) ؛
الكتابة الرقمية (LED3،0) ؛
الكتابة الرقمية (LED4،0) ؛
الكتابة الرقمية (LED5.0) ؛
}}
// تحديد التردد الصحيح وإضاءة
// مؤشر LED المناسب للسلسلة قيد التشغيل
سلسلة فارغة checkCheck () {
إذا (التردد> 70 والتردد <90) {
أخرى LEDs أوف (2،3،5،6،7)؛
الكتابة الرقمية (2.1) ؛
تردد صحيح = 82.4 ؛
}}
إذا (التردد> 100 والتردد <120) {
أخرى LEDs أوف (2،3،4،5،6)؛
الكتابة الرقمية (3.1) ؛
تردد صحيح = 110 ؛
}}
if (التردد> 135 والتردد <155) {
أخرى LEDs أوف (2،3،4،6،7) ؛
الكتابة الرقمية (4.1) ؛
تردد صحيح = 146.8 ؛
}}
if (التردد> 186 والتردد <205) {
أخرى LEDs أوف (2،3،5،6،7)؛
الكتابة الرقمية (5.1) ؛
الصحيح تردد = 196 ؛
}}
if (التردد> 235 والتردد <255) {
أخرى LEDs (2،4،5،6،7) ؛
الكتابة الرقمية (6.1) ؛
تردد صحيح = 246.9 ؛
}}
if (التردد> 320 والتردد <340) {
أخرى LEDs (3،4،5،6،7) ؛
الكتابة الرقمية (7.1) ؛
تردد صحيح = 329.6 ؛
}}
}}
// قارن إدخال التردد بالصحيح
// التردد وإضاءة المصابيح المناسبة
تكرار الفراغ () {
if (Frequ> rightFrequency + 1) {
analogWrite (A3،255) ؛
}}
if (التكرار> rightFrequency + 4) {
analogWrite (A2،255) ؛
}}
if (Frequ> rightFrequency + 6) {
analogWrite (A1،255) ؛
}}
if (Frequence correctFrequency-1 & Frequence ampThreshold) {
تردد = 38462 / تعويم (فترة) ؛ // احسب معدل / فترة عداد التردد
}}
stringCheck () ؛
تردد التحقق () ؛
تأخير (100) ؛
}}
الخطوة 11: لوحة
بالنسبة لموالف الغيتار ، اختار المؤلف القطع بالليزر. بدلاً من ذلك ، يمكنك استخدام غطاء السكن القياسي عن طريق ثقوب ما قبل الحفر فيه.
الخطوة 12: مصابيح LED
قم بلحام الصمام على اللوح. للقيام بذلك بشكل مترابط مع الثقوب ، قم بإدخالها مع اللوحة في الغطاء دون لحام ، ثم لحامها. بالنسبة إلى أنود كل LED ، من الضروري لحام مقاومة 150 أوم ، وبالتالي ، هناك سلك سيذهب إلى أحد مدخلات Arduino. استخدم المؤلف الثنائيات الحمراء للإشارة إلى ضبط السلسلة ، والأخضر للإشارة إلى أن السلسلة مضبوطة والأصفر للإشارة إلى السلسلة التي تم توليفها حاليًا. ترتبط الكاثودات ببعضها البعض ، وبأسلاك متصلة بأرض اردوينو.
الخطوة 13: توصيل المصابيح
قم بتوصيل الأسلاك بلوحة اردوينو. توضح القائمة التالية مصباح LED الذي يجب توصيله بأي دبوس.
الصمام الأحمر في أقصى اليسار - دبوس 8 ، مصباح LED الأحمر التالي على اليمين هو دبوس 9 ، ضوء LED الأحمر التالي على اليمين هو A5 LED أخضر - A4 أول LED أحمر على يمين LED الأخضر هو A3 الضوء الأحمر التالي على اليمين هو A2 الصمام الأحمر الموجود في أقصى اليمين هو A1
أقصى اليسار مع نقش "E" - دبوس 2 ، String A LED - pin 3 ، سلسلة LED "D" - دبوس 4 ، الصمام سلسلة G - دبوس 5 ، سلسلة LED "B" - دبوس 6 ، الصمام المتطرف الأيمن المسمى "E" - دبوس 7
بعد توصيل جميع مصابيح LED ، قم بتشغيل الجهاز وتأكد من أن مصابيح LED تعرض السلاسل التي تم تشغيلها وعملية الضبط بشكل صحيح.
الخطوة 14: التجميع النهائي
قم بتجميع الجهاز بعناية ، مع التأكد من عدم فصل أحد الأسلاك عن أردوينو.