목표
RFID 카드를 태그하면 서보모터를 작동하거나 음성을 재생하는 예제입니다.
등록된 카드를 태그할 경우 “문이 열립니다.”라는 소리를 재생한 뒤, 서보모터를 90도로 이동한 후, 3초 뒤에 다시 0도로 복귀합니다. 만약 등록되지 않은 카드를 태그할 경우에는 “등록되지 않은 카드입니다.”라는 소리를 재생합니다.
카드에서 읽은 ID는 대시보드의 위젯에 표시합니다.
• 타입캐스트 와 같은 사이트를 이용하면 텍스트를 음성으로 변환하여 mp3로 다운받을 수 있습니다.
하드웨어
부품
부품 | 갯수 |
---|---|
MFRC522 RFID 리더 | 1 |
RFID 카드 또는 태그 | 2 |
서보모터 | 1 |
연결
아래의 핀을 가로 방향으로 서로 연결합니다.
MFRC522 | 5V DC 파워 ² | 서보모터(SG-90) | GPIO |
---|---|---|---|
VIN(3.3V) | | 3.3V | |
GND | | GND | |
SCK ¹ | | 11 (SPI0 SCLK) | |
MISO ¹ | | 9 (SPI0 MISO) | |
MOSI ¹ | | 10 (SPI0 MOSI) | |
SDA ¹ | | 8 (SPI0 CE0) | |
RST | | 3.3V | |
| + | VIN(빨간색) | |
| – | GND(까만색) | GND |
| SIGNAL (주황색 또는 노란색) ³ | 16 |
² 서보모터의 전압과 소모전류를 고려하여 적절한 외부 DC 파워를 연결합니다.
³ 임의의 GPIO핀에 연결할 수 있습니다.
I/O장치
RFID 리더와 서보모터를 I/O장치에 추가합니다.
변수
카드의 태그 여부 및 카드의 ID를 저장할 변수를 추가합니다.
- “카드 태그됨” (디지털)
- “카드 ID” (바이트 배열)
로직
항상 카드의 태그 여부를 체크합니다.
카드가 태그되었을 때 등록된 카드라면 동작-미디어재생 기능을 이용하여 “문이 열립니다.” mp3 파일을 재생합니다. 그 후에 서보모터를 90도로 이동하고 3초 대기후에 다시 서보모터를 0도로 복귀합니다. 만약, 등록되지 않은 카드가 태그되면 “등록되지 않은 카드입니다.” mp3 파일을 재생하고 서보모터는 작동하지 않습니다.
위의 내용을 알고리즘 블록으로 나타내면 아래와 같습니다.
[로직]
로직을 추가합니다. 실행주기는 기본값을 사용합니다.
[제어] 항상 카드의 태그 여부를 체크한다.
제어를 추가합니다.
[조건] 항상
항상 만족하는 조건을 추가합니다.
- 타입: 항상 유효
[동작] RFID 카드가 태그되었는지 체크한다
카드의 태그여부를 “카드 태그됨” 이라는 변수에 저장하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: RFID 카드 리더
- 명령: IS_NEW_CARD
- 값: “카드 태그됨” 선택
[제어] 카드가 태그되었을때 동작 실행하기
제어를 추가합니다.
[조건] 카드가 태그되었다면
앞에서, 카드의 태그여부를 “카드 태그됨”이라는 변수에 저장하였으므로, 이 변수의 값을 비교하는 조건을 추가합니다.
- 타입: 비교
- 변수: “카드 태그됨”
- 연산자: = (같다)
- 값: true
[동작] 카드로 부터 ID를 읽는다.
카드의 ID를 읽어서 “카드 ID”라는 변수에 저장하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: RFID 카드리더
- 명령: READ_UID
- 값
- 타입: 선택안함
- UID: “카드 ID” 변수 선택
[제어] 등록된 ID일 경우 동작
제어를 추가합니다.
[조건] 등록된 ID라면
“카드 ID”의 값을 비교하는 조건을 추가합니다.
- 타입: 비교
- 변수: “카드 ID”
- 연산자: = (같다)
- 값: 등록된 카드의 ID
[동작] “문이 열립니다.” 음성을 재생한다
mp3파일을 재생하는 동작을 추가합니다.
- 타입: 미디어재생
- 파일경로: “문이 열립니다.” mp3파일의 라즈베리파이 경로 (예: /home/pi/welcome.mp3)
[동작] 서보모터를 90도로 이동한다
서보모터의 위치를 이동하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: 서보모터
- 명령: SET_POS
- 값: 90
[동작] 3초를 기다린다
시간지연 동작을 추가합니다.
- 타입: 시간지연
- 값: 0시간 0분 3초 0밀리초
[동작] 서보모터를 0도로 이동한다
서보모터의 위치를 이동하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: 서보모터
- 명령: SET_POS
- 값: 0
[제어] 등록된 ID가 아닌 경우 동작
제어를 추가합니다.
[조건] 등록된 ID가 아니라면
조건을 직접 작성해도 되지만, 앞서 생성한 “[제어] 등록된 ID 일 경우 동작”의 정반대 (반전) 조건을 사용합니다.
- 타입: 조건참조
- 참조 : [제어] 등록된 ID일 경우 동작
- 조건옵션: 반전
[동작] “등록되지 않은 카드입니다.” 음성을 재생한다
mp3파일을 재생하는 동작을 추가합니다.
- 타입: 미디어재생
- 파일경로: “등록되지 않은 카드입니다”의 mp3 파일 경로
[동작] 태그된 카드 종료
태그된 카드와 관련된 작업을 종료하는 동작을 추가합니다. 태그된 카드를 종료하지 않으면 동일하거나 다른 카드가 다음에 태그되었을때 제대로 동작하지 않습니다.
- 타입: I/O장치
- 장치: RFID 카드리더
- 명령: STOP
대시보드
대시보드를 추가합니다.
태그된 카드의 ID를 표시하는 읽기 위젯을 추가합니다.
- 구분: 읽기
- 변수: “카드 ID”
- 타입: 텍스트
실행
버튼을 눌러서 RUN모드로 진입합니다.