아두이노로 혼종 해킹 도구 만들기
기능
0. 미세먼지 측정
1. 온습도 측정
-> lcd에 항상 값 표시
2. IR 센서로 신호 받고 IR LED로 받은 신호 그대로 보내기 (ex>적외선 리모컨 복사)
-> IR 센서는 항상 작동하도록하고 대신 스위치로 전류 차단 가능하게
-> IR LED는 버튼1 으로 제어 (버튼을 눌러 SEND MODE로 바꾸면, n초마다 작동)
3. RFID 카드 복제 (MIFARE만 가능)
-> 스위치로 전류 차단 (MISO, 3.3v)
-> 메모리 부족 문제로, uid 복제기능만을 메인 코드에 넣고 데이터 복제 기능은 따로 코드 작성해서 사용할때만 업로드.
-> 버튼2 으로 모드 변경. (카드 읽기 모드, 쓰기 모드)
-> 버튼1과 버튼2를 동시에 누르면 카드 읽기/쓰기 작동 (카드를 올려놓고 눌러야함. 누르지 않으면 카드를 올려놓아도 무반응)
부가적으로
0. 버튼제어
-> 버튼 2개 사용
-> 아날로그 입력 핀 하나만을 사용. 저항을 이용해 누르는 버튼에 따라 전압값이 변함.
1. led로 상태표시
-> 네오픽셀 led 2개 사용
-> 1개는 미세먼지 농도값에 따라 변화
-> 다른 하나는 모드에 따라 변화
2. 조도센서로 led 밝기 제어
-> 만들고 나서 느낀점은 밝기 변화가 마음에 안듬.
3. oled 디스플레이 사용
-> 센서값, 모드 상태 표시
부품 구매
- 아두이노 나노 호환보드
http://mechasolution.com/shop/goods/goods_view.php?goodsno=575878&category=
- PMS7003 미세먼지 센서 + 어댑터
- DHT22 온습도 센서
http://mechasolution.com/shop/goods/goods_view.php?goodsno=540038&category=129003
- 적외선 수신부 / IR Receiver
http://mechasolution.com/shop/goods/goods_view.php?goodsno=211&category=
- 적외선 LED 850nm 발신
http://mechasolution.com/shop/goods/goods_view.php?goodsno=540793&category=
- RFID RC522
http://mechasolution.com/shop/goods/goods_view.php?goodsno=866&category=
- 0.96인치 12864 OLED LCD 모듈 4핀
http://mechasolution.com/shop/goods/goods_view.php?goodsno=540942&category=
- 네오픽셀 LED x2개
http://mechasolution.com/shop/goods/goods_view.php?goodsno=540705&category=
- 버튼 x2개
http://mechasolution.com/shop/goods/goods_view.php?goodsno=542428&category=
- 스위치 x3개
http://mechasolution.com/shop/goods/goods_view.php?goodsno=491&category=
- 상황에 맞게 필요한 것들
1M저항, 1k저항 2개, S9013 npn tr
750옴 저항 http://mechasolution.com/shop/goods/goods_view.php?goodsno=951&category=044016001
20옴 저항 http://mechasolution.com/shop/goods/goods_view.php?goodsno=973&category=044016001
cds 조도센서
- 만능기판
http://mechasolution.com/shop/goods/goods_view.php?goodsno=576100&category=132028
- 브레드 보드 + 점퍼케이블
제작
핀 사용
ir led는 발신 거리가 매우 짧다. 따라서 증폭회로를 구성하여 발신 거리를 늘려야만 한다.
ir led 증폭 회로 :
https://mandu-mandu.tistory.com/336
버튼을 두 개달 수 있는 두 개의 남는 디지털핀이 없다. 따라서 하나의 아날로그 핀을 이용해서 버튼 두 개를 모두 연결해주었다.
참고:
http://blog.naver.com/PostView.nhn?blogId=heungmusoft&logNo=220607169389
저는 여기서 750옴 3개와 1M옴 1개를 사용하였습니다. 750옴 3개 대신에 저항값이 같은 저항 3개를 사용하셔도 됩니다.(아마…)
Fritzing 설계 및 제작
hacking_tool.fzz
oled 디스플레이 핀 연결을 왼쪽에서는 SCL SDA 무시하고 위치에 맞게 연결. 오른쪽에서는 SCL SDA 맞춰서 연결.
실제 부품에서 SCL과 SDA의 순서가 달라서 그렇습니다.
왼쪽 배치도에서 D5와 연결된 트렌지스터는 트렌지스터가 아니라, IR 수신부입니다.
추가가 필요한 부품 파일:
-
DHT22
-
RFID RC522
-
네오픽셀 led랑 pms7003이 파일이 없어서 다른 부품으로 대체했다.
pcb프린팅해서 부품만 납땜하는게 젤 편할 듯 하다..
코드 작성
라이브러리에서 제공되는 예제 코드들을 활용했다.
센서랑 디스플레이는 아래 영상을 참고했다.
https://www.youtube.com/watch?v=yMIlVDL0C9s&t=224s
https://www.youtube.com/watch?v=qH650QLNrW4
메모리사용을 최대한 줄이기 위해서 시리얼 출력을 최대한 삭제하였다.
메모리 부족으로 인해서 rfid 데이터 복제 기능을 따로 뺐기 때문에 코드는 2개로 나뉜다.(project.ino에는 uid 복제 기능만 들어가 있다.)
- 두 개의 코드를 합친 코드도 같이 올렸다.
https://github.com/M4ndU/arduino
작동
project.ino
버튼 조작을 통해 P <-> S (ir 수신/발신), R-W (rfid 읽기/쓰기) 모드를 변경할 수 있다.
- rfid uid 복제 기능을 사용할 경우 태그를 올려놓고 버튼 두개를 동시에 눌러야 태그 읽기/쓰기가 된다.
P에서 ir 수신부를 통해 신호를 받아 저장한다. S(ir Send mode)에서 ir led를 통해 저장된 신호를 내보낸다.
-
보낼 ir 값이 없으면 ir send mode에서 ir recv mode로 자동으로 변경된다. 이 것으로 ir 신호가 잘 인식되었는지 알 수 있다.
-
스마트폰 카메라를 이용해서 ir led의 작동여부를 확인 할 수 있다.
only_rfid_data_copy.ino
R(rfid Read mode)에서 태그 데이터 읽어오기 복제될 태그A 원본 uid 97 6b af 4d
복제한 데이터를 넣어줄 태그B uid a9 51 b4 6e
마지막으로 인식한 태그의 데이터를 저장해두었다가 w모드에서 인식된 태그에 데이터를 쓴다. 따라서, R모드에서 태그A를 읽어와서 w모드에서 태그B를 인식시켜주면 된다. W(rfid Write mode)에서 block 4 데이터가 잘 복사되었다.