Operácie

Alarm s PIR detektorom pohybu: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
Bez shrnutí editace
StudentMIPS (diskusia | príspevky)
Bez shrnutí editace
Riadok 76: Riadok 76:
     uart_init(MYUBRR); // inicializácia UART
     uart_init(MYUBRR); // inicializácia UART
     // Počiatočné nastavovanie
     // Počiatočné nastavovanie
     DDRB |= (1 << DDB0);    // Pin PB0 (D8) ako VÝSTUP pre LED
     DDRB |= (1 << DDB0);    // výstup LED
     DDRB |= (1 << DDB1);    // Pin PB1 (D9) ako VÝSTUP pre BZUČIAK
     DDRB |= (1 << DDB1);    // výstup bzučik
     DDRD &= ~(1 << DDD2);  // Pin PD2 (D2) ako VSTUP pre PIR senzor
     DDRD &= ~(1 << DDD2);  // výstup PIR senzora
      
      
     PORTD &= ~(1 << PORTD2); // deaktivácia pullup rezistora
     PORTD &= ~(1 << PORTD2); // deaktivácia pullup rezistora

Verzia z 16:48, 1. jún 2026

Záverečný projekt predmetu MIPS / LS2026 - Filip Hreha

1. Zadanie

Mojou úlohou bolo zapojiť a naprogramovať Alarm, ktorý využíva PIR detektor pohybu. Systém monitoruje určený priestor a v prípade narušenia (detekcie pohybu) okamžite aktivuje vizuálny alarm (LED dióda), akustický alarm (bzučiak) a zároveň odošle textové upozornenie o narušení cez sériovú linku do pripojeného počítača.

Vývojová doska ACROB.

Literatúra:

2. Analýza a opis riešenia

Ako snímač pohybu bol zvolený PIR senzor od firmy Parallax (model #555-28027). Tento senzor meria zmeny infračerveného žiarenia (tepla) v okolí. Podľa priloženého datasheetu má senzor dôležitú vlastnosť a to: po zapnutí vyžaduje fázu zahrievania trvajúcu približne 40 sekúnd, počas ktorej sa kalibruje na teplotu v miestnosti. Počas tejto doby systém signalizuje inicializáciu rýchlym blikaním LED diódy a ignoruje vstupy, aby sa predišlo falošným poplachom. Počas kalibrácie je nutné aby pred senzorom nebol žiaden pohyb.

Po úspešnej kalibrácii prejde systém do funkčého režimu. Ak senzor zachytí pohyb, mikrokontrolér tento stav zachytí a zmení stavy na svojich výstupných pinoch – rozsvieti LED diódu a spustí bzučiak.

2.1 Zoznam použitých súčiastok

Použité súčiastky pre tento projekt:

  • Vývojová doska ATmega328P (vývojová doska Arduino Uno)
  • PIR Senzor Parallax (#555-28027)
  • Bzučiak
  • Ochranný rezistor 220 Ω
  • Červená LED dióda

2.2 Hardvérové zapojenia (Pinout)

Zapojenie komponentov k vývojovej doske ATMega328P:

3. Algoritmus a program

Hlavný program sa riadi podľa následujúcich krokov:

  1. Počiatočná inicializácia:
    • Nastavenie UART na prenosovú rýchlosť 9600.
  2. Kalibrácia senzora:
    • Podľa datasheetu senzor potrebuje kalibráciu na okolitú teplotu. Klaibrácia trvá 40 sekúnd..
    • Počas kalibrácie bliká LED dióda, čím vizuálne signalizuje používateľovi stav prípravy. Snímanie z pinu PIR senzora je v tejto fáze blokované.
  3. Signalizácia pripravenosti:
    • Po uplynutí 40 sekúnd sa vypne blikajúca LED, zopne bzučiak (krátke pípnutie), čo slúži ako znamenie, že senzor je pripravený a cez UART sa odošle správa o úspešnej inicializácii.
  4. Monitorovacia slučka:
    • Systém neustále (v každom cykle) číta logický stav na vstupe `PD2`.
    • Ak je detegovaný pohyb:
      • Nastaví sa logická 1 na výstup `PB0` (rozsvietenie LED) a `PB1` (aktivácia bzučiaka).
      • Cez UART sa odošle správa o pohybe.
      • Vykoná sa krátke oneskorenie, ktoré bráni zahlteniu sériovej linky opakovanými správami.
    • Ak je priestor čistý:
      • Nastaví sa logická 0 na výstupy `PB0` a `PB1` (LED a bzučiak sa vypnú).


#include <avr/io.h>

#ifndef F_CPU
#define F_CPU 16000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
#include "uart.h" 

int main(void) {
    uart_init(MYUBRR); // inicializácia UART
    // Počiatočné nastavovanie
    DDRB |= (1 << DDB0);    // výstup LED
    DDRB |= (1 << DDB1);    // výstup bzučik
    DDRD &= ~(1 << DDD2);   // výstup PIR senzora
    
    PORTD &= ~(1 << PORTD2); // deaktivácia pullup rezistora

    // Kalibráca (40 sekúnd pokiaľ sa nahreje senzor)
    uart_print("--- ALARM SYSTEM INICIALIZACIA ---\r\n");
    uart_print("Zahrievanie PIR senzora (cca 40s)...\r\n");
    
    for (int i = 0; i < 40; i++) {
        PORTB |= (1 << PORTB0);  // zapne LED
        _delay_ms(250);
        PORTB &= ~(1 << PORTB0); // vypne LED
        _delay_ms(750);          
    }
    
    // Koniec kalibrácie (Pip)
    PORTB |= (1 << PORTB1);  // zapne bzučiak
    _delay_ms(200);
    PORTB &= ~(1 << PORTB1); // vypne bzučiak
    
    uart_print("Senzor stabilizovany. Monitorovanie priestoru AKTIVNE.\r\n");

   // Hlavná slučka (Nekonečné snímanie)
    while (1) {
        // Kontrola stavu pinu PD2 (PIR)
        if (PIND & (1 << PIND2)) {
            
            PORTB |= (1 << PORTB0);                 // zapne LED
            PORTB |= (1 << PORTB1);                 // zapne bzučiak
            
            uart_print("POZOR: Detegovany pohyb v miestnosti!\r\n");
            _delay_ms(500);                         
            
        } else {
            PORTB &= ~(1 << PORTB0);                // vypne LED
            PORTB &= ~(1 << PORTB1);                // vypne bzučiak
        }
    }

    return 0;
}
#ifndef UART_H_
#define UART_H_

#ifndef F_CPU
#define F_CPU 16000000UL
#endif

#define BAUD 9600
#define MYUBRR ((F_CPU / (BAUD * 16UL)) - 1)

void uart_init(unsigned int ubrr);
void uart_transmit(unsigned char data);
void uart_print(const char* str);

#endif /* UART_H_ */;
#include <avr/io.h>
#include "uart.h"

void uart_init(unsigned int ubrr) {
    UBRR0H = (unsigned char)(ubrr >> 8);
    UBRR0L = (unsigned char)ubrr;
    UCSR0B = (1 << TXEN0);                  
    UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
}

void uart_transmit(unsigned char data) {
    while (!(UCSR0A & (1 << UDRE0)));
    UDR0 = data;
}

void uart_print(const char* str) {
    while (*str) {
        uart_transmit(*str++);
    }
}


Overenie

Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku hotového zariadenia.

Aplikácia.

Video:


Čo by som urobil inak

Zamyslite sa spätne nad problémom, ktorý ste riešili a napíšte, čo sa vám nepodarilo a nabudúce by ste spravili inak.


Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.