» elektronikk » Metalldetektorer »Metaldetektor på Arduino Pro Mini. Bearbeiding av dypet i Kolokolov-Shchedrin i henhold til prinsippet om "overføring"

Metalldetektor på Arduino Pro Mini. Bearbeiding av dypet i Kolokolov-Shchedrin i henhold til prinsippet om "overføring"


Gjenvinning av dypvannsordningen Kolokolov-Shchedrin. Forskjeller fra det opprinnelige opplegget:
1. Det er INGEN krystalloscillator på k561 .. -brikken og 32 kHz kvarts. 32 kHz signalet gir Arduino Pro Mini.
2. Lydvarslingskretser på flere mikrokretser i 561-serien er heller ikke til stede, Arduino gir også uttrykk for målet (Og jeg må si, det er utmerket stemmer, sammenlignet med forfatterens skjema).
3. Drevet av unipolar spenning 12v (bly-syre batteri).
4. Juster følsomheten med knappene. Med ADC-skalaen fra 0 til 1023 er responsgrensen justerbar fra 1 til 38 (verdien kan enkelt endres i skissen).


Metalldetektor på Arduino Pro Mini. Bearbeiding av dypet i Kolokolov-Shchedrin i henhold til prinsippet om


Viktigst av alt, ønsket jeg å vise i denne artikkelen at det er mulig å sette sammen MD-er på Arduino som ikke er dårligere enn originalen i følsomhet (dette fungerte, fordi originalene til den opprinnelige kretsen ble samlet i størrelsesorden 10 stykker, så det er materiale til sammenligning). Opprinnelig krets:


Da jeg først begynte å jobbe med Arduino, var jeg så begeistret at jeg trodde jeg kunne finne og sette sammen alle metalldetektorkretser fra Internett på Arduino som jeg lett kunne finne i den enorme søppeldyngden. I prinsippet viste det seg slik, men kretsene var basert på en frekvensdisk, som ikke tillot å oppnå et virkelig bra område. Noen barneleker og en test av pennen + forsøk på å tjene penger på nybegynnere. Originalen til denne MD er en ekte arbeidshest som lar deg finne store gjenstander i en avstand på 2 m (se Kolokolov-Shchedrin-boken på Google). Det er ingen statistikk om den transformerte md. Jeg håper hun vises med støtte fra fans av MD og Arduino. Opplegget arbeidet med Arduino Uno og Arduino Pro Mini.

Videre på lenken er lagt ut prosessen med fødselen til denne MD på nettstedet til loddebolt, som varte i mer enn ett år og presset forfatteren til å studere programmeringsduin. Kanskje vil skissen virke elendig for noen - jeg vil gjerne akseptere dine FIXES.




For øyeblikket er det en skisse som lar deg justere følsomhetsbarrieren (pinne 7 tviler +1 til barrieren, pinne 8 -1 til barrieren). .
Arduino om mini 5v, 16MHz, ATmega168 og skjermen brukte disse. Ved siden av skalaen er Mini SD-adapter


Som allerede sagt 1602 koster 86 rubler, ProMini - 82 rubler. Hvis du ønsker det, kan du vanligvis ta en naken ATmega168, utvikle et brett for det og fylle skissen direkte inn i den.Og så for eksempel installerte jeg mamma-pappa på MD-brettet ved hjelp av kontakten. Bildet viser Arduinos 6-pinners plugg, gjennom hvilken skisser ble hellet direkte på brettet.

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

// A3 analog inngang for voltmeter
// A4 analog inngang for signal
// 6- konklusjonen av dyrehagen
// 9 - utgangsfrekvens 31200 Hz
#include
Liquid Crystal lcd (12, 11, 5, 4, 3, 2);
                                       
  byte z1 [8] = {// batteriikon
  0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
 
 int countleds = 0; // variabel for å lagre skalaenivåverdien
 int voltag = 0; // variabel for å lagre spenningsverdien
 int noll = 0; // variabel for å lagre midtpunktverdien
   #definer NUM_SAMPLES 10 // 10 analoge prøver å lese på 1 sekund
   int sum = 0; // summen av prøvene som er tatt
   int sol = 0; // samme, men delt med 10
   usignert røye sample_count = 0; // nåværende prøvenummer med
   float spenning = 0,0; // beregnet spenning
   const int-knapp1 = 7; // barriere pluss-knapp
   const int-knapp2 = 8; // barriere-minus-knapp
   int i = 5; // barriere
   
ugyldig oppsett () {
     lcd.begin (16, 2); // vis initialisering
     lcd.set Markør (1, 0);
     lcd.set markør (10, 1);
     lcd.print ("Rx-Tx");
     forsinkelse (3000);
     lcd.clear ();
     
     TCCR1A = TCCR1A & amp; 0xe0 | 2;
     TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
     analogWrite (9, 126); // ved pinne 10 PWM = 50% f = 31200Hz
     
     lcd.createChar (1, z1);
     }
     
void loop () {
     int-knappState1 = HØY; // Knappens tilstand er én
     int-knappState2 = HØY; // To-knappstilstand
   sample_count = 0; // tilbakestille konturen til antall tillegg
   sum = 0; // tilbakestille summen av 10 tillegg
   mens (sample_count & lt; NUM_SAMPLES) {
   sum + = analog Les (A4); // neste måling legges til summen
   sample_count ++; // enheten legges til måleenummeret
   sun = sum / 10;} // Finn gjennomsnittsverdien fra 10 målinger
   
   noll = analog Les (A3) / 2; // midtpunktkraft
   float spenning = kart (analogRead (A3), 0,1023,0,1500) /100,0;
                                        // Voltmeter bygget ved inngang A3
   if (sol & gt; = noll + i) {countleds = kart (sol, noll + i, noll * 2 - 250, 9, 14);
                                        // hvis det mottatte resultatet er på det 9.-15. segmentet av skalaen
    tone (6, tellede * 100);}
   if (sol & lt; = noll - i) {countleds = kart (sol, 116, noll - i, 0, 7);
                                        // hvis det resulterende resultatet er 0-7 segment av skalaen
    tone (6, tellede * 50); }
     if (sun & lt; noll & amp; & amp; sun & gt; = noll - (i-1)) {countleds = 7;
    noTone (6); } // holmen av virtuell NULL (7 segment)
     if (sun & gt; noll & amp; & amp; sun & lt; = noll + (i-1)) {countleds = 8;
    noTone (6); } // øy av virtuell NUL-skala (8 segment)

   
    {lcd.setCursor (countleds, 0); // sett markøren til talt kolonne, linje 0
    lcd.print ("\ xff"); // fylt ikon
    lcd.set Markør (0, 1); // gå til 2 rad, kolonne-0
    lcd.print (char (1)); // Indikasjon av batteriikon
    lcd.set markør (1, 1); // gå til spenningsindikasjon
    lcd.print (spenning); // spenning
    lcd.set Markør (7, 0); // 8. kolonne 1. rad
    if (sun & lt; noll) {lcd.print ("{");} // print
    lcd.set Markør (8, 0); // 9. kolonne 1. rad
    if (sol & gt; noll) {lcd.print ("}");} // skriv ut
    lcd.set markør (7, 1);
    lcd.print ("B =");
    lcd.set Markør (9, 1); // 11 kolonne 2. rad
    lcd.print (i); // barriere
    lcd.set markør (13, 1); // 13. kolonne 2. rad
    lcd.print (sol); // skriv ut gjennomsnittsverdien på ADC-verdien
    forsinkelse (100); // vent
    
  buttonState1 = digitalRead (knapp1); // Les knapp 1-status
  buttonState2 = digitalRead (knapp2); // Les knappen 2-tilstand
  if (buttonState1 == LOW) {i = i + 1; forsinkelse (50);}
                                        // Når du trykker på knappen, vokser barrieren med 1. Forsinkelse 50
  if (buttonState2 == LAV) {i = i - 1; forsinkelse (50);}
                                        // Når du trykker på knappen, reduseres barrieren med 1. Forsinkelse 50
  if (i & lt; 1) {i = 1;} // Nedre grense for barrieren
  if (i & gt; 38) {i = 38;} // Barrens øvre grense
 
 lcd.clear ();
    }
}

Jeg brukte ikke bilen. De to siste elementene i TL074 ble inaktive. Men på kretsen og brettet er de. Det kan være lurt å ta dem i arbeidslivet litt senere. Jeg tror at jeg har nådd målet mitt. Displayenheten fungerer fantastisk. Alt annet avhenger av MD.
9.8
10
10

Legg til en kommentar

    • smilersmilerxaxaokdontknowyahoonea
      sjefscratchlurejaja-jaaggressivhemmelighet
      beklagerdansedance2dance3benådninghjelpdrikkevarer
      stoppvennergodgoodgoodfløytebesvimelsetunge
      røykklappingCrayerklærehånligdon-t_mentionnedlasting
      heteirefullaugh1MDAmøtemoskingnegative
      not_ipopcornstraffeleseskremmeskremmersøk
      spydighetthank_youdetteto_clueumnikakuttenig
      dårligbeeeblack_eyeblum3rødmeskrytekjedsomhet
      sensurertpleasantrysecret2trueseieryusun_bespectacled
      ShokRespektlolPrevedvelkommenKrutoyya_za
      ya_dobryihelperne_huliganne_othodiFLUDforbudnær
24 kommentarer
Forfatteren
Takk puteec FU! Jeg ba om det fra andre gang. Jeg sydd gjennom Arduino uno. Problemet forsvant etter oppdatering av bootloader. Interesser nå hvordan du konfigurerer videre.
puteec fu
Hvilken som helst Arduino er egnet for atmega168, atmega328. Om nano dette med en USB-kontakt hvis ikke feil. Sy inn Arduino-ideen fra eksemplene fra Blink-skissen (blinkende lysdioder på pinne 13, lysdioden er installert på brettet). Forsikre deg om at du bruker riktig port, brettet er valgt riktig, prosessoren på brettet er valgt riktig, kvartsfrekvensen på brettet er valgt riktig, firmwaremetoden (μ2) er valgt riktig.
Feil ikke oppstått.
Lag en ny fil i Arduino, kopier skissen herfra til en ny og ren skisse, så fungerer den.Men først, gjør at LED på Arduino-brettet blinker med et standard blinkende eksempel. Gå deretter videre.
Jeg kjøpte Arduino p nano bare på Atmega328-prosessoren. Jeg har sett på en haug med videoer og fora ... de sa at den skulle komme opp .... men så blinker ikke bummeren .... gir #include forventer "FILENAME" eller . Har noen opplevd dette?
Forfatteren
En skisse fungerer med dette brettet. Hva er egentlig pluggen dannet?
Hvis du skjenker den siste skissen, kan ikke alle detaljene relatert til D3.3 og D3.4, så vel som de selv, installeres. På loddejernet er det en tegning om dette emnet
Anjey888
Hallo Dette emnet er veldig interessert. Jeg vil sette sammen enheten. Jeg lagde et loddebrett utenom farten ... og satte meg fast. Siden det er mye uenighet mellom styret og kretsen. Begynte å sammenligne styret ditt ... det er en stor forskjell. Men forvirret med sele på Arduino.
Jeg ber hjelp fra kunnskapsrike mennesker.
Forfatteren
Det samme som for andre metaller. Deteksjonsdybde avhenger av målområdet. Jo mer, jo dypere.
Gjest Eugene
Hva er grensene for å oppdage gjenstander? Gull, aluminium, kobber.
Gjest Alexander
Hva skal jeg gjøre nå, fordi det fortsatt er en Schottky-barriere?
Forfatteren
Vel her! Omtrent selv den minste verdien er uaktuelt! Takk for avklaringen.
Sitat: puteec_80
Og folk vil raskere og intuitivt forstå hva jeg snakker om.
Du kan fortsette å forbli i denne feilen. ((Teknisk ferdige mennesker vil være med et lite tap.
BARRIER, ektemann.
1. En hindring (en slags vegg, en tverrbjelke) satt i veien.
2. Gjerde, inngjerding.

TRANSHOLD, terskel, ektemann.
1. I vitenskap og teknologi kalles terskelen for den minste verdien, graden av manifestasjon av noe.
Enhetens følsomhetsgrense. | Hørselsgrense. | Terskel for smerte. | Sensoren blir utløst når den innstilte temperaturterskelen overskrides.
smiler
Forfatteren
La oss være med våre egne. Jeg vil skrive "øke barrieren med en enhet" og "følsomheten til mottakeren var 5 μV." Og du skriver "Øke driftsgrensen med en enhet" og "terskelen for følsomhet for mottakeren .." Dessuten vil folk raskere og intuitivt forstå hva jeg snakker om.
Og jeg forklarer i dette eksemplet. Det er ingen terskel strengt tatt, fordi det ikke er noen klar referanseskala. Det er en slags utklipp flytende bånd fra et flytende signal. Så det ser ut til at definisjonen av en barriere er mye mer egnet for denne "flytende" stripen enn for en terskel.
Generelt meningsløst og dumt argument. Har du noen spørsmål?
Sitat: puteec_80
Hva er deres nedre og øvre terskel?
Kanskje betydningen av de oversatte ordene ikke stemmer eller litt ikke stemmer. Men de beskriver prosessen perfekt og går gradvis inn i slang.
Nøyaktig hva terskelen er. Svarsterskelen er i ditt tilfelle. Vennligst forklar hvordan "barrieren" beskriver prosessen.
Når det gjelder å bli med på slang - nå er det mange slags misforståelser der. ((
Forfatteren
I dette tilfellet har jeg fortsatt en tendens til å bruke ordet "barriere", fordi det er barrieren som er satt i programteksten, men uten å komme inn i rekkevidden, oppfattes signalet av mikrokontrolleren som nyttig. Og det er barrieren fordi Den har to verdier - øvre og nedre grense for innkjøring, dvs. operasjonen skjer over den "øvre" og under den "nedre" grensen til barrieren i ADC-skalaen. Imidlertid vet du bedre. Hva er deres nedre og øvre terskel?
Kanskje betydningen av de oversatte ordene ikke stemmer eller litt ikke stemmer. Men de beskriver prosessen perfekt og går gradvis inn i slang.
Forresten. Følsomhet og barriere er helt andre ting.
Ja.De krysser hverandre. Men ikke mer.
Sitat: puteec_80
I utenlandske MD sier menyen "Barier".

Jeg overrasker deg kanskje, men mange engelske ord som ligner vår, har en annen betydning, noen ganger nær, andre ganger ikke. Søk etter ordene "falske oversettervenner."
Nå egentlig. På russisk teknisk dokumentasjon ikke det er rett og slett ingen slike uttrykk "barriere for følsomhet" - og det er det! Det er en "terskel for følsomhet", i noen tilfeller kan man si en "grense for følsomhet", men ikke en "barriere for følsomhet". Kanskje brukes det i noen andre kunnskapsgrener, men ikke innen elektronikk.
Forfatteren
Vel, det betyr at alle utenlandske ingeniører hopper over en pinne på veien. På utenlandsk MD sier menyen "Barier." Kamerat Ivan, du faller i øynene mine med så små nitpicking! Hvor er dine kommentarer til fordelene? Deretter må du klappe hendene flatt på pannen? Du pleide å skjemme bort meg ofte straffe
Forskjellen er betydelig: terskelen er et teknisk begrep, barrieren er en "pinne over veien."
Forfatteren
Kanskje. Men jeg ser ikke forskjellen.
Kanskje ikke en "barriere", men en terskel? ;)
Forfatteren
Diagrammet viser ikke barrierejusteringsknappene. De er koblet til pinne 7 og 8 på Arduino. Hver blir trukket opp med en motstand på 10 000 mot pluss, lukkes når du trykker på massen.
Forfatteren
void loop () {
int-knappState1 = HØY; // Knappens tilstand er én
int-knappState2 = HØY; // To-knappstilstand

int pot = analogLes (A4); // filter for rask signalbytte
sign = sign * (1-K) + potte * K;

noll = noll * (1-L) + tegn * L; // langsiktig signalfilter
// Voltmeter bygget ved inngang A3
float spenning = kart (analogRead (A3), 0,1023,0,1500) /100,0;

if (sign> = noll + i) {countleds = map (sign, noll + i, 1023, 9, 14);
// hvis det mottatte resultatet er på det 9.-15. segmentet av skalaen
tone (6, tellede * 100);}
if (tegn <= noll - i) {countleds = kart (tegn, 0, noll - i, 0, 7);
// hvis det resulterende resultatet er 0-7 segment av skalaen
tone (6, tellede * 50); }
if (sign = noll - (i-1)) {countleds = 7;
noTone (6); } // holmen av virtuell NULL (7 segment)
if (sign> noll && sign <= noll + (i-1)) {countleds = 8;
noTone (6); } // øy av virtuell NUL-skala (8 segment)


{lcd.setCursor (countleds, 0); // sett markøren til talt kolonne, linje 0
lcd.print ("\ xff"); // fylt ikon
lcd.set Markør (0, 1); // gå til 2 rad, kolonne-0
lcd.print (char (1)); // Indikasjon av batteriikon
lcd.set markør (1, 1); // gå til spenningsindikasjon
lcd.print (spenning); // spenning
lcd.set Markør (7, 0); // 8. kolonne 1. rad
if (sign lcd.set Markør (8, 0); // 9. kolonne 1. rad
if (sign> noll) {lcd.print ("}");} // print
lcd.set markør (7, 1);
lcd.print ("B =");
lcd.set Markør (9, 1); // 11 kolonne 2. rad
lcd.print (i); // barriere
lcd.set markør (13, 1); // 13. kolonne 2. rad
lcd.print (tegn); // skriv ut gjennomsnittsverdien på ADC-verdien
forsinkelse (10); // vent

buttonState1 = digitalRead (knapp1); // Les knapp 1-status
buttonState2 = digitalRead (knapp2); // Les knappen 2-tilstand
if (buttonState1 == LOW) {i = i + 1; forsinkelse (50);}
// Når du trykker på knappen, vokser barrieren med 1. Forsinkelse 50
if (buttonState2 == LAV) {i = i - 1; forsinkelse (50);}
// Når du trykker på knappen, reduseres barrieren med 1. Forsinkelse 50
if (i <1) {i = 1;} // Nedre grense for barrieren
if (i> 38) {i = 38;} // Barrens øvre grense

lcd.clear ();
}
}
Forfatteren
Ny skisse. Algoritmen for å oppdage det nyttige signalet er endret. Opplegget er forenklet, det er ingen elementer D3.4 og D3.3 med alle bindinger. Hvis du tar ditt eget signet, kan alle disse detaljene rett og slett ikke installeres. Mer følsomhet. Ingen falske positiver.
skissere:

// A3-analog inngang for et voltmeter. Kan stilles inn med potensiometer R32.
// A4-analog inngang for signalet. Sett med minimumssignal på D3.2
// motstand R40 for ADC-avlesninger på omtrent 510.
// 6- konklusjonen av dyrehagen
// 9 - utgangsfrekvens 31200 Hz
#include
Liquid Crystal lcd (12, 11, 5, 4, 3, 2);

byte z1 [8] = {// batteriikon
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // variabel for å lagre skalaenivåverdien

float spenning = 0,0; // beregnet spenning
const int-knapp1 = 7; // barriere pluss-knapp
const int-knapp2 = 8; // barriere-minus-knapp
int i = 5; // barriere
const float K = 0,1; // filtersporing av raske endringer (koeffisient. jo mindre desto sterkere)
const float L = 0,07; // filtersporing endres over lang tid
flytskilt = 0; // filter
float noll = 0;

ugyldig oppsett () {
lcd.begin (16, 2); // vis initialisering
lcd.createChar (1, z1);
pinMode (9, OUTPUT);
pinMode (6, OUTPUT);
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x09;
analogWrite (9, 126); // ved pinne 10 PWM = 50% f = 31200Hz
// Faktisk, for PWM = 50% må du stille inn minst 220 fylling, i henhold til oscilloskopet
// duinen klarer det ikke. Dette er ikke kritisk.
}
Forfatteren
De som vil se skissen. Skiltene> = og <= er erstattet av rare kombinasjoner av & gt og & lt. Hvorfor jeg ikke vet det. Når feilsøking var normalt.

Vi anbefaler deg å lese:

Gi den til smarttelefonen ...