Сообщений: 3977
Своих тем: 11
Рег.: 10-2021
Репутация:
58
боб, Ты же знаешь мое отношение к счетчику Гейгера. А тут можно программно сделать озвучку до 600Гц например, радующее ухо. Светодиоды я могу урезать до 4 например.
А ардуина убирает лишние узлы схемы, такие как таймер 555 или УД2 , заменить на tl и из неё выжать попробовать всё+ ещё грубая и точная настройка на этих резисторах, так же в утиль.
Ну яж и говорю, обострение
(01-09-2025, 11:05)gal : ответ в сериал монитор Светики загораются, звука нет. Я там чуть выше ошибся. Светодиоды загораются от входящего сигнала(чем выше частота)по одному, а вот звука нет.
Сообщений: 645
Своих тем: 3
Рег.: 11-2021
Репутация:
5
у вас на сериал монитор одни нуля
Сообщений: 3977
Своих тем: 11
Рег.: 10-2021
Репутация:
58
Попробую ещё раз прописать:
if (frequency > 50 && frequency <= 100) {
digitalWrite(ledPin10, HIGH);
tone(SPEAKER_PIN, 500);
} else {
digitalWrite(ledPin10, LOW);
}
(01-09-2025, 11:23)gal : сериал монитор одни нуля Почему нули?
Сообщений: 645
Своих тем: 3
Рег.: 11-2021
Репутация:
5
// Тут я прерываю для подсчета импульсов
//void countPulse() {
// pulseCount++;
//}
это не работает
а это работает, но в сетап пин моде есть glitch
PHP код: int pulseCount; //int frequency =pulseCount;
const int SPEAKER_PIN = 12; // Пин усилителя для динамика const int COIL_PIN = 13; // Пин для IRF740 и катушки const int frequencyPin = 2; // Пин D2 для входящего сигнала с TL072 const int ledPin3 = 3; // Светодиод для частоты до 10Гц const int ledPin5 = 5; // Светодиод для частоты до 20Гц const int ledPin6 = 6; // Светодиод для частоты до 30Гц const int ledPin9 = 9; // Светодиод для частоты до 40Гц const int ledPin11 = 11; // Светодиод для частоты до 50Гц const int ledPin10 = 10; // Светодиод для частоты до 60Гц const int ledPin8 = 8; // Светодиод для частоты до 70Гц const int ledPin7 = 7; // Светодиод для частоты до 125Гц
//volatile unsigned long pulseCount = 0; // Считаю импульсы
void setup() { Serial.begin(115200);
// Настройка режимов пинов скетча pinMode(ledPin3, OUTPUT); pinMode(ledPin5, OUTPUT); // pinMode(ledPin6, OUTPUT); //pinMode(ledPin7, OUTPUT); /// pinMode(ledPin8, OUTPUT); // pinMode(ledPin9, OUTPUT); // pinMode(ledPin10, OUTPUT); // pinMode(ledPin11, OUTPUT);
///pinMode(ledPin5, OUTPUT); // pinMode(ledPin6, OUTPUT); // pinMode(ledPin7, OUTPUT);
// pinMode(ledPin8, OUTPUT); // pinMode(ledPin9, OUTPUT); //pinMode(ledPin10, OUTPUT); //pinMode(ledPin11, OUTPUT); /* pinMode(SPEAKER_PIN, OUTPUT); pinMode(COIL_PIN, OUTPUT); pinMode(frequencyPin, INPUT); */ }
void loop() { // Задерживаю на 1 сек и замеряю частоту сигнала //delay(1000); unsigned long frequency = pulseCount; // Частота в герцах
// Сброс счетчика на новый замер // pulseCount = 0; pulseCount++; if (pulseCount > 125) { pulseCount = 0; } ////////////////////////// Serial.print(" frequency = "); Serial.print(frequency); Serial.print(" pulseCount = "); Serial.print(pulseCount); Serial.println(); ///////////////////////// delay(1000);
} // Тут я прерываю для подсчета импульсов //void countPulse() { // pulseCount++; //}
Сообщений: 3977
Своих тем: 11
Рег.: 10-2021
Репутация:
58
Сообщений: 645
Своих тем: 3
Рег.: 11-2021
Репутация:
5
когда в сериал монитор частота меняется используйте это
Код: if (frequency >= 1 && frequency <= 10) {
digitalWrite(ledPin3, HIGH);
tone(SPEAKER_PIN, 250);
} else {
digitalWrite(ledPin3, LOW);
}
Сообщений: 3977
Своих тем: 11
Рег.: 10-2021
Репутация:
58
Сообщений: 645
Своих тем: 3
Рег.: 11-2021
Репутация:
5
Сообщений: 3977
Своих тем: 11
Рег.: 10-2021
Репутация:
58
Сообщений: 3977
Своих тем: 11
Рег.: 10-2021
Репутация:
58
gal, Ну вроде заработал звук на сигнал, пока сам я не понял, где ошибка была. Может скобку не там ставил где то?
Спасибо.
Код: const int SPEAKER_PIN = 12; // Пин усилителя для динамика
const int COIL_PIN = 13; // Пин для IRF740 и катушки
const int FREQUENCY = 125; // 125Гц
const int frequencyPin= 2; // Пин D2 для входящего сигнала с TL072
const int ledPin3 = 3; // Светодиод для частоты до 10Гц
const int ledPin5 = 5; // Светодиод для частоты до 20Гц
const int ledPin6 = 6; // Светодиод для частоты до 30Гц
const int ledPin9 = 9; // Светодиод для частоты до 40Гц
const int ledPin11 = 11; // Светодиод для частоты до 50Гц
const int ledPin10 = 10; // Светодиод для частоты до 60Гц
const int ledPin8 = 8; // Светодиод для частоты до 70Гц
const int ledPin7 = 7; // Светодиод для частоты до 125Гц
volatile unsigned long pulseCount = 0; // Считаю импульсы
void setup() {
// Настройка режимов пинов скетча
pinMode(ledPin3, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(ledPin7, OUTPUT);
pinMode(ledPin8, OUTPUT);
pinMode(ledPin9, OUTPUT);
pinMode(ledPin10, OUTPUT);
pinMode(ledPin11, OUTPUT);
pinMode(SPEAKER_PIN, OUTPUT);
pinMode(COIL_PIN, OUTPUT);
pinMode(frequencyPin, INPUT);
// Тест световой и звуковой при включении металоискателя
digitalWrite(ledPin3, HIGH);tone(SPEAKER_PIN, 100);
delay(100);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin5, HIGH);tone(SPEAKER_PIN, 110);
delay(100);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6, HIGH);tone(SPEAKER_PIN, 120);
delay(100);
digitalWrite(ledPin6, LOW);
digitalWrite(ledPin9, HIGH);tone(SPEAKER_PIN, 130);
delay(100);
digitalWrite(ledPin9, LOW);
digitalWrite(ledPin11, HIGH);tone(SPEAKER_PIN, 140);
delay(100);
digitalWrite(ledPin11, LOW);
digitalWrite(ledPin10, HIGH);tone(SPEAKER_PIN, 150);
delay(100);
digitalWrite(ledPin10, LOW);
digitalWrite(ledPin8, HIGH);tone(SPEAKER_PIN, 200);
delay(100);
digitalWrite(ledPin8, LOW);
digitalWrite(ledPin7, HIGH);tone(SPEAKER_PIN, 250);
delay(100);
digitalWrite(ledPin7, LOW);
// Генерация звука 500 Гц на динамике в течение <1 секунды
tone(SPEAKER_PIN, 500,100);
// Жду окончания тона
delay(1000);
// Прерывание при изменении состояния на пине frequencyPin
attachInterrupt(digitalPinToInterrupt(frequencyPin), countPulse, RISING);
Serial.begin(9600);
}
void loop() {
tone(COIL_PIN, FREQUENCY);
delay(1); // Чуть больше 125 мкс на единичный цикл (нужен для задержки)
noTone(COIL_PIN);
delay(8); // Ожидание чуть меньше, чтобы компенсировать задержку
// Задерживаю на 1 сек и замеряю частоту сигнала
delay(1000);
unsigned long frequency = pulseCount; // Частота в герцах
// Сброс счетчика на новый замер
pulseCount = 0;
Serial.print("Частота: ");
Serial.println(frequency);
// Включение светодиодов в зависимости от частоты
if (frequency >= 1 && frequency <= 10) {
digitalWrite(ledPin3, HIGH);
tone(SPEAKER_PIN, 400);
} else {
digitalWrite(ledPin3, LOW);
noTone(SPEAKER_PIN);
}
if (frequency > 10 && frequency <= 20) {
digitalWrite(ledPin5, HIGH);
tone(SPEAKER_PIN, 410);
} else {
digitalWrite(ledPin5, LOW);
}
if (frequency > 20 && frequency <= 30) {
digitalWrite(ledPin6, HIGH);
tone(SPEAKER_PIN, 420);
} else {
digitalWrite(ledPin6, LOW);
}
if (frequency > 30 && frequency <= 40) {
digitalWrite(ledPin9, HIGH);
tone(SPEAKER_PIN, 430);
} else {
digitalWrite(ledPin9, LOW);
}
if (frequency > 40 && frequency <= 50) {
digitalWrite(ledPin11, HIGH);
tone(SPEAKER_PIN, 440);
} else {
digitalWrite(ledPin11, LOW);
}
if (frequency > 50 && frequency <= 60) {
digitalWrite(ledPin10, HIGH);
tone(SPEAKER_PIN, 450);
} else {
digitalWrite(ledPin10, LOW);
}
if (frequency > 60 && frequency <= 70) {
digitalWrite(ledPin8, HIGH);
tone(SPEAKER_PIN, 460);
} else {
digitalWrite(ledPin8, LOW);
}
if (frequency > 70 && frequency <= 150) {
digitalWrite(ledPin7, HIGH);
tone(SPEAKER_PIN, 470);
} else {
digitalWrite(ledPin7, LOW);
}
}
// Тут я прерываю для подсчета импульсов
void countPulse() {
pulseCount++;
}
А, дописал себе ещё одну важную вещь...если нет первого щелчка с Пирата, то прописал ...если меньше 1Гц, то noTone(SPEAKER_PIN);
|