Сообщений: 594
Своих тем: 3
Рег.: 11-2021
Репутация:
5
#553
у вас два раза ln , .println(................
должно быть одно , последное.
Код: ///// Монитор порта /////
Serial.print("Amplitude: "); // Последовательный порт "Amplitude: ".
Serial.println(amplitude); // Значение амплитуды.
Serial.print("Current threshold: ");
Serial.println(threshold);
delay(10); // Перекур
вот так
Код: ///// Монитор порта /////
Serial.print("Amplitude: "); // Последовательный порт "Amplitude: ".
Serial.print(amplitude); // Значение амплитуды.
Serial.print("Current threshold: ");
Serial.println(threshold);
delay(10); // Перекур
Сообщений: 3660
Своих тем: 9
Рег.: 10-2021
Репутация:
54
Сообщений: 3660
Своих тем: 9
Рег.: 10-2021
Репутация:
54
Сообщений: 168
Своих тем: 0
Рег.: 09-2021
Репутация:
6
-vlad-, наконец то добрался до переделки пирата. Поменял делитель опорного напряжения на 5в, выход первого оу подключил через нч фильтр 10к и 360пф напрямую на вход ацп. Резистора фильтра достаточно для защиты входа контроллера.
Вместо нормальной катушки взял индуктивность 300мкгн без сердечника. Вот что получилось на выходе оу.

Это без металла осциллограф

Это ардуиновский плоттер

с металлом

Ардуиновский плоттер. Обрезанный верх, это уровень сигнала на входе ацп больше 5в.
Вот ещё сигнал с металлом.
Непонятно почему сразу от таймера на мосфет не подают. У меня от таймера фронты получились лучше.
Сообщений: 3660
Своих тем: 9
Рег.: 10-2021
Репутация:
54
Код: ///// МД ПИРАТ на АРДУИНО Nano /////
/////www.Technodium.ru/////
#include <Arduino.h> // Подключаю библиотеку
const int buttonUpPin = 2; // D2 Кнопка Чувствительность +
const int buttonDownPin = 3; // D3 Кнопка Чувствительность -
const int ledUpPin = A2; // A2 Светодиод Чувствительность +
const int ledDownPin = A3; // A3 Светодиод Чувствительность -
#define ledPin4 4 // D4 Светодиод для амплитуды <=300
#define ledPin5 5 // D5 Светодиод для амплитуды >400
#define ledPin6 6 // D6 Светодиод для амплитуды >500
#define ledPin7 7 // D7 Светодиод для амплитуды >600
#define ledPin8 8 // D8 Светодиод для амплитуды >700
const int pwmPin9 = 9; // D9 Пин для IRF740 и катушки
#define SPEAKER_PIN 11 // D11 Пин динамика
#define led_sound_scheme_Pin 13 // D13 Светодиод индикатор нажатия кнопок
#define INPUT_PIN A0 // A0 Пин для входного сигнала с TL071
#define button_sound_scheme_Pin A4 // A4 Кнопка для переключения звуковых схем.
#define BUTTON_SHUTDOWN_PIN A5 // A5 для кнопки SHUTDOWN (PAM8302)
#define SHUTDOWN_PIN 12 // D12 для управления SHUTDOWN (PAM8302)
bool outputState = LOW; // D12 Сохраняю переменную
bool lastButtonState = HIGH; // D12 Преведущее состояние кнопки
int threshold = 185; // Начальный порог (ЧУВСТВИТЕЛЬНОСТЬ)
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
///// Звуковая схема Пирата /////
int soundScheme = 0; // Звуковая схема Пирата при включении:
// 0-низкие частоты
// 1-средние частоты
// 2-высокие частоты
/////////////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(9600); // Монитор порта
pinMode(pwmPin9, OUTPUT); // D9 Пин для IRF740 и катушки
pinMode(ledPin4, OUTPUT); // Выход пин ledPin4 амплитуда >300
pinMode(ledPin5, OUTPUT); // Выход пин ledPin5 амплитуда >400
pinMode(ledPin6, OUTPUT); // Выход пин ledPin6 амплитуда >500
pinMode(ledPin7, OUTPUT); // Выход пин ledPin7 амплитуда >600
pinMode(ledPin8, OUTPUT); // Выход пин ledPin8 амплитуда >700
pinMode(SPEAKER_PIN, OUTPUT); // Выход пин SPEAKER_PIN
pinMode(buttonUpPin, INPUT_PULLUP); // D2 Кнопка Чувствительность +
pinMode(buttonDownPin, INPUT_PULLUP); // D3 Кнопка Чувствительность -
pinMode(ledUpPin, OUTPUT); // A2 Светодиод Чувствительность +
pinMode(ledDownPin, OUTPUT); // A3 Светодиод Чувствительность -
pinMode(button_sound_scheme_Pin, INPUT_PULLUP); // A4 Кнопка для переключения звуковых схем.
pinMode(BUTTON_SHUTDOWN_PIN, INPUT_PULLUP); // A5 кнопка SHUTDOWN (PAM8302)
pinMode(SHUTDOWN_PIN, OUTPUT); // D12 для управления SHUTDOWN (PAM8302)
pinMode(led_sound_scheme_Pin, OUTPUT); // D13 Светодиод индикатор нажатия кнопок
pinMode(INPUT_PIN, INPUT); // A0 входящий пин INPUT_PIN с TL071
digitalWrite(SHUTDOWN_PIN, HIGH); // D12 При включение Пирата - LOW на PAM8302
///// Тест световой и звуковой при включении металоискателя /////
digitalWrite(ledUpPin, HIGH);tone(SPEAKER_PIN, 460);
delay(100);
digitalWrite(ledUpPin, LOW);
digitalWrite(ledDownPin, HIGH);tone(SPEAKER_PIN, 480);
delay(100);
digitalWrite(ledDownPin, LOW);
digitalWrite(ledPin4, HIGH);tone(SPEAKER_PIN, 500);
delay(100);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, HIGH);tone(SPEAKER_PIN, 520);
delay(100);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, HIGH);tone(SPEAKER_PIN, 540);
delay(100);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin7, HIGH);tone(SPEAKER_PIN, 560);
delay(100);
digitalWrite(ledPin7, LOW);
digitalWrite(ledPin8, HIGH);tone(SPEAKER_PIN, 800);
delay(100);
digitalWrite(ledPin8, LOW);
digitalWrite(led_sound_scheme_Pin, HIGH);tone(SPEAKER_PIN, 1000);
delay(100);
digitalWrite(led_sound_scheme_Pin, LOW);
// Генерация звука в динамике в течение <1 секунды
tone(SPEAKER_PIN, 1500,100);
// Жду окончания тона
delay(10);
//////////////////////////////////////////////////////////////////////////////////
///// ТАЙМЕР 1 Генерирую частоту 125Гц125мс(D9) /////
///// Подсказка от KEN /////
TCCR1B = 0x18;
TCCR1A = 0xC2; // Инвертированный сигнал на D9 (TCCR1A = 0xC2;)для NE555.
// Неинвертированный сигнал на D9 (TCCR1A = 0x82;)
ICR1 = 16000; // Частота
OCR1A = 250; // Ширина импульса
TCNT1=0x0;
pinMode(9, OUTPUT); // D9 Пин для IRF740 и катушки
TCCR1B |= 2;
}
void loop() {
///// КНОПКИ D2,D3 (ЧУВСТВИТЕЛЬНОСТЬ) /////
if (millis() - lastDebounceTime > debounceDelay) {
if (digitalRead(buttonUpPin) == LOW) { //Нажимаю D2
threshold++; //Шаг +1
if (threshold > 399) threshold = 399; //Шкала не больше 399
digitalWrite(ledUpPin, HIGH); //A2 Светодиод Чувствительность +
} else {
digitalWrite(ledUpPin, LOW);
}
if (digitalRead(buttonDownPin) == LOW) { //Нажимаю D3
threshold--; //Шаг -1
if (threshold < 150) threshold = 150; //Шкала не меньше 150
digitalWrite(ledDownPin, HIGH); //A3 Светодиод Чувствительность -
} else {
digitalWrite(ledDownPin, LOW);
}
lastDebounceTime = millis(); //Обновляю время
}
///// Кнопка SHUTDOWN (PAM8302) /////
bool currentButtonState = digitalRead(BUTTON_SHUTDOWN_PIN); // Считываю кнопку A5
if (currentButtonState == LOW && lastButtonState == HIGH) {
// Нажата - меняю состояние D12
outputState = !outputState; // Переключаем D12
digitalWrite(SHUTDOWN_PIN, outputState); // Обновляю D12
}
// СВЕТОДИОД SHUTDOWN
if (currentButtonState == LOW) {
digitalWrite(led_sound_scheme_Pin, HIGH); // Нажата - светимся
} else {
digitalWrite(led_sound_scheme_Pin, LOW); // Не нажата - не светимся
}
lastButtonState = currentButtonState; // Обновляю A5
delay(10); // Дребезг
/////////////////////////////////////////////////////////////////////////////
///// Кнопка выбора звуковой схемы /////
if (digitalRead(button_sound_scheme_Pin) == LOW) { // Нажата ли кнопка?
soundScheme = (soundScheme + 1) % 3; // Переключаю схемы
indicateSoundScheme(); // Индикация звуковой схемы
delay(10); // Дребезг кнопки
/////////////////////////////////////////////////////////////////////////////////
}
///// Измерение амплитуды на пине A0 /////
unsigned long startTime = millis(); // Сохраняю время
int maxValue = 0; // максимальное значение для переменной
int minValue = 1023; // минимальное значение для переменной
while (millis() - startTime < 100) { // Цикл 100 мс.
int currentValue = analogRead(INPUT_PIN); // Считываю
if (currentValue > maxValue) { // Если текущее > максимального
maxValue = currentValue; // Обновляю максимальное
}
if (currentValue < minValue) { // Если текущее < минимального
minValue = currentValue; // Обновляю минимальное
}
}
int amplitude = maxValue - minValue; // Калькулятор амплитуды
///////////////////////////////////////////////////////////////////////////////////
///// Монитор порта /////
Serial.print("Amplitude: "); // Последовательный порт "Amplitude: ".
Serial.println(amplitude); // Значение амплитуды.
Serial.print("Current threshold: ");
Serial.println(threshold);
delay(10); // Перекур
///// Амплитуда и звуковые схемы /////
switch (soundScheme) { // Выбор звуковой схемы.
case 0: // звуковая схема - низкие частоты
if (amplitude > 700) {
digitalWrite(ledPin8, HIGH);//светимся
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
tone(SPEAKER_PIN, 6);
} else if (amplitude > 600) {
digitalWrite(ledPin7, HIGH);//светимся
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
tone(SPEAKER_PIN, 5);
} else if (amplitude > 500) {
digitalWrite(ledPin6, HIGH);//светимся
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
tone(SPEAKER_PIN, 3);
} else if (amplitude > 400) {
digitalWrite(ledPin5, HIGH);//светимся
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
tone(SPEAKER_PIN, 2);
} else if (amplitude > threshold) {
digitalWrite(ledPin4, HIGH);//светимся
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
tone(SPEAKER_PIN, 1);
} else {
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
noTone(SPEAKER_PIN);
}
break;
case 1: // звуковая схема - средние частоты.
if (amplitude > 700) {
digitalWrite(ledPin8, HIGH);//светимся
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
tone(SPEAKER_PIN, 500);
} else if (amplitude > 600) {
digitalWrite(ledPin7, HIGH);//светимся
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
tone(SPEAKER_PIN, 400);
} else if (amplitude > 500) {
digitalWrite(ledPin6, HIGH);//светимся
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
tone(SPEAKER_PIN, 300);
} else if (amplitude > 400) {
digitalWrite(ledPin5, HIGH);//светимся
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
tone(SPEAKER_PIN, 200);
} else if (amplitude > threshold) {
digitalWrite(ledPin4, HIGH);//светимся
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
tone(SPEAKER_PIN, 100);
} else {
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
noTone(SPEAKER_PIN);
}
break;
case 2: // звуковая схема - высокие частоты
if (amplitude > 700) {
digitalWrite(ledPin8, HIGH);//светимся
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
tone(SPEAKER_PIN, 1000);
} else if (amplitude > 600) {
digitalWrite(ledPin7, HIGH);//светимся
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
tone(SPEAKER_PIN, 900);
} else if (amplitude > 500) {
digitalWrite(ledPin6, HIGH);//светимся
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
tone(SPEAKER_PIN, 800);
} else if (amplitude > 400) {
digitalWrite(ledPin5, HIGH);//светимся
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
tone(SPEAKER_PIN, 700);
} else if (amplitude > threshold) {
digitalWrite(ledPin4, HIGH);//светимся
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
tone(SPEAKER_PIN, 600);
} else {
digitalWrite(ledPin8, LOW); //blackout
digitalWrite(ledPin7, LOW); //blackout
digitalWrite(ledPin6, LOW); //blackout
digitalWrite(ledPin5, LOW); //blackout
digitalWrite(ledPin4, LOW); //blackout
noTone(SPEAKER_PIN);
}
break;
}
}
///// Моргаем светодиодом: 1,2 или 3 раза, смотря какая схема /////
void indicateSoundScheme() {
for (int i = 0; i <= soundScheme; i++) { // Цикл текущей звуковой схемы.
digitalWrite(led_sound_scheme_Pin, HIGH); // Включаю индикацию звуковой схемы
delay(250); // перекур
digitalWrite(led_sound_scheme_Pin, LOW); // Выключаю индикацию звуковой схемы
delay(250); // перекур
//////////////////////////////////////////////////////////////////////////////
}
}
Вот, что в моей голове творится.
(04-12-2025, 21:37)vako : Вот что получилось на выходе оу. У меня мало опыта, я только через оптрон смог считать сигнал, что бы на этом построить.
vako, В будущем я изменю количество витков и попробую сделать fe no fe,поигравшись с частотой. Самому интересно.
Сообщений: 168
Своих тем: 0
Рег.: 09-2021
Репутация:
6
(04-12-2025, 21:52)-vlad- : У меня глупая идея есть....все таки попробовать в будущем на Пиратовской катушке программно сделать Fe no Fe. Это как?
(04-12-2025, 21:52)-vlad- : Да почему, Кеn только через таймер и делает. Я про конкретную схему пирата.
(04-12-2025, 21:52)-vlad- : Вот, что в моей голове творится. У вас полезный сигнал появляется после закрытия мосфета. Именно этот сигнал главный и он должен задавать начало работы ацп, а у вас получается ацп тупо лупит в течении 0.1сек. отыскивая максимум и минимум. Половина времени тратится на считывание ненужных данных. Посмотрите, как выглядит полезный сигнал. Можно просто после закрытия транзистора запустить ацп раз 40, это будет около 4мс. Последнюю выборку запомнить, она будет опорной, там по идее сигнал должен устаканится, хотя надо ещё посмотреть. В сигнале есть "горб" (на картинке без металла его нет). Вот его тоже надо учитывать в вычислениях, вернее разницу между этим "горбом" и опорой.
|