개발자/라즈베리파이4

라즈베리파이4 스마트홈 액츄에이터 디지털 도어록 실습 8

지구빵집 2023. 5. 17. 09:03
반응형

 

 

 

스마트 홈의 액츄에이터는 도어록, 가스밸브, 온수밸브, RFID, 조명등 Led, RGB Led로 구성되어 있다. 액츄에이터를 위해 DC 12V 전원이 공급되고 스마트 폰에서 이더넷을 통해 직접 제어할 수 있다. 스마트 홈에 사용되는 액츄에이터인 도어록, 가스밸브, 온수 밸브등은 시중에서 쉽게 구입할 수 있는 것으로 사용했다. 자세한 사양이나 기능은 참고문서로 대체하고 이미지와 Test 프로그램으로 설명한다. 

 

 

라즈베리파이 스마트 홈 실습 과정 전체 포스팅 리스트 

 

라즈베리파이4 스마트홈 제품 특징 1

라즈베리파이4 스마트홈 불꽃 센서 코드 2

라즈베리파이4 스마트홈 가스센서 코드 3

라즈베리파이4 스마트홈 소리센서 코드 4

라즈베리파이4 스마트홈 조도센서 코드 5

라즈베리파이4 스마트홈 온도 습도센서 코드 6

라즈베리파이4 스마트홈 인체감지 모션센서 코드 7

라즈베리파이4 스마트홈 액츄에이터 디지털 도어록 실습 8

라즈베리파이4 스마트홈 가스타이머 실습 9

라즈베리파이4 스마트홈 전동볼밸브 실습 10

라즈베리파이4 스마트홈 RFID 실습 11

라즈베리파이4 스마트홈 RGB LED 실습 12

라즈베리파이4 스마트홈 카메라 실습 13

라즈베리파이4 스마트홈 조명 LED bar 실습 14

라즈베리파이4 스마트홈 서버 프로그램 실습 15

라즈베리파이4 스마트홈 안드로이드 앱 설명 16

 

 

액츄에이터 구동에 필요한 것은 작동을 중지할 때 액츄에이터가 정지하도록 하는 방법인데 이것은 CTRL-C 킨트롤 키와 C 키를 동시에 누른 것이다. CTRL-C를 누르면 이상하게도 프로그램은 종료하는 데 액츄에이터는 계속 동작을 한다. 따라서 이것을 해결하는 방법은 아래 포스팅을 참고하도록 하고 포스팅에서는 테스트를 방법을 진행하기로 한다.

 

 

Ctrl-c로 프로세스 종료 시 주의할 점 

 

Ctrl-c 로 프로세스 종료시 주의할 점

액츄에이터 제어 실습시 보통 실험을 종료할 경우 ctrl-c 를 눌러 종료하게 되는데, 이 때 GPIO 신호는 그대로 실습때의 상태를 유지하게 된다. 즉, 전원이 켠 상태나 전등이 ON 상태로 프로그램을

fishpoint.tistory.com

 

 

디지털 도어록(Digital Door Lock)은 기존의 열쇠 대신 비밀번호나 반도체칩, 스마트카드, 지문 등을 활용하는 첨단 잠금장치이다. 디지털 도어록을 사용하는 충입 제어 시스템은 단순히 출입문을 막기 위한 수단이 아니라 필요시 출입을 제한 또는 개방하여 사용자가 원하는 형태로 조절가능한 사무환경을 조성하는 것을 목적으로 한다.

 

특히 카드매체를 이용 불필요한 출입을 제한(소속인과 외부인구별, 시설과 소속인원 보호)하여 외부로부터 독립적인 업무 수행이 가능하도록 설계된 시스템이다. 디지털 도어록의 특징을 살펴보면 아래와 같다.

 

  • 모든 디지털도어록은 1. 전자키, 2. 비밀번호, 3. 카드 혹은 4. 지문인식을 이용, 전자적인 반응에 의하여 문을 여닫는다.(1.5V, AA 소형건전지 사용/ 비상시 9V 건전지 사용)
  • 디지털 도어록은 크게 주키와 보조키로 나누어진다. ※주키란 별도의 잠금장치와 손잡이가 없어도 되는 것으로 비교적 부피가 크고 손잡이가 달려있으며, 시공 시 홈을 최소 2군데 이상 필요함으로 이전설치 시 문제가 발생할 수 있다. 보조키란 말 그대로 문을 보조해 주는 역할을 한다. 별도의 손잡이를 필요로 하며, 때로는 별도의 잠금장치를 요구하기도 한다.
  • 디지털 도어록은 부피가 작고 손잡이가 없어 사용자로부터 많은 사랑을 받으며, 특히 별도의 홈을 내지 않아도 됨으로 이전설치가 편리하다. (쉽게 말해서 주키는 손잡이가 있으며, 보조키는 대부분 손잡이가 없다)
  • 디지털도어록의 기능은 많지만 사용하는데 꼭 필요한 조건만 확인한다면 디지털도어록은 이제 결코 부담스러운 존재가 아닌 집과 사람을 연결시켜 주는 편리한 통로로 작용할 것이다.  

 

위와 같이 디지털 도어록은 많은 편리함을 주고 요즈음은 인터넷에 연결된 도어록을 흔히 볼 수 있게 되었다. 여기서는 도어록의 개폐를 실습하고, 인터넷과 연결되어 동작하는 도어록으로 사용하는 방법을 후에 실습할 것이다. 아래 디지털 도어록의 외형을 나타내었다. 

 

 

 

디지털 도어록 외형

 

 

스마트홈 시스템에서 사용하는 디지털 도어록 사양을 아래에 나타낸다.

 

 

제조사 밀레 
제품명 MI-2300
개문방식 1WAY방식(비밀번호)
크기 실외측 본체 : 65(W)x130(H)x23(D)(mm)
실내측 본체 : 154(W)x93(H)x37(D)(mm)
재질 실외측 본체-알루미늄합금 및 ABS 난연성 수지
실내측 본체-알루미늄합금 및 ABS 난연성 수지
동작전원 6V - 1.5V AA사이즈 알카라인 건전지 4
건전지 사용기간 12개월(1 30회 사용기준, 온도, 습도, 사용횟수에 따라 다름)
사용 설명서 홈페이지 참조

 

도어록은 RFID 사용하여 허가된 사람에게 도어록을 열어주는 방식으로 사용할 수 있다. 여기서는 도어록 온 오프 신호를 출력하여 열고 닫는 기능을 시험한다. 도어록을 개폐하는 소스코드를 참조한다. 아래에 도어록 실습코드를 nano편집기를 이용하여 입력한다. $nano home-door.c 명령을 사용한다. (home-door.c) 

 

현재 2023년 5월 도어록 자체 회로 변경으로 동작하지 않아 외부 회로를 추가하여 동작하도록 변경하였다. 아래 코드는 변경하기 전의 코드이고 현재 작동하는 코드로 별도로 올려둔다.

 

#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <wiringPi.h>

#define DOOROPEN 4	// BCM_GPIO 23 - OUT
#define DOORCLOSE 4	// BCM_GPIO 23 - OUT
#define DOORSTATUS 5// BCM_GPIO 24 - in

void Bpluspinmodeset(void);
void doorOpen(void);

int doorstate = 0; //0-closed, 1-opened
int main (void)
{
	if(wiringPicheck()) printf("Fail");
		
	Bpluspinmodeset();	
	
	int i = 1;
	while(1)
	{
		
		doorOpen();		
		
		delay(100);
		if(digitalRead(DOORSTATUS) == 0)
		i++;	
		if((i % 2) == 0)
			printf("Closed\n");
		else
			printf("Open \n");
			
		delay(3000);		
	}
	
	
  
  return 0 ;
}

void doorOpen()
{
	digitalWrite(DOOROPEN, 1);
	delay(10);
	digitalWrite(DOOROPEN, 0);		
	delay(90);
	digitalWrite(DOOROPEN, 1);
}

int wiringPicheck(void)
{
	if (wiringPiSetup () == -1)
	{
		fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno));
		return 1 ;
	}
}

void Bpluspinmodeset(void)
{
	pinMode (DOOROPEN, OUTPUT);
	pinMode (DOORCLOSE, OUTPUT);
	pinMode (DOORSTATUS, INPUT);	
	
}

 

외부 회로(릴레이를 달고 GPIO 제어신호를 12번으로 변경)를 추가하여 변경한 코드

 

#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <wiringPi.h>

#define DOOROPEN 12	// BCM_GPIO 23 - OUT
#define DOORCLOSE 12	// BCM_GPIO 23 - OUT

void Bpluspinmodeset(void);
void doorOpen(void);
void doorClose(void);

int main (void)
{
	//if(wiringPicheck()) printf("Fail");
	wiringPiSetupGpio();
		
	Bpluspinmodeset();	
	
	int i = 1;
	while(1)
	{		
		doorOpen();	
		printf("%s\n", "Door open");
		delay(3000);
		doorClose();	
		printf("%s\n", "Door closed");
		delay(3000);
	}
  
  return 0 ;
}

void doorOpen()
{
	digitalWrite(DOOROPEN, 0);
	delay(100);
	digitalWrite(DOOROPEN, 1);		
}

void doorClose()
{
	digitalWrite(DOOROPEN, 0);
	delay(100);
	digitalWrite(DOOROPEN, 1);		
}

int wiringPicheck(void)
{
	if (wiringPiSetup () == -1)
	{
		fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno));
		return 1 ;
	}
}

void Bpluspinmodeset(void)
{
	pinMode (DOOROPEN, OUTPUT);
}

 

 

 

반응형