Riciclaggio del programma di acque profonde di Kolokolov-Shchedrin Differenze dallo schema originale:
1. Non c'è oscillatore di cristallo sul chip k561 .. e al quarzo 32 kHz. Il segnale a 32 kHz fornisce Arduino Pro Mini.
2. Sono assenti anche i circuiti di notifica sonora su diversi microcircuiti della serie 561 - esprime anche gli obiettivi Arduino (e devo dire, voci eccellenti, rispetto al circuito dell'autore).
3. Alimentato da tensione unipolare 12v (batteria al piombo-acido).
4. Regola la sensibilità con i pulsanti. Con la scala ADC da 0 a 1023, la soglia di risposta è regolabile da 1 a 38 (il valore può essere facilmente modificato nello schizzo).
Ancora più importante, ho voluto mostrare in questo articolo che è possibile assemblare MD su Arduino non inferiore all'originale in termini di sensibilità (questo ha funzionato, perché gli originali del circuito originale sono stati raccolti nell'ordine di 10 pezzi, quindi c'è materiale per il confronto). Circuito originale:
Quando ho iniziato a lavorare con Arduino, ero così entusiasta che pensavo di poter trovare e assemblare qualsiasi circuito di Metal Detector da Internet su Arduino che potevo facilmente trovare nella vasta discarica. In linea di principio, si è rivelato in questo modo, ma i circuiti si basavano su un contatore di frequenza, che non consentiva di raggiungere un intervallo davvero buono. Alcuni giocattoli per bambini e un test della penna + tentano di fare soldi per i principianti. L'originale di questo MD è un vero cavallo di battaglia che ti consente di trovare oggetti di grandi dimensioni a una distanza di 2 m (vedi il libro Kolokolov-Shchedrin su Google). Non ci sono statistiche sul md trasformato. Spero che appaia con il supporto dei fan di MD e Arduino. Lo schema ha funzionato con Arduino Uno e Arduino Pro Mini.
Più avanti sul collegamento è illustrato il processo di nascita di questo MD sul sito web del Saldatore, che è durato più di un anno e ha spinto l'autore a studiare il duin di programmazione. Forse lo schizzo sembrerà disgraziato a qualcuno - accetterò volentieri i tuoi FIXES.
Al momento, esiste uno schizzo che consente di regolare la barriera di sensibilità (il pin 7 fa +1 alla barriera, il pin 8 -1 alla barriera). .
Arduino circa mini 5v, 16MHz, ATmega168 e il display li utilizzava. Accanto alla bilancia si trova l'adattatore Mini SD
Come già detto 1602 costa 86 rubli, ProMini - 82 rubli. Se lo desideri, puoi generalmente prendere un ATmega168 nudo, sviluppare una scheda per esso e riempire lo schizzo direttamente al suo interno.E così, per esempio, ho installato mamma-papà sulla scheda MD usando il connettore. La foto mostra la spina a 6 pin di Arduino, attraverso la quale gli schizzi sono stati versati direttamente sulla lavagna.
Sketch-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino
// Ingresso analogico A3 per voltmetro
// Ingresso analogico A4 per segnale
// 6- conclusione dello zook
// 9 - frequenza di uscita 31200 Hz
#include
LCD a cristalli liquidi (12, 11, 5, 4, 3, 2);
byte z1 [8] = {// icona batteria
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // variabile per memorizzare il valore del livello di scala
int voltag = 0; // variabile per memorizzare il valore di tensione
int noll = 0; // variabile per memorizzare il valore del punto medio
#define NUM_SAMPLES 10 // 10 campioni analogici da leggere in 1 secondo
int sum = 0; // somma dei campioni prelevati
int sun = 0; // stesso, ma diviso per 10
char senza segno sample_count = 0; // numero del campione corrente con
tensione a galleggiante = 0,0; // tensione calcolata
const int button1 = 7; // pulsante barriera più
const int button2 = 8; // pulsante barriera-meno
int i = 5; // barriera
void setup () {
lcd.begin (16, 2); // visualizza l'inizializzazione
lcd.setCursor (1, 0);
lcd.setCursor (10, 1);
lcd.print ("Rx-Tx");
ritardo (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 () {
int buttonState1 = HIGH; // Lo stato del pulsante è uno
int buttonState2 = HIGH; // Stato a due pulsanti
sample_count = 0; // ripristina il contorno del numero di aggiunte
somma = 0; // resetta la somma di 10 aggiunte
while (sample_count & lt; NUM_SAMPLES) {
somma + = analogRead (A4); // la misura successiva viene aggiunta alla somma
sample_count ++; // l'unità viene aggiunta al numero di misurazione
sun = sum / 10;} // trova il valore medio tra 10 misurazioni
noll = analogRead (A3) / 2; // potenza del punto medio
tensione a galleggiante = mappa (analogRead (A3), 0,1023,0,1500) /100,0;
// Voltmetro incorporato all'ingresso A3
if (sun & gt; = noll + i) {countleds = map (sun, noll + i, noll * 2 - 250, 9, 14);
// se il risultato ricevuto si trova sul 9-15 ° segmento della scala
tono (6, conteggi * 100);}
if (sun & lt; = noll - i) {countleds = map (sun, 116, noll - i, 0, 7);
// se il risultato risultante è 0-7 segmenti della scala
tono (6, contorni * 50); }
if (sun & lt; noll & amp; & amp; sun & gt; = noll - (i-1)) {countleds = 7;
noTone (6); } // isolotto di ZERO virtuale (7 segmenti)
if (sun & gt; noll & amp; & amp; sun & lt; = noll + (i-1)) {countleds = 8;
noTone (6); } // isola di scala ZERO virtuale (8 segmenti)
{lcd.setCursor (countleds, 0); // imposta il cursore sulla colonna dei conteggi, riga 0
lcd.print ("\ xff"); // icona riempita
lcd.setCursor (0, 1); // passa a 2 righe, colonna-0
lcd.print (char (1)); // Indicazione icona batteria
lcd.setCursor (1, 1); // passa all'indicazione di tensione
lcd.print (voltaggio); // voltaggio
lcd.setCursor (7, 0); // 8a colonna 1a fila
if (sun & lt; noll) {lcd.print ("{");} // print
lcd.setCursor (8, 0); // 9a colonna 1a riga
if (sun & gt; noll) {lcd.print ("}");} // print
lcd.setCursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // 11 colonna seconda riga
lcd.print (i); // barriera
lcd.setCursor (13, 1); // 13ª colonna seconda riga
lcd.print (sun); // stampa il valore medio del valore ADC
ritardo (100); // aspetta
buttonState1 = digitalRead (button1); // Leggi lo stato del pulsante 1
buttonState2 = digitalRead (button2); // Leggi lo stato del pulsante 2
if (buttonState1 == LOW) {i = i + 1; ritardo (50);}
// Quando si preme il pulsante, la barriera aumenta di 1. Ritardo 50
if (buttonState2 == LOW) {i = i - 1; ritardo (50);}
// Quando si preme il pulsante, la barriera diminuisce di 1. Ritardo 50
if (i & lt; 1) {i = 1;} // Limite inferiore della barriera
if (i & gt; 38) {i = 38;} // Il limite superiore della barriera
lcd.clear ();
}
}
Non ho usato la macchina. Gli ultimi due elementi di TL074 sono stati lasciati inattivi. Ma sul circuito e sulla scheda lo sono. Potresti volerli portare in condizioni di lavoro un po 'più tardi. Credo di aver raggiunto il mio obiettivo. L'unità display funziona meravigliosamente. Tutto il resto dipende dal MD.