» » » Металлоискатель на 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 остались без дела. Но на схеме и плате они есть. Может появится желание довести их до рабочего состояния чуть позже. Я считаю, что я своего добился. Блок индикации работает чудесно. Все остальное зависит от МД.
Источник
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Чтобы написать комментарий необходимо войти на сайт через соц. сети (или зарегистрироваться):
Обычная регистрация
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Добрый день, Гость!


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

А затем...

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

Или...

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

Онлайн чат

Опрос
Сколько по времени, чаще всего, Вы делаете самоделку?

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

Помять батарею надо, постучать легенько... ненадолго оживает. Можно погнуть еще во все стороны....
Не знаю как с аккумулятором, а батарейки мы варили, обстукивали и делали в них дырки. На время помогало. Конечно сварить и обстучать закончится плачевно. Может попробовать дырку проковырять?...
А в оффлайне нет? В салонах Теле2?...
Спасибо, заметили ошибку, я проверял и применял прошивки только без перевода времени. ВС07 означает "воскресенье, седьмой день недели". Для 23.06.2018 СБ06, далее будет выбор числа, 23....
Просто, как всё гениальное! Я бы ещё перед началом работ развернул одну скрепка (левая - правая)....
Все комментарии