Zapojení, zelená ledZapojení, červená led

Cílem projektu bylo vytvořit inteligentní systém, který detekuje otevřené a zavřené dveře na základě senzoru detekce překážek a umožňuje manuální ovládání pomocí tlačítek. Tento systém je navržen tak, aby zlepšil bezpečnost a kontrolu přístupu do prostorů, kde se pohybuje VZV, aby byl řidič VZV informován zvukovou signalizací o přítomnosti osoby v konkrétním sektoru.

Schéma zapojení:

  • Arduino Pin 2    ->  Relé IN
  • Arduino Pin 3    ->  Signálový pin IR senzoru
  • Arduino Pin 4    ->  Jeden pin tlačítka pro otevření (openbutton)
  • Arduino Pin 5    ->  Jeden pin tlačítka pro zavření (closebutton)
  • Arduino Pin 6    ->  Rezistor -> Anoda LED2
  • Arduino Pin 7    ->  Rezistor -> Anoda LED1
  • Arduino Pin 8    ->  IN1 na ULN2003
  • Arduino Pin 9    ->  IN2 na ULN2003
  • Arduino Pin 10  ->  IN3 na ULN2003
  • Arduino Pin 11  ->  IN4 na ULN2003

 Kód pro Arduino:

#include <Arduino.h>

const int rele1 = 2;
const int IR = 3;
const int led1 = 7;
const int led2 = 6;
const int IN1 = 8;
const int IN2 = 9;
const int IN3 = 10;
const int IN4 = 11;
const int openbutton = 4;
const int closebutton = 5;
int lastsensorState = HIGH;
const int stepsPerRevolution = 2048;  // Počet kroků pro úplnou otáčku (pro 24BYJ48)
const int stepsForOpen = 512;  // Upravit podle mechaniky dveří
const int stepsForClose = 512; // Upravit podle mechaniky dveří

unsigned long lastDebounceTimeOpen = 0; // čas posledního stisku openbutton
unsigned long lastDebounceTimeClose = 0; // čas posledního stisku closebutton
const unsigned long debounceDelay = 50; // zpoždění pro debouncing v milisekundách

int lastButtonOpenState = HIGH; // poslední stav tlačítka openbutton
int lastButtonCloseState = HIGH; // poslední stav tlačítka closebutton

// deklarace funkcí
void stepForward();
void stepBackward();
void moveMotor(int steps, bool direction);

void setup() {
  Serial.begin(9600);
  pinMode(rele1, OUTPUT);
  pinMode(IR, INPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);

  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);

  pinMode(openbutton, INPUT_PULLUP);
  pinMode(closebutton, INPUT_PULLUP);
}

void loop() {
  int sensorState = digitalRead(IR);
  int buttonOpenState = digitalRead(openbutton);
  int buttonCloseState = digitalRead(closebutton);

  if (sensorState == HIGH) {
    digitalWrite(rele1, LOW);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
  } else {
    digitalWrite(rele1, HIGH);
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
  }

  // Výpis změny stavu na sériový monitor z IR senzoru
  if (sensorState == HIGH & lastsensorState == LOW) {
    Serial.println("Open door");
  }
  if (sensorState == LOW & lastsensorState == HIGH) {
    Serial.println("Closed door");
  }
  lastsensorState = sensorState;

  // Debouncing pro openbutton
  if (buttonOpenState != lastButtonOpenState) {
    lastDebounceTimeOpen = millis(); // reset debounce časovače
  }

  if ((millis() - lastDebounceTimeOpen) > debounceDelay) {
    if (buttonOpenState == LOW) {
      digitalWrite(rele1, LOW);
      digitalWrite(led1, HIGH);
      digitalWrite(led2, LOW);
      Serial.println("Manual door opening");
      moveMotor(stepsForOpen, true);
    }
  }
  lastButtonOpenState = buttonOpenState;

  // Debouncing pro closebutton
  if (buttonCloseState != lastButtonCloseState) {
    lastDebounceTimeClose = millis(); // reset debounce časovače
  }

  if ((millis() - lastDebounceTimeClose) > debounceDelay) {
    if (buttonCloseState == LOW) {
      Serial.println("Manual door closing");
      moveMotor(stepsForClose, false);
    }
  }
  lastButtonCloseState = buttonCloseState;
}

// funkce pro ovládání krokového motoru
void moveMotor(int steps, bool direction) {
  for (int i = 0; i < steps; i++) {
    if (direction) {
      stepForward();
    } else {
      stepBackward();
    }
    delay(1); // Nastavení rychlosti krokování (upravit podle potřeby)
  }
}

// Sekvence pro krokování dopředu
void stepForward() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  delay(2);

  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  delay(2);

  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  delay(2);

  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
  delay(2);
}

// Sekvence pro krokování dozadu
void stepBackward() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
  delay(2);

  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  delay(2);

  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  delay(2);

  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  delay(2);
}
FB tw

Další podobné články