Recycling des Kolokolov-Shchedrin-Tiefwassersystems Unterschiede zum ursprünglichen Schema:
1. Auf dem k561 .. Chip befindet sich KEIN Quarzoszillator und 32 kHz Quarz. Das 32-kHz-Signal gibt dem Arduino Pro Mini.
2. Tonbenachrichtigungsschaltungen auf mehreren Mikroschaltungen der Serie 561 sind ebenfalls nicht vorhanden. Arduino spricht auch das Ziel an (und ich muss sagen, es ist im Vergleich zum Schema des Autors eine ausgezeichnete Stimme).
3. Angetrieben durch unipolare Spannung 12 V (Blei-Säure-Batterie).
4. Stellen Sie die Empfindlichkeit mit den Tasten ein. Mit der ADC-Skala von 0 bis 1023 ist die Antwortschwelle von 1 bis 38 einstellbar (der Wert kann in der Skizze leicht geändert werden).

Am wichtigsten war, dass ich in diesem Artikel zeigen wollte, dass es möglich ist, MDs auf Arduino zusammenzusetzen, deren Empfindlichkeit dem Original nicht unterlegen ist (dies hat funktioniert, da die Originale der Originalschaltung in der Größenordnung von 10 Stück gesammelt wurden, sodass Vergleichsmaterial vorhanden ist). Originalschaltung:


Als ich anfing, mit Arduino zu arbeiten, war ich so begeistert, dass ich dachte, ich könnte alle Metalldetektor-Schaltkreise aus dem Internet auf Arduino finden und zusammenbauen, die ich leicht in der riesigen Müllkippe finden könnte. Im Prinzip stellte sich heraus, dass dies so war, aber die Schaltungen basierten auf einem Frequenzzähler, der es nicht ermöglichte, einen wirklich guten Bereich zu erreichen. Einige Kinderspielzeuge und ein Test des Stifts + versuchen, mit Anfängern Geld zu verdienen. Das Original dieser MD ist ein echtes Arbeitstier, mit dem Sie große Objekte in einer Entfernung von 2 m finden können (siehe das Kolokolov-Shchedrin-Buch in Google). Es gibt keine Statistiken zum transformierten md. Ich hoffe, sie erscheint mit der Unterstützung von Fans von MD und Arduino. Das Schema funktionierte mit Arduino Uno und Arduino Pro Mini.
Weiter auf dem Link wird der Geburtsprozess dieses MD auf der Website des Lötkolbens beschrieben, der mehr als ein Jahr dauerte und den Autor dazu veranlasste, Programmierduin zu studieren. Vielleicht erscheint die Skizze jemandem elend - ich akzeptiere gerne Ihre FIXES.
Im Moment gibt es eine Skizze, mit der Sie die Empfindlichkeitsbarriere einstellen können (Pin 7 verdoppelt sich +1 zur Barriere, Pin 8 -1 zur Barriere). .
Arduino über Mini 5V, 16MHz, ATmega168 und das Display verwendet diese. Neben der Waage befindet sich der Mini SD-Adapter
Wie bereits gesagt, kostet 1602 86 Rubel, ProMini - 82 Rubel. Wenn Sie möchten, können Sie sogar einen nackten ATmega168 nehmen, ein Board dafür entwickeln und die Skizze direkt hineinfüllen.Und so habe ich zum Beispiel Mama-Papa über den Stecker auf der MD-Platine installiert. Das Foto zeigt den 6-poligen Stecker von Arduino, durch den Skizzen direkt auf die Tafel gegossen wurden.
Sketch-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino
// A3 Analogeingang für Voltmeter
// A4 Analogeingang für Signal
// 6- Abschluss des Zooks
// 9 - Ausgangsfrequenz 31200 Hz
#include
Flüssigkristall-LCD (12, 11, 5, 4, 3, 2);
Byte z1 [8] = {// Batteriesymbol
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int countleds = 0; // Variable zum Speichern des Skalierungsstufenwerts
int voltag = 0; // Variable zum Speichern des Spannungswerts
int noll = 0; // Variable zum Speichern des Mittelpunktwerts
#define NUM_SAMPLES 10 // 10 analoge Samples zum Lesen in 1 Sekunde
int sum = 0; // Summe der entnommenen Proben
int sun = 0; // gleich, aber geteilt durch 10
unsigned char sample_count = 0; // aktuelle Probennummer mit
Erhaltungsspannung = 0,0; // berechnete Spannung
const int button1 = 7; // Barriere plus Taste
const int button2 = 8; // Barriere-Minus-Taste
int i = 5; // Barriere
void setup () {
lcd.begin (16, 2); // Initialisierung anzeigen
lcd.setCursor (1, 0);
lcd.setCursor (10, 1);
lcd.print ("Rx-Tx");
Verzögerung (3000);
lcd.clear ();
TCCR1A = TCCR1A & amp; 0xe0 | 2;
TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
analogWrite (9, 126); // an Pin 10 PWM = 50% f = 31200Hz
lcd.createChar (1, z1);
}}
void loop () {
int buttonState1 = HIGH; // Der Status der Schaltfläche ist eins
int buttonState2 = HIGH; // Zwei-Tasten-Status
sample_count = 0; // Kontur der Anzahl der Additionen zurücksetzen
Summe = 0; // setze die Summe von 10 Additionen zurück
while (sample_count & lt; NUM_SAMPLES) {
sum + = analogRead (A4); // Die nächste Messung wird zur Summe addiert
sample_count ++; // Die Einheit wird zur Messnummer hinzugefügt
sun = sum / 10;} // finde den Durchschnittswert aus 10 Messungen
noll = analogRead (A3) / 2; // Mittelpunktleistung
Schwebespannung = Karte (analogRead (A3), 0,1023,0,1500) / 100,0;
// Voltmeter am Eingang A3
if (sun & gt; = noll + i) {countleds = map (sun, noll + i, noll * 2 - 250, 9, 14);
// wenn sich das empfangene Ergebnis auf einem 9-15 Segment der Skala befindet
Ton (6, gezählte * 100);}
if (sun & lt; = noll - i) {countleds = map (sun, 116, noll - i, 0, 7);
// wenn das resultierende Ergebnis 0-7 Segment der Skala ist
Ton (6, Countleds * 50); }}
if (Sonne & lt; noll & amp; & amp; Sonne & gt; = noll - (i-1)) {countleds = 7;
noTone (6); } // Insel der virtuellen NULL (7 Segmente)
if (Sonne & gt; noll & amp; & amp; Sonne & lt; = noll + (i-1)) {countleds = 8;
noTone (6); } // Insel der virtuellen NULL-Skala (8 Segmente)
{lcd.setCursor (countleds, 0); // setze den Cursor auf die Spalte countleds, Zeile 0
lcd.print ("\ xff"); // gefülltes Symbol
lcd.setCursor (0, 1); // gehe zu 2 Zeilen, Spalte-0
lcd.print (char (1)); // Batteriesymbolanzeige
lcd.setCursor (1, 1); // zur Spannungsanzeige wechseln
lcd.print (Spannung); // Spannung
lcd.setCursor (7, 0); // 8. Spalte 1. Zeile
if (sun & lt; noll) {lcd.print ("{");} // print
lcd.setCursor (8, 0); // 9. Spalte 1. Zeile
if (sun & gt; noll) {lcd.print ("}");} // print
lcd.setCursor (7, 1);
lcd.print ("B =");
lcd.setCursor (9, 1); // 11 Spalte 2. Zeile
lcd.print (i); // Barriere
lcd.setCursor (13, 1); // 13. Spalte 2. Zeile
lcd.print (Sonne); // drucke den Durchschnittswert des ADC-Wertes
Verzögerung (100); // warte
buttonState1 = digitalRead (button1); // Status von Schaltfläche 1 lesen
buttonState2 = digitalRead (button2); // Status von Schaltfläche 2 lesen
if (buttonState1 == LOW) {i = i + 1; Verzögerung (50);}
// Wenn die Taste gedrückt wird, wächst die Barriere um 1. Verzögerung 50
if (buttonState2 == LOW) {i = i - 1; Verzögerung (50);}
// Wenn die Taste gedrückt wird, verringert sich die Barriere um 1. Verzögerung 50
if (i & lt; 1) {i = 1;} // Untere Grenze der Barriere
if (i & gt; 38) {i = 38;} // Die obere Grenze der Barriere
lcd.clear ();
}}
}}
Ich habe das Auto nicht benutzt. Die letzten beiden Elemente des TL074 blieben im Leerlauf. Aber auf der Rennstrecke und auf der Platine sind sie. Vielleicht möchten Sie sie etwas später in einen funktionsfähigen Zustand bringen. Ich glaube, dass ich mein Ziel erreicht habe. Die Anzeigeeinheit funktioniert wunderbar. Alles andere hängt von der MD ab.