Rubrika: Arduino projekty

Přístupový systém

Zadání:

Simulace přístupového systému pomocí arduina. Pokud je detekován čip, který má oprávněný přístup, zvonek udělá krátké pípnutí, rozsvítí se zelená LED a na displeji se pozdraví uživatel daného čipu. Pokud se detekuje čip, který není oprávněný, bzučák se rozpípá, rozsvítí se červená LED a na displeji se ukáže text „neoprávněný vstup“.

video: https://photos.app.goo.gl/afK8xV1VY9NqHDxc8

 

Schéma:

https://www.tinkercad.com/things/lSWuPmMTesC-mcs-pristupovy-system

 

RFID:

Pin Wiring to Arduino Uno
SDA Digital 10
SCK Digital 13
MOSI Digital 11
MISO Digital 12
IRQ unconnected
GND GND
RST Digital 9
3.3V 3.3V

 

 

Kód:

Displej:

#include 

// definice pinu
int PinDisplayRS = 3;
int PinDisplayE = 4;
int PinDisplayD4 = 5;
int PinDisplayD5 = 6;
int PinDisplayD6 = 7;
int PinDisplayD7 = 8;

// definice displeje
LiquidCrystal lcd(PinDisplayRS, PinDisplayE, PinDisplayD4, PinDisplayD5, PinDisplayD6, PinDisplayD7);

void setup() {
  // inicializace displeje
  lcd.begin(16, 2);

}

void loop() {
  lcd.setCursor(0, 0); // nulty radek, nulty sloupec
  lcd.print("Hello World!"); // vypsani textu "hello world"

  lcd.setCursor(0, 1); // prvni radek, nulty sloupec
  lcd.print(millis() / 1000); // vypsani uplynuleho casu v ms/1000 (takze v sekundach)

  delay(1000);
}

 

RFID:

#include 
#include 

int SS_PIN = 10;
int RST_PIN = 9;

MFRC522 rfid(SS_PIN, RST_PIN);   // vytvoreni objektu RFID

void setup() {
  Serial.begin(9600);       // zahajeni seriove komunikace
  SPI.begin();              // zahajeni SPI pro RFID modul
  rfid.PCD_Init();          // inicializace RFID
  Serial.println("Pripraveno na skenovani");
}

void loop() {
  // podminka pokud ctecka nasla kartu
  if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
    Serial.print("Karta detekovana! UID: ");
    
    // vypsani kazde casti UID kodu pomoci hexadecimalniho kodu
    for (byte i = 0; i < rfid.uid.size; i++) {
      Serial.print(rfid.uid.uidByte[i], HEX);
      Serial.print(" ");
    }
    Serial.println();  // novy radek

    rfid.PICC_HaltA();  // ukonceni cteni a priprava na dalsi cteni
  }
}

Přístupový systém:

tajné

Volba režimu pomocí potenciometru s displejem

Funkce:

Budeme simulovat volbu programu pomocí potenciometru. Budeme mít 10 režimů, které budeme volit otáčením potenciometru. Číslo programu bude zobrazeno na displeji. Jakmile narazíme na krajní program (0 nebo 9), tak svítí LED a zároveň pípne bzučák.

Potřebné znalosti: ovládání LED, čtení analogové hodnoty z potenciometru, ovládání bzučáku

Programové znalosti: proměnné, pole, funkce

 

Schéma:

https://www.tinkercad.com/things/c9GrZJ1e49I-mcs-volba-rezimu

Kód:

int PotPin = 0;
int LedPin = 9;
int BuzzerPin = 10;

int lastNum = 0;

int disCombination [10][7]= {
  {1,1,1,1,1,1,0},
  {0,1,1,0,0,0,0},
  {1,1,0,1,1,0,1},
  {1,1,1,1,0,0,1},
  {0,1,1,0,0,1,1},
  {1,0,1,1,0,1,1},
  {1,0,1,1,1,1,1},
  {1,1,1,0,0,0,0},
  {1,1,1,1,1,1,1},
  {1,1,1,0,0,1,1}
};



void beep(float time, int freq){
  unsigned long duration = time * 1000; // doba trvani v ms
  unsigned long end_time = millis() + duration; // konecny cas

  while (millis() < end_time) {
    digitalWrite(BuzzerPin, HIGH);
    delayMicroseconds(500000/freq);  // 1s deleno polovina frekvence
    digitalWrite(BuzzerPin, LOW);
    delayMicroseconds(500000/freq);  // 1s deleno polovina frekvence
  }
}



void setup() {
  pinMode(PotPin, INPUT); // nastaveni pinu pro potenciometr na vstup
  pinMode(LedPin, OUTPUT); // nastaveni pinu pro LED na vystup
  pinMode(BuzzerPin, OUTPUT); // nastaveni pinu pro bzucaku na vystup

  for(int i = 2; i < 9; i++){ // nastaveni vsech pinu pro displej na vystup
    pinMode(i, OUTPUT);
  }
}

void loop() {
  int value = analogRead(PotPin);
  int num = value/103;

  for(int i = 2; i < 9; i++){ // nastaveni vsech pinu pro displej na vystup
    digitalWrite(i, disCombination[num][i-2]);
  }

  if((num == 0) || (num == 9))digitalWrite(LedPin, HIGH);
  else digitalWrite(LedPin,LOW);

  if(((lastNum != 0) && (num == 0))||((lastNum != 9) && (num == 9))) beep(0.5, 6000);

  delay(50);
  lastNum = num;
}

Řízení jasu LED pomocí potenciometru

Schéma:

https://www.tinkercad.com/things/j2WzJ839zt2-mcs-led-brightness

 

Kód:

pro pulsování LEDky:

int ledPin = 3;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  for(int i = 0; i < 256; i++){
    analogWrite(ledPin, i);
    delay(10);
  }
  for(int i = 255; i > 0; i--){
    analogWrite(ledPin, i);
    delay(10);
  }
}

pro ovládání jasu pomocí potenciometru:

int ledPin = 3;
int potPin = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(potPin, INPUT);
}

void loop() {
  int value = analogRead(potPin);    // hodnoty od 0 do 1023
  analogWrite(ledPin, value/4);    // lze zapisovat hodnoty 0 do 255
}

RGB led

odkaz pro barvy: https://www.w3schools.com/colors/colors_rgb.asp

 

Schéma:

 

https://www.tinkercad.com/things/5OeQokDZRpw-mcs-rgbled

 

Kód:

int redPin= 2;
int greenPin = 4;
int bluePin = 3;

// bila (255,255,255)
// zluta (255,255,0)
// fialova (255,0,255)
// modrozelena (0,255,255)

void setup() {
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
}

void loop() {
  analogWrite(redPin, 255);
  analogWrite(greenPin, 255);
  analogWrite(bluePin, 255);
}

Semafor

Schéma:

https://www.tinkercad.com/things/04Uym0KC5Nq-mcs-semafor

Kód:

int PinCervena = 2;
int PinOranzova = 3;
int PinZelena = 4;
int PinTlacitko = 5;

void setup() {
  pinMode(PinCervena, OUTPUT);
  pinMode(PinOranzova, OUTPUT);
  pinMode(PinZelena, OUTPUT);
  pinMode(PinTlacitko, INPUT);
}

void loop() {
  digitalWrite(PinCervena, HIGH);

  bool stav = digitalRead(PinTlacitko);
  if(stav == true){
    delay(1000);
    digitalWrite(PinOranzova, HIGH);
    delay(1000);
    digitalWrite(PinCervena, LOW);
    digitalWrite(PinOranzova, LOW);
    digitalWrite(PinZelena, HIGH);
    delay(5000);
    digitalWrite(PinZelena, LOW);
    digitalWrite(PinOranzova, HIGH);
    delay(1000);
    digitalWrite(PinOranzova, LOW);
  }
}