» Electrònica » Detectors de metalls »Detector de metalls de l’Arduino Pro Mini. Processament de les profunditats de Kolokolov-Shchedrin segons el principi de "transmissió"

Detector de metalls a Arduino Pro Mini. Processament de les profunditats de Kolokolov-Shchedrin segons el principi de “Transmissió


Reciclatge de l'esquema d'aigües profundes de Kolokolov-Shchedrin. Diferències de l'esquema original:
1. No hi ha cap oscil·lador de cristall al xip k561 .. xip i quars de 32 kHz. El senyal de 32 kHz dóna l’Arduino Pro Mini.
2. Tampoc hi són presents circuits de notificació de so en diversos microcircuits de la sèrie 561, Arduino també està marcant l'objectiu (i he de dir que és excel·lent la veu, en comparació amb l'esquema de l'autor).
3. Alimentat per tensió unipolar 12v (bateria de plom-àcid).
4. Ajusteu la sensibilitat amb els botons. Amb l’escala ADC de 0 a 1023, el llindar de resposta es pot ajustar d’1 a 38 (el valor es pot canviar fàcilment a l’esbós).


Detector de metalls a Arduino Pro Mini. Processament de les profunditats de Kolokolov-Shchedrin segons el principi de “Transmissió


El més important, volia demostrar en aquest article que és possible muntar MDs en Arduino no inferiors a l'original en sensibilitat (això es va resoldre, perquè els originals del circuit original es van recollir de l'ordre de 10 peces, de manera que hi ha material per a la seva comparació). Circuit original:


Quan vaig començar a treballar amb Arduino, em feia molta il·lusió que pensava trobar i muntar qualsevol circuit de detector de metalls d’Internet a Arduino que pogués trobar fàcilment al vast abocador d’escombraries. En principi, va resultar així, però els circuits es basaven en un comptador de freqüències, cosa que no permetia assolir un rang realment bo. Algunes joguines infantils i una prova de la ploma + intenten guanyar diners als principiants. L’original d’aquest MD és un autèntic cavall de treball que permet trobar objectes grans a una distància de 2 metres (consulteu el llibre Kolokolov-Shchedrin a Google). No hi ha estadístiques de la md transformada. Espero que aparegui amb el suport de fans de MD i Arduino. El programa va funcionar amb Arduino Uno i Arduino Pro Mini.

Més endavant es mostra el procés de naixement d’aquest MD al lloc web de Soldadura de ferro, que va durar més d’un any i va obligar l’autor a estudiar la programació duin. Potser l’esbós sembli malparit per a algú - Acceptaré amb molt de gust les vostres FIXES.




Actualment, hi ha un croquis que permet ajustar la barrera de sensibilitat (pin 7 douins +1 a la barrera, pin 8 -1 a la barrera). .
Arduino sobre mini 5v, 16MHz, ATmega168 i la pantalla utilitzats. Al costat de l'escala hi ha el Mini SD adaptador


Com ja s’ha dit, 1602 costa 86 rubles, ProMini - 82 rubles. Si ho desitgeu, generalment podeu agafar un ATmega168 nu, elaborar un tauler per a ell i emplenar l'esbós directament.I, per exemple, vaig instal·lar mare-pare a la placa MD mitjançant el connector. La foto mostra el tap de 6 pines d’Arduino, a través del qual s’abocaven esbossos directament a la pissarra.

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

// Entrada analògica A3 per voltímetre
// Entrada analògica A4 per a senyal
// 6- conclusió del zook
// 9 - freqüència de sortida 31200 Hz
#incloure
Cristal líquid lcd (12, 11, 5, 4, 3, 2);
                                       
  byte z1 [8] = {// icona de la bateria
  0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
 
 int countleds = 0; // variable per emmagatzemar el valor de nivell d’escala
 int voltag = 0; // variable per emmagatzemar el valor de tensió
 noll int = 0; // variable per emmagatzemar el valor del punt mig
   #defineu NUM_SAMPLES 10 // 10 mostres analògiques per llegir en 1 segon
   suma suma = 0; // suma de mostres preses
   int sol = 0; // mateix, però dividit per 10
   unsigned char sample_count = 0; // número de mostra actual amb
   tensió flotant = 0,0; // tensió calculada
   botó const int1 = 7; // botó de barrera més
   botó const int2 = 8; // botó barrera-menys
   int i = 5; // barrera
   
void setup () {
     lcd.begin (16, 2); // inicialització de la visualització
     lcd.setCursor (1, 0);
     lcd.setCursor (10, 1);
     lcd.print ("Rx-Tx");
     retard (3000);
     lcd.clear ();
     
     TCCR1A = TCCR1A & amp; 0xe0 | 2;
     TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
     analogWrite (9, 126); // al pin 10 PWM = 50% f = 31200Hz
     
     lcd.createChar (1, z1);
     }
     
void loop () {
     botó intState1 = HIGH; // L’estat del botó és un
     botó intState2 = HIGH; // Estat de dos botons
   sample_count = 0; // restablir el contorn del nombre d’afegits
   suma = 0; // restablir la suma de 10 addicions
   while (sample_count & lt; NUM_SAMPLES) {
   suma + = analogRead (A4); // S’afegeix la següent mesura a la suma
   sample_count ++; // la unitat s’afegeix al número de mesura
   sun = suma / 10;} // trobeu el valor mitjà de 10 mesures
   
   noll = analogRead (A3) / 2; // potència de mig punt
   tensió flotant = mapa (analògic Llegit (A3), 0,1023.01500) /100.0;
                                        // Voltímetre construït a l’entrada A3
   if (sun & gt; = noll + i) {countleds = mapa (sol, noll + i, noll * 2 - 250, 9, 14);
                                        // si el resultat rebut és al 9-15è segment de l'escala
    to (6, comptats * 100);}
   if (sun & lt; = noll - i) {countleds = mapa (sol, 116, noll - i, 0, 7);
                                        // si el resultat resultant és 0-7 segment de l'escala
    to (6, comptats * 50); }
     if (sun & lt; noll & amp; & amp; sun & gt; = noll - (i-1)) {countleds = 7;
    noTone (6); } // illot de ZERO virtual (7 segments)
     if (sun & gt; noll & amp; & amp; sun & lt; = noll + (i-1)) {countleds = 8;
    noTone (6); } // illa d'escala ZERO virtual (8 segments)

   
    {lcd.setCursor (countleds, 0); // estableix el cursor a la columna Countleds, línia 0
    lcd.print ("\ xff"); // icona omplerta
    lcd.setCursor (0, 1); // es mou a 2 fila, columna-0
    lcd.print (char (1)); // Indicació de la icona de la bateria
    lcd.setCursor (1, 1); // passar a la indicació de tensió
    lcd.print (tensió); // tensió
    lcd.setCursor (7, 0); // 8a columna 1a fila
    if (sun & lt; noll) {lcd.print ("{");} // imprimir
    lcd.setCursor (8, 0); // 9a columna 1a fila
    if (sun & gt; noll) {lcd.print ("}");} // imprimir
    lcd.setCursor (7, 1);
    lcd.print ("B =");
    lcd.setCursor (9, 1); // 11 columna 2a fila
    lcd.print (i); // barrera
    lcd.setCursor (13, 1); // 13a columna 2a fila
    lcd.print (sol); // imprimiu el valor mitjà del valor ADC
    retard (100); // esperar
    
  buttonState1 = digitalRead (button1); // Estat del botó 1 de lectura
  buttonState2 = digitalRead (button2); // Estat 2 del botó de lectura
  if (botóState1 == BAIX) {i = i + 1; retard (50);}
                                        // Quan premeu el botó, la barrera creix 1. Retard 50
  if (botóState2 == BAIX) {i = i - 1; retard (50);}
                                        // Quan es prem el botó, la barrera disminueix en 1. Retard 50
  if (i & lt; 1) {i = 1;} // Límit inferior de la barrera
  if (i & gt; 38) {i = 38;} // El límit superior de la barrera
 
 lcd.clear ();
    }
}

No vaig fer servir el cotxe, els dos últims elements del TL074 es van deixar al ralentí. Però al circuit i al tauler ho són. Potser voldreu portar-los a les condicions laborals una mica més tard. Crec que he assolit el meu objectiu. La unitat de visualització funciona de meravella. La resta depèn de l'MD.
9.8
10
10

Afegeix un comentari

    • somriuresomriuxaxad'acordno ho séyahoonea
      capratllarximplesísí-síagressiusecret
      ho sentoballarballar2ballar3perdóajudarbegudes
      pararamicsbébondatxiuletswoonllengua
      fumaraplaudintcranideclararderisiudon-t_mentiondescarregar
      calorirritariure1mdareuniómosquitnegatiu
      no_icrispetescastigarllegirporespantosbuscar
      burlargràcies_youaixòto_clueumnikagutd'acord
      dolentbeeeblack_eyeblum3ruborpresumirl'avorriment
      censuradaplaersecret2amenaçarvictòriatusun_bespectacled
      xocrespectlolpreveurebenvingudaKrutoyja_za
      ja_dobryiajudantne_huliganne_othodifludprohibicióa prop
24 comentari
L’autor
Gràcies puteec FU! Ho vaig demanar per segona vegada. Vaig cosir per Arduino uno. El problema va desaparèixer després d'actualitzar el carregador d'arrencada. Ara interessa com configurar més informació.
puteec fu
Qualsevol Arduino és adequat per a atmega168, atmega328. Quant a nano això amb un connector usb si no s'equivoca. Cos a la idea d’Arduino dels exemples de l’esbós de parpelleig (els LED parpellejant al pin 13, el LED està instal·lat a la pissarra). Assegureu-vos que utilitzeu el port correcte, la placa estigui seleccionada correctament, el processador de la placa està seleccionat correctament, la freqüència de quars a la placa està seleccionada correctament, el mètode del firmware (μ2) està seleccionat correctament.
No s'ha produït un error.
Creeu un fitxer nou a Arduino, copieu l’esbós d’aquí a un esbós nou i net i funcionarà.Però primer, feu que el LED de la placa Arduino parpellegi amb un exemple parpelleig normal. A continuació, aneu endavant.
Vaig comprar Arduino p nano només al processador Atmega328. Vaig revisar un munt de vídeos i fòrums ... em van dir que hauria de sortir .... però llavors el sondeig NO és intermitent .... dóna #include espera "FILENAME" o . Algú s’ha trobat amb això?
L’autor
Un esbós funciona amb aquest tauler. En què es forma exactament el tap?
Si traieu l'últim esbós, no es poden instal·lar tots els detalls relacionats amb D3.3 i D3.4 i ells mateixos. A la planxa de soldadura hi ha un redibuix sobre aquest tema
Anjey888
Hola Aquest tema està molt interessat. Vull muntar el dispositiu. Vaig fer un tauler de soldadura per fora ... i després em vaig enganxar. Ja que hi ha molt desacord entre la placa i el circuit. Va començar a comparar el vostre tauler ... és una gran diferència. Però confós amb l’arnès d’Arduino.
Demano l’ajuda de persones coneixedores.
L’autor
El mateix que per a altres metalls. La profunditat de detecció depèn de la zona de l'objectiu. Com més, més profund.
Convidat Eugène
Quins són els límits per detectar objectes? Or, alumini, coure.
Alexandre convidat
Què fer ara, perquè encara hi ha una barrera de Schottky?
L’autor
Doncs aquí! Fins i tot queda fora de dubte el valor més petit. Gràcies per l'aclariment.
Citar: puteec_80
I la gent entendrà més ràpidament i de manera intuïtiva de què parlo.
Podeu continuar mantenint aquest error ((les persones que alfabetitzen tècnicament es perdran lleugerament).
BARRIER, marit.
1. Un obstacle (una mena de paret, una creu de creueria) establert en el camí.
2. Tanca, tanca.

TRES, llindar, marit.
1. En ciència i tecnologia, el llindar s’anomena valor més petit, el grau de manifestació d’alguna cosa.
El llindar de sensibilitat del dispositiu. | Llindar d’audiència. | Llindar del dolor. | El sensor s'activa quan se supera el llindar de temperatura establert.
somriure
L’autor
Ens quedem amb els nostres. Escriuré "augmentant la barrera per una unitat" i "la sensibilitat del receptor va ser de 5 μV". I escriviu "Incrementar el llindar de funcionament per una unitat" i "el llindar de sensibilitat del receptor ..." A més, la gent entendrà més ràpidament i intuïtivament de què parlo.
I ho explico en aquest exemple. No hi ha un llindar estrictament parlant, perquè no hi ha una escala de referència clara. Hi ha algun tipus de banda flotant retallada a partir d’un senyal flotant. Per tant, em sembla que la definició d’una barrera és molt més adequada per a aquesta franja “flotant” que per un llindar.
Argument generalment inútil i estúpid. Té alguna pregunta?
Citar: puteec_80
Quins són els seus llindars inferiors i superiors?
Potser els significats de les paraules traduïdes no coincideixen o lleugerament no coincideixen. Però descriuen perfectament el procés i entren gradualment en argot.
Exactament quin és el llindar. El llindar de resposta és el vostre cas. Si us plau, expliqueu com la “barrera” descriu el procés.
Pel que fa a l'adhesió a l'argot, ara hi ha molts tipus de malentesos.
L’autor
En aquest cas, encara tendeixo a utilitzar la paraula "barrera", perquè és la barrera que s’estableix al text del programa, només no caure en el seu rang, el microcontrolador considera que el senyal és útil. I és la barrera perquè Té dos valors: els límits superior i inferior de l'execució, és a dir. l'operació es produeix per sobre de la "superior" i per sota del límit "inferior" de la barrera a l'escala ADC. Tanmateix, ho saps millor. Quins són els seus llindars inferiors i superiors?
Potser els significats de les paraules traduïdes no coincideixen o lleugerament no coincideixen. Però descriuen perfectament el procés i entren gradualment en argot.
Per cert. La sensibilitat i la barrera són coses completament diferents.
SíS'entrecreuen. Però no més.
Citar: puteec_80
Al MD estranger, el menú diu "Barier".

Potser us sorprèn, però moltes paraules angleses que semblen similars a les nostres tenen un significat diferent, de vegades proper, de vegades no. Busqueu les paraules "falsos traductors amics".
Ara essencialment. En rus tècnica documentació no simplement no hi ha aquesta frase "barrera de la sensibilitat", i això és! Hi ha un "llindar de sensibilitat", en alguns casos es pot dir un "límit de sensibilitat", però no una "barrera de sensibilitat". Potser en algunes altres branques del coneixement s’utilitza, però no en electrònica.
L’autor
Bé, vol dir que tots els enginyers estrangers salten sobre un pal a la carretera. Al MD estranger, el menú diu "Barier". Al camarada Ivan, us esteu caient als ulls amb uns bocins tan petits! On són els vostres comentaris sobre el mèrit? Després de què has de punxar les mans al front? Solies fer-me malbé sovint castigar
La diferència és important: el llindar és un terme tècnic, la barrera és un "pal a la carretera".
L’autor
Potser. Però no veig la diferència.
Potser no és una "barrera", sinó un llindar? ;)
L’autor
El diagrama no mostra els botons d’ajust de barreres. Estan connectats als pins 7 i 8 de l’Arduino. Cadascun dels dos amb una resistència de 10 k al plus, es tanca en prémer la massa.
L’autor
void loop () {
botó intState1 = HIGH; // L’estat del botó és un
botó intState2 = HIGH; // Estat de dos botons

int pot = analogRead (A4); // filtre per canviar ràpidament el senyal
signe = signe * (1-K) + pot * K;

noll = noll * (1-L) + signe * L; // filtre de senyal a llarg termini
// Voltímetre construït a l’entrada A3
tensió flotant = mapa (analògic Llegit (A3), 0,1023.01500) /100.0;

if (signe> = noll + i) {countleds = mapa (signe, noll + i, 1023, 9, 14);
// si el resultat rebut és al 9-15è segment de l'escala
to (6, comptats * 100);}
if (signe <= noll - i) {countleds = mapa (signe, 0, noll - i, 0, 7);
// si el resultat resultant és 0-7 segment de l'escala
to (6, comptats * 50); }
if (signe = noll - (i-1)) {countleds = 7;
noTone (6); } // illot de ZERO virtual (7 segments)
if (signe> noll && sign <= noll + (i-1)) {countleds = 8;
noTone (6); } // illa d'escala ZERO virtual (8 segments)


{lcd.setCursor (countleds, 0); // estableix el cursor a la columna Countleds, línia 0
lcd.print ("\ xff"); // icona omplerta
lcd.setCursor (0, 1); // es mou a 2 fila, columna-0
lcd.print (char (1)); // Indicació de la icona de la bateria
lcd.setCursor (1, 1); // passar a la indicació de tensió
lcd.print (tensió); // tensió
lcd.setCursor (7, 0); // 8a columna 1a fila
if (signar lcd.setCursor (8, 0); // 9a columna 1a fila
if (signar> noll) {lcd.print ("}");} // imprimir
lcd.setCursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // 11 columna 2a fila
lcd.print (i); // barrera
lcd.setCursor (13, 1); // 13a columna 2a fila
lcd.print (signe); // imprimiu el valor mitjà del valor ADC
retard (10); // esperar

buttonState1 = digitalRead (button1); // Estat del botó 1 de lectura
buttonState2 = digitalRead (button2); // Estat 2 del botó de lectura
if (botóState1 == BAIX) {i = i + 1; retard (50);}
// Quan premeu el botó, la barrera creix 1. Retard 50
if (botóState2 == BAIX) {i = i - 1; retard (50);}
// Quan es prem el botó, la barrera disminueix en 1. Retard 50
if (i <1) {i = 1;} // Límit inferior de la barrera
if (i> 38) {i = 38;} // El límit superior de la barrera

lcd.clear ();
}
}
L’autor
Nou esbós. S'ha canviat l'algorisme per detectar el senyal útil. Es simplifica l’esquema, no hi ha elements D3.4 i D3.3 amb tots els seus enllaços. Si porteu el vostre signet, simplement no es poden instal·lar tots aquests detalls. Més sensibilitat. No hi ha falsos positius.
Esbós:

// Entrada analògica A3 per a un voltímetre. Ajustable per potenciòmetre R32.
// Entrada analògica A4 per al senyal. Es defineix amb el senyal mínim a D3.2
// resistència R40 per a lectures d’ADC d’uns 510.
// 6- conclusió del zook
// 9 - freqüència de sortida 31200 Hz
#include
Cristal líquid lcd (12, 11, 5, 4, 3, 2);

byte z1 [8] = {// icona de la bateria
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // variable per emmagatzemar el valor de nivell d’escala

tensió flotant = 0,0; // tensió calculada
botó const int1 = 7; // botó de barrera més
botó const int2 = 8; // botó barrera-menys
int i = 5; // barrera
const flotador K = 0,1; // canvis de seguiment de filtres ràpids (coeficient. com més petit sigui més fort)
const flotador L = 0,07; // els canvis de seguiment dels filtres durant molt de temps
signe flotador = 0; // filtre
float noll = 0;

void setup () {
lcd.begin (16, 2); // inicialització de la visualització
lcd.createChar (1, z1);
pinMode (9, OUTPUT);
pinMode (6, OUTPUT);
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x09;
analogWrite (9, 126); // al pin 10 PWM = 50% f = 31200Hz
// de fet, per a PWM = 50% cal establir un mínim de 220 d’ompliment, segons l’osciloscopi
// el duin no s’ho pot gestionar. Això no és crític.
}
L’autor
Els que miraran l’esbós. Els signes> = i <= han estat substituïts per estranyes combinacions de & gt i & lt. Per què no ho sé Quan la depuració era normal.

Us aconsellem que llegiu:

Doneu-lo al telèfon intel·ligent ...