Ничего не найдено :(
    В гостях у Самоделкина! » Электроника » Металлоискатели » Металлоискатель на Arduino Pro Mini. Переработка глубинника Колоколова-Щедрина по принципу «Прием-передача»

    Металлоискатель на Arduino Pro Mini. Переработка глубинника Колоколова-Щедрина по принципу «Прием-передача»


    Переработка схемы глубинника Колоколова-Щедрина. Отличия от оригинальной схемы:
    1. Кварцевого генератора на микросхеме к561.. и кварце на 32 кГц- НЕТ. Сигнал 32 кГц дает Ардуино Про Мини.
    2. Схемы звукового оповещения на нескольких микросхемах 561 серии тоже нет-озвучивает цели тоже Ардуино(И должен заметить отлично озвучивает, по сравнению с авторской схемой).
    3. Питание от однополярного напряжения 12в(свинцовый акб).
    4. Регулировка чувствительности кнопками. При шкале АЦП от 0 до 1023, порог срабатывания регулируется от 1 до 38(значение легко можно изменить в скетче).


    Металлоискатель на Arduino Pro Mini. Переработка глубинника Колоколова-Щедрина по принципу «Прием-передача»


    Самое главное, что хотелось показать в этой статье, что можно собрать МД на Ардуино не уступающий оригиналу по чувствительности(это получилось-т.к. оригиналов исходной схемы было собрано порядка 10шт, поэтому материал для сравнения есть). Оригинальная схема:


    Когда я только начинал работу с Ардуино, я был так воодушевлен, что думал, что могу найти и собрать любую схему МеталлоДетектора из интернета на Ардуино, которую с легкостью найду на просторах большой помойки. В принципе так и оказалось, но схемы были на основе частотомера, что не позволило добиться реально хорошей дальности. Одни детские игрушки и проба пера+ попытки заработать на новичках. Оригинал данного мд является реальной рабочей лошадкой, позволяющей находить крупные предметы на расстоянии 2м (смотрите в гугле книгу Колоколова-Щедрина). Статистики по преображенному мд нет. Надеюсь она появится при поддержке фанатов МД и Ардуино. Схема работала с Ардуино Уно и Ардуино Про Мини.

    Далее на ссылке выложен процесс рождения данного МД на сайте Паяльник, который длился не один год и подтолкнул автора к изучению программирования дуин. Возможно кому то скетч покажется убогим - с удовольствием приму ваши ИСПРАВЛЕНИЯ.


    Ссылка на паяльник

    На данный момент есть скетч позволяет регулировать барьер чуствтельности(вывод 7 дуины +1 к барьеру, вывод 8 -1 к барьеру). .
    Ардуино про мини 5в, 16МГц, АТмега168 и дисплей использовал вот такие. Рядом для масштаба переходник Мини СД-


    Как уже говорил 1602 стоит 86 рублей, ПроМини - 82 рубля. При желании можно вообще взять голую АТмегу168, разработать под нее плату и залить скетч прямо в нее. А так я например устанавливал при помощи разъема мама-папа на плату МД. На фото видно у Ардуино штекер на 6 пинов-через него и заливались скетчи прямо на плате.

    Скетч-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino

    // A3-аналоговый вход для вольтметра
    // А4-аналоговый вход для сигнала
    // 6- вывод зука
    // 9 - вывод частоты 31200 Гц
    #include 
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
                                           
      byte z1[8] = {                       // значок батарейки
      0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110 };
     
     int countleds = 0;                    // переменная для хранения значения уровня шкалы
     int voltag = 0;                       //переменная для хранения значения напряжения 
     int noll = 0;                         //переменная для хранения значения средней точки
       #define NUM_SAMPLES 10              // 10 аналоговых выборок для чтения за 1сек
       int sum = 0;                        // сумма взятых образцов
       int sun = 0;                        // то же, но деленное на 10
       unsigned char sample_count = 0;     // текущий номер выборки с 
       float voltage = 0.0;                // расчитаное напряжение 
       const int button1 = 7;              // кнопка барьер-плюс
       const int button2 = 8;              // кнопка барьер-минус
       int i =5;                           // барьер 
       
    void setup(){
         lcd.begin(16, 2);                 // инициализация дисплея
         lcd.setCursor(1, 0);
         lcd.print("CXEM.NET");
         lcd.setCursor(10, 1);
         lcd.print("Rx-Tx");
         delay(3000);
         lcd.clear();
         
         TCCR1A = TCCR1A & 0xe0 | 2;
         TCCR1B = TCCR1B & 0xe0 | 0x09;
         analogWrite(9 ,126);              // на выводе 10 ШИМ=50% f=31200Гц
         
         lcd.createChar(1, z1);
         }
         
    void loop()  {
         int buttonState1 = HIGH;           // Состояние кнопки один
         int buttonState2 = HIGH;           // Состояние кнопки два
       sample_count = 0;                    //сбрасываем контур кол-ва сложений
       sum = 0;                             //сбрасываем сумму 10ти сложений
       while (sample_count < NUM_SAMPLES) {
       sum += analogRead(A4);               // к сумме плюсуется очередное измерение
       sample_count++;                      // к номеру измерения плюсуется единица
       sun = sum/10;}                       // находим среднее значение из 10ти измерений
       
       noll = analogRead (A3)/2;            // средняя точка питания
       float voltage = map(analogRead (A3),0,1023,0,1500)/100.0;
                                            //Вольтметр, построенный на входе А3
       if (sun >= noll + i) {countleds = map(sun, noll+i, noll*2 - 250, 9, 14); 
                                            // если полученный рез-т  на 9-15 сегмент шкалы
        tone(6, countleds*100);}                                 
       if (sun <= noll - i) {countleds = map(sun, 116, noll - i, 0, 7);
                                            // если полученный рез-т  на 0-7 сегмент шкалы
        tone(6, countleds*50); }
         if (sun < noll && sun >=noll - (i-1)) {countleds = 7 ;  
        noTone(6); }                        //островок виртуального НУЛЯ(7 сегмент)
         if (sun > noll && sun <= noll + (i-1)) {countleds = 8 ; 
        noTone(6); }                        //островок виртуального НУЛЯ шкалы(8 сегмент)
    
       
        {lcd.setCursor(countleds, 0);       // устанавливаем курсор в колонку countleds, строку 0
        lcd.print("\xff");                  // закрашенный значок
        lcd.setCursor(0, 1);                // перемещаем во 2 строку, столбец-0
        lcd.print(char(1));                 // Индикация значка батарейки
        lcd.setCursor(1, 1);                // перемещаем на указание напряжения
        lcd.print(voltage);                 // вольтаж
        lcd.setCursor(7, 0);                // 8й столбец 1я строка
        if (sun < noll ) { lcd.print("{");} // печать 
        lcd.setCursor(8, 0);                // 9й столбец 1я строка
        if (sun > noll ) { lcd.print("}");} // печать
        lcd.setCursor(7, 1);
        lcd.print("B=");
        lcd.setCursor(9, 1);               // 11 столбец 2я строка
        lcd.print(i);                       // барьер
        lcd.setCursor(13, 1);               // 13й столбец 2я строка
        lcd.print(sun);                     // печать усредненного значения значения АЦП
        delay(100);                         // ждём
        
      buttonState1 = digitalRead(button1);  // Чтение состояния кнопки 1
      buttonState2 = digitalRead(button2);  // Чтение состояния кнопки 2
      if (buttonState1 == LOW) { i =i + 1 ; delay(50);}
                                            // При нажатой кнопке барьер вырастает на 1. Задержка 50
      if (buttonState2 == LOW) { i =i - 1 ; delay(50);} 
                                            // При нажатой кнопке барьер снижается на 1. Задержка 50
      if (i < 1) { i = 1;}                  // Нижняя граница барьера
      if (i > 38) {i = 38;}                 // Верхняя граница барьера
     
     lcd.clear();
        }
    }

    Автоноль не использовал.Последние два элемента ТЛ074 остались без дела. Но на схеме и плате они есть. Может появится желание довести их до рабочего состояния чуть позже. Я считаю, что я своего добился. Блок индикации работает чудесно. Все остальное зависит от МД.

    Источник (Source)
    Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

    Простейший металлоискатель на микросхеме К176ЛА7

    Пинпоинтер «Малыш FM2V2» с различием металлов

    9.8
    Идея
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    10
    Описание
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    10
    Исполнение
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Итоговая оценка: 9.93 из 10 (голосов: 9 / История оценок)

    Добавить комментарий

      • smilesmilesxaxaokdontknowyahoonea
        bossscratchfoolyesyes-yesaggressivesecret
        sorrydancedance2dance3pardonhelpdrinks
        stopfriendsgoodgoodgoodwhistleswoontongue
        smokeclappingcraydeclarederisivedon-t_mentiondownload
        heatirefullaugh1mdameetingmoskingnegative
        not_ipopcornpunishreadscarescaressearch
        tauntthank_youthisto_clueumnikacuteagree
        badbeeeblack_eyeblum3blushboastboredom
        censoredpleasantrysecret2threatenvictoryyusun_bespectacled
        shokrespektlolprevedwelcomekrutoyya_za
        ya_dobryihelperne_huliganne_othodifludbanclose
    24 комментария
    puteec_80 Автор
    https://forum.cxem.net/index.php?/topic/48404-%D0%BC%D0%B5%D1%82%D0%B0%D0%BB%D0%BB%D0%BE%D0%B8%D1%81%D0%BA%D0%B0%D1%82%D0%B5%D0%BB%D1%8C-%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0-%D0%BF%D1%80%D0%B8%D1%91%D0%BC-%D1%89%D0%B5%D0%B4%D1%80%D0%B8%D0%BD%D0%B0/page/28/&tab=comments#
    Новая плата, новая прошивка, новая схема и функции.
    Anjey888
    Спасибо puteec FU ! Со второго раза прошил. Прошивал через Ардуино уно. Проблема пропала после обновления загрузчика. Теперь интересует как настраивать дальше.
    puteec FU
    Подойдёт любая Ардуино на атмега168, атмега328. Про нано это с разъемом usb если не ошибаюсь. Прошейте в Ардуино ide из примеров скетч Blink(мигание светодиодов на 13 выводе, светодиод установлен на плате) . Убедитесь, что используете правильный порт, правильно выбрана плата, правильно выбран процессор на плате, правильно выбрана частота кварца на плате, правильно выбран способ прошивки (мк2).
    Ошибка не встречалась.
    Создайте новый файл в Ардуино, скопируйте скетч отсюда в новый и чистый скетч и все заработает. Но сначала заставьте светодиод на плате Ардуино мигать с стандартным примером мигания. Затем идём дальше.
    Anjey888
    Купил Ардуино п ро нано только на процессоре Atmega328. Пересмотрел кучу видео и форумов ... говорили что должно подойти .... а тут облом НЕ прошивается .... выдает #include expects "FILENAME" or <FILENAME>. Кто то сталкивался с таким ?
    puteec_80 Автор
    Скетч работает именно с этой платой. В чем именно затыка образовалась?
    Если лить последний скетч,то все детали относящиеся к Д3.3 и Д3.4 как и их самих можно не устанавливать. На паяльнике перерисовка на эту тему есть
    Anjey888
    Здравствуйте. Интересует очень эта тема. Хочу собрать прибор. С ходу сделал плату с сайта паяльник ... а потом застрял. Так как куча разногласий между платой и схемой. Начал сравнивать вашу плату ... это большая разница. Но запутался с обвязкой у Ардуино.
    Прошу помощи у знающих людей.
    puteec_80 Автор
    Такие же как и для прочих металлов. Глубина обнаружения зависит от площади мишени. Чем больше, тем глубже.
    Гость Евгений
    Какие пределы обнаружения объектов? Золото, алюминий, медь.
    Гость Александр
    Как же теперь быть, ведь бывает еще барьер Шоттки?
    puteec_80 Автор
    Ну вот! Ни о какой наименьшей величине даже речи не идёт! Спасибо за пояснение.
    Иван_Похмельев
    Цитата: puteec_80
    Причем люди интуитивно быстрей поймут о чем говорю Я.
    Можете и дальше пребывать в этом заблуждении.(( Технически грамотные люди будут в лёгком недоумении.
    Korolev
    БАРЬЕ́Р, -а, муж.
    1. Преграда (род стенки, перекладина), поставленная на пути.
    2. Загородка, ограждение.

    ПОРО́Г, порога, муж.
    1. В науке и технике порогом называют наименьшую величину, степень проявления чего-либо.
    Порог чувствительности прибора. | Порог слышимости. | Порог болевого ощущения. | Датчик срабатывает при превышении установленного порога температуры.
    smile
    puteec_80 Автор
    Давайте останемся при своих. Я буду писать "повышение барьера на одну единицу" и "чувствительность приемника составила 5мкВ". А вы пишите " Повышение порога срабатывания на одну единицу" и "порог чувствительности приемника.." Причем люди интуитивно быстрей поймут о чем говорю Я.
    И поясняю в данном примере. Нет порога строго говоря, потому как нет четкой шкалы отсчёта. Есть какая-то вырезаемая плавающая полоса из плавающего сигнала. Так вот к этой "плавающей" полосе, как мне кажется, гораздо больше подходит определение барьер, чем порог.
    Вообще беспредметный и тупой спор. По существу вопросы есть?
    Иван_Похмельев
    Цитата: puteec_80
    Назовите их нижний и верхний порог.
    Может значения переведенных слов и не совпадают или чуть-чуть не совпадают. Зато прекрасно описывают процесс и постепенно входят в сленг.
    Именно что порог. Порог срабатывания - в Вашем случае. Объясните, пожалуйста, как "барьер" описывает процесс.
    Насчёт вхождения в сленг - сейчас много всяких недоразумений туда входят.((
    puteec_80 Автор
    Я в данном случае все таки склонен все же употребить слово "барьер", т.к. именно барьер выставлен в тексте программы, лишь не попадая в его диапазон сигнал воспринимается микроконтроллером как полезный. Причем именно барьер т.к. имеет два значения -верхняя и нижняя граница сработки т.е. сработка происходит выше "верхней" и ниже "нижней" границы барьера по шкале АЦП. Впрочем вам виднее. Назовите их нижний и верхний порог.
    Может значения переведенных слов и не совпадают или чуть-чуть не совпадают. Зато прекрасно описывают процесс и постепенно входят в сленг.
    Кстати. Чувствительность и барьер совершенно разные вещи.
    Да. Они пересекаются. Но не более.
    Иван_Похмельев
    Цитата: puteec_80
    В зарубежных мд в меню так и написано "Barier".

    Я Вас, возможно, удивлю, но многие английские слова, внешне похожие на наши, имеют другой смысл, иногда близкий, иногда - нет. Поищите по словам "ложные друзья переводчика".
    Теперь по сути. В русской технической документации нет такого словосочетания "барьер чувствительности", просто нет - и всё! Есть "порог чувствительности", в некоторых случаях можно сказать "предел чувствительности", но никак не "барьер чувствительности". Возможно, в каких-то других отраслях знания он и применяется, но не в электронике.
    puteec_80 Автор
    Ну значит все зарубежные инженеры прыгают через палку на дороге. В зарубежных мд в меню так и написано "Barier".Товарищи Иван, вы падает в моих глазах со столь мелочными придирками! Где Ваши замечания по существу? После которых приходиться хлопать себя ладонью плашмя по лбу? Раньше вы меня часто баловали punish
    Иван_Похмельев
    Разница существенная: порог - технический термин, барьер - "палка поперёк дороги".
    puteec_80 Автор
    Может. Но не вижу разницы.
    Иван_Похмельев
    Может быть, не "барьера", а порога? ;)
    puteec_80 Автор
    На схеме не показаны кнопки регулировки барьера. Они подключены к выводам 7 и 8 Ардуино. Подтянуты каждая сопротивлением 10к к плюсу, замыкаются при нажатии на массу.
    puteec_80 Автор
    void loop() {
    int buttonState1 = HIGH; // Состояние кнопки один
    int buttonState2 = HIGH; // Состояние кнопки два

    int pot = analogRead(A4); // фильтр быстрого изменения сигнала
    sign = sign*(1-K) + pot*K;

    noll = noll*(1-L) + sign*L; // фильтр длительного отслеживания сигнала
    //Вольтметр, построенный на входе А3
    float voltage = map(analogRead (A3),0,1023,0,1500)/100.0;

    if (sign >= noll + i) {countleds = map(sign, noll+i, 1023 , 9, 14);
    // если полученный рез-т на 9-15 сегмент шкалы
    tone(6, countleds*100);}
    if (sign <= noll - i) {countleds = map(sign, 0, noll - i, 0, 7);
    // если полученный рез-т на 0-7 сегмент шкалы
    tone(6, countleds*50); }
    if (sign < noll && sign >= noll - (i-1)) {countleds = 7 ;
    noTone(6); } //островок виртуального НУЛЯ(7 сегмент)
    if (sign > noll && sign <= noll + (i-1)) {countleds = 8 ;
    noTone(6); } //островок виртуального НУЛЯ шкалы(8 сегмент)


    {lcd.setCursor(countleds, 0); // устанавливаем курсор в колонку countleds, строку 0
    lcd.print("\xff"); // закрашенный значок
    lcd.setCursor(0, 1); // перемещаем во 2 строку, столбец-0
    lcd.print(char(1)); // Индикация значка батарейки
    lcd.setCursor(1, 1); // перемещаем на указание напряжения
    lcd.print(voltage); // вольтаж
    lcd.setCursor(7, 0); // 8й столбец 1я строка
    if (sign < noll ) { lcd.print("{");} // печать
    lcd.setCursor(8, 0); // 9й столбец 1я строка
    if (sign > noll ) { lcd.print("}");} // печать
    lcd.setCursor(7, 1);
    lcd.print("B=");
    lcd.setCursor(9, 1); // 11 столбец 2я строка
    lcd.print(i); // барьер
    lcd.setCursor(13, 1); // 13й столбец 2я строка
    lcd.print(sign); // печать усредненного значения значения АЦП
    delay(10); // ждём

    buttonState1 = digitalRead(button1); // Чтение состояния кнопки 1
    buttonState2 = digitalRead(button2); // Чтение состояния кнопки 2
    if (buttonState1 == LOW) { i = i + 1 ; delay(50);}
    // При нажатой кнопке барьер вырастает на 1. Задержка 50
    if (buttonState2 == LOW) { i = i - 1 ; delay(50);}
    // При нажатой кнопке барьер снижается на 1. Задержка 50
    if (i < 1) { i = 1;} // Нижняя граница барьера
    if (i > 38) {i = 38;} // Верхняя граница барьера

    lcd.clear();
    }
    }
    puteec_80 Автор
    Новый скетч. Изменен алгоритм обнаружения полезного сигнала. Схема упрощена, нет элементов D3.4 и D3.3 со всей их обвязкой. Если брать родную печатку, то все эти детали можно просто не устанавливать. Больше чуствительность. Нет ложных сработок.
    Скетч:

    //A3-аналоговый вход для вольтметра.Выставляется потенциометром R32.
    // А4-аналоговый вход для сигнала.Выставляется при минимальном сигнале на D3.2
    // резистором R40 для показаний АЦП примерно 510.
    // 6- вывод зука
    // 9 - вывод частоты 31200 Гц
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

    byte z1[8] = { // значок батарейки
    0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110 };
    int countleds = 0; // переменная для хранения значения уровня шкалы

    float voltage = 0.0; // расчитаное напряжение
    const int button1 = 7; // кнопка барьер-плюс
    const int button2 = 8; // кнопка барьер-минус
    int i = 5; // барьер
    const float K = 0.1; // фильтр отслеживающий быстрые изменения(коэф. чем меньше тем сильнее)
    const float L = 0.07; // фильтр отслеживающий изменения за длительное время
    float sign = 0; // фильтр
    float noll = 0;

    void setup(){
    lcd.begin(16, 2); // инициализация дисплея
    lcd.createChar(1, z1);
    pinMode(9, OUTPUT);
    pinMode(6, OUTPUT);
    TCCR1A = TCCR1A & 0xe0 | 2;
    TCCR1B = TCCR1B & 0xe0 | 0x09;
    analogWrite(9 , 126); // на выводе 10 ШИМ=50% f=31200Гц
    //на самом деле для ШИМ = 50% нужно ставить заполнение хотя бы 220, согласно осцилографу
    //дуина не справляется. Здесь не критично.
    }
    puteec_80 Автор
    Тем кто будет смотреть скетч. Знаки >= и <= заменены на странные комбинации &gt и &lt. Почему не знаю. Когда вылаживал было нормально.

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Опрос
    А Вы уже рассказали на сайте о своей самоделке?

    Последние комментарии

    Все комментарии