» електроника » Метални детектори »Метален детектор на Arduino Pro Mini. Обработка на дълбините на Колоколов-Щедрин по принципа на "Предаване"

Метален детектор на Arduino Pro Mini. Обработка на дълбините на Колоколов-Щедрин по принципа на "Предаване"


Рециклиране на дълбоководната схема Колоколов-Щедрин. Разлики от първоначалната схема:
1. В чипа k561 .. няма кристален осцилатор и кварц от 32 kHz. Сигналът от 32 kHz дава Arduino Pro Mini.
2. Звукови схеми за известяване на няколко микросхема от серия 561 също не присъстват, Arduino също огласява целта (И трябва да кажа, че е отличен глас, в сравнение със схемата на автора).
3. Захранва се от еднополярно напрежение 12v (оловно-кисела батерия).
4. Настройте чувствителността с бутоните. С ADC скалата от 0 до 1023, прагът на отговор е регулируем от 1 до 38 (стойността може лесно да бъде променена в скицата).


Метален детектор на Arduino Pro Mini. Обработка на дълбините на Колоколов-Щедрин по принципа на


Най-важното е, че в тази статия исках да покажа, че е възможно да се сглобяват MD-та на Arduino, които не са по-ниски от оригинала по чувствителност (това се получи, защото оригиналите на оригиналната схема бяха събрани от порядъка на 10 броя, така че има материал за сравнение). Оригинална схема:


Когато за първи път започнах да работя с Arduino, бях толкова ентусиазиран, че мислех, че мога да намеря и сглобя всякаква верига на металотърсач от интернет на Arduino, че лесно бих могъл да намеря в огромния боклук. По принцип се оказа така, но веригите се основаваха на честотен брояч, което не позволяваше да се постигне наистина добър диапазон. Някои детски играчки и тест на писалката + опити да печелят пари за начинаещи. Оригиналът на този MD е истински работен кон, който ви позволява да намирате големи предмети на разстояние 2 м (вижте книгата на Колоколов-Щедрин в Google). Няма статистически данни за преобразувания md. Надявам се тя да се появи с подкрепата на феновете на MD и Arduino. Схемата работи с Arduino Uno и Arduino Pro Mini.

По-нататък на връзката е изложен процесът на раждането на този доктор на уебсайта на поялника, който продължи повече от една година и тласна автора да изучава програмен дуин. Може би скицата ще изглежда нещастна за някого - с радост ще приема вашите ПОМОЩИ.




В момента има скица, която ви позволява да регулирате бариерата за чувствителност (щифт 7 удвоява +1 към бариерата, щифт 8 -1 към бариерата). ,
Arduino около mini 5v, 16MHz, ATmega168 и дисплеят използваха тези. Следваща скалата е Mini SD-адаптер


Както вече беше казано 1602 струва 86 рубли, ProMini - 82 рубли. Ако желаете, обикновено можете да вземете гола ATmega168, да разработите дъска за нея и да напълните скицата директно в нея.И така, например, инсталирах мама-татко на дъската на MD с помощта на конектора. Снимката показва 6-пинов щепсел на Arduino, през който се изливат скици директно върху дъската.

Скица-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino

// A3 аналогов вход за волтметър
// Аналогов вход A4 за сигнал
// 6- заключение на зука
// 9 - изходна честота 31200 Hz
#include
Течен кристал lcd (12, 11, 5, 4, 3, 2);
                                       
  байт z1 [8] = {// икона на батерията
  0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
 
 int отброени = 0; // променлива, за да съхранява стойността на ниво на мащаба
 int voltag = 0; // променлива за съхранение на стойността на напрежението
 int noll = 0; // променлива за съхранение на средната стойност
   #define NUM_SAMPLES 10 // 10 аналогови проби за четене за 1 секунда
   int сума = 0; // сума на взетите проби
   int sun = 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);
     }
     
void loop () {
     int buttonState1 = ВИСОКО; // Състоянието на бутона е едно
     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 = карта (sun, 116, noll - i, 0, 7);
                                        // ако полученият резултат е 0-7 сегмент от скалата
    тон (6, броени * 50); }
     ако (sun & lt; noll & amp; sun & gt; = noll - (i-1)) {countleds = 7;
    noTone (6); } // островче на виртуална ZERO (7 сегмент)
     if (sun & gt; noll & amp; sun & lt; = noll + (i-1)) {countleds = 8;
    noTone (6); } // остров на виртуална скала ZERO (8 сегмент)

   
    {lcd.setCursor (отброени, 0); // задайте курсора на колоната за отброяване, ред 0
    lcd.print ("\ xff"); // икона за запълване
    lcd.setCursor (0, 1); // преминаване към 2 ред, колона-0
    lcd.принт (char (1)); // Индикация на иконата на батерията
    lcd.setCursor (1, 1); // преминаване към индикация за напрежение
    lcd.принт (напрежение); // напрежение
    lcd.setCursor (7, 0); // 8-ма колона 1-ви ред
    if (sun & lt; noll) {lcd.print ("{");} // print
    lcd.setCursor (8, 0); // 9-та колона 1-ви ред
    if (sun & gt; noll) {lcd.print ("}");} // print
    lcd.setCursor (7, 1);
    lcd.print ("B =");
    lcd.setCursor (9, 1); // 11 колона 2-ри ред
    lcd.принт (i); // бариера
    lcd.setCursor (13, 1); // 13-та колона 2-ри ред
    lcd.принт (слънце); // отпечатайте средната стойност на стойността на ADC
    забавяне (100); // чакай
    
  buttonState1 = digitalRead (бутон1); // Състояние на бутона за четене 1
  buttonState2 = digitalRead (бутон2); // Състояние на бутона за четене 2
  ако (buttonState1 == LOW) {i = i + 1; забавяне (50);}
                                        // При натискане на бутона бариерата нараства с 1. Забавяне 50
  ако (buttonState2 == LOW) {i = i - 1; забавяне (50);}
                                        // При натискане на бутона бариерата намалява с 1. Забавяне 50
  ако (i <1) {i = 1;} // Долна граница на преградата
  ако (i & gt; 38) {i = 38;} // Горната граница на преградата
 
 lcd.clear ();
    }
}

Не използвах колата. Последните два елемента на TL074 останаха бездействащи. Но на веригата и платката те са. Може да искате да ги приведете в работно състояние малко по-късно. Вярвам, че съм постигнал целта си. Дисплеят работи чудесно. Всичко останало зависи от MD.
9.8
10
10

Добавете коментар

    • усмихвамусмивкиxaxaдобреdontknowYahooНеа
      шефдраскотинаглупакдаДа-даагресивентайна
      съжалявамтанцувамdance2dance3извинениепомощнапитки
      спиркаприятелидобърgoodgoodсвиркаприпадамезик
      димплясканеCrayдеклариратподигравателендон-t_mentionизтегляне
      топлинасърдитlaugh1MDAсрещаmoskingотрицателен
      not_iпуканкинаказвамчетаплашаплашитърсене
      присмехthank_youтоваto_clueumnikостърСъгласен
      лошоbeeeblack_eyeblum3изчервяванесамохвалствоскука
      цензурираншегаsecret2заплашвампобедаюsun_bespectacled
      ShokРеспектхахаprevedдобре дошълkrutoyya_za
      ya_dobryiпомощникne_huliganne_othodifludзабранаблизо
24 коментари
Авторът
Благодаря puteec FU! Поисках го от втория път. Заших се през Arduino uno. Проблемът изчезна след актуализиране на зареждащия механизъм. Сега интересува как да конфигурирате допълнително.
puteec fu
Всеки Arduino е подходящ за atmega168, atmega328. Относно нано това с usb конектор, ако не греша. Шийте в идеята за Arduino от примерите за скицата на мига (мигащи светодиоди на щифт 13, светодиодът е инсталиран на платката). Уверете се, че използвате правилния порт, платката е избрана правилно, процесорът на платката е правилно избран, кварцовата честота на платката е правилно избрана и методът на фърмуера (μ2) е избран правилно.
Грешка не е срещана.
Създайте нов файл в Arduino, копирайте скицата оттук на нова и чиста скица и тя ще работи.Но първо, накарайте светодиода на дъската Arduino да мига със стандартен мигащ пример. След това продължете напред.
Купих Arduino p nano само на процесора Atmega328. Прегледах куп видеоклипове и форуми ... казаха, че трябва да излезе .... но тогава бумът НЕ мига .... дава #include очаква "FILENAME" или . Някой срещал ли се е с това?
Авторът
С тази скица работи скица. От какво точно се образува тапата?
Ако излеете последната скица, тогава всички детайли, свързани с D3.3 и D3.4, както и самите те не могат да бъдат инсталирани. Върху поялника има преработка по тази тема
Anjey888
Здравейте Тази тема е много заинтересована. Искам да сглобя устройството. Направих дъска за поялник в движение ... и след това се залепих. Тъй като има много разногласия между платката и веригата. Започнахте да сравнявате дъската си ... това е голяма разлика. Но объркан с колан в Ардуино.
Моля за помощта на знаещи хора.
Авторът
Същото като при другите метали. Дълбочината на откриване зависи от района на целта. Колкото повече, толкова по-дълбоко.
Гост Евгений
Какви са ограниченията за откриване на обекти? Злато, алуминий, мед.
Гост Александър
Какво да правя сега, защото все още има бариера на Шотки?
Авторът
Ами тук! Дори и най-малката стойност не е в състояние! Благодаря за разяснението.
Цитат: puteec_80
И хората по-бързо и интуитивно ще разберат за какво говоря.
Можете да продължите да оставате в тази грешка. ((Технически грамотните хора ще са с малка загуба).
BARRIER, съпруг.
1. Препятствие (вид стена, напречна греда), поставено на пътя.
2. Ограда, ограда.

ПРАВО, праг, съпруг.
1. В науката и технологиите прагът се нарича най-малката стойност, степента на проявление на нещо.
Прагът на чувствителност на устройството. | Праг на слуха. | Праг на болка. | Сензорът се задейства при превишаване на зададения праг на температура.
усмихвам
Авторът
Да останем с нашите. Ще напиша "увеличаване на бариерата с една единица" и "чувствителността на приемника беше 5 μV." И вие пишете „Увеличаване на прага на работа с една единица“ и „праг на чувствителност на приемника ..“ Освен това хората по-бързо и интуитивно ще разберат за какво говоря.
И обяснявам в този пример. Няма праг строго погледнато, защото няма ясна референтна скала. Има някаква плаваща лента за изрязване от плаващ сигнал. Така че ми се струва, че определението за бариера е много по-подходящо за тази „плаваща“ лента, отколкото за праг.
Като цяло безсмислен и глупав спор. Имате ли въпроси?
Цитат: puteec_80
Какви са долните и горните им прагове?
Може би значенията на преведените думи не съвпадат или леко не съвпадат. Но те отлично описват процеса и постепенно влизат в жаргон.
Точно какъв е прагът. Прагът на отговор е във вашия случай. Моля, обяснете как „бариерата“ описва процеса.
Що се отнася до присъединяването към жаргона - сега има много всякакви недоразумения там. ((
Авторът
В този случай все още съм склонен да използвам думата "бариера", защото това е бариерата, която е зададена в текста на програмата, но без да влиза в обхвата му, сигналът се възприема от микроконтролера като полезен. И това е бариерата, защото Той има две стойности - горната и долната граница на пробега, т.е. операцията се извършва над "горната" и под "долната" граница на преградата по скалата на ADC. Вие обаче знаете по-добре. Какви са долните и горните им прагове?
Може би значенията на преведените думи не съвпадат или леко не съвпадат. Но те отлично описват процеса и постепенно влизат в жаргон.
Между другото Чувствителността и бариерата са напълно различни неща.
Да.Те се пресичат. Но не повече.
Цитат: puteec_80
В чуждестранния MD менюто казва "Barier".

Може да ви изненадам, но много английски думи, които приличат на нашите, имат различно значение, понякога близки, понякога не. Потърсете думите „фалшиви приятели на преводача“.
Сега по същество. На руски технически документация не просто няма такава фраза „бариера на чувствителността“ - и това е! Има „праг на чувствителност“, в някои случаи можем да кажем „граница на чувствителността“, но не и „бариера на чувствителността“. Може би в някои други клонове на знанието се използва, но не и в електрониката.
Авторът
Е, това означава, че всички чуждестранни инженери прескачат пръчка на пътя. В чуждестранния MD менюто казва "Barier". Другарю Иван, падате ми в очите с толкова дребни нитропи! Къде са вашите коментари по същество? След което трябва да плеснете с ръце на челото? Често ме разваляше наказвам
Разликата е значителна: прагът е технически термин, бариерата е „пръчка през пътя“.
Авторът
Може би. Но не виждам разликата.
Може би не „бариера“, а праг? )
Авторът
Диаграмата не показва бутоните за регулиране на бариерата. Те са свързани с щифтове 7 и 8 на Arduino. Всяко издърпано с съпротивление 10k към плюс, се затваря, когато натиснете масата.
Авторът
void loop () {
int buttonState1 = ВИСОКО; // Състоянието на бутона е едно
int buttonState2 = HIGH; // Състояние с два бутона

int pot = analogRead (A4); // филтър за бърза смяна на сигнала
знак = знак * (1-К) + гърне * К;

noll = noll * (1-L) + знак * L; // дългосрочен филтър за сигнали
// Волтметър, изграден на вход A3
плаващо напрежение = карта (analogRead (A3), 0,1023,0,1500) /100.0;

if (знак> = noll + i) {countleds = карта (знак, noll + i, 1023, 9, 14);
// ако полученият резултат е на 9-15-ия сегмент на скалата
тон (6, броени * 100);}
if (знак <= noll - i) {countleds = карта (знак, 0, noll - i, 0, 7);
// ако полученият резултат е 0-7 сегмент от скалата
тон (6, броени * 50); }
if (знак = noll - (i-1)) {countleds = 7;
noTone (6); } // островче на виртуална ZERO (7 сегмент)
if (знак> noll && знак <= noll + (i-1)) {countleds = 8;
noTone (6); } // остров на виртуална скала ZERO (8 сегмент)


{lcd.setCursor (отброени, 0); // задайте курсора на колоната за отброяване, ред 0
lcd.print ("\ xff"); // икона за запълване
lcd.setCursor (0, 1); // преминаване към 2 ред, колона-0
lcd.принт (char (1)); // Индикация на иконата на батерията
lcd.setCursor (1, 1); // преминаване към индикация за напрежение
lcd.принт (напрежение); // напрежение
lcd.setCursor (7, 0); // 8-ма колона 1-ви ред
if (знак lcd.setCursor (8, 0); // 9-та колона 1-ви ред
if (знак> noll) {lcd.print ("}");} // print
lcd.setCursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // 11 колона 2-ри ред
lcd.принт (i); // бариера
lcd.setCursor (13, 1); // 13-та колона 2-ри ред
lcd.принт (знак); // отпечатайте средната стойност на стойността на ADC
забавяне (10); // чакай

buttonState1 = digitalRead (бутон1); // Състояние на бутона за четене 1
buttonState2 = digitalRead (бутон2); // Състояние на бутона за четене 2
ако (buttonState1 == LOW) {i = i + 1; забавяне (50);}
// При натискане на бутона бариерата нараства с 1. Забавяне 50
ако (buttonState2 == LOW) {i = i - 1; забавяне (50);}
// При натискане на бутона бариерата намалява с 1. Забавяне 50
ако (i <1) {i = 1;} // Долна граница на преградата
ако (i> 38) {i = 38;} // Горната граница на преградата

lcd.clear ();
}
}
Авторът
Нова скица. Алгоритъмът за откриване на полезния сигнал е променен. Схемата е опростена, няма елементи D3.4 и D3.3 с всичките им връзки. Ако вземете свой собствен печат, всички тези подробности просто не могат да бъдат инсталирани. Повече чувствителност. Няма фалшиви позитиви.
скица:

// A3-аналогов вход за волтметър. Настройва се от потенциометър R32.
// Аналогов вход A4 за сигнала Задайте с минималния сигнал на D3.2
// резистор R40 за показанията на ADC от около 510.
// 6- заключение на зука
// 9 - изходна честота 31200 Hz
#include
Течен кристал lcd (12, 11, 5, 4, 3, 2);

байт z1 [8] = {// икона на батерията
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int отброени = 0; // променлива, за да съхранява стойността на ниво на мащаба

напрежение на поплавъка = 0,0; // изчислено напрежение
const int button1 = 7; // бариера плюс бутон
const int button2 = 8; // бариера-минус бутон
int i = 5; // бариера
const float K = 0,1; // проследяване на филтъра бързи промени (коефициент. колкото по-малък, толкова по-силен)
const float L = 0,07; // проследяването на филтъра се променя за дълго време
плаващ знак = 0; // филтър
float noll = 0;

настройка за невалидност () {
lcd.begin (16, 2); // инициализация на дисплея
lcd.createChar (1, z1);
pinMode (9, изход);
pinMode (6, изход);
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x09;
analogWrite (9, 126); // на щифт 10 PWM = 50% f = 31200Hz
// всъщност за PWM = 50% трябва да зададете поне 220 пълнежа, според осцилоскопа
// duin не може да се справи. Това не е критично.
}
Авторът
Тези, които ще гледат скицата. Знаците> = и <= са заменени от странни комбинации от> gt и

Съветваме ви да прочетете:

Предайте го за смартфона ...