» Elektronika » Wykrywacze metali »Wykrywacz metalu w Arduino Pro Mini. Przetwarzanie głębin Kolokołowa-Shchedrina zgodnie z zasadą „Transmisji”

Wykrywacz metalu w Arduino Pro Mini. Przetwarzanie głębin Kolokołowa-Shchedrina zgodnie z zasadą „Transmisji”


Recykling programu głębinowego Kolokolov-Shchedrin Różnice w stosunku do pierwotnego schematu:
1. Na chipie k561 .. i kwarcu 32 kHz NIE ma oscylatora krystalicznego. Sygnał 32 kHz daje Arduino Pro Mini.
2. Obwody powiadomień dźwiękowych na kilku mikroukładach serii 561 również nie są obecne, Arduino również wyraża cel (i muszę powiedzieć, że jest to doskonały głos w porównaniu ze schematem autora).
3. Zasilany napięciem jednobiegunowym 12v (akumulator kwasowo-ołowiowy).
4. Ustaw czułość za pomocą przycisków. W skali ADC od 0 do 1023 próg odpowiedzi można regulować w zakresie od 1 do 38 (wartość można łatwo zmienić na szkicu).


Wykrywacz metalu w Arduino Pro Mini. Przetwarzanie głębin Kolokołowa-Shchedrina zgodnie z zasadą „Transmisji”


Co najważniejsze, chciałem pokazać w tym artykule, że na Arduino można montować MD nie gorsze od oryginału pod względem czułości (zadziałało, ponieważ oryginały oryginalnego obwodu zostały zebrane rzędu 10 sztuk, więc jest materiał do porównania). Oryginalny obwód:


Kiedy po raz pierwszy zacząłem pracować z Arduino, byłem tak entuzjastycznie nastawiony, że pomyślałem, że mogę znaleźć i zmontować dowolne obwody wykrywacza metalu z Internetu na Arduino, które z łatwością mogę znaleźć na ogromnym wysypisku śmieci. Zasadniczo okazało się, że tak, ale schematy oparte były na mierniku częstotliwości, co nie pozwalało na osiągnięcie naprawdę dobrego zasięgu. Niektóre zabawki dla dzieci i test pióra + próby zarabiania pieniędzy dla początkujących. Oryginał tego MD to prawdziwy koń roboczy, który pozwala znaleźć duże obiekty w odległości 2 m (patrz książka Kolokolov-Shchedrin w Google). Brak statystyk dotyczących przekształconego md. Mam nadzieję, że pojawi się przy wsparciu fanów MD i Arduino. Program współpracował z Arduino Uno i Arduino Pro Mini.

Dalej na link znajduje się proces narodzin tej MD na stronie internetowej Lutownicy, która trwała ponad rok i popchnęła autora do studiowania duetu programistycznego. Być może szkic wyda się komuś nieszczęśliwy - chętnie zaakceptuję Wasze POPRAWKI.




W tej chwili istnieje szkic, który pozwala dostosować barierę czułości (pin 7 douins +1 do bariery, pin 8 -1 do bariery). .
Wykorzystano je w Arduino o mini 5v, 16MHz, ATmega168. Obok wagi znajduje się adapter Mini SD


Jak już wspomniano 1602 kosztuje 86 rubli, ProMini - 82 ruble. Jeśli chcesz, możesz ogólnie wziąć nagą ATmega168, opracować dla niej planszę i wypełnić bezpośrednio szkic.I tak na przykład zainstalowałem mamę-tatę na płycie MD za pomocą złącza. Zdjęcie pokazuje 6-pinową wtyczkę Arduino, przez którą szkice wylano bezpośrednio na płytkę.

Sketch-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino

// Wejście analogowe A3 dla woltomierza
// Wejście analogowe A4 dla sygnału
// 6- zakończenie zook
// 9 - częstotliwość wyjściowa 31200 Hz
#include
LCD ciekłokrystaliczny (12, 11, 5, 4, 3, 2);
                                       
  bajt z1 [8] = {// ikona baterii
  0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
 
 int countleds = 0; // zmienna do przechowywania wartości poziomu skali
 int voltag = 0; // zmienna do przechowywania wartości napięcia
 int noll = 0; // zmienna do przechowywania wartości punktu środkowego
   # zdefiniuj NUM_SAMPLES 10 // 10 próbek analogowych do odczytania za 1 sekundę
   int suma = 0; // suma pobranych próbek
   int sun = 0; // takie same, ale podzielone przez 10
   unsigned char sample_count = 0; // bieżący numer próbki z
   napięcie zmiennoprzecinkowe = 0,0; // obliczone napięcie
   const int button1 = 7; // bariera plus przycisk
   const int button2 = 8; // przycisk minus bariera
   int i = 5; // bariera
   
void setup () {
     lcd.begin (16, 2); // wyświetlanie inicjalizacji
     lcd.setCursor (1, 0);
     lcd.setCursor (10, 1);
     lcd.print („Rx-Tx”);
     opóźnienie (3000);
     lcd.clear ();
     
     TCCR1A = TCCR1A i amp; 0xe0 | 2;
     TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
     analogWrite (9, 126); // na pinie 10 PWM = 50% f = 31200Hz
     
     lcd.createChar (1, z1);
     }
     
void loop () {
     int button Stan 1 = WYSOKI; // Stan przycisku to jeden
     int buttonState2 = WYSOKI; // Stan dwóch przycisków
   sample_count = 0; // zresetować kontur liczby dodatków
   suma = 0; // zresetuj sumę 10 dodatków
   podczas gdy (sample_count & lt; NUM_SAMPLES) {
   suma + = odczyt analogowy (A4); // następny pomiar jest dodawany do sumy
   sample_count ++; // jednostka jest dodawana do numeru pomiaru
   sun = sum / 10;} // znajdź średnią wartość z 10 pomiarów
   
   noll = analogowy odczyt (A3) / 2; // moc punktu środkowego
   napięcie zmiennoprzecinkowe = mapa (odczyt analogowy (A3), 0,1023,0,1500) / 100,0;
                                        // Woltomierz zbudowany na wejściu A3
   if (słońce & gt; = noll + i) {countleds = mapa (słońce, noll + i, noll * 2 - 250, 9, 14);
                                        // jeśli otrzymany wynik znajduje się w 9-15 odcinku skali
    tone (6, countleds * 100);}
   if (sun & lt; noll - i) {countleds = map (sun, 116, noll - i, 0, 7);
                                        // jeśli wynikiem jest 0-7 segment skali
    ton (6, Countleds * 50); }
     if (sun & noll & amp; sun = = noll - (i-1)) {countleds = 7;
    noTone (6); } // wysepka wirtualnej ZERO (7 segmentów)
     if (sun & noll & amp; amp & sun = noll + (i-1)) {countleds = 8;
    noTone (6); } // wyspa wirtualnej skali ZERO (8 segmentów)

   
    {lcd.setCursor (Countleds, 0); // ustaw kursor na kolumnie Countleds, linii 0
    lcd.print („\ xff”); // ikona wypełnienia
    lcd.setCursor (0, 1); // przejście do 2 wiersza, kolumna-0
    lcd.print (char (1)); // Wskazanie ikony baterii
    lcd.setCursor (1, 1); // przejście do wskazania napięcia
    druk lcd (napięcie); // napięcie
    lcd.setCursor (7, 0); // 8. kolumna 1. rząd
    if (sun & lt; noll) {lcd.print ("{");} // print
    lcd.setCursor (8, 0); // 9. kolumna 1. rząd
    if (sun & gt; noll) {lcd.print ("}");} // print
    lcd.setCursor (7, 1);
    lcd.print („B =”);
    lcd.setCursor (9, 1); // 11 kolumna 2. rząd
    lcd.print (i); // bariera
    lcd.setCursor (13, 1); // 13 kolumna 2. rząd
    lcd.print (słońce); // wydrukuj średnią wartość wartości ADC
    opóźnienie (100); // czekaj
    
  buttonState1 = digitalRead (button1); // Czytaj stan przycisku 1
  buttonState2 = digitalRead (button2); // Odczyt stanu przycisku 2
  if (buttonState1 == LOW) {i = i + 1; opóźnienie (50);}
                                        // Po naciśnięciu przycisku bariera rośnie o 1. Opóźnienie 50
  if (buttonState2 == LOW) {i = i - 1; opóźnienie (50);}
                                        // Po naciśnięciu przycisku bariera zmniejsza się o 1. Opóźnienie 50
  if (i <1) {i = 1;} // Dolna granica bariery
  if (i> 38) {i = 38;} // Górna granica bariery
 
 lcd.clear ();
    }
}

Nie korzystałem z samochodu. Dwa ostatnie elementy TL074 pozostały bezczynne. Ale są na obwodzie i płycie. Być może będziesz chciał przywrócić je do stanu roboczego nieco później. Wierzę, że osiągnąłem swój cel. Wyświetlacz działa cudownie. Wszystko inne zależy od MD.
9.8
10
10

Dodaj komentarz

    • uśmiechnij sięuśmiecha sięxaxaoknie wiemyahoonea
      szefiezadrapaniegłupiectaktak-takagresywnysekret
      przepraszamtańczyćdance2dance3przebaczeniepomocnapoje
      przestańprzyjacieledobrzegoodgoodgwizdaćomdlećjęzyk
      palićklaskanierakdeklarowaćdrwiącydon-t_mentionpobierz
      ciepłożałujęśmiech 1mdaspotkaniemoskingnegatywne
      niepopcornukaraćczytaćprzestraszyćstraszyszukaj
      drwinadziękujętoto_clueumnikostryzgadzam się
      źlepszczołablack_eyeblum3rumienić sięchwalić sięnuda
      ocenzurowaneuprzejmośćsekret2grozićzwycięstwoyusun_bespectacled
      shokrespektlolprevedwitamykrutoyya_za
      ya_dobryipomocnikne_huliganne_othodifludzakazzamknij
24 komentarz
Autor
Dzięki puteec FU! Poprosiłem o to po raz drugi. Przeszyłem Arduino uno. Problem zniknął po aktualizacji bootloadera. Teraz interesuje, jak dalej konfigurować.
puteec fu
Każde Arduino nadaje się do atmega168, atmega328. O nano to ze złączem USB, jeśli się nie pomyli. Zszyj ide Arduino z przykładów szkicu Blink (migające diody LED na pinie 13, dioda LED jest zainstalowana na płycie). Upewnij się, że używasz właściwego portu, płyta jest poprawnie wybrana, procesor na płycie jest poprawnie wybrany, częstotliwość kwarcu na płycie jest wybrana poprawnie, metoda oprogramowania układowego (μ2) jest wybrana poprawnie.
Nie napotkano błędu.
Utwórz nowy plik w Arduino, skopiuj stąd szkic do nowego i czystego szkicu, a on zadziała.Ale najpierw spraw, aby dioda LED na płycie Arduino migała standardowym przykładem flashowania. Następnie idź dalej.
Kupiłem Arduino p nano tylko na procesorze Atmega328. Przejrzałem kilka filmów i forów ... powiedzieli, że powinien się pojawić ... ale wtedy bummer NIE miga .... daje #include oczekuje "FILENAME" lub . Czy ktoś to spotkał?
Autor
Szkic działa z tą tablicą. Czym dokładnie jest uformowana wtyczka?
Jeśli wlejesz ostatni szkic, nie można zainstalować wszystkich szczegółów związanych z D3.3 i D3.4, a także same one. Na lutownicy jest przerysowanie na ten temat
Anjey888
Witam Ten temat jest bardzo zainteresowany. Chcę złożyć urządzenie. Zrobiłem deskę lutowniczą od razu ... i utknąłem. Ponieważ istnieje duża różnica zdań między płytką a obwodem. Zacząłem porównywać planszę ... to duża różnica. Ale mylić z uprzężą w Arduino.
Proszę o pomoc znających się na rzeczy ludzi.
Autor
Taki sam jak dla innych metali. Głębokość wykrywania zależy od obszaru celu. Im więcej, tym głębiej.
Gość Eugene
Jakie są granice wykrywania obiektów? Złoto, aluminium, miedź.
Gość Alexander
Co teraz zrobić, ponieważ nadal istnieje bariera Schottky'ego?
Autor
Cóż tutaj! Nawet najmniejsza wartość nie wchodzi w rachubę! Dziękuję za wyjaśnienie.
Cytat: puteec_80
Ludzie szybciej i intuicyjnie zrozumieją, o czym mówię.
Możesz nadal pozostawać w tym błędzie ((technicznie piśmienni ludzie będą w niewielkiej stracie.
BARRIER, mąż.
1. Przeszkoda (rodzaj ściany, belka poprzeczna) przeszkadzająca.
2. Ogrodzenie, ogrodzenie.

PRÓG, próg, mąż.
1. W nauce i technologii próg nazywany jest najmniejszą wartością, stopniem manifestacji czegoś.
Próg czułości urządzenia. | Próg słuchu. | Próg bólu. | Czujnik jest wyzwalany po przekroczeniu ustawionego progu temperatury.
uśmiechnij się
Autor
Pozostańmy przy naszym. Napiszę „zwiększenie bariery o jedną jednostkę” i „czułość odbiornika wynosiła 5 μV”. I piszesz „Zwiększenie progu działania o jedną jednostkę” i „próg czułości odbiornika ..” Ponadto ludzie szybciej i intuicyjnie zrozumieją, o czym mówię.
I wyjaśniam w tym przykładzie. Nie ma ściśle określonego progu, ponieważ nie ma wyraźnej skali odniesienia. Istnieje pewien rodzaj pływającego pasma odcięcia od pływającego sygnału. Wydaje mi się więc, że definicja bariery jest znacznie bardziej odpowiednia dla tego „pływającego” paska niż dla progu.
Generalnie bezsensowny i głupi argument. Czy masz jakieś pytania?
Cytat: puteec_80
Jakie są ich dolne i górne progi?
Może znaczenie przetłumaczonych słów nie pasuje lub nieznacznie nie pasuje. Ale doskonale opisują proces i stopniowo zapadają w slang.
Dokładnie jaki jest próg. Próg odpowiedzi jest w twoim przypadku. Proszę wyjaśnić, w jaki sposób „bariera” opisuje proces.
Jeśli chodzi o dołączanie do slangu - teraz istnieje wiele różnych nieporozumień. ((
Autor
W tym przypadku nadal używam słowa „bariera”, ponieważ jest to bariera ustawiona w tekście programu, ale bez wchodzenia w jego zakres sygnał jest postrzegany przez mikrokontroler jako przydatny. I to jest bariera, ponieważ Ma dwie wartości - górną i dolną granicę docierania, tj. operacja odbywa się powyżej „górnej” i poniżej „dolnej” granicy bariery w skali ADC. Jednak wiesz lepiej. Jakie są ich dolne i górne progi?
Może znaczenie przetłumaczonych słów nie pasuje lub nieznacznie nie pasuje. Ale doskonale opisują proces i stopniowo zapadają w slang.
A propos. Wrażliwość i bariera to zupełnie różne rzeczy.
TakPrzecinają się. Ale nie więcej.
Cytat: puteec_80
W zagranicznej MD menu mówi „Barier”.

Mogę cię zaskoczyć, ale wiele angielskich słów, które wyglądają podobnie do naszych, mają inne znaczenie, czasem bliskie, a czasem nie. Wyszukaj słowa „fałszywi tłumacze znajomych”.
Teraz w zasadzie. W języku rosyjskim techniczne dokumentacja nie po prostu nie ma takiego wyrażenia „bariera wrażliwości” - i to wszystko! Istnieje „próg wrażliwości”, w niektórych przypadkach można powiedzieć „granicę wrażliwości”, ale nie „barierę wrażliwości”. Być może jest używany w innych gałęziach wiedzy, ale nie w elektronice.
Autor
Oznacza to, że wszyscy zagraniczni inżynierowie przeskakują kij na drodze. W zagranicznej MD menu mówi „Barier”. Towarzyszu Ivan, zakochujecie się w moich oczach z takim drobiazgowym draniem! Gdzie są twoje uwagi na temat zalet? Po czym musisz klaskać dłońmi w czoło? Często mnie rozpieszczałeś ukarać
Różnica jest znacząca: próg jest terminem technicznym, barierą jest „kij w poprzek drogi”.
Autor
Może Ale nie widzę różnicy.
Może nie „bariera”, ale próg? ;)
Autor
Schemat nie pokazuje przycisków regulacji bariery. Są one podłączone do styków 7 i 8 Arduino. Każdy podciągnięty z oporem 10k na plus, zamyka się po naciśnięciu masy.
Autor
void loop () {
int button Stan 1 = WYSOKI; // Stan przycisku to jeden
int buttonState2 = WYSOKI; // Stan dwóch przycisków

int pot = analogRead (A4); // filtr do szybkiej zmiany sygnału
znak = znak * (1-K) + garnek * K;

noll = noll * (1-L) + znak * L; // filtr sygnału długoterminowego
// Woltomierz zbudowany na wejściu A3
napięcie zmiennoprzecinkowe = mapa (odczyt analogowy (A3), 0,1023,0,1500) / 100,0;

if (znak> = noll + i) {countleds = mapa (znak, noll + i, 1023, 9, 14);
// jeśli otrzymany wynik znajduje się w 9-15 odcinku skali
tone (6, countleds * 100);}
if (znak <= noll - i) {countleds = mapa (znak, 0, noll - i, 0, 7);
// jeśli wynikiem jest 0-7 segment skali
ton (6, Countleds * 50); }
if (sign = noll - (i-1)) {countleds = 7;
noTone (6); } // wysepka wirtualnej ZERO (7 segmentów)
if (sign> noll && sign <= noll + (i-1)) {countleds = 8;
noTone (6); } // wyspa wirtualnej skali ZERO (8 segmentów)


{lcd.setCursor (Countleds, 0); // ustaw kursor na kolumnie Countleds, linii 0
lcd.print („\ xff”); // ikona wypełnienia
lcd.setCursor (0, 1); // przejście do 2 wiersza, kolumna-0
lcd.print (char (1)); // Wskazanie ikony baterii
lcd.setCursor (1, 1); // przejście do wskazania napięcia
druk lcd (napięcie); // napięcie
lcd.setCursor (7, 0); // 8. kolumna 1. rząd
if (sign lcd.setCursor (8, 0); // 9. kolumna 1. rząd
if (sign> noll) {lcd.print ("}");} // print
lcd.setCursor (7, 1);
lcd.print („B =”);
lcd.setCursor (9, 1); // 11 kolumna 2. rząd
lcd.print (i); // bariera
lcd.setCursor (13, 1); // 13 kolumna 2. rząd
lcd.print (znak); // wydrukuj średnią wartość wartości ADC
opóźnienie (10); // czekaj

buttonState1 = digitalRead (button1); // Czytaj stan przycisku 1
buttonState2 = digitalRead (button2); // Odczyt stanu przycisku 2
if (buttonState1 == LOW) {i = i + 1; opóźnienie (50);}
// Po naciśnięciu przycisku bariera rośnie o 1. Opóźnienie 50
if (buttonState2 == LOW) {i = i - 1; opóźnienie (50);}
// Po naciśnięciu przycisku bariera zmniejsza się o 1. Opóźnienie 50
if (i <1) {i = 1;} // Dolna granica bariery
if (i> 38) {i = 38;} // Górna granica bariery

lcd.clear ();
}
}
Autor
Nowy szkic. Algorytm wykrywania użytecznego sygnału został zmieniony. Schemat jest uproszczony, nie ma elementów D3.4 i D3.3 ze wszystkimi ich powiązaniami. Jeśli weźmiesz swój własny sygnet, wszystkie te szczegóły po prostu nie będą mogły zostać zainstalowane. Większa wrażliwość. Bez fałszywych trafień.
Szkic:

// Wejście analogowe A3 dla woltomierza, ustawiane potencjometrem R32.
// Wejście analogowe A4 dla sygnału Ustaw z minimalnym sygnałem na D3.2
// rezystor R40 dla odczytów ADC około 510.
// 6- zakończenie zook
// 9 - częstotliwość wyjściowa 31200 Hz
#include
LCD ciekłokrystaliczny (12, 11, 5, 4, 3, 2);

bajt z1 [8] = {// ikona baterii
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // zmienna do przechowywania wartości poziomu skali

napięcie zmiennoprzecinkowe = 0,0; // obliczone napięcie
const int button1 = 7; // bariera plus przycisk
const int button2 = 8; // przycisk minus bariera
int i = 5; // bariera
const float K = 0,1; // filtrowanie śledzenia szybkich zmian (współczynnik. im mniejszy, tym silniejszy)
const float L = 0,07; // filtrowanie śledzenia zmian przez długi czas
znak zmiennoprzecinkowy = 0; // filtr
float noll = 0;

void setup () {
lcd.begin (16, 2); // wyświetlanie inicjalizacji
lcd.createChar (1, z1);
pinMode (9, WYJŚCIE);
pinMode (6, WYJŚCIE);
TCCR1A = TCCR1A i 0xe0 | 2;
TCCR1B = TCCR1B i 0xe0 | 0x09;
analogWrite (9, 126); // na pinie 10 PWM = 50% f = 31200Hz
// w rzeczywistości dla PWM = 50% należy ustawić co najmniej 220 wypełnień, zgodnie z oscyloskopem
// duin nie może sobie z tym poradzić. To nie jest krytyczne.
}
Autor
Ci, którzy będą oglądać szkic. Znaki> = i <= zostały zastąpione dziwnymi kombinacjami & gt i & lt. Dlaczego nie wiem Kiedy debugowanie było normalne.

Radzimy przeczytać:

Podaj go do smartfona ...