» elektronik » Metaldetektorer »Metaldetektor på Arduino Pro Mini. Behandling af dybderne i Kolokolov-Shchedrin i henhold til princippet om ”transmission

Metaldetektor på Arduino Pro Mini. Behandling af dybderne i Kolokolov-Shchedrin i henhold til princippet om ”transmission


Genanvendelse af Kolokolov-Shchedrin-dybvandsordningen. Forskelle fra det originale skema:
1. Der er INGEN krystaloscillator på k561 .. -chippen og 32 kHz kvarts. 32 kHz signalet giver Arduino Pro Mini.
2. Lydanmeldelseskredsløb på flere 561-serier mikrokredsløb er heller ikke til stede, Arduino udtaler også målet (Og jeg må sige, det er fremragende stemme i forhold til forfatterens skema).
3. Drevet af unipolær spænding 12v (bly-syrebatteri).
4. Juster følsomheden med knapperne. Med ADC-skalaen fra 0 til 1023 kan responstærsklen justeres fra 1 til 38 (værdien kan let ændres i skitsen).


Metaldetektor på Arduino Pro Mini. Behandling af dybderne i Kolokolov-Shchedrin i henhold til princippet om ”transmission


Vigtigst af alt ønskede jeg at vise i denne artikel, at det er muligt at samle MD'er på Arduino, som ikke er underordnet originalens følsomhed (dette gik ud, fordi originaler fra det originale kredsløb blev samlet i størrelsesordenen 10 stykker, så der er materiale til sammenligning). Oprindeligt kredsløb:


Da jeg først begyndte at arbejde med Arduino, blev jeg så inspireret, at jeg troede, at jeg kunne finde og samle ethvert metaldetektor-kredsløb fra Internettet på Arduino, som jeg let kan finde i det store affaldsdepot. I princippet viste det sig på den måde, men kredsløbene var baseret på en frekvens tæller, som ikke gjorde det muligt at opnå et rigtig godt interval. Nogle børns legetøj og en test af pennen + forsøger at tjene penge på begyndere. Originalen til denne MD er en rigtig arbejdshest, der giver dig mulighed for at finde store objekter i en afstand af 2 m (se Kolokolov-Shchedrin-bogen i Google). Der er ingen statistik om den transformerede md. Jeg håber, hun vises med støtte fra fans af MD og Arduino. Ordningen arbejdede med Arduino Uno og Arduino Pro Mini.

Yderligere på linket er beskrevet processen med fødsel af denne MD på lodningen af ​​webstedet, der varede i mere end et år og fik forfatteren til at studere programmeringsduin. Måske vil skitsen virke elendig for nogen - jeg vil med glæde acceptere dine FIXES.




I øjeblikket er der en skitse, der giver dig mulighed for at justere følsomhedsbarrieren (pin 7 douins +1 til barrieren, pin 8 -1 til barrieren). .
Arduino omkring mini 5v, 16MHz, ATmega168 og displayet brugte disse. Ved siden af ​​skalaen er Mini SD-adapteren


Som allerede nævnt koster 1602 86 rubler, ProMini - 82 rubler. Hvis du ønsker det, kan du generelt tage en nøgen ATmega168, udvikle en tavle til den og fylde skitsen direkte ind i den.Og så installerede jeg for eksempel mor-far på MD-tavlen ved hjælp af stikket. Billedet viser Arduinos 6-polede stik, hvorigennem skitser blev hældt direkte på brættet.

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

// A3 analog indgang til voltmeter
// A4 analog indgang til signal
// 6- konklusion af zooken
// 9 - udgangsfrekvens 31200 Hz
#include
Flydende krystal lcd (12, 11, 5, 4, 3, 2);
                                       
  byte z1 [8] = {// batteriikon
  0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
 
 int countleds = 0; // variabel for at gemme skalaniveauværdien
 int voltag = 0; // variabel til at gemme spændingsværdien
 int noll = 0; // variabel for at gemme midtpunktværdien
   #definér NUM_SAMPLES 10 // 10 analoge prøver, der skal læses på 1 sekund
   int sum = 0; // summen af ​​de udtagne prøver
   int sol = 0; // samme, men divideret med 10
   usigneret char sample_count = 0; // aktuelle prøvenummer med
   float spænding = 0,0; // beregnet spænding
   const int-knap1 = 7; // barriere plus-knap
   const int-knap2 = 8; // barriere-minus-knap
   int i = 5; // barriere
   
ugyldig opsætning () {
     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 pin 10 PWM = 50% f = 31200Hz
     
     lcd.createChar (1, z1);
     }
     
void loop () {
     int-knapStat1 = HØJ; // Knapens tilstand er én
     int-knapState2 = HØJ; // To-knapstilstand
   sample_antal = 0; // nulstille konturen for antallet af tilføjelser
   sum = 0; // nulstil summen af ​​10 tilføjelser
   mens (sample_count & lt; NUM_SAMPLES) {
   sum + = analoglæse (A4); // den næste måling føjes til summen
   sample_count ++; // enheden føjes til måleenummeret
   sun = sum / 10;} // find gennemsnitsværdien fra 10 målinger
   
   noll = analog læse (A3) / 2; // midpoint power
   float spænding = kort (analog læse (A3), 0,1023,0,1500) /100,0;
                                        // Voltmeter bygget ved indgang A3
   if (sol & gt; = noll + i) {countleds = kort (sol, noll + i, noll * 2 - 250, 9, 14);
                                        // hvis det modtagne resultat ligger i skalaen 9.-15
    tone (6, tellede * 100);}
   if (sol & lt; = noll - i) {countleds = kort (sol, 116, noll - i, 0, 7);
                                        // hvis det resulterende resultat er 0-7 segment af skalaen
    tone (6, optalt * 50); }
     if (sol & lt; noll & amp; & amp; sol & gt; = noll - (i-1)) {countleds = 7;
    noTone (6); } // Islet af virtuel NUL (7 segment)
     if (sol & gt; noll & amp; & amp; sol & lt; = noll + (i-1)) {countleds = 8;
    noTone (6); } // ø med virtuel NUL-skala (8 segment)

   
    {lcd.setCursor (countleds, 0); // indstil markøren til kolonnen med talt antal, linje 0
    lcd.print ("\ xff"); // fyldt ikon
    lcd.set markør (0, 1); // Gå til 2 række, kolonne-0
    lcd.print (char (1)); // Indikation af batteriikon
    lcd.set markør (1, 1); // gå til spændingsindikation
    lcd.print (spænding); // spænding
    lcd.set markør (7, 0); // 8. søjle 1. række
    if (sun & lt; noll) {lcd.print ("{");} // print
    lcd.set markør (8, 0); // 9. søjle 1. række
    if (sol & gt; noll) {lcd.print ("}");} // print
    lcd.set markør (7, 1);
    lcd.print ("B =");
    lcd.set markør (9, 1); // 11 kolonne 2. række
    lcd.print (i); // barriere
    lcd.set markør (13, 1); // 13. søjle 2. række
    lcd.print (sol); // udskriv den gennemsnitlige værdi af ADC-værdien
    forsinkelse (100); // vent
    
  buttonState1 = digitalRead (knap1); // Læs knap 1-status
  buttonState2 = digitalRead (knap2); // Læs knap 2-tilstand
  if (buttonState1 == LAV) {i = i + 1; forsinkelse (50);}
                                        // Når der trykkes på knappen, vokser barrieren med 1. Forsinkelse 50
  if (buttonState2 == LAV) {i = i - 1; forsinkelse (50);}
                                        // Når der trykkes på knappen, formindskes barrieren med 1. Forsinkelse 50
  if (i & lt; 1) {i = 1;} // Undergrænsen for barrieren
  if (i & gt; 38) {i = 38;} // Den øverste grænse af barrieren
 
 lcd.clear ();
    }
}

Jeg brugte ikke bilen. De sidste to elementer i TL074 blev tilbage. Men på kredsløb og bord er de det. Du ønsker måske at bringe dem i funktionsdygtighed lidt senere. Jeg tror, ​​at jeg har nået mit mål. Displayenheden fungerer vidunderligt. Alt andet afhænger af MD.
9.8
10
10

Tilføj en kommentar

    • smilesmilxaxaokdontknowyahoonea
      bossscratchnarrejaja-jaaggressivhemmelighed
      undskylddansdance2dance3benådninghjælpdrikkevarer
      stop-vennergodgoodgoodfløjtedånetunge
      røgklappecrayerklærerspottendedon-t_mentiondownloade
      hedeirefullaugh1mdamødemoskingnegativ
      not_ipopcornstraffelæseskræmmeforskrækkelsersøg
      hånethank_youdetteto_clueumnikakutenig
      dårligbeeeblack_eyeblum3blushpralekedsomhed
      censureretpleasantrysecret2truesejryusun_bespectacled
      SHOKRespektlolprevedvelkommenkrutoyya_za
      ya_dobryihjælperenne_huliganne_othodiFludforbudtæt
24 kommentarer
Forfatteren
Tak puteec FU! Jeg anmodede om det fra anden gang. Jeg syede gennem Arduino uno. Problemet forsvandt efter opdatering af bootloader. Interesser nu, hvordan du konfigurerer yderligere.
puteec fu
Enhver Arduino er velegnet til atmega168, atmega328. Om nano dette med et USB-stik, hvis ikke det forveksles. Sy Arduino-ideen fra eksemplerne på Blink-skitsen (blinkende LED'er på pin 13, LED'en er installeret på brættet). Sørg for, at du bruger den rigtige port, kortet er valgt korrekt, processoren på pladen er valgt korrekt, kvartsfrekvensen på kortet er valgt korrekt, firmwaremetoden (μ2) er valgt korrekt.
Der er ikke fundet en fejl.
Opret en ny fil i Arduino, kopier skitsen herfra til en ny og ren skitse, så fungerer den.Men først skal du få LED'en på Arduino-pladen til at blinke med et standard blinkende eksempel. Gå derefter videre.
Jeg købte kun Arduino p nano på Atmega328-processoren. Jeg har gennemgået en masse videoer og fora ... de sagde, at det skulle komme op .... men så blinker BAMMEREN IKKE .... giver #include forventer "FILENAME" eller . Har nogen mødt dette?
Forfatteren
En skitse fungerer sammen med dette bræt. Hvad er stikket nøjagtigt dannet?
Hvis du hælder den sidste skitse, kan alle detaljer, der er relateret til D3.3 og D3.4, såvel som de selv ikke kan installeres. På loddejernet er der en tegning om dette emne
Anjey888
Hej Dette emne er meget interesseret. Jeg vil samle enheden. Jeg lavede et loddejernbræt væk, og satte mig derefter fast. Da der er meget uenighed mellem bestyrelsen og kredsløbet. Begyndte at sammenligne dit bord ... det er en stor forskel. Men forvirret med sele på Arduino.
Jeg beder hjælp fra kyndige mennesker.
Forfatteren
Det samme som for andre metaller. Detektionsdybde afhænger af målområdet. Jo mere, jo dybere.
Gæst Eugene
Hvad er grænserne for at registrere objekter? Guld, aluminium, kobber.
Gæst Alexander
Hvad skal man gøre nu, fordi der stadig er en Schottky-barriere?
Forfatteren
Nå her! Omkring selv den mindste værdi er ude af spørgsmålet! Tak for afklaringen.
Citat: puteec_80
Og folk vil hurtigere og intuitivt forstå, hvad jeg taler om.
Du kan fortsætte med at forblive i denne fejl. ((Teknisk færdige mennesker vil være med et let tab.
BARRIER, mand.
1. En hindring (en slags væg, en tværbjælke) sat i vejen.
2. Hegn, hegn.

THRESHOLD, tærskel, mand.
1. I videnskab og teknologi kaldes tærsklen den mindste værdi, graden af ​​manifestation af noget.
Enhedens følsomhedstærskel. | Hørselsgrænse. | Tærskel for smerte. | Sensoren udløses, når den indstillede temperaturgrænse overskrides.
smile
Forfatteren
Lad os bo med vores egne. Jeg vil skrive "øge barrieren med en enhed" og "modtagerens følsomhed var 5 μV." Og du skriver "Forøgelse af driftsgrænsen med en enhed" og "tærsklen for følsomhed for modtageren .." Desuden vil folk hurtigere og intuitivt forstå, hvad jeg taler om.
Og jeg forklarer i dette eksempel. Der er ingen tærskel strengt taget, fordi der ikke er nogen klar reference skala. Der er en form for udskæring flydende bånd fra et flydende signal. Så det ser ud til, at definitionen af ​​en barriere er meget mere velegnet til denne "flydende" bånd end for en tærskel.
Generelt meningsløst og dumt argument. Har du spørgsmål?
Citat: puteec_80
Hvad er deres nedre og øvre tærskelværdi?
Måske stemmer betydningen af ​​de oversatte ord ikke overens eller lidt stemmer ikke overens. Men de beskriver perfekt processen og går gradvist ind i slang.
Præcis hvad tærsklen er. Svarstærsklen er i dit tilfælde. Forklar, hvordan "barrieren" beskriver processen.
Hvad angår at slutte sig til slang - der er nu en masse af alle slags misforståelser der. ((
Forfatteren
I dette tilfælde har jeg stadig en tendens til at bruge ordet "barriere", fordi det er barrieren, der er indstillet i programmets tekst, bare ikke falder inden for dets rækkevidde, signalet opfattes af mikrokontrolleren som nyttigt. Og det er barrieren, fordi Det har to værdier - de øvre og nedre grænser for indkøringen, dvs. operation foregår over den "øverste" og under den "nedre" kant af barrieren i ADC-skalaen. Du ved dog bedre. Hvad er deres nedre og øvre tærskelværdi?
Måske stemmer betydningen af ​​de oversatte ord ikke overens eller lidt stemmer ikke overens. Men de beskriver perfekt processen og går gradvist ind i slang.
Forresten. Følsomhed og barriere er helt forskellige ting.
Ja.De krydser hinanden. Men ikke mere.
Citat: puteec_80
I udenlandske MD siger menuen "Barier".

Jeg overrasker dig måske, men mange engelske ord, der ligner vores, har en anden betydning, undertiden tæt, undertiden ikke. Søg efter ordene "falske oversættervenner."
Nu i det væsentlige. På russisk teknisk dokumentation ingen der er simpelthen ingen sådan frase "barriere for følsomhed" - og det er det! Der er en "følsomhedsgrænse", i nogle tilfælde kan man sige en "følsomhedsgrænse", men ikke en "barriere for følsomhed". Måske bruges det i nogle andre videngrene, men ikke inden for elektronik.
Forfatteren
Det betyder godt, at alle udenlandske ingeniører hopper over en pind på vejen. I udenlandske MD, menuen siger "Barier". Kamerat Ivan, du falder i mine øjne med sådan en smule nitpicking! Hvor er dine kommentarer til fordelene? Derefter skal du klappe dine hænder fladt på panden? Du plejede ofte at forkæle mig straffe
Forskellen er betydelig: tærsklen er et teknisk udtryk, barrieren er en "pind på tværs af vejen."
Forfatteren
Måske. Men jeg ser ikke forskellen.
Måske ikke en "barriere", men en tærskel? ;)
Forfatteren
Diagrammet viser ikke barrierejusteringsknapperne. De er forbundet til benene 7 og 8 på Arduino. Hver trækkes op med en modstand på 10 k til plus, lukkes, når du trykker på massen.
Forfatteren
void loop () {
int-knapStat1 = HØJ; // Knapens tilstand er én
int-knapState2 = HØJ; // To-knapstilstand

int pot = analoglæsning (A4); // filter for hurtig signalskift
sign = sign * (1-K) + pot * K;

noll = noll * (1-L) + tegn * L; // langvarigt signalfilter
// Voltmeter bygget ved indgang A3
float spænding = kort (analog læse (A3), 0,1023,0,1500) /100,0;

if (tegn> = noll + i) {countleds = kort (tegn, noll + i, 1023, 9, 14);
// hvis det modtagne resultat ligger i skalaen 9.-15
tone (6, tellede * 100);}
if (tegn <= noll - i) {countleds = kort (tegn, 0, noll - i, 0, 7);
// hvis det resulterende resultat er 0-7 segment af skalaen
tone (6, optalt * 50); }
if (sign = noll - (i-1)) {countleds = 7;
noTone (6); } // Islet af virtuel NUL (7 segment)
if (sign> noll && sign <= noll + (i-1)) {countleds = 8;
noTone (6); } // ø med virtuel NUL-skala (8 segment)


{lcd.setCursor (countleds, 0); // indstil markøren til kolonnen med talt antal, linje 0
lcd.print ("\ xff"); // fyldt ikon
lcd.set markør (0, 1); // Gå til 2 række, kolonne-0
lcd.print (char (1)); // Indikation af batteriikon
lcd.set markør (1, 1); // gå til spændingsindikation
lcd.print (spænding); // spænding
lcd.set markør (7, 0); // 8. søjle 1. række
if (sign lcd.set markør (8, 0); // 9. søjle 1. række
if (sign> noll) {lcd.print ("}");} // print
lcd.set markør (7, 1);
lcd.print ("B =");
lcd.set markør (9, 1); // 11 kolonne 2. række
lcd.print (i); // barriere
lcd.set markør (13, 1); // 13. søjle 2. række
lcd.print (tegn); // udskriv den gennemsnitlige værdi af ADC-værdien
forsinkelse (10); // vent

buttonState1 = digitalRead (knap1); // Læs knap 1-status
buttonState2 = digitalRead (knap2); // Læs knap 2-tilstand
if (buttonState1 == LAV) {i = i + 1; forsinkelse (50);}
// Når der trykkes på knappen, vokser barrieren med 1. Forsinkelse 50
if (buttonState2 == LAV) {i = i - 1; forsinkelse (50);}
// Når der trykkes på knappen, formindskes barrieren med 1. Forsinkelse 50
if (i <1) {i = 1;} // Nedre grænse for barrieren
if (i> 38) {i = 38;} // Den øverste grænse af barrieren

lcd.clear ();
}
}
Forfatteren
Ny skitse. Algoritmen til at detektere det nyttige signal er blevet ændret. Skemaet er forenklet, der er ingen elementer D3.4 og D3.3 med alle deres bindinger. Hvis du tager dit eget signet, kan alle disse detaljer simpelthen ikke installeres. Mere følsomhed. Ingen falske positiver.
skitse:

// A3-analog indgang til et voltmeter. Kan indstilles med potentiometer R32.
// A4-analog indgang til signalet Indstilles med minimumssignalet på D3.2
// modstand R40 for ADC-aflæsninger på ca. 510.
// 6- konklusion af zooken
// 9 - udgangsfrekvens 31200 Hz
#include
Flydende krystal lcd (12, 11, 5, 4, 3, 2);

byte z1 [8] = {// batteriikon
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // variabel for at gemme skalaniveauværdien

float spænding = 0,0; // beregnet spænding
const int-knap1 = 7; // barriere plus-knap
const int-knap2 = 8; // barriere-minus-knap
int i = 5; // barriere
const float K = 0,1; // filter, der sporer hurtige ændringer (koefficient. jo mindre desto stærkere)
const float L = 0,07; // filtersporing ændres over lang tid
float tegn = 0; // filter
float noll = 0;

ugyldig opsætning () {
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 pin 10 PWM = 50% f = 31200Hz
// For PWM = 50% skal du faktisk indstille mindst 220 udfyldning ifølge oscilloskopet
// Duinen kan ikke klare det. Dette er ikke kritisk.
}
Forfatteren
De, der vil se skitsen. Tegnene> = og <= er erstattet af mærkelige kombinationer af & gt og & lt. Hvorfor ved jeg ikke. Da fejlsøgning var normal.

Vi råder dig til at læse:

Giv den til smartphonen ...