Operácie

Riadenie križovatky: Rozdiel medzi revíziami

Z SensorWiki

(Vytvorená stránka „Záverečný projekt predmetu MIPS / LS2024 - '''Meno Priezvisko''' == Zadanie == Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejši…“)
 
(6 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
Záverečný projekt predmetu MIPS / LS2024 - '''Meno Priezvisko'''
+
Záverečný projekt predmetu MIPS / LS2024 - '''Lukáš Kudláč'''
  
  
 
== Zadanie ==
 
== Zadanie ==
  
Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie
+
Cieľom projektu je zostaviť model svetelnej križovatky s dvomi smermi pre motorové vozidlá a jedným priechodom pre chodcov na doske ACROB.
  
 
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]
 
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]
Riadok 10: Riadok 10:
 
'''Literatúra:'''  
 
'''Literatúra:'''  
 
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]
 
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]
+
* [https://protosupplies.com/product/traffic-light-led-module/ Mini semafor použitý na simuláciu križovatky]
 +
* [https://www.farnell.com/datasheets/1498852.pdf Datasheet LED dióda]
 +
 
  
  
Riadok 17: Riadok 19:
 
== Analýza  a opis riešenia ==
 
== Analýza  a opis riešenia ==
  
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
+
Každú LEDku a aj tlačidlo som pripojil na samostatný pin mikroprocesora. Prvý semafor som zapojil do pinov ako výstup nasledovne:PD5 zelená LED, PD3 žltá LED, PD2 červená LED.Druhý semafor som zapojil do pinov ako výstup nasledovne:PC2 zelená LED, PC1 žltá LED, PC0 červená LED. Semafor pre chodcov som zapojil ako dve samostatné LEDky. Červenú ako výstup pinu PC3 a zelenú ako výstup PC4.Tlačidlo je zapojené ako vstup do pinu PB0. Všetky komponenty sú zapojené na zem aby mohol pretekať elektrický prúd.
  
[[Súbor:ledRGB.jpg|400px|thumb|center|RGB LED.]]
+
[[Súbor:semaforluky.jpg|400px|thumb|center| LED semafor]]
  
Nezabudnite doplniť schému zapojenia!
+
Schéma zapojenia
  
[[Súbor:schd.png|400px|thumb|center|Schéma zapojenia LCD displeja.]]
+
[[Súbor:lukyschema1.png|400px|thumb|center|Schéma zapojenia LEDiek semafora a tlačidla.]]
  
  
Riadok 34: Riadok 36:
 
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
 
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
 
#include <avr/io.h>
 
#include <avr/io.h>
 +
#include <avr/interrupt.h>
 +
#include <util/delay.h>
 +
 +
#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
 +
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
  
int main(void)
+
#define ZELENA PD5
{
+
#define ZLTA PD4
  unsigned int measuredValue;
+
#define CERVENA PD2
 +
#define ZELENA2 PC2
 +
#define ZLTA2 PC1
 +
#define CERVENA2 PC0
 +
#define CERVENA3 PC3
 +
#define ZELENA3 PC4
 +
#define SW PB0
  
  while (1)
+
volatile uint8_t buttonPressed = 0;
  {
 
    /*  relax  */ 
 
  }
 
  
  return(0);
+
void inicializacia() {
 +
    // Nastavenie LED pinov ako výstupných
 +
    set_bit(DDRD, ZELENA);
 +
    set_bit(DDRD, ZLTA);
 +
    set_bit(DDRD, CERVENA);
 +
    set_bit(DDRC, ZELENA2);
 +
    set_bit(DDRC, ZLTA2);
 +
    set_bit(DDRC, CERVENA2);
 +
    set_bit(DDRC, ZELENA3);
 +
    set_bit(DDRC, CERVENA3);
 +
    // Nastavenie pinu SW ako vstupu s pull-up rezistorom
 +
    set_bit(PORTB, SW);
 +
   
 +
 
 +
 
 
}
 
}
  
</source></tab>
 
<tab name="filename.h"><source lang="c++" style="background: LightYellow;">
 
#include <avr/io.h>
 
  
void adc_init(void);                                  // A/D converter initialization
 
  
unsigned int adc_read(char a_pin);
+
 
 +
ISR(PCINT0_vect) {
 +
      while(!(PINB & (1 << PB0))){
 +
        clear_bit(PORTD, CERVENA);
 +
        clear_bit(PORTD, ZELENA);
 +
clear_bit(PORTC, CERVENA2);
 +
        clear_bit(PORTC, ZELENA2);
 +
        clear_bit(PORTC, CERVENA3);
 +
        clear_bit(PORTC, ZELENA3);
 +
set_bit(PORTD, ZLTA);
 +
        set_bit(PORTC, ZLTA2);
 +
        _delay_ms(1000);
 +
        clear_bit(PORTD, ZLTA);
 +
        clear_bit(PORTC, ZLTA2);
 +
        _delay_ms(1000);
 +
}
 +
}
 +
int main() {
 +
    inicializacia();
 +
 
 +
    PCMSK0 |= (1<<PCINT0);
 +
PCICR |= (1<<PCIE0);
 +
 
 +
 
 +
 
 +
sei(); 
 +
   
 +
 +
 +
 +
       
 +
     
 +
        while(1) {
 +
            set_bit(PORTD, ZELENA);
 +
            set_bit(PORTC, CERVENA2);
 +
            set_bit(PORTC, CERVENA3)
 +
            _delay_ms(3500);
 +
            set_bit(PORTD, ZLTA);
 +
            clear_bit(PORTD, ZELENA);
 +
            _delay_ms(1000);
 +
            set_bit(PORTC, ZLTA2);
 +
            set_bit(PORTD, CERVENA);
 +
            clear_bit(PORTD, ZLTA);
 +
            _delay_ms(1000);
 +
            set_bit(PORTC, ZELENA3)
 +
            clear_bit(PORTC, CERVENA3)
 +
            set_bit(PORTC, ZELENA2);
 +
            clear_bit(PORTC, CERVENA2);
 +
            clear_bit(PORTC, ZLTA2);
 +
            _delay_ms(3500);
 +
            set_bit(PORTC, CERVENA3)
 +
            clear_bit(PORTC, ZELENA3);
 +
            set_bit(PORTC, ZLTA2);
 +
            clear_bit(PORTC, ZELENA2);
 +
            _delay_ms(1000);
 +
            set_bit(PORTD, ZLTA);
 +
            set_bit(PORTC, CERVENA2);
 +
            clear_bit(PORTC, ZLTA2);
 +
            _delay_ms(1000);
 +
            set_bit(PORTD, ZELENA);
 +
            clear_bit(PORTD, CERVENA);
 +
            clear_bit(PORTD, ZLTA);
 +
       
 +
    }
 +
 
 +
    return 0;
 +
}
 
</source></tab>
 
</source></tab>
 
</tabs>
 
</tabs>
 
 
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'':  
 
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'':  
  

Verzia zo dňa a času 12:22, 29. apríl 2024

Záverečný projekt predmetu MIPS / LS2024 - Lukáš Kudláč


Zadanie

Cieľom projektu je zostaviť model svetelnej križovatky s dvomi smermi pre motorové vozidlá a jedným priechodom pre chodcov na doske ACROB.

Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Každú LEDku a aj tlačidlo som pripojil na samostatný pin mikroprocesora. Prvý semafor som zapojil do pinov ako výstup nasledovne:PD5 zelená LED, PD3 žltá LED, PD2 červená LED.Druhý semafor som zapojil do pinov ako výstup nasledovne:PC2 zelená LED, PC1 žltá LED, PC0 červená LED. Semafor pre chodcov som zapojil ako dve samostatné LEDky. Červenú ako výstup pinu PC3 a zelenú ako výstup PC4.Tlačidlo je zapojené ako vstup do pinu PB0. Všetky komponenty sú zapojené na zem aby mohol pretekať elektrický prúd.

LED semafor

Schéma zapojenia

Schéma zapojenia LEDiek semafora a tlačidla.


Algoritmus a program

Algoritmus programu je....


#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))

#define ZELENA PD5
#define ZLTA PD4
#define CERVENA PD2
#define ZELENA2 PC2
#define ZLTA2 PC1
#define CERVENA2 PC0
#define CERVENA3 PC3
#define ZELENA3 PC4
#define SW PB0

volatile uint8_t buttonPressed = 0;

void inicializacia() {
    // Nastavenie LED pinov ako výstupných
    set_bit(DDRD, ZELENA);
    set_bit(DDRD, ZLTA);
    set_bit(DDRD, CERVENA);
    set_bit(DDRC, ZELENA2);
    set_bit(DDRC, ZLTA2);
    set_bit(DDRC, CERVENA2);
    set_bit(DDRC, ZELENA3);
    set_bit(DDRC, CERVENA3);
    // Nastavenie pinu SW ako vstupu s pull-up rezistorom
    set_bit(PORTB, SW);
    
   
   
}




ISR(PCINT0_vect) {
       while(!(PINB & (1 << PB0))){ 
        clear_bit(PORTD, CERVENA);
        clear_bit(PORTD, ZELENA);
		clear_bit(PORTC, CERVENA2);
        clear_bit(PORTC, ZELENA2);
         clear_bit(PORTC, CERVENA3);
        clear_bit(PORTC, ZELENA3);
		set_bit(PORTD, ZLTA);
        set_bit(PORTC, ZLTA2);
        _delay_ms(1000);
        clear_bit(PORTD, ZLTA);
        clear_bit(PORTC, ZLTA2);
        _delay_ms(1000);
}
}
int main() {
    inicializacia();

     PCMSK0 |= (1<<PCINT0);
	 PCICR |= (1<<PCIE0);

   

	sei();   
    
	
	
	
        
       
        while(1) {
            set_bit(PORTD, ZELENA);
            set_bit(PORTC, CERVENA2);
             set_bit(PORTC, CERVENA3)
            _delay_ms(3500);
            set_bit(PORTD, ZLTA);
            clear_bit(PORTD, ZELENA);
            _delay_ms(1000);
            set_bit(PORTC, ZLTA2);
            set_bit(PORTD, CERVENA);
            clear_bit(PORTD, ZLTA);
            _delay_ms(1000);
             set_bit(PORTC, ZELENA3)
            clear_bit(PORTC, CERVENA3)
            set_bit(PORTC, ZELENA2);
            clear_bit(PORTC, CERVENA2);
            clear_bit(PORTC, ZLTA2);
            _delay_ms(3500);
             set_bit(PORTC, CERVENA3)
            clear_bit(PORTC, ZELENA3);
            set_bit(PORTC, ZLTA2);
            clear_bit(PORTC, ZELENA2);
            _delay_ms(1000);
            set_bit(PORTD, ZLTA);
            set_bit(PORTC, CERVENA2);
            clear_bit(PORTC, ZLTA2);
            _delay_ms(1000);
            set_bit(PORTD, ZELENA);
            clear_bit(PORTD, CERVENA);
            clear_bit(PORTD, ZLTA);
        
    }

    return 0;
}

Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:

Zdrojový kód: zdrojaky.zip


Overenie

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 záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.

Aplikácia.

Video:

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