제가 스마트 자물쇠를 만들어 봤어요.

16157 단어 RaspberryPi

개요


연구실 열쇠를 일일이 꺼내는 게 귀찮아서 IC카드로 열었어요.

종점


IC카드를 카드 리더기에 넣으면 열쇠를 켤 수 있어요.
연구실 열쇠가 IC카드를 열었어요.👍가벼운 웃음pic.twitter.com/sb7WfswfD9-mori takuto(gump)(@m__04v)2018년 9월 24일

준비물


  • Raspberry Pi
  • 서보 모터
  • 카드 리더기
  • (3d 프린터)
  • (Fusion360)

시스템 구성


이번에 회전 서보 모터용 API 제작
따라서 카드 리더기뿐만 아니라 스마트폰 앱, 스마트워치 앱도 스위치할 수 있다
(API가 연구실에 서 있기 때문에 와이파이 경로가 해커에 의해 파괴되지 않는 한 낯선 사람에게 열리지 않는다.웃음)



  • Flask에서 API 구축 및 엔드포인트 생성
  • GPIO를 통해 서보 모터를 제어하는 API

이 문장의 내용


1.Flask로 API
만들기
2. 3D 프린터에서 열쇠를 돌리는 부분을 제작

3. 스마트폰 앱 제작

4. API
실제로 찍어보기
5. 고정대 제작

6. 카드 리더기 가져오기

7. 완성

Flask를 사용하여 API 생성


이번에는 GPIO로 서보 모터를 제어하고 싶어서 Python의 Flask로 API를 만들었습니다.

플래시 설치


$ pip install flask

간단한 API 만들기


from flask import Flask

app = Flask(__name__)

@app.route("/open")
def open():  
    return "open"

if __name__ == "__main__":
    # webサーバー立ち上げ
    app.run(host="192.168.**.**", port=5000)


RPi.GPIO 설치


$ pip install rpi.gpio

서보 모터 설정


이번에 이 보도를 참고하였습니다

* 바느질 구성이 약간 변경되었습니다

Raspberry Pi로 서보 모터 돌리기


GPIO로 서보 모터 돌리기


from flask import Flask

app = Flask(__name__)

@app.route("/open")
def open():  
    GPIO.setmode(GPIO.BCM)

    gp_out = 4
    GPIO.setup(gp_out, GPIO.OUT)

    servo = GPIO.PWM(gp_out, 50)
    servo.start(0)

    servo.ChangeDutyCycle(7.5)
    time.sleep(0.5)

    servo.stop()
    GPIO.cleanup()    
    return "open"


if __name__ == "__main__":
    # webサーバー立ち上げ
    app.run(host="192.168.**.**", port=5000)

3d 프린터에서 열쇠를 돌리는 부분을 만들다


서보 모터의 앞부분에 자물쇠 부분을 설치하고 싶어서 Fusion360으로 모델링하고 인쇄합니다


완성 후, 핫키 등으로 서보 모터의 앞부분에 붙인다

스마트폰 앱 만들기


이번에 Android 스마트폰과 Android Wear 어플리케이션 제작

적절한 구성 버튼, API 두드리기

openButton.setOnClickListener {
    object: MyAsyncTask2() {
        override fun doInBackground(vararg params: Void): JSONArray? {
            var result : JSONArray? = null
            var res: String = ""
            try {
                res = Run().run("http://192.168.**.**:5000/open")
                val resJson = JSONArray(res)
                status.text = "Status: Open"
                result = resJson
            } catch (e: IOException) {
                e.printStackTrace()
            } catch (e: JSONException) {
                e.printStackTrace()
            }
            return result
        }
    }.execute()
}

API를 실제로 찍어보도록 하겠습니다.


여기까지, 열쇠를 돌릴 수 있는지 시험해 보자

의외로 돌았어요. 웃어요.



固定台の作成


위의 애니메이션은 손으로 눌러서 고정된 테이블을 만들어야 한다


이런 느낌으로 제작해서 프린트하는 거예요.

設置


고정대를 설치한 후, 손으로 누르지 않아도 회전할 수 있습니다!

이렇게 힘껏 밀어. 웃어.



カードリーダーの導入


Raspi에서 NFC 카드 리더기를 사용한 것은 이 글을 참고한 것이다

Raspberry PiにNFCリーダを接続してSuicaを読み取る


이 문장을 참고하여 코드를 살짝 수정합니다

이번에는 SQLite3에 카드 정보를 미리 등록하고 등록된 카드만 있으면 스위치를 켤 수 있습니다

또한 버튼을 설정하고 열기 모드와 닫기 모드를 전환했지만 보도가 길어질 수 있기 때문에

기본적으로 L일 뿐인데 이 기사를 볼 수 있다면 정말 고맙습니다

ラズパイと音声認識でLチカ


target_req_suica = nfc.clf.RemoteTarget("212F")

while True:
    clf = nfc.ContactlessFrontend('usb')
    target_res = clf.sense(target_req_suica,iterations=int(TIME_cycle//TIME_interval)+1 , interval=TIME_interval)

    if target_res != None:
        tag = nfc.tag.activate_tt3(clf, target_res)
        tag.sys = 3

        #IDmを取り出す
        idm = binascii.hexlify(tag.idm)

        #sqlite使って登録判定
        cur = conn.cursor().execute('select count(*) from cards where card_id = ?',(idm,))

        isExist = False
        if cur.fetchone()[0] > 0:
          isExist = True

        output=""

        if isExist == True:
            output= not GPIO.input(2)
            if output == True: 
                requests.get(open_url)
            else:
                requests.get(close_url)

完成


많은 코드를 생략했지만

이렇게 하면 일일이 열쇠를 꺼낼 필요가 없다!

스마트워치도 켜서 편하네요!!!

집에도 가져가세요.p>



参考記事


2018年9月24日

Raspberry Piでサーボモーターを回す

Raspberry PiにNFCリーダを接続してSuicaを読み取る


좋은 웹페이지 즐겨찾기