» electronică » Detectoare de metale »Detector de metale pe Arduino Pro Mini. Prelucrarea adâncimilor de la Kolokolov-Shchedrin conform principiului „Transmisiei”

Detector de metale pe Arduino Pro Mini. Prelucrarea adâncimilor de la Kolokolov-Shchedrin conform principiului „Transmisiei”


Reciclarea schemei de ape profunde Kolokolov-Shchedrin Diferențe față de schema inițială:
1. Nu există oscilator de cristal pe cipul k561 .. cip și cuarț de 32 kHz. Semnalul de 32 kHz oferă Arduino Pro Mini.
2. Circuitele de notificare sonoră pe mai multe microcircuite din seria 561 sunt, de asemenea, absente - vocile sunt și obiectivele, Arduino (și trebuie să spun, voci excelente, în comparație cu circuitul autorului).
3. Alimentat cu tensiune unipolară 12v (baterie plumb-acid).
4. Reglați sensibilitatea cu ajutorul butoanelor. Cu scara ADC de la 0 la 1023, pragul de răspuns este reglabil de la 1 la 38 (valoarea poate fi ușor modificată în schiță).


Detector de metale pe Arduino Pro Mini. Prelucrarea adâncimilor de la Kolokolov-Shchedrin conform principiului „Transmisiei”


Cel mai important, am vrut să arăt în acest articol că este posibil să asamblați MD-uri pe Arduino nu inferioare originalului în sensibilitate (acest lucru a rezultat, deoarece originalele circuitului original au fost colectate de ordinul a 10 bucăți, deci există material pentru comparație). Circuitul original:


Când am început să lucrez cu Arduino, am fost atât de entuziasmat încât am crezut că pot găsi și asambla orice circuit de detectoare de metale de pe Internet pe Arduino, încât puteam găsi cu ușurință în vasta groapă de gunoi. În principiu, s-a dovedit astfel, dar circuitele se bazau pe un contor de frecvență, ceea ce nu permitea obținerea unui interval cu adevărat bun. Câteva jucării pentru copii și un test al pixului + încearcă să câștige bani pentru începători. Originalul acestui MD este un adevărat pas de lucru care vă permite să găsiți obiecte mari la o distanță de 2m (consultați cartea Kolokolov-Shchedrin în Google). Nu există statistici cu privire la md transformat. Sper că apare cu sprijinul fanilor MD și Arduino. Schema a funcționat cu Arduino Uno și Arduino Pro Mini.

Mai departe, linkul este prezentat procesul nașterii acestui MD pe site-ul de fier de lipit, care a durat mai mult de un an și a împins autorul să studieze programul duin. Poate că schița va părea nenorocită cu cineva - Voi accepta cu plăcere FIXURILE tale.




În momentul de față, există o schiță care vă permite să reglați bariera de sensibilitate (pinul 7 douins +1 la barieră, pinul 8 -1 la barieră). .
Arduino despre mini 5v, 16MHz, ATmega168 și display-ul le-a folosit. Alături de scară se află adaptorul Mini SD


După cum sa spus deja, 1602 costă 86 de ruble, ProMini - 82 de ruble. Dacă doriți, puteți lua, în general, un ATmega168 gol, dezvolta o placă pentru acesta și completați schița direct în ea.Și, de exemplu, am instalat mama-tată pe placa MD folosind conectorul. Fotografia prezintă dopul cu 6 pini al lui Arduino, prin care s-au turnat schițe direct pe tablă.

Schiță-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino

// Intrare analogică A3 pentru voltmetru
// Intrare analogică A4 pentru semnal
// 6- concluzia zook-ului
// 9 - frecvență de ieșire 31200 Hz
#include
Cristal lichid lcd (12, 11, 5, 4, 3, 2);
                                       
  byte z1 [8] = {// pictograma bateriei
  0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
 
 int countleds = 0; // variabilă pentru a stoca valoarea nivelului scării
 int voltag = 0; // variabilă pentru a stoca valoarea tensiunii
 int noll = 0; // variabilă pentru a stoca valoarea punctului mediu
   #define NUM_SAMPLES 10 // 10 probe analogice pentru citit în 1 secundă
   suma sumă = 0; // suma probelor prelevate
   int soare = 0; // același, dar împărțit la 10
   unsigned char sample_count = 0; // numărul curent al eșantionului cu
   tensiune float = 0,0; // tensiunea calculată
   butonul const int1 = 7; // butonul de barieră plus
   butonul const int2 = 8; // buton barieră-minus
   int i = 5; // barieră
   
void setup () {
     lcd.begin (16, 2); // inițializare afișare
     lcd.setCursor (1, 0);
     lcd.setCursor (10, 1);
     lcd.print ("Rx-Tx");
     întârziere (3000);
     lcd.clear ();
     
     TCCR1A = TCCR1A & amp; 0xe0 | 2;
     TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
     analogWrite (9, 126); // la pinul 10 PWM = 50% f = 31200Hz
     
     lcd.createChar (1, z1);
     }
     
void loop () {
     buton intState1 = HIGH; // Starea butonului este una
     buton intState2 = HIGH; // Stare cu două butoane
   sample_count = 0; // resetați conturul numărului de completări
   suma = 0; // resetați suma de 10 completări
   while (sample_count & lt; NUM_SAMPLES) {
   suma + = analogRead (A4); // următoarea măsurare este adăugată la sumă
   sample_count ++; // unitatea este adăugată la numărul de măsurare
   sun = sumă / 10;} // găsiți valoarea medie din 10 măsurători
   
   noll = analogRead (A3) / 2; // puterea punctului mijlociu
   float voltage = hartă (analogRead (A3), 0,1023,0,1500) / 100,0;
                                        // Voltmetru construit la intrarea A3
   if (sun & gt; = noll + i) {countleds = hartă (soare, noll + i, noll * 2 - 250, 9, 14);
                                        // dacă rezultatul primit se află pe segmentul 9-15 al scării
    ton (6, numărătoare * 100);}
   if (sun & lt; = noll - i) {countleds = hartă (soare, 116, noll - i, 0, 7);
                                        // dacă rezultatul rezultat este 0-7 segment al scării
    ton (6, numărate * 50); }
     if (sun & lt; noll & amp; sun & gt; = noll - (i-1)) {countleds = 7;
    noTone (6); } // insula virtual ZERO (7 segmente)
     if (sun & gt; noll & amp; sun & lt; = noll + (i-1)) {countleds = 8;
    noTone (6); } // insula scării virtuale ZERO (8 segmente)

   
    {lcd.setCursor (numărate, 0); // setați cursorul la coloana numărată, linia 0
    lcd.print ("\ xff"); // pictograma umplută
    lcd.setCursor (0, 1); // treceți la 2 rânduri, coloana-0
    lcd.print (char (1)); // Indicația pictogramei bateriei
    lcd.setCursor (1, 1); // treceți la indicarea tensiunii
    lcd.print (tensiune); // tensiune
    lcd.setCursor (7, 0); // a 8-a coloană primul rând
    if (sun & lt; noll) {lcd.print ("{");} // print
    lcd.setCursor (8, 0); // a 9-a coloană primul rând
    if (sun & gt; noll) {lcd.print ("}");} // print
    lcd.setCursor (7, 1);
    lcd.print ("B =");
    lcd.setCursor (9, 1); // 11 coloana al doilea rând
    lcd.print (i); // barieră
    lcd.setCursor (13, 1); // 13a coloană al doilea rând
    lcd.print (soare); // imprimați valoarea medie a valorii ADC
    întârziere (100); // așteptați
    
  buttonState1 = digitalRead (buton1); // Citiți starea butonului 1
  buttonState2 = digitalRead (buton2); // Citiți butonul 2 de stare
  if (butonState1 == LOW) {i = i + 1; întârziere (50);}
                                        // Când este apăsat butonul, bariera crește cu 1. Întârziere 50
  if (butonState2 == LOW) {i = i - 1; întârziere (50);}
                                        // Când este apăsat butonul, bariera scade cu 1. Întârzierea 50
  if (i & lt; 1) {i = 1;} // Limita inferioară a barierei
  if (i & gt; 38) {i = 38;} // Limita superioară a barierei
 
 lcd.clear ();
    }
}

Nu am folosit mașina, ultimele două elemente ale TL074 au fost lăsate la ralanti. Dar pe circuit și bord sunt. Poate doriți să le aduceți în condiții de lucru puțin mai târziu. Cred că mi-am atins obiectivul. Unitatea de afișare funcționează de minune. Orice altceva depinde de MD.
9.8
10
10

Adaugă un comentariu

    • zâmbetzâmbetexaxabinedontknowYahooNea
      șefzgârieturăpăcălidada-daagresivsecret
      scuzedansdance2dance3iertareajutorbăuturi
      oprireprietenibungoodgoodfluiersincopălimbă
      fumaplauzeCrayvestimbatjocoritorDon-t_mentiondescărcare
      căldurămânioslaugh1mdaîntâlniremoskingnegativ
      not_ifloricele de porumbpedepsicititsperiasperiecăutare
      batjocurăthank_youacestto_clueUmnikacutconveni
      răubeeeblack_eyeblum3roșilăudăroșenieplictiseală
      cenzuratpleasantrysecret2amenințavictorieyusun_bespectacled
      ShokRespektlolprevedbun venitKrutoyya_za
      ya_dobryiajutorne_huliganne_othodifludinterdicțieînchide
24 comentarii
Autorul
Multumesc puteec FU! Am solicitat-o ​​din a doua oară. Am cusut prin Arduino uno. Problema a dispărut după actualizarea bootloader-ului. Acum interesează modul de configurare în continuare.
puteec fu
Orice Arduino este potrivit pentru atmega168, atmega328. Despre nano asta cu un conector USB dacă nu greșești. Coaseți în ideea Arduino din exemplele schiței Blink (LED-uri intermitente pe pinul 13, LED-ul este instalat pe placă). Asigurați-vă că utilizați portul corect, placa este selectată corect, procesorul de pe placă este selectat corect, frecvența de cuarț de pe placă este selectată corect, metoda firmware-ului (μ2) este selectată corect.
Eroare care nu a fost întâlnită.
Creați un nou fișier în Arduino, copiați schița de aici pe o schiță nouă și curată și va funcționa.Dar mai întâi, faceți LED-ul de pe placa Arduino să clipească cu un exemplu de intermitere standard. Apoi mergeți mai departe.
Am cumpărat Arduino p nano doar de pe procesorul Atmega328. Am revizuit o grămadă de videoclipuri și forumuri ... au spus că ar trebui să apară .... dar atunci bummerul NU clipește .... dă #include se așteaptă "FILENAME" sau . A întâlnit cineva asta?
Autorul
O schiță funcționează cu această placă. În ce anume este format dopul?
Dacă turnați ultima schiță, atunci toate detaliile referitoare la D3.3 și D3.4, precum și ele însele nu pot fi instalate. Pe fierul de lipit există o redirecționare pe acest subiect
Anjey888
Alo Acest subiect este foarte interesat. Vreau să asamblez dispozitivul. Am făcut o placă de lipit din mers ... apoi m-am blocat. Întrucât există multe dezacorduri între placă și circuit. A început să compari bordul tău ... asta este o mare diferență. Dar confuz cu harnașamentul de la Arduino.
Cer ajutorul oamenilor cunoscuți.
Autorul
La fel ca și pentru alte metale. Adâncimea detectării depinde de zona vizată. Cu cât, cu atât mai profund.
Invitat Eugene
Care sunt limitele pentru detectarea obiectelor? Aur, aluminiu, cupru.
Musafir Alexandru
Ce să facem acum, deoarece există încă o barieră Schottky?
Autorul
Ei bine aici! Despre chiar și cea mai mică valoare este în afara problemei! Mulțumesc pentru clarificări.
Citat: puteec_80
Și oamenii vor înțelege mai rapid și mai intuitiv despre ce vorbesc.
Puteți continua să rămâneți în această eroare. ((Tehnicienii vor slabi ușor).
BARRIER, soț.
1. Un obstacol (un fel de perete, o traversă) așezat în drum.
2. Gard, gard.

THRESHOLD, prag, soț.
1. În știință și tehnologie, pragul se numește cea mai mică valoare, gradul de manifestare a ceva.
Pragul de sensibilitate al dispozitivului. | Pragul auditiv. | Pragul durerii. | Senzorul este declanșat la depășirea pragului de temperatură setat.
zâmbet
Autorul
Să rămânem cu ai noștri. Voi scrie „creșterea barierei cu o unitate” și „sensibilitatea receptorului a fost de 5 μV”. Și scrieți „Creșterea pragului de funcționare cu o unitate” și „pragul de sensibilitate al receptorului ..” Mai mult, oamenii vor înțelege mai rapid și mai intuitiv despre ce vorbesc.
Și explic în acest exemplu. Nu există un prag strict vorbind, deoarece nu există o scară de referință clară. Există un fel de bandă plutitoare decupată dintr-un semnal plutitor. Deci, mi se pare că definiția unei bariere este mult mai potrivită pentru această bandă „plutitoare” decât pentru un prag.
Argument în general inutil și prost. Aveți întrebări?
Citat: puteec_80
Care sunt pragurile lor inferioare și superioare?
Poate că semnificațiile cuvintelor traduse nu se potrivesc sau ușor nu se potrivesc. Dar ei descriu perfect procesul și intră treptat în argou.
Exact care este pragul. Pragul de răspuns este în cazul dumneavoastră. Vă rugăm să explicați modul în care „bariera” descrie procesul.
În ceea ce privește aderarea la argou, acum există multe tipuri de neînțelegeri acolo (((
Autorul
În acest caz, am încă tendința să folosesc cuvântul „barieră”, deoarece este bariera care este setată în textul programului, doar că nu intră în raza sa, semnalul este perceput de microcontroler ca fiind util. Și este bariera pentru că are două valori - pragul superior și inferior al rulării operațiunea are loc deasupra „superioară” și sub bordura „inferioară” a barierei pe scara ADC. Cu toate acestea, știi mai bine. Care sunt pragurile lor inferioare și superioare?
Poate că semnificațiile cuvintelor traduse nu se potrivesc sau ușor nu se potrivesc. Dar ei descriu perfect procesul și intră treptat în argou.
Apropo. Sensibilitatea și bariera sunt lucruri complet diferite.
Da.Se intersectează. Dar nu mai mult.
Citat: puteec_80
În MD străin, meniul spune „Barier”.

S-ar putea să te surprindă, dar multe cuvinte în engleză care arată similar cu ale noastre au un sens diferit, uneori apropiate, alteori nu. Căutați cuvintele „prieteni falsi traducători”.
Acum, în esență. În rusă tehnic documentație nu pur și simplu nu există o astfel de expresie „barieră a sensibilității” - și asta este! Există un „prag de sensibilitate”, în unele cazuri se poate spune „limită de sensibilitate”, dar nu „barieră de sensibilitate”. Poate că în unele alte ramuri ale cunoașterii este folosit, dar nu și în electronică.
Autorul
Ei bine, înseamnă că toți inginerii străini sar peste un băț pe drum. În MD străin, meniul spune „Barier”. Tovarășule Ivan, îmi cadeți în ochi cu așa de micuță! Unde sunt comentariile tale pe fond? După care trebuie să vă aplecați mâinile pe frunte? Mă stricai des pedepsi
Diferența este semnificativă: pragul este un termen tehnic, bariera este un „băț peste drum”.
Autorul
Poate. Dar nu văd diferența.
Poate nu o „barieră”, ci un prag? ;)
Autorul
Diagrama nu arată butoanele de reglare a barierei. Acestea sunt conectate la pinii 7 și 8 ai Arduino. Fiecare tras cu o rezistență de 10k la plus, se închide când apăsați masa.
Autorul
void loop () {
buton intState1 = HIGH; // Starea butonului este una
buton intState2 = HIGH; // Stare cu două butoane

int pot = analogRead (A4); // filtru pentru schimbarea rapidă a semnalului
semn = semn * (1-K) + pot * K;

noll = noll * (1-L) + semn * L; // filtru de semnal pe termen lung
// Voltmetru construit la intrarea A3
float voltage = hartă (analogRead (A3), 0,1023,0,1500) / 100,0;

if (semn> = noll + i) {countleds = hartă (semn, noll + i, 1023, 9, 14);
// dacă rezultatul primit se află pe segmentul 9-15 al scării
ton (6, numărătoare * 100);}
if (semn <= noll - i) {countleds = hartă (semn, 0, noll - i, 0, 7);
// dacă rezultatul rezultat este 0-7 segment al scării
ton (6, numărate * 50); }
if (semn = noll - (i-1)) {countleds = 7;
noTone (6); } // insula virtual ZERO (7 segmente)
if (semn> noll && sign <= noll + (i-1)) {countleds = 8;
noTone (6); } // insula scării virtuale ZERO (8 segmente)


{lcd.setCursor (numărate, 0); // setați cursorul la coloana numărată, linia 0
lcd.print ("\ xff"); // pictograma umplută
lcd.setCursor (0, 1); // treceți la 2 rânduri, coloana-0
lcd.print (char (1)); // Indicația pictogramei bateriei
lcd.setCursor (1, 1); // treceți la indicarea tensiunii
lcd.print (tensiune); // tensiune
lcd.setCursor (7, 0); // a 8-a coloană primul rând
if (semn lcd.setCursor (8, 0); // a 9-a coloană primul rând
if (semn> noll) {lcd.print ("}");} // print
lcd.setCursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // 11 coloana al doilea rând
lcd.print (i); // barieră
lcd.setCursor (13, 1); // 13a coloană al doilea rând
lcd.print (semn); // imprimați valoarea medie a valorii ADC
întârziere (10); // așteptați

buttonState1 = digitalRead (buton1); // Citiți starea butonului 1
buttonState2 = digitalRead (buton2); // Citiți butonul 2 de stare
if (butonState1 == LOW) {i = i + 1; întârziere (50);}
// Când este apăsat butonul, bariera crește cu 1. Întârziere 50
if (butonState2 == LOW) {i = i - 1; întârziere (50);}
// Când este apăsat butonul, bariera scade cu 1. Întârzierea 50
if (i <1) {i = 1;} // Limita inferioară a barierei
if (i> 38) {i = 38;} // Limita superioară a barierei

lcd.clear ();
}
}
Autorul
Schiță nouă. Algoritmul pentru detectarea semnalului util a fost schimbat. Schema este simplificată, nu există elemente D3.4 și D3.3 cu toate legăturile lor. Dacă luați propriul semn, atunci toate aceste detalii nu pot fi instalate pur și simplu. Mai multă sensibilitate. Fără falsuri pozitive.
schiţă:

// Intrare analogică A3 pentru un voltmetru. Setabil prin potențiometru R32.
// Intrare analogică A4 pentru semnal.Setat cu semnalul minim pe D3.2
// rezistorul R40 pentru citirile ADC de aproximativ 510.
// 6- concluzia zook-ului
// 9 - frecvență de ieșire 31200 Hz
#include
Cristal lichid lcd (12, 11, 5, 4, 3, 2);

byte z1 [8] = {// pictograma bateriei
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // variabilă pentru a stoca valoarea nivelului scării

tensiune float = 0,0; // tensiunea calculată
butonul const int1 = 7; // butonul de barieră plus
butonul const int2 = 8; // buton barieră-minus
int i = 5; // barieră
const float K = 0,1; // modificarea rapidă a filtrului (coeficientul. cu cât este mai mic cu atât este mai puternic)
const float L = 0,07; // modificările de urmărire a filtrelor de mai mult timp
semn float = 0; // filtra
float noll = 0;

void setup () {
lcd.begin (16, 2); // inițializare afișare
lcd.createChar (1, z1);
pinMode (9, OUTPUT);
pinMode (6, OUTPUT);
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x09;
analogWrite (9, 126); // la pinul 10 PWM = 50% f = 31200Hz
// de fapt, pentru PWM = 50%, trebuie să setați cel puțin 220 de umplere, conform osciloscopului
// duinul nu se poate descurca. Acest lucru nu este critic.
}
Autorul
Cei care vor urmări schița. Semnele> = și <= au fost înlocuite cu combinații ciudate de & gt și & lt. De ce nu știu. Când depanarea era normală.

Vă sfătuim să citiți:

Înmânează-l pentru smartphone ...