Difference between r1.17 and the current
@@ -56,6 +56,152 @@
   * 별도 전원이 들어가서 모터드라이브 넣어줘야하는데 IC칩하나만 쓸지 자동차대회로 준거 쓸지 고민이네요 -[김한성]
 
=== 7.27 ===
 
 
 
 
 
 
 
 
 
 
 
* ZeroBot이 죽었을 경우
* 직접 라파이에 접근하여 문을 연다
=== 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만 뜸(설마 나갔나??)
 * 일단 모터드라이브 제외하고 진행
 * 서보가 전력을 생각 외로 많이 소모하여 서보에 pwm 신호를 주면 라파이가 꺼짐ㅋㅋㅋㅋㅋㅋ 현재 0.7A짜리 말고 2A짜리 충전기가 필요할 듯
 * 실행코드{{{
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()
}}}
 * 서버랑 gpio를 같이 넣고 sleep했다가 서버가 사망, 그래서 파일 분리해줌
  * 여러분 서버에 sleep하지마세요. 저거 할때 옆에서 안보고 있었으면 정민이 멘탈 또 나갈뻔. - [김한성]
 * 와! 문이 열린다.
  * 이거 하나 한다고....
  * 날잡고 하면 금방하는데 언제나 귀차니즘
=== 10.28 ===
 * 기존에는 putty로 접속해서 nohup ~~&으로 실행함 
 * 정전 or 부주의로 인한 재부팅시 매번 직접 해당 구문을 해줘야하는 불편함이 있음
 * 자동실행 실시(데비안 계열이지만 해당 파일과 경로가 다르다 참고하도록)
 * 동작하는 코드는 다음과 같다
{{{  1 import RPi.GPIO as GPIO
  2 import time
  3
  4 #en_pin = 18
  5 pwm_pin = 23
  6
  7 GPIO.setmode(GPIO.BCM)
  8 #GPIO.setup(en_pin, GPIO.OUT)
  9 GPIO.setup(pwm_pin, GPIO.OUT)
 10
 11 p = GPIO.PWM(pwm_pin, 50)
 12
 13 p.start(0)
 14 #       GPIO.output(en_pin, GPIO.HIGH)
 15 p.ChangeDutyCycle(12)
 16 time.sleep(2)
 17 p.ChangeDutyCycle(0.5)
 18 time.sleep(2)
 19 p.stop()
 20 GPIO.cleanup()}}} 
 * 서버의 코드 
{{{  1 import RPi.GPIO as GPIO
  2 from flask import Flask
  3 from flask import request
  4 import random
  5 import os
  6
  7 HOST = "165.194.27.172"
  8
  9 app = Flask(__name__)
 10
 11 @app.route('/', methods = ['POST'])
 12 def openDoor():
 13     id = request.form['id']
 14     print id
 15     if id == 'ZeroPage':
 16         os.system("aplay /home/pi/sound/and_open.wav &")
 17         execfile("open.py")
 19         return 'Ok'
 20     else:
 21         a = random.random()%1
 22
 23         if a == 0:
 24             os.system("aplay /home/pi/sound/no_doing1.wav &")
 25         else:
 26             os.system("aplay /home/pi/sound/no_doing2.wav &")
 27
 28         return 'access denied'
 29
 30 if __name__ == '__main__':
 31     app.run(HOST,5000)}}}
 * 문제를 해결하기 위해 재부팅시 데몬으로 돌린다(윈도우-시작프로그램 같은 것)
  * /etc/rc.local 에서 fi ~~ exit 0 사이에 실행할 명령어 입력하면 됨
  * 실제 적용 코드
{{{ 16 if [ "$_IP" ]; then
 17   printf "My IP address is %s\n" "$_IP"
 18 fi
 19   sudo python /home/pi/zerobot/openDoor.py &
 20 exit 0
}}}
 * 이제 재부팅해도 알아서 잘된다 + 열린건가?에 대한 에러 사운드도 추가(망했어요~!)
 == 문제점 ==* ZeroBot이 죽었을 경우
* 직접 라파이에 접근하여 문을 연다
@@ -67,3 +213,5 @@
   * 현장범이면 빠따로....
* 다시 연결해야지....
{{{그냥 귀찮아서 학생증으로 열고만다;;}}}
* 다시 연결해야지....
{{{그냥 귀찮아서 학생증으로 열고만다;;}}}
---------------------------------
[엔진소리죽이는데], [라즈베리파이]
- 트윈콥터 제작 전 연습삼아서 ZeroPage에서 놀고 있는 라즈베리파이2(라파이)를 이용하여 ZP실문을 여는 아주 간단한 IOT도전
 
 
사용된 부품 ¶
- 라파이2(테스트용으로 라파이B+) 
 
- 서보모터 - 한양대 자동차 대회때 사용하고 남은 1개 사용(아래 데이터시트 첨부)
 

[PNG image (63.27 KB)]
- UTP선(약 10m) - 원래는 8개 선 중 4개는 랜선 3개는 서보모터 컨트롤하려다가 귀찮아서 3개만 사용
 
- 빵판(브레드보드) - 납땜하기 귀찮고 나중에 뭘 추가할지 몰라서...
 
 
설계 ¶
- 사용 언어 : 파이썬(해보니 C보다 훨~~~~~~~~~~~~~~~~씬 쉬움)
 
- 입구에 있는 버튼 하나만 눌러주면 문이 열리므로 스위치는 서보모터 하나로 단순하게 제작
 - 세콤이 멍청하게 버튼 뜯을 수 있게 해놨을리도 없고 그래서 직접연결 안하고 이렇게 하는겁니다
 
 
- 세콤이 멍청하게 버튼 뜯을 수 있게 해놨을리도 없고 그래서 직접연결 안하고 이렇게 하는겁니다
- 무선동글을 이용하기에는 구입이 귀찮기도 하고 다른 무선신호가 많은 6피의 특성상 유선으로 할 예정
 
- 추후에 기능을 추가 할 수 있도록 라파이랙에 라파이를 두고 UTP선을 길게 뽑아서 서보모터만 입구버튼 상단에 장착 
 - 7.24 전원문제로 인해 별도로 외부 전원 연결할 예정
 
 
- 7.24 전원문제로 인해 별도로 외부 전원 연결할 예정
- 프로그램은 서보모터를 회전시켜 입구 앞에 있는 열림버튼은 눌렀다가 원위치 시킴
 

[JPG image (16.03 KB)]
구현 ¶
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() 
 
- 0 ~ 180도로 반복할때 10번 중 2번 정도가 중간에 되돌아옴
- 별도의 전원필요할듯(4.8~6v) - 자동차대회용 배터리 사용하면 될듯
 - 별도 5V(휴대폰 충전기) 쓰고 모터드라이브를 사용하는건? -bluemir 
 
- 별도 전원이 들어가서 모터드라이브 넣어줘야하는데 IC칩하나만 쓸지 자동차대회로 준거 쓸지 고민이네요 -김한성
 
 
 
- 별도 5V(휴대폰 충전기) 쓰고 모터드라이브를 사용하는건? -bluemir 
7.27 ¶
- 이거 하러 온 건 아닌데 다시 생각해봄
 
- 별도의 전원(5v) 추가 예정 - 핸드폰 배터리 충전기
 - 이유 - 24일에 기록한거처럼 파워 부족(전압은 적정치이나 기본출력 전류값이 너무 적음....)으로 컨트롤이 잘 안됨
 
 
- 이유 - 24일에 기록한거처럼 파워 부족(전압은 적정치이나 기본출력 전류값이 너무 적음....)으로 컨트롤이 잘 안됨
- 모터드라이브도 추가 예정
 - IC칩 사용(SN754410NE) - http://html.alldatasheet.com/html-pdf/28616/TI/SN754410NE/24/1/SN754410NE.html
 
 
- IC칩 사용(SN754410NE) - http://html.alldatasheet.com/html-pdf/28616/TI/SN754410NE/24/1/SN754410NE.html

[PNG image (6.88 KB)]
- 모터드라이브의 역할 
 1. 별동의 외부 전원 공급 가능 2. 하나의 안정장치?(라파이 대신 얘가 대신 타줌ㅋ) 3. 열차단 회로 내장 4. 과전류 보호회로 내장 5. 역기전력 흡수용 다이오드 내장 
- 이쁘게 만들어야할듯
 - 대충 달려고했는데 애매합니다(걸칠곳이 없서서 ㄷㄷ)
 
- IOT가 불가능한 상황일때 물리적으로 버튼에 접근이 가능하도록 제작
 
 
 
- 대충 달려고했는데 애매합니다(걸칠곳이 없서서 ㄷㄷ)
8.5 ¶
- PWM(Pulse Width Modulation)
 - 아날로그 신호를 디지털 형태로 나타낸 것. 
 
- 전원이 on되는 시간을 펄스 폭
 
- 펄스 폭을 조정함으로써 on/off사이의 전압을 흉내낼 수 있다.
 
 
- 아날로그 신호를 디지털 형태로 나타낸 것. 

[PNG image (25.33 KB)]
9.11 ¶
- kjm 삽질중.
 - scapy로 하면 되는건가...
 
- http://www.secdev.org/projects/scapy/doc/installation.html
 - 이렇게 친절한 설명서를 제대로 읽지 않은 자의 최후..
 
- 뭐야 라이브러리 설치 다해도 안되자나
 
 
- 이렇게 친절한 설명서를 제대로 읽지 않은 자의 최후..
- tcpdump에 권한을 줘야 된다고 한다? 또 여기서 setcap까지.. permission 어쩌구...
 
- https://github.com/byt3bl33d3r/MITMf/issues/49
 - 일단 자야지
 
 
 
- 일단 자야지
 
- scapy로 하면 되는건가...
9.15 ¶
- scapy가 없어도 되잖....
 - 그냥 파이썬의 socket 라이브러리로 코딩.
 
- 잘되는거같네요.
 
- 이따 한성이형꺼랑 합쳐야지..
 
- 엥? http로 해야지
 
 
- 그냥 파이썬의 socket 라이브러리로 코딩.
- flask를 써보고 있습니다. 얇은귀의 김정민
 
 
9.15 ¶
- 라즈베리파이 파이썬 위키 : http://sourceforge.net/p/raspberry-gpio-python/wiki/Home/
 
9.17 ¶
- 어찌어찌 플라스크로 post 받고 하는건 만들었습니다. 합쳐봐야알듯..
 
 
9.18 ¶
- 모터드라이브에서 EN와 A 상관없이 Y로 계속 High만 뜸(설마 나갔나??)
 
- 일단 모터드라이브 제외하고 진행
 
- 서보가 전력을 생각 외로 많이 소모하여 서보에 pwm 신호를 주면 라파이가 꺼짐ㅋㅋㅋㅋㅋㅋ 현재 0.7A짜리 말고 2A짜리 충전기가 필요할 듯
 
- 실행코드
 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() 
 
- 서버랑 gpio를 같이 넣고 sleep했다가 서버가 사망, 그래서 파일 분리해줌
 - 여러분 서버에 sleep하지마세요. 저거 할때 옆에서 안보고 있었으면 정민이 멘탈 또 나갈뻔. - 김한성
 
 
 
- 여러분 서버에 sleep하지마세요. 저거 할때 옆에서 안보고 있었으면 정민이 멘탈 또 나갈뻔. - 김한성
- 와! 문이 열린다.
 - 이거 하나 한다고....
 
- 날잡고 하면 금방하는데 언제나 귀차니즘
 
 
 
- 이거 하나 한다고....
10.28 ¶
- 기존에는 putty로 접속해서 nohup ~~&으로 실행함 
 
- 정전 or 부주의로 인한 재부팅시 매번 직접 해당 구문을 해줘야하는 불편함이 있음
 
- 자동실행 실시(데비안 계열이지만 해당 파일과 경로가 다르다 참고하도록)
 
- 동작하는 코드는 다음과 같다
 
1 import RPi.GPIO as GPIO 2 import time 3 4 #en_pin = 18 5 pwm_pin = 23 6 7 GPIO.setmode(GPIO.BCM) 8 #GPIO.setup(en_pin, GPIO.OUT) 9 GPIO.setup(pwm_pin, GPIO.OUT) 10 11 p = GPIO.PWM(pwm_pin, 50) 12 13 p.start(0) 14 # GPIO.output(en_pin, GPIO.HIGH) 15 p.ChangeDutyCycle(12) 16 time.sleep(2) 17 p.ChangeDutyCycle(0.5) 18 time.sleep(2) 19 p.stop() 20 GPIO.cleanup()
- 서버의 코드 
 
  1 import RPi.GPIO as GPIO
  2 from flask import Flask
  3 from flask import request
  4 import random
  5 import os
  6
  7 HOST = "165.194.27.172"
  8
  9 app = Flask(__name__)
 10
 11 @app.route('/', methods = ['POST'])
 12 def openDoor():
 13     id = request.form['id']
 14     print id
 15     if id == 'ZeroPage':
 16         os.system("aplay /home/pi/sound/and_open.wav &")
 17         execfile("open.py")
 19         return 'Ok'
 20     else:
 21         a = random.random()%1
 22
 23         if a == 0:
 24             os.system("aplay /home/pi/sound/no_doing1.wav &")
 25         else:
 26             os.system("aplay /home/pi/sound/no_doing2.wav &")
 27
 28         return 'access denied'
 29
 30 if __name__ == '__main__':
 31     app.run(HOST,5000)
- 문제를 해결하기 위해 재부팅시 데몬으로 돌린다(윈도우-시작프로그램 같은 것)
 - /etc/rc.local 에서 fi ~~ exit 0 사이에 실행할 명령어 입력하면 됨
 
- 실제 적용 코드
 
 
- /etc/rc.local 에서 fi ~~ exit 0 사이에 실행할 명령어 입력하면 됨
16 if [ "$_IP" ]; then 17 printf "My IP address is %s\n" "$_IP" 18 fi 19 sudo python /home/pi/zerobot/openDoor.py & 20 exit 0
- 이제 재부팅해도 알아서 잘된다 + 열린건가?에 대한 에러 사운드도 추가(망했어요~!)
 













