» Elektronika » Metāla detektori »Metāla detektors uz Arduino Pro Mini. Kolokolova-Ščedrina dziļumu apstrāde pēc principa “Transmisija”

Metāla detektors uz Arduino Pro Mini. Kolokolova-Ščedrina dziļumu apstrāde pēc principa “Transmisija”


Kolokolova-Ščedrina dziļūdens shēmas pārstrāde. Atšķirības no sākotnējās shēmas:
1. K561 .. mikroshēmā un 32 kHz kvarcā nav kristāla oscilatora. 32 kHz signāls dod Arduino Pro Mini.
2. Nav arī skaņas signālu shēmas vairākām 561 sērijas mikroshēmām, Arduino arī izsaka mērķi (Un jāsaka, ka tā ir lieliska balss, salīdzinot ar autora shēmu).
3. Darbojas ar vienpolu 12 V spriegumu (svina-skābes akumulators).
4. Pielāgojiet jutīgumu ar pogām. Ar ADC skalu no 0 līdz 1023 reakcijas slieksnis ir regulējams no 1 līdz 38 (skicē vērtību var viegli mainīt).


Metāla detektors uz Arduino Pro Mini. Kolokolova-Ščedrina dziļumu apstrāde pēc principa “Transmisija”


Vissvarīgākais, es gribēju parādīt šajā rakstā, ka Arduino ir iespējams montēt MD, kas jutīgumā nav zemāki par oriģinālu (tas izstrādāts, jo oriģinālās shēmas oriģināli tika savākti pēc 10 gabalu pasūtījuma, tāpēc salīdzināšanai ir materiāls). Sākotnējā shēma:


Kad es pirmo reizi sāku strādāt ar Arduino, es tik ļoti iedvesmojos, ka man likās, ka Arduino varēšu atrast un samontēt jebkuru metāla detektoru shēmas no interneta, ko viegli atrast plašajā atkritumu izgāztuvē. Principā tas izrādījās, bet ķēžu pamatā bija frekvences skaitītājs, kas neļāva sasniegt patiešām labu diapazonu. Dažas bērnu rotaļlietas un pildspalvas pārbaude + mēģinājumi nopelnīt naudu iesācējiem. Šī MD oriģināls ir īsts darba zirgs, kas ļauj atrast lielus objektus 2m attālumā (sk. Kolokolova-Ščedrina grāmatu Google). Statistika par pārveidoto MD Nr. Es ceru, ka viņa parādīsies ar MD un Arduino fanu atbalstu. Shēma strādāja ar Arduino Uno un Arduino Pro Mini.

Turpmāk saitē ir aprakstīts šī MD dzimšanas process lodāmura tīmekļa vietnē, kas ilga vairāk nekā gadu un pamudināja autoru izpētīt programmu veidošanu. Varbūt skice kādam šķitīs nožēlojama - es ar prieku pieņemšu jūsu FIXES.




Pašlaik ir skice, kas ļauj pielāgot jutības barjeru (7. tapai ir jābūt +1 pret barjeru, 8. tapa - 1. barjerai). .
Arduino par mini 5v, 16MHz, ATmega168 un displejs izmantoja šos. Blakus skalai ir Mini SD adapteris


Kā jau teikts, 1602 maksā 86 rubļus, ProMini - 82 rubļus. Ja vēlaties, jūs parasti varat paņemt neapbruņotu ATmega168, izveidot tam tāfeles un uzpildīt skici tieši tajā.Un tā, piemēram, es uzstādīju mammu-tēti MD plāksnītē, izmantojot savienotāju. Fotoattēlā redzams Arduino 6 kontaktu spraudnis, caur kuru skices tika izlietas tieši uz tāfeles.

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

// A3 analogā ieeja voltmetram
// A4 analogā ieeja signālam
// 6- zoba secinājums
// 9 - izejas frekvence 31200 Hz
# iekļaut
Šķidro kristālu LCD (12, 11, 5, 4, 3, 2);
                                       
  baits z1 [8] = {// akumulatora ikona
  0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
 
 int countleds = 0; // mainīgais, lai saglabātu skalas līmeņa vērtību
 int voltag = 0; // mainīgs, lai saglabātu sprieguma vērtību
 int noll = 0; // mainīgais, lai saglabātu viduspunkta vērtību
   #definējiet NUM_SAMPLES 10 // 10 analogos paraugus, lai tos lasītu 1 sekundes laikā
   int summa = 0; ņemto paraugu summa
   int saule = 0; // tas pats, bet dalīts ar 10
   neparakstīts char sample_count = 0; // pašreizējais parauga numurs ar
   pludiņa spriegums = 0,0; // aprēķinātais spriegums
   const int button1 = 7; // barjera plus poga
   const int button2 = 8; // poga barjera-mīnus
   int i = 5; // barjera
   
Nederīga iestatīšana () {
     lcd.begin (16, 2); // displeja inicializācija
     lcd.setCursor (1, 0);
     lcd.setCursor (10, 1);
     lcd.print ("Rx-Tx");
     kavēšanās (3000);
     lcd.clear ();
     
     TCCR1A = TCCR1A & amp; 0xe0 | 2;
     TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
     analogWrite (9, 126); // pie 10. tapas PWM = 50% f = 31200Hz
     
     lcd.createChar (1, z1);
     }
     
tukšs cilpa () {
     int buttonState1 = HIGH; // Pogas stāvoklis ir viens
     int buttonState2 = AUGSTS; // Divu pogu stāvoklis
   paraugs_skaits = 0; // atiestatīt papildinājumu skaita kontūru
   summa = 0; // atiestatīt 10 papildinājumu summu
   kamēr (parauga_skaitlis & lt; NUM_SAMPLES) {
   summa + = analogRead (A4); // nākamais mērījums tiek pievienots summai
   parauga_skaits ++; // mērvienībai pievieno mērvienību
   saule = summa / 10;} // atrodiet vidējo vērtību no 10 mērījumiem
   
   noll = analogRead (A3) / 2; // viduspunkta jauda
   pludiņa spriegums = karte (analogRead (A3), 0,1023,0,1500) /100,0;
                                        // voltmetrs, kas uzbūvēts pie ieejas A3
   if (saule & gt; = noll + i) {countleds = map (saule, noll + i, noll * 2 - 250, 9, 14);
                                        // ja saņemtais rezultāts atrodas skalas 9-15. segmentā
    signāls (6, apzīmē * 100);}
   if (saule & lt; = noll - i) {countleds = map (sun, 116, noll - i, 0, 7);
                                        // ja iegūtais rezultāts ir 0-7 skalas segments
    tonis (6, apzīmē * 50); }
     if (sun & lt; noll & & sun; = noll - (i-1)) {countleds = 7;
    noTone (6); } // virtuālās nulles saliņa (7 segmenti)
     if (saule & noll & amp; saule & lt; = noll + (i-1)) {countleds = 8;
    noTone (6); } // virtuālās nulles skalas sala (8 segmenti)

   
    {lcd.setCursor (iebilst, 0); // iestatiet kursoru uz kolonnu countleds, 0. rinda
    lcd.print ("\ xff"); // aizpildīta ikona
    lcd.setCursor (0, 1); // pāriet uz 2 rindu, 0. kolonna
    lcd.print (char (1)); // Akumulatora ikonas indikācija
    lcd.setCursor (1, 1); // pāriet uz sprieguma indikāciju
    lcd.print (spriegums); // spriegums
    lcd.setCursor (7, 0); // 8. kolonnas 1. rinda
    if (sun & lt; noll) {lcd.print ("{");} // print
    lcd.setCursor (8, 0); // 9. kolonnas 1. rinda
    if (sun & gt; noll) {lcd.print ("}");} // print
    lcd.setCursor (7, 1);
    lcd.print ("B =");
    lcd.setCursor (9, 1); // 11 kolonnas 2. rinda
    lcd.print (i); // barjera
    lcd.setCursor (13, 1); // 13. kolonnas 2. rinda
    lcd.print (saule); // izdrukājiet ADC vērtības vidējo vērtību
    kavēšanās (100); // pagaidiet
    
  buttonState1 = digitalRead (button1); // Lasīšanas 1. pogas statuss
  buttonState2 = digitalRead (button2); // 2. pogas lasīšanas stāvoklis
  if (buttonState1 == LOW) {i = i + 1; kavēšanās (50);}
                                        // Nospiežot pogu, barjera palielinās par 1. Aizkavē 50
  if (buttonState2 == LOW) {i = i - 1; kavēšanās (50);}
                                        // Nospiežot pogu, barjera samazinās par 1. Aizkavē 50
  if (i & lt; 1) {i = 1;} // Barjeras apakšējā robeža
  if (i> 38) {i = 38;} // Barjeras augšējā robeža
 
 lcd.clear ();
    }
}

Es nelietoju automašīnu. Pēdējie divi TL074 elementi tika atstāti dīkstāvē. Bet uz shēmas un tāfeles tie ir. Iespējams, vēlēsities viņus nedaudz vēlāk iestatīt darba stāvoklī. Es uzskatu, ka esmu sasniedzis savu mērķi. Displejs darbojas lieliski. Viss pārējais ir atkarīgs no MD.
9.8
10
10

Pievienojiet komentāru

    • smaidismaidaxaxalabinezinuYahoonea
      priekšniekssaskrāpētmuļķisjājā-jāagresīvsslepeni
      žēldejotdeja2deja3apžēlošanapalīdzētdzērieni
      apstātiesdraugilabilabsirdīgssvilpegulbismēle
      smēķētaplaudēkrauklispaziņodrausmīgsdon-t_mentionlejupielādēt
      karstumsdrausmīgssmieties1mdasapulceņirgāšanāsnegatīvs
      not_ipopkornssodītlasītnobiedētbiedēmeklēt
      ņurdētpaldiesšoto_clueumņikakūtapiekrītu
      sliktibēmelnā acsblum3sarktlielītiesgarlaicība
      cenzētspleasantryslepens2draudētuzvarajusun_bespectacled
      šoksrespektlolprevedlaipni gaidītikrutojsya_za
      ya_dobryipalīgsne_huliganne_othodifludsaizliegumstuvu
24 komentārs
Autore
Paldies puteec FU! Es to pieprasīju no otrās reizes. Es izšūti caur Arduino uno. Pēc bootloader atjaunināšanas problēma pazuda. Tagad interesē, kā konfigurēt tālāk.
puteec fu
Jebkurš Arduino ir piemērots atmega168, atmega328. Par nano to ar usb savienotāju, ja nemaldos. No Blink skices piemēriem šujiet Arduino ide (mirgojošas gaismas diodes uz 13. tapas, gaismas diode ir uzstādīta uz tāfeles). Pārliecinieties, ka izmantojat pareizo portu, tāfele ir izvēlēta pareizi, pareizi tiek izvēlēts procesors uz tāfeles, kvarca frekvence uz tāfeles ir izvēlēta pareizi, programmaparatūras metode (μ2) ir izvēlēta pareizi.
Nav radusies kļūda.
Izveidojiet jaunu failu Arduino, no šejienes nokopējiet skici jaunā un tīrā skicē, un tas darbosies.Bet vispirms lieciet mirgot Arduino tāfeles gaismas diodei ar standarta mirgojošu piemēru. Tad pārejiet tālāk.
Es nopirku Arduino p nano tikai procesorā Atmega328. Es pārskatīju virkni video un forumu ... viņi teica, ka tam vajadzētu nākt klajā .... bet tad bummer NAV mirgojošs .... dod #include sagaida "FILENAME" vai . Vai kāds ar to ir saskāries?
Autore
Ar šo dēli darbojas skice. Kas tieši ir izveidots spraudnis?
Ja jūs uzliekat pēdējo skici, tad nevar instalēt visu informāciju, kas saistīta ar D3.3 un D3.4, kā arī tās pašas. Uz lodāmura ir zīmējums par šo tēmu
Anjey888
Labdien. Šī tēma ir ļoti ieinteresēta. Es gribu salikt ierīci. Es izgatavoju lodāmurs dēli pie aiziet ... un tad es iestrēdzis. Tā kā starp plati un shēmu ir daudz domstarpību. Sācis salīdzināt tāfeles ... tā ir liela atšķirība. Bet sajaukt ar zirglietām Arduino.
Es lūdzu zinošu cilvēku palīdzību.
Autore
Tas pats, kas citiem metāliem. Atklāšanas dziļums ir atkarīgs no mērķa laukuma. Jo vairāk, jo dziļāk.
Viesis Jevgeņijs
Kādas ir robežas objektu noteikšanai? Zelts, alumīnijs, varš.
Viesis Aleksandrs
Ko darīt tagad, jo joprojām pastāv Šotkas barjera?
Autore
Nu šeit! Aptuveni pat mazākā vērtība ir ārpus jautājuma! Paldies par skaidrojumu.
Citāts: puteec_80
Un cilvēki ātrāk un intuitīvāk sapratīs, par ko es runāju.
Jūs joprojām varat palikt pie šīs kļūdas. ((Tehniski prasmīgi cilvēki būs ar nelielu zaudējumu.
BARJERS, vīrs.
1. Šķērslis (sava ​​veida siena, šķērssija), kas novietots ceļā.
2. Žogs, žogs.

THRESHOLD, slieksnis, vīrs.
1. Zinātnē un tehnoloģijā slieksni sauc par mazāko vērtību, kaut kā izpausmes pakāpi.
Ierīces jutības slieksnis. | Dzirdes slieksnis. | Sāpju slieksnis. | Sensors tiek iedarbināts, kad tiek pārsniegts iestatītais temperatūras slieksnis.
smaidi
Autore
Paliksim pie savējiem. Es uzrakstīšu "barjeras palielināšana par vienu vienību" un "uztvērēja jutība bija 5 μV". Jūs rakstāt “Palielinot darbības slieksni par vienu vienību” un “Uztvērēja jutības slieksnis ..” Turklāt cilvēki ātrāk un intuitīvāk sapratīs to, par ko es runāju.
Un es paskaidroju šajā piemērā. Stingri runājot, nav sliekšņa, jo nav skaidras atsauces skalas. No peldošā signāla ir kāda veida izgriezuma peldošā josla. Tātad, man šķiet, ka barjeras definīcija ir daudz piemērotāka šai “peldošajai” joslai, nevis slieksnim.
Vispār bezjēdzīgs un stulbs arguments. Vai jums ir kādi jautājumi?
Citāts: puteec_80
Kādas ir viņu apakšējās un augšējās robežas?
Varbūt tulkoto vārdu nozīmes nesakrīt vai nedaudz nesakrīt. Bet viņi lieliski raksturo procesu un pakāpeniski nonāk slengā.
Tieši tāds slieksnis ir. Atbildes slieksnis ir jūsu gadījumā. Lūdzu, paskaidrojiet, kā “barjera” raksturo procesu.
Runājot par pievienošanos slengam - tagad tur ir daudz un dažādi pārpratumi. ((
Autore
Šajā gadījumā es joprojām mēdzu lietot vārdu "barjera", jo tā ir barjera, kas tiek iestatīta programmas tekstā, bet, neiekļūstot tās diapazonā, signālu mikrokontrollers uztver kā noderīgu. Un tā ir barjera, jo Tam ir divas vērtības - iebraukšanas augšējā un apakšējā robeža, t.i. darbība notiek virs barjeras "augšējās" un zem "apakšējās" robežas ADC skalā. Tomēr jūs zināt labāk. Kādas ir viņu apakšējās un augšējās robežas?
Varbūt tulkoto vārdu nozīmes nesakrīt vai nedaudz nesakrīt. Bet viņi lieliski raksturo procesu un pakāpeniski nonāk slengā.
Starp citu. Jutīgums un barjera ir pilnīgi atšķirīgas lietas.
JāViņi krustojas. Bet ne vairāk.
Citāts: puteec_80
Ārzemju MD izvēlnē ir rakstīts “Barier”.

Es varētu jūs pārsteigt, bet daudziem angļu vārdiem, kas izskatās līdzīgi mūsējiem, ir atšķirīga nozīme, dažreiz tuvu, dažreiz nē. Meklējiet vārdus "viltus tulka draugi".
Tagad būtībā. Krieviski tehniskā dokumentācija vienkārši nav šādas frāzes “jūtīguma barjera” - un tas ir! Pastāv “jutības slieksnis”, dažos gadījumos var teikt par “jutības robežu”, bet nevis “jutīguma barjeru”. Varbūt dažās citās zināšanu nozarēs to izmanto, bet ne elektronikā.
Autore
Tas nozīmē, ka visi ārvalstu inženieri uz ceļa lec ar nūju. Ārzemju MD ēdienkartē ir rakstīts "Barier". Biedrs Ivan, jūs man krītat acīs ar tik sīku nūjošanu! Kur ir jūsu komentāri par lietas būtību? Pēc kura jums plaukstas jāapmet uz pieres? Jūs mani mēdzāt sabojāt bieži sodīt
Atšķirība ir ievērojama: slieksnis ir tehnisks termins, barjera ir “nūja pāri ceļam”.
Autore
Varbūt. Bet es neredzu atšķirību.
Varbūt nevis "barjera", bet slieksnis? ;)
Autore
Diagrammā nav parādītas barjeru regulēšanas pogas. Tie ir savienoti ar Arduino 7. un 8. tapu. Katrs uzvilkts ar pretestību 10k pret plusu, aizveras, nospiežot masu.
Autore
tukšs cilpa () {
int buttonState1 = HIGH; // Pogas stāvoklis ir viens
int buttonState2 = AUGSTS; // Divu pogu stāvoklis

int katls = analogRead (A4); // filtrs ātrai signāla maiņai
zīme = zīme * (1-K) + pods * K;

noll = noll * (1-L) + zīme * L; // ilgtermiņa signāla filtrs
// voltmetrs, kas uzbūvēts pie ieejas A3
pludiņa spriegums = karte (analogRead (A3), 0,1023,0,1500) /100,0;

if (zīme> = noll + i) {countleds = map (zīme, noll + i, 1023, 9, 14);
// ja saņemtais rezultāts atrodas skalas 9-15. segmentā
signāls (6, apzīmē * 100);}
if (zīme <= noll - i) {countleds = map (zīme, 0, noll - i, 0, 7);
// ja iegūtais rezultāts ir 0-7 skalas segments
tonis (6, apzīmē * 50); }
if (zīme = noll - (i-1)) {countleds = 7;
noTone (6); } // virtuālās nulles saliņa (7 segmenti)
if (zīme> noll && zīme <= noll + (i-1)) {countleds = 8;
noTone (6); } // virtuālās nulles skalas sala (8 segmenti)


{lcd.setCursor (iebilst, 0); // iestatiet kursoru uz kolonnu countleds, 0. rinda
lcd.print ("\ xff"); // aizpildīta ikona
lcd.setCursor (0, 1); // pāriet uz 2 rindu, 0. kolonna
lcd.print (char (1)); // Akumulatora ikonas indikācija
lcd.setCursor (1, 1); // pāriet uz sprieguma indikāciju
lcd.print (spriegums); // spriegums
lcd.setCursor (7, 0); // 8. kolonnas 1. rinda
if (paraksts lcd.setCursor (8, 0); // 9. kolonnas 1. rinda
if (paraksts> noll) {lcd.print ("}");} // print
lcd.setCursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // 11 kolonnas 2. rinda
lcd.print (i); // barjera
lcd.setCursor (13, 1); // 13. kolonnas 2. rinda
lcd.print (zīme); // izdrukājiet ADC vērtības vidējo vērtību
kavēšanās (10); // pagaidiet

buttonState1 = digitalRead (button1); // Lasīšanas 1. pogas statuss
buttonState2 = digitalRead (button2); // 2. pogas lasīšanas stāvoklis
if (buttonState1 == LOW) {i = i + 1; kavēšanās (50);}
// Nospiežot pogu, barjera palielinās par 1. Aizkavē 50
if (buttonState2 == LOW) {i = i - 1; kavēšanās (50);}
// Nospiežot pogu, barjera samazinās par 1. Aizkavē 50
if (i <1) {i = 1;} // Barjeras apakšējā robeža
if (i> 38) {i = 38;} // Barjeras augšējā robeža

lcd.clear ();
}
}
Autore
Jauna skice. Mainīts algoritms noderīga signāla noteikšanai. Shēma ir vienkāršota, nav elementu D3.4 un D3.3 ar visiem to stiprinājumiem. Ja jūs uzņematies savu zīmīti, tad visu šo informāciju vienkārši nevar instalēt. Vairāk jūtīguma. Nav nepatiesu pozitīvu rezultātu.
Skice:

// A3-analogā ieeja voltmetram. Iestatāms ar potenciometru R32.
// Signāla A4-analogā ieeja Iestatiet ar minimālo signālu uz D3.2
// rezistors R40 ADC nolasījumiem aptuveni 510.
// 6- zoba secinājums
// 9 - izejas frekvence 31200 Hz
# iekļaut
Šķidro kristālu LCD (12, 11, 5, 4, 3, 2);

baits z1 [8] = {// akumulatora ikona
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // mainīgais, lai saglabātu skalas līmeņa vērtību

pludiņa spriegums = 0,0; // aprēķinātais spriegums
const int button1 = 7; // barjera plus poga
const int button2 = 8; // poga barjera-mīnus
int i = 5; // barjera
kontrasta pludiņš K = 0,1; // filtru izsekošanas ātras izmaiņas (koeficients, jo mazāks, jo spēcīgāks)
kontrasta pludiņš L = 0,07; // filtra izsekošanas izmaiņas ilgā laika posmā
pludiņa zīme = 0; // filtrs
pludiņa noll = 0;

Nederīga iestatīšana () {
lcd.begin (16, 2); // displeja inicializācija
lcd.createChar (1, z1);
pinMode (9, OUTPUT);
pinMode (6, OUTPUT);
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x09;
analogWrite (9, 126); // pie 10. tapas PWM = 50% f = 31200Hz
// faktiski, ja PWM = 50%, saskaņā ar osciloskopu jums jāiestata vismaz 220 pildījums
// duins nevar ar to tikt galā. Tas nav kritiski.
}
Autore
Tie, kas skatīsies skici. Zīmes> = un <= ir aizstātas ar dīvainām kombinācijām ar & gt un & lt. Kāpēc es nezinu. Kad atkļūdošana bija normāla.

Mēs iesakām izlasīt:

Nododiet to viedtālrunim ...