* 트윈콥터 제작 전 연습삼아서 ZeroPage에서 놀고 있는 라즈베리파이2(라파이)를 이용하여 ZP실문을 여는 아주 간단한 IOT도전 == 기획 == * Slack-ZeroBot에게 문열라는 명령어를 주면 문을 열 수 있도록 함(ex- ZeroBot OpenDoor) == 사용된 부품 == * 라파이2(테스트용으로 라파이B+) * 서보모터 - 한양대 자동차 대회때 사용하고 남은 1개 사용(아래 데이터시트 첨부) attachment:sample.png * UTP선(약 10m) - 원래는 8개 선 중 4개는 랜선 3개는 서보모터 컨트롤하려다가 귀찮아서 3개만 사용 * 빵판(브레드보드) - 납땜하기 귀찮고 나중에 뭘 추가할지 몰라서... == 설계 == * 사용 언어 : 파이썬(해보니 C보다 훨~~~~~~~~~~~~~~~~씬 쉬움) * 입구에 있는 버튼 하나만 눌러주면 문이 열리므로 스위치는 서보모터 하나로 단순하게 제작 * 세콤이 멍청하게 버튼 뜯을 수 있게 해놨을리도 없고 그래서 직접연결 안하고 이렇게 하는겁니다 * 무선동글을 이용하기에는 구입이 귀찮기도 하고 다른 무선신호가 많은 6피의 특성상 유선으로 할 예정 * 추후에 기능을 추가 할 수 있도록 라파이랙에 라파이를 두고 UTP선을 길게 뽑아서 서보모터만 입구버튼 상단에 장착 * 7.24 전원문제로 인해 별도로 외부 전원 연결할 예정 * 프로그램은 서보모터를 회전시켜 입구 앞에 있는 열림버튼은 눌렀다가 원위치 시킴 attachment:Example.jpg == 구현 == * ip는 ZP에 할당받은 대역폭 중 하나를 사용 * 코드{{{ 아직안함ㅋ }}} * ZeroBot이랑은 어떻게 연동할까? - 천천히 생각해봅시다 * Raspberry pi에서 Python으로 Web Server를 만들어 놓고 그 웹서버에 접속하면 열리는 방식으로 해두면 ZeroBot이 해당 URL로 HTTP접속을 하면 됨. 만약 보안을 신경쓰고 싶다면 인증을 달면 되고. -bluemir- === 7.24 === * 약 10m의 거리에서 파워를 제공받다보니 파워부족으로 컨트롤이 잘안됨 * 0 ~ 180도로 반복할때 10번 중 2번 정도가 중간에 되돌아옴 * 예제 코드{{{ 0 ~ 180도 반복하는 코드 1 import RPi.GPIO as GPIO 2 import time 3 pin = 18 4 GPIO.setmode(GPIO.BCM) 5 GPIO.setup(pin, GPIO.OUT) 6 p = GPIO.PWM(pin, 50) 7 8 p.start(7.5) 9 try: 10 while True: 11 p.ChangeDutyCycle(7.5) 12 time.sleep(2) 13 p.ChangeDutyCycle(12.5) 14 time.sleep(2) 15 p.ChangeDutyCycle(2.5) 16 time.sleep(5) 17 except keyboardInterrput: 18 p.stop() 19 GPIO.cleanup() }}} * 별도의 전원필요할듯(4.8~6v) - 자동차대회용 배터리 사용하면 될듯 * 별도 5V(휴대폰 충전기) 쓰고 모터드라이브를 사용하는건? -bluemir * 별도 전원이 들어가서 모터드라이브 넣어줘야하는데 IC칩하나만 쓸지 자동차대회로 준거 쓸지 고민이네요 -[김한성] === 7.27 === * 이거 하러 온 건 아닌데 다시 생각해봄 * 별도의 전원(5v) 추가 예정 - 핸드폰 배터리 충전기 * 이유 - 24일에 기록한거처럼 파워 부족(전압은 적정치이나 기본출력 전류값이 너무 적음....)으로 컨트롤이 잘 안됨 * 모터드라이브도 추가 예정 * IC칩 사용(SN754410NE) - http://html.alldatasheet.com/html-pdf/28616/TI/SN754410NE/24/1/SN754410NE.html attachment:sample1.png * 모터드라이브의 역할 {{{ 1. 별동의 외부 전원 공급 가능 2. 하나의 안정장치?(라파이 대신 얘가 대신 타줌ㅋ) 3. 열차단 회로 내장 4. 과전류 보호회로 내장 5. 역기전력 흡수용 다이오드 내장 }}} * 이쁘게 만들어야할듯 * 대충 달려고했는데 애매합니다(걸칠곳이 없서서 ㄷㄷ) * IOT가 불가능한 상황일때 물리적으로 버튼에 접근이 가능하도록 제작 === 8.5 === * PWM(Pulse Width Modulation) * 아날로그 신호를 디지털 형태로 나타낸 것. * 전원이 on되는 시간을 펄스 폭 * 펄스 폭을 조정함으로써 on/off사이의 전압을 흉내낼 수 있다. attachment:pwm.png === 9.11 === * [kjm] 삽질중. * scapy로 하면 되는건가... * http://www.secdev.org/projects/scapy/doc/installation.html * 이렇게 친절한 설명서를 제대로 읽지 않은 자의 최후.. * 뭐야 라이브러리 설치 다해도 안되자나 * tcpdump에 권한을 줘야 된다고 한다? 또 여기서 setcap까지.. permission 어쩌구... * https://github.com/byt3bl33d3r/MITMf/issues/49 * 일단 자야지 === 9.12 === * [김한성] 삽질중....... * 추가적인 확장성을 고려하여 납땜 중...... * 핀셋이 없어서 손이 불타오르고 있습니다. * 회로는 추후에 공개...... === 9.15 === * scapy가 없어도 되잖.... * 그냥 파이썬의 socket 라이브러리로 코딩. * 잘되는거같네요. * 이따 한성이형꺼랑 합쳐야지.. * 엥? http로 해야지 * flask를 써보고 있습니다. 얇은귀의 김정민 === 9.15 === * 라즈베리파이 파이썬 위키 : http://sourceforge.net/p/raspberry-gpio-python/wiki/Home/ === 9.17 === * 어찌어찌 플라스크로 post 받고 하는건 만들었습니다. 합쳐봐야알듯.. 9.18 * 모터드라이브에서 EN와 A 상관없이 Y로 계속 High만 뜸. * 일단 모터드라이브 제외하고 진행 * 실행코드{{{ import RPi.GPIO as GPIO pwm_pin = 23 GPIO.setmode(GPIO.BCM) GPIO.setup(pwm_pin, GPIO.OUT) p = GPIO.PWM(pwm_pin, 50) p.start(0) p.ChangeDutyCycle(12.5) time.sleep(2) p.ChangeDutyCycle(0.5) time.sleep(2) p.stop() GPIO.cleanup() }}} == 문제점 == * ZeroBot이 죽었을 경우 * 직접 라파이에 접근하여 문을 연다 * Slack이 막힐 경우 * 설마;;; * 불순한 의도로 라파이에 ssh로 접근하여 트롤링 해놓는 경우 * 노력이 가상해서 봐준다 * 물리적으로 라파이 전원 or 인터넷을 사용 못하게 하는 경우 * 현장범이면 빠따로.... * 다시 연결해야지.... {{{그냥 귀찮아서 학생증으로 열고만다;;}}} --------------------------------- [엔진소리죽이는데], [라즈베리파이]