Recyclage du plan d'eau profonde de Kolokolov-Shchedrin. Différences par rapport au schéma d'origine:
1. Il n'y a PAS d'oscillateur à cristal sur la puce k561 .. et le quartz 32 kHz. Le signal de 32 kHz donne l'Arduino Pro Mini.
2. Les circuits de notification sonore sur plusieurs microcircuits de la série 561 ne sont également pas présents, Arduino exprime également la cible (et je dois dire que c'est une excellente expression, par rapport au schéma de l'auteur).
3. Alimenté par une tension unipolaire 12v (batterie plomb-acide).
4. Réglez la sensibilité avec les boutons. Avec l'échelle ADC de 0 à 1023, le seuil de réponse est réglable de 1 à 38 (la valeur peut facilement être modifiée dans l'esquisse).
Plus important encore, je voulais montrer dans cet article qu'il est possible d'assembler des MD sur Arduino non inférieurs à l'original en sensibilité (cela a fonctionné, car les originaux du circuit d'origine ont été collectés de l'ordre de 10 pièces, donc il y a du matériel à comparer). Circuit d'origine:
Lorsque j'ai commencé à travailler avec Arduino, j'étais tellement enthousiaste que j'ai pensé que je pouvais trouver et assembler tous les circuits de détection de métaux sur Internet sur Arduino que je pouvais facilement trouver dans le vaste dépotoir. En principe, cela s'est avéré ainsi, mais les circuits étaient basés sur un compteur de fréquence, ce qui ne permettait pas d'atteindre une très bonne gamme. Quelques jouets pour enfants et un test du stylo + tente de gagner de l'argent sur les débutants. L'original de ce MD est un véritable cheval de bataille qui vous permet de trouver de gros objets à une distance de 2m (voir le livre Kolokolov-Shchedrin dans Google). Il n'y a pas de statistiques sur le md transformé. J'espère qu'elle apparaîtra avec le soutien des fans de MD et Arduino. Le schéma a fonctionné avec Arduino Uno et Arduino Pro Mini.
Plus loin sur le lien est exposé le processus de naissance de ce MD sur le site Web du Fer à souder, qui a duré plus d'un an et a poussé l'auteur à étudier la programmation duin. Peut-être que le croquis semblera misérable à quelqu'un - j'accepterai volontiers vos CORRECTIONS.
À l'heure actuelle, il existe un croquis qui vous permet d'ajuster la barrière de sensibilité (broche 7 douins +1 à la barrière, broche 8 -1 à la barrière). .
Arduino sur mini 5v, 16MHz, ATmega168 et l'écran les a utilisés. À côté de la balance se trouve l'adaptateur Mini SD
Comme déjà dit 1602 coûte 86 roubles, ProMini - 82 roubles. Si vous le souhaitez, vous pouvez généralement prendre un ATmega168 nu, développer un tableau pour celui-ci et y remplir le croquis directement.Et donc, par exemple, j'ai installé maman-papa sur la carte MD en utilisant le connecteur. La photo montre la fiche à 6 broches d'Arduino, à travers laquelle des croquis ont été coulés directement sur la carte.
Sketch-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino
// Entrée analogique A3 pour voltmètre
// Entrée analogique A4 pour signal
// 6 - conclusion
// 9 - fréquence de sortie 31200 Hz
#include
LCD à cristaux liquides (12, 11, 5, 4, 3, 2);
octet z1 [8] = {// icône de batterie
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // variable pour stocker la valeur du niveau d'échelle
int voltag = 0; // variable pour stocker la valeur de tension
int noll = 0; // variable pour stocker la valeur médiane
#define NUM_SAMPLES 10 // 10 échantillons analogiques à lire en 1 seconde
int sum = 0; // somme des échantillons prélevés
soleil int = 0; // identique, mais divisé par 10
unsigned char sample_count = 0; // numéro d'échantillon actuel avec
tension flottante = 0,0; // tension calculée
const int button1 = 7; // bouton barrière plus
const int button2 = 8; // bouton barrière moins
int i = 5; // barrière
void setup () {
lcd.begin (16, 2); // affiche l'initialisation
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); // à la broche 10 PWM = 50% f = 31200Hz
lcd.createChar (1, z1);
}
boucle vide () {
int buttonState1 = HIGH; // L'état du bouton est un
int buttonState2 = HIGH; // État à deux boutons
sample_count = 0; // réinitialise le contour du nombre d'additions
somme = 0; // réinitialise la somme de 10 ajouts
while (sample_count & lt; NUM_SAMPLES) {
sum + = analogRead (A4); // la mesure suivante est ajoutée à la somme
sample_count ++; // l'unité est ajoutée au numéro de mesure
sun = sum / 10;} // trouve la valeur moyenne de 10 mesures
noll = analogRead (A3) / 2; // puissance médiane
tension flottante = carte (lecture analogique (A3), 0,1023,0,1500) /100,0;
// Voltmètre construit à l'entrée A3
if (soleil & gt; = noll + i) {countleds = carte (soleil, noll + i, noll * 2 - 250, 9, 14);
// si le résultat reçu est sur le 9-15ème segment de l'échelle
ton (6, countleds * 100);}
if (soleil & lt; = noll - i) {countleds = carte (soleil, 116, noll - i, 0, 7);
// si le résultat obtenu est un segment de 0 à 7 de l'échelle
ton (6, countleds * 50); }
if (soleil & lt; noll & amp; & amp; soleil & gt; = noll - (i-1)) {countleds = 7;
noTone (6); } // îlot de ZERO virtuel (7 segments)
if (soleil & gt; noll & amp; & amp; soleil & lt; = noll + (i-1)) {countleds = 8;
noTone (6); } // îlot d'échelle virtuelle ZERO (8 segments)
{lcd.setCursor (countleds, 0); // place le curseur sur la colonne countleds, ligne 0
lcd.print ("\ xff"); // icône remplie
lcd.setCursor (0, 1); // passe à 2 lignes, colonne-0
lcd.print (char (1)); // Indication de l'icône de la batterie
lcd.setCursor (1, 1); // passe à l'indication de tension
lcd.print (tension); // tension
lcd.setCursor (7, 0); // 8ème colonne 1ère ligne
if (sun & lt; noll) {lcd.print ("{");} // print
lcd.setCursor (8, 0); // 9ème colonne 1ère ligne
if (sun & gt; noll) {lcd.print ("}");} // print
lcd.setCursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // 11 colonne 2e ligne
lcd.print (i); // barrière
lcd.setCursor (13, 1); // 13e colonne 2e rangée
lcd.print (soleil); // affiche la valeur moyenne de la valeur ADC
retard (100); // attend
buttonState1 = digitalRead (bouton1); // État du bouton de lecture 1
buttonState2 = digitalRead (bouton2); // Lire l'état du bouton 2
if (buttonState1 == LOW) {i = i + 1; retard (50);}
// Lorsque le bouton est enfoncé, la barrière augmente de 1. Délai 50
if (buttonState2 == LOW) {i = i - 1; retard (50);}
// Lorsque le bouton est enfoncé, la barrière diminue de 1. Délai 50
if (i & lt; 1) {i = 1;} // Limite inférieure de la barrière
if (i & gt; 38) {i = 38;} // La limite supérieure de la barrière
lcd.clear ();
}
}
Je n'ai pas utilisé la voiture. Les deux derniers éléments du TL074 sont restés inactifs. Mais ils sont sur le circuit et la carte. Vous voudrez peut-être les remettre en état de marche un peu plus tard. Je crois que j'ai atteint mon objectif. L'unité d'affichage fonctionne à merveille. Tout le reste dépend du MD.