#1 2024-02-22 00:30:52

Savik
Учасник
Зареєстрований: 2022-01-09
Повідомлень: 27

Потрібен Скетч для Arduino Uno з датчиком руху HC-SR501:

Потрібен Скетч для Arduino Uno з датчиком руху HC-SR501:
Функціональність:

При включенні Arduino Uno:
Білий світлодіод горить 5 секунд.
Жовтий світлодіод не блимає.
Після 5 секунд:
Жовтий світлодіод починає блимати на 1 хвилину.
Якщо датчик руху HC-SR501 виявляє рух протягом 1 хвилини:
Жовтий світлодіод загоряється постійним світлом на 5 секунд.
Відлік часу блимання жовтого світлодіода скидається.
Якщо протягом 1 хвилини датчик руху не виявляє руху:
Жовтий світлодіод перестає блимати.
Якщо після 1 хвилини датчик руху виявляє рух:
На пін 8 подається напруга.
Потрібно для ЗСУ для ефективного знищення підарів
Слава Україні

Неактивний

#2 2024-02-23 00:39:31

akapulko
Гість

Re: Потрібен Скетч для Arduino Uno з датчиком руху HC-SR501:

Підключення: "плюси"  обох діодів через резистори 200 Ом до плюсу живлення (5 чи 3.3В); "-" білого до піна 4, "-" жовтого до піна 3; вихід сенсора до піна 8; ну а напругу у разі спрацьовування після 1хв знімайте з піна 5. Тестуйте.

/* Connections (UNO): 
 *  HC-SR501 sensor output --------> to pin 8
 *  Voltage output (active_HIGH) --> to pin 5
 *  White_LED cathode -------------> to pin 4
 *  Yellow_LED cathode ------------> to pin 3
*/

void setup() {
  MCUCR |= (1 << PUD); // Disable all pull-ups
  DDRD |= _BV(4) | _BV(5); // White LED | Output signal
  initTIM1();
  initTIM2(); // LED flashes
  sei();
}

void loop() {}

void initTIM1(void) { // Time interval
  TCCR1A = 0x00;
  TCCR1B = 0xCD;
  TIMSK1 = 0x22;
  OCR1A = 15625; // 1 sec at 16MHz
  TCNT1 = OCR1B = 0; 
}

void initTIM2(void) { // Flash LED
  TCCR2A = 0x03;
  TCCR2B = 0x04;
  TIMSK2 = 0;
}

ISR(TIMER1_COMPA_vect) {
  if (++OCR1B == 5) {
    DDRD &= ~_BV(4);
    DDRD |= _BV(3);
    TIMSK2 = 0x06;
  }
  if (OCR1B == 65) {
    TIMSK2 = 0;
    DDRD &= ~_BV(3);
  }
}

ISR(TIMER1_CAPT_vect) {
  (OCR1B > 64) ? (PORTD |= _BV(5)) : (OCR1B = 0);
  TIMSK2 = 0;
  PORTD &= ~_BV(3);
}

ISR(TIMER2_COMPA_vect) {
  --OCR2B;
  PORTD |= _BV(3);
}

ISR(TIMER2_COMPB_vect) {
  PORTD &= ~_BV(3);
}

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму