إعادة تدوير مخطط كولوكولوف-شيدرين في المياه العميقة. الاختلافات عن المخطط الأصلي:
1. لا يوجد مذبذب بلوري على رقاقة k561 .. كوارتز 32 كيلو هرتز. تعطي إشارة 32 كيلو هرتز Arduino Pro Mini.
2. دارات الإخطار الصوتية على العديد من الدوائر الدقيقة 561 سلسلة غائبة أيضًا - أصوات الأهداف أيضًا ، اردوينو (ويجب أن أقول ، أصوات ممتازة ، مقارنة بدائرة المؤلف).
3. مدعوم من الجهد أحادي القطب 12 فولت (بطارية الرصاص الحمضية).
4. ضبط الحساسية مع الأزرار. مع مقياس ADC من 0 إلى 1023 ، يمكن تعديل عتبة الاستجابة من 1 إلى 38 (يمكن تغيير القيمة بسهولة في الرسم التخطيطي).
الأهم من ذلك ، أردت أن أوضح في هذه المقالة أنه من الممكن تجميع MDs على Arduino غير أدنى من الأصل في الحساسية (تم ذلك ، لأن أصول الدائرة الأصلية تم جمعها بترتيب 10 قطع ، لذلك هناك مادة للمقارنة). الدائرة الأصلية:
عندما بدأت العمل مع Arduino لأول مرة ، كنت متحمسًا جدًا لدرجة أنني اعتقدت أنه يمكنني العثور على وتجميع أي دائرة للكشف عن المعادن من الإنترنت على Arduino يمكنني العثور عليها بسهولة في مكب القمامة الواسع. من حيث المبدأ ، اتضح ذلك ، ولكن الدوائر كانت تعتمد على عداد تردد ، والذي لم يسمح بتحقيق نطاق جيد حقًا. بعض ألعاب الأطفال واختبار القلم + محاولات لكسب المال على المبتدئين. أصل هذا MD هو حصان عمل حقيقي يسمح لك بالعثور على الأشياء الكبيرة على مسافة 2 متر (انظر كتاب Kolokolov-Shchedrin في Google). لا توجد إحصائيات حول MD المحولة. آمل أن تظهر بدعم من محبي MD و Arduino. عملت الخطة مع Arduino Uno و Arduino Pro Mini.
علاوة على الرابط ، تم وضع عملية ولادة هذا MD على موقع Soldering Iron ، الذي استمر أكثر من عام واحد ودفع المؤلف إلى دراسة برمجة du. ربما سيظهر الرسم البائس لشخص ما - سأقبل بكل سرور إصلاحاتك.
في الوقت الحالي ، هناك رسم تخطيطي يسمح لك بتعديل حاجز الحساسية (دبوس 7 دعوات +1 للحاجز ، دبوس 8-1 للحاجز). .
استخدم Arduino حول mini 5v و 16 MHz و ATmega168 والعرض. بجانب المقياس يوجد محول SD صغير
كما سبق ذكره ، 1602 تكلف 86 روبل ، ProMini - 82 روبل. إذا كنت ترغب في ذلك ، يمكنك بشكل عام أخذ ATmega168 عارية ، ووضع لوحة لها وملء الرسم مباشرة فيه.وهكذا ، على سبيل المثال ، قمت بتثبيت أمي على لوحة MD باستخدام الموصل. تُظهر الصورة قابس أردوينو المكون من 6 سنون ، والذي تم من خلاله سكب الرسومات مباشرة على اللوحة.
رسم MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino
// A3 مدخلات تناظرية لفولتميتر
// A4 المدخلات التناظرية للإشارة
// 6- اختتام zook
// 9 - تردد الخرج 31200 هرتز
# تشمل
شاشات الكريستال السائل السائلة (12 ، 11 ، 5 ، 4 ، 3 ، 2) ؛
بايت z1 [8] = {// رمز البطارية
0b01100 ، 0b11110 ، 0b11110 ، 0b11110 ، 0b11110 ، 0b11110 ، 0b11110} ؛
عدد صحيح = 0 ؛ // متغير لتخزين قيمة مستوى المقياس
int voltag = 0 ؛ // متغير لتخزين قيمة الجهد
int noll = 0 ؛ // متغير لتخزين قيمة نقطة المنتصف
#defined NUM_SAMPLES 10 // 10 عينات تناظرية لقراءتها في ثانية واحدة
عدد صحيح = 0 ؛ // مجموع العينات المأخوذة
int شمس = 0 ؛ // نفس الشيء ، ولكن مقسومًا على 10
char غير موقعة sample_count = 0 ؛ // رقم العينة الحالي مع
تعويم الجهد = 0.0 ؛ // الجهد المحسوب
const int button1 = 7 ؛ // حاجز الزائد
const int button2 = 8 ؛ // زر حاجز ناقص
int i = 5 ؛ // حاجز
إعداد باطل () {
lcd.begin (16 ، 2) ؛ // عرض التهيئة
lcd.setCursor (1، 0) ؛
lcd.setCursor (10، 1) ؛
lcd.print ("Rx-Tx") ؛
تأخير (3000) ؛
lcd.clear () ؛
TCCR1A = TCCR1A & أمبير ؛ 0xe0 | 2 ؛
TCCR1B = TCCR1B & أمبير ؛ 0xe0 | 0x09 ؛
analogWrite (9 ، 126) ؛ // عند الطرف 10 PWM = 50٪ f = 31200Hz
lcd.createChar (1، z1) ؛
}}
حلقة فارغة () {
int buttonState1 = HIGH ؛ // حالة الزر واحدة
int buttonState2 = HIGH ؛ // حالة زرّين
sample_count = 0 ؛ // إعادة تعيين كفاف عدد الإضافات
المجموع = 0 ؛ // إعادة تعيين مجموع 10 إضافات
بينما (sample_count & lt؛ NUM_SAMPLES) {
sum + = analogRead (A4) ؛ // يضاف القياس التالي إلى المجموع
sample_count ++ ؛ // تمت إضافة الوحدة إلى رقم القياس
sun = sum / 10؛} // أوجد متوسط القيمة من 10 قياسات
noll = analogRead (A3) / 2 ؛ // قوة نقطة المنتصف
تعويم الجهد = خريطة (analogRead (A3)، 0،1023،0،1500) /100.0 ؛
// الفولتميتر مدمج عند الإدخال A3
if (sun & gt؛ = noll + i) {countleds = map (sun، noll + i، noll * 2 - 250، 9، 14) ؛
// إذا كانت النتيجة المستلمة على الجزء 9-15 من المقياس
نغمة (6 ، العد التنازلي * 100) ؛}
if (sun & lt؛ = noll - i) {countleds = map (sun، 116، noll - i، 0، 7) ؛
// إذا كانت النتيجة الناتجة هي 0-7 قطعة من المقياس
نغمة (6 ، العد التنازلي * 50) ؛ }}
if (sun & lt؛ noll & amp؛ & amp؛ sun & gt؛ = noll - (i-1)) {countleds = 7؛
noTone (6) ؛ } // islet of ZERO ZERO (7 قطعة)
إذا (sun & gt؛ noll & amp؛ & amp؛ sun & lt؛ = noll + (i-1)) {countleds = 8؛
noTone (6) ؛ } // جزيرة مقياس صفر افتراضي (8 أجزاء)
{lcd.setCursor (countleds، 0) ؛ // عيّن المؤشر على عمود العد ، السطر 0
lcd.print ("\ xff") ؛ // أيقونة معبئة
lcd.setCursor (0، 1) ؛ // الانتقال إلى 2 صف ، العمود 0
lcd.print (char (1)) ؛ // إشارة رمز البطارية
lcd.setCursor (1، 1) ؛ // الانتقال إلى مؤشر الجهد
lcd.print (الجهد) ؛ // الجهد
lcd.setCursor (7، 0)؛ // الصف الثامن العمود الأول
if (sun & lt؛ noll) {lcd.print ("{")؛} // print
lcd.setCursor (8، 0) ؛ // الصف التاسع العمود الأول
if (sun & gt؛ noll) {lcd.print ("}")؛} // print
lcd.setCursor (7، 1) ؛
lcd.print ("B =") ؛
lcd.setCursor (9، 1) ؛ // 11 عمود الصف الثاني
lcd.print (i) ؛ // حاجز
lcd.setCursor (13، 1) ؛ // الصف الثالث عشر العمود الثاني
lcd.print (شمس) ؛ // اطبع متوسط قيمة ADC
تأخير (100) ؛ // انتظر
buttonState1 = قراءة رقمية (button1) ؛ // قراءة الزر 1 الحالة
buttonState2 = قراءة رقمية (button2) ؛ // حالة قراءة الزر 2
if (buttonState1 == LOW) {i = i + 1 ؛ تأخير (50) ؛}
// عند الضغط على الزر ، ينمو الحاجز بمقدار 1. Delay 50
if (buttonState2 == LOW) {i = i - 1؛ تأخير (50) ؛}
// عند الضغط على الزر ، ينخفض الحاجز بمقدار 1. تأخير 50
if (i & lt؛ 1) {i = 1؛} // الحد السفلي للجدار
إذا (i & gt؛ 38) {i = 38؛} // الحد العلوي للحاجز
lcd.clear () ؛
}}
}}
لم تستخدم السيارة ، وقد ترك آخر عنصرين من TL074 خاملاً. ولكن على الدارة واللوحة هم. قد ترغب في جعلهم في حالة عمل بعد ذلك بقليل. أعتقد أنني حققت هدفي. تعمل وحدة العرض بشكل رائع. كل شيء آخر يعتمد على MD.