ИК-приемник передатчик Высокая частота
Я строю фотоворота, чтобы отслеживать бросание мяча. Работает нормально, если время задержки в основном цикле не превышает 40 миллисекунд. Проблемы начинаются, когда я задерживаю каждый цикл только на 20 миллисекунд, теперь мой светодиод, который показывает, что что-то прервало путь между ИК-светодиодом и ИК-приемником, иногда мигает, если я устанавливаю задержку на 10 миллисекунд и включаю, то светодиод гаснет на 2 секунды, затем начинает очень быстро мигать и горит все остальное время, пока я не прерву ИК-путь. Я думаю, что здесь происходит какая-то физика, которую я не понимаю.
Я также хотел бы спросить, возможно ли сузить путь ИК-волны, чтобы он был больше похож на лазер (идущий прямо в одном направлении), и как я могу контролировать чувствительность обнаружения ИК-волн
Это схема
ИК-передатчик ИК-приемник
Код:
//определяем пины. Я использовал пины 4 и 5
#define irLedPin 4 // ИК-светодиод на этом выводе
#define irSensorPin 5 // ИК-датчик на этом выводе
#define buzzerPin 2 // зуммер на этом выводе
int irRead(int readPin, int triggerPin); //прототип функции
void setup()
{
pinMode(irSensorPin, INPUT);
pinMode(irLedPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
// печатает заголовок с переводом строки в конце
Serial.println("Program Starting");
// ждем отправки длинной строки
delay(100);
}
void loop()
{
bool isOn = irRead(irSensorPin, irLedPin);
//Serial.println(isOn); //отображение результатов
if(isOn == true)
{
digitalWrite(buzzerPin, HIGH);
}
else
{
digitalWrite(buzzerPin, LOW);
}
delay(10);
}
int irRead(int readPin, int triggerPin)
{
int halfPeriod = 13; //один период при 38,5khZ составляет примерно 26 микросекунд
int cycles = 23; //26 микросекунд * 23 примерно равно 600 мкс
int i;
for (i=0; i <=cycles; i++)
{
digitalWrite(triggerPin, HIGH);
delayMicroseconds(halfPeriod);
digitalWrite(triggerPin, LOW);
delayMicroseconds(halfPeriod - 1); // - 1 для компенсации накладных расходов digitaWrite
}
return digitalRead(readPin);
}
@kosnkov, 👍1
0
- Использование VS1838B с Arduino
- Как выбрать вывод передачи в библиотеке IRremote для Arduino Uno?
- Как увеличить расстояние обнаружения на датчике обхода препятствий Arduino KY-032?
- Ошибка "collect2.exe: error: ld returned 1 exit status"
- Как подключить ИК-передатчик и модуль приемника?
- Tone() конфликтует с библиотекой IRremote (множественное определение `__vector_7')
- Как остановить вращение сервопривода?
- ESP32 ИК-пульт