Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

공hannah부

EV3 - 인공지능 도어락 미니 프로젝트(파이썬) 본문

공부/인공지능

EV3 - 인공지능 도어락 미니 프로젝트(파이썬)

Hannah0226 2023. 2. 22. 17:11
기획의도

학생들이 학교 탈의실에서 옷을 갈아입을 때 다른 반, 성별 학생이 장난으로 들어오는 경우가 있다. 이에 우리는 이 문제점을 해결하고 학생들이 옷을 편하게 갈아입을 수 있도록 하고자 기획하였다.

구현 시나리오(순서도)

 
시스템 개요

사전에 구글티처블 머신에서 반별 손모양을 학습한 후에 스파트폰의 AI앱 을 활용해 학습데이터와 스마트폰 카메라에 보여준 이미지를 비교해 약속 된 시간과 이미지가 같으면 도어락이 열린다.

 

사용 장비

- 구글 티처블머신 : 무료 서비스로 전세계 누구나 손쉽게 이미지 또는 사 운드를 학습시켜 자동분류에 사용할 수 있도록 학습데이터 세트를 제공한 다

- 스마트폰 AI: 구글 티처블머신의 학습데이터를 불러와 스마트폰의 카 메라 또는 마이크에서 받은 데이터와 비교해 분류하는 기능을 제공한다

- EV3 : MIT와 레고에서 공동개발한 교육용 로봇교구로 다양한 형태를 쉽 게 만들어 프로그래밍하여 움직일 수 있어 아이디어를 손쉽게 구현할 수 있다.

 

코드
#!/usr/bin/env pybricks-micropython
import socket
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port
from pybricks.media.ev3dev import Image, ImageFile
from pybricks.tools import wait
from datetime import datetime
from pytz import timezone

# 접속할 서버 주소임 여기에서는 루프백(loopback) 인터페이스 주소 즉 localhost 사용
HOST = '192.168.1.215'
# 클라이언트 접속을 대기하는 포트 번호
PORT = 5555 

motorA = Motor(Port.A)
ev3 = EV3Brick()



# 소켓 객체를 생성
# 주소 체계(address family)로 IPv4, 소켓 타입으로 TCP 사용 
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


# 포트 사용중이라 연결할 수 없다는 WinError 10048 에러 해결를 위해 필요
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)


# bind 함수는 소켓을 특정 네트워크 인터페이스와 포트 번호에 연결하는데 사용
# HOST는 hostname, ip address, 빈 문자열 ""이 될 수 있음
# 빈 문자열이면 모든 네트워크 인터페이스로부터의 접속을 허용
# PORT는 1-65535 사이의 숫자를 사용할 수 있음 
server_socket.bind((HOST, PORT))
print("bind")
# 서버가 클라이언트의 접속을 허용하도록
server_socket.listen(5)
print("listen....")
# accept 함수에서 대기하다가 클라이언트가 접속하면 새로운 소켓을 리턴
client_socket, addr = server_socket.accept()

# 접속한 클라이언트의 주소
print('Connected by', addr)

accept_img = Image(ImageFile.ACCEPT)
ev3.screen.clear()
ev3.screen.load_image(accept_img)

def open():
    motorA.run(200)
    wait(3000)
    motorA.run(0)
    wait(3000)
    motorA.run(-200)
    wait(3000)
def stop():
    motorA.run(0)

def move(msg):
    if msg == "1":
        if now_hour >= 0 and now_hour <= 1:
            open()
        else:
            stop()
    if msg == "2":
        if now_hour > 1 and now_hour <= 2:
            open()
        else:
            stop()
    if msg == "3":
        if now_hour > 2 and now_hour <= 3:
            open()
        else:
            stop()
    if msg == "x":
        stop()
    
# 무한루프를 돌면서 
while True:
    now_utc=datetime.now(timezone('UTC'))
    now_kst=now_utc.astimezone(timezone('Asia/Seoul'))
    now_hour=now_kst.hour

    

    # 클라이언트가 보낸 메시지를 수신하기 위해 대기
    data = client_socket.recv(1024)

    # 빈 문자열을 수신하면 루프를 중지 
    if not data:
        break

    # 수신받은 문자열을 출력
    print('Received from', data)
    print(now_time)
    print(now_hour)

    # 받은 문자열을 다시 클라이언트로 전송
    # client_socket.sendall(data)
    move(data.decode())
    ev3.screen.clear()
    ev3.screen.print(data.decode())


# 소켓을 닫기
client_socket.close()
server_socket.close()

 

프로토타입

 

시현 영상
장점

-적은 비용으로 간단하게 사용할 수 있기 때문에 시스템을 만드는 법 및 프로그램 소스코드, 스마트폰과 교구만 있으면 누구나 쉽게 만들 수 있어 접근 가능성이 좋다

- 고등학생들이 쉽게 이 시스템을 제작해 설치할 수 있으므로 탈의실 사 생활문제가 있는 학교는 어디든지 적용할 수 있다.

-일반적으로 보안시스템은 얼굴, 지문, 손목정맥, 홍채 등 사용자 개인의 정보를 활용한다. 하지만 이러한 개인정보는 수집하는 것과 관리하는 것이 매우 엄격한 법에 의해 처리되어야 한다. 따라서 학생들이 손쉽게 만들기 도 어렵고 기존 개발된 상용품은 매우 고가의 장비이다. 하지만 이 시스 템은 hand shape을 이용하기 때문에 얼굴, 지문 인식 등과 같은 개인정 보를 사용하지 않아 안전하다.

-사전에 세팅한 데이터를 읽어 해당 시간에 지정된 반만 들어갈 수 있어 학생들의 사생활을 보호할 수 있다.

 

기대효과

-이 시스템을 적용한 출입문은 설치비용이 100만원 이내이고 프로그래밍 이나 시스템의 유지보수가 손쉬워 전국의 학교에 학생들이 직접 설치할 수 있다.

-학생들이 스스로 AI기술을 이용해 스스로의 문제를 해결할 수 있다는 영 감을 줄 수 있어 더 다양한 멋진 솔루션들이 다방면에서 나올 수 있도록 동기부여할 수 있다.