livin' seberia

'원웨이미러'에 해당되는 글 2건

  1. smart mirror project [day 10] 6
  2. smart mirror project [day 7]

smart mirror project [day 10]

DIY IOT - smart mirror project

이제는 day 10이라고 하기엔 너무 민망할 정도로 꽤 오래 끌긴 했습니다마는... (이보게 처음 착수한 게 두 달 전일세...) 

띄엄띄엄 하다보니 4월 28일, 열흘째. 


...어쩌면 이것이 완성이라고 할 수도 있는, 뭐 그런 것일까? 




드디어 모든 재료를 득템하시었다. 일단 거울 뒤에 두꺼운 하드보드지(;;;)를 대기로 했고 흰색, 노란색, 검정색을 모두 대조해봤다. 

결과적으로 온전히 거울의 역할을 하기엔 역시 검정색이 제격인 걸로 판단! 노란색 1500원짜리 하드보드지여 안녕. 기분 우울할 때 노란색을 보면 좋다던데, 이 하드보드지는 그런 용도로 쓰기로...


그리고 조립... 혹은 일종의 시공 같은 것이 시작되었다. 이렇게. 그러니까 이분들은 거울의 뒷면이 되는 셈이다.

참고로 말씀드리자면, 생각보다 뭔가 잘 안 붙는다. 공간도 뜨고. 어쩌면 전기과 내지 기계과 나온 분들이 '전선을 저렇게 붙이다니'라면서 학을 뗄 지도... (비판을 겸허히 받아들일테니 이사람에게 댓글로 조언을...ㅎㅎ 어찌 고정+정리하오리까..)

라즈베리파이는 보드판을 대서 내사랑 3M 고리걸이테이프- 일명 찍찍이로 고정했다. 엄청 찍찍해서(?) 절대 떨어질 친구가 아니다. 

아 이 번잡한 자태. 사실 부착을 어떻게 해야할지 몰라 꽤 고민했다. 아무튼 했고, 뭐 터질 일(?)만 없다면 이대로 냅두는 게 나을 것 같기도 하다...


그래서 앞면 드디어 개봉 박두!



놀랍게도 화면이 들어와있는 상태다. 세상에. 이건 거의 매직아이 수준인데, 내 눈엔 라즈베리파이 구동 화면이 보인다. ㅋㅋㅋ 가상현실 같나. 왜이런고 보니 모니터 밝기 자체가 50% 에 불과한 초기 모드여서, 이걸 100%까지 올렸다. 그리고 주변의 조명을 살짝 낮추고... (불을 완전히 끄면 참 잘 보일텐데, 그럼 내 얼굴이 안 보이겠지...)



이제 보이는가! 아, 이거 하느라 살이 다 빠져서 턱라인이 드러났... 은 농담이고, 어젯밤에 잠을 설쳤다. (근황은 필요없...)

아무튼, 색상이 여전히 연하디 연하여 아래의 뉴스와 날씨는 사실상 안 보인다고 봐야 한다. 따라서 이 모든 GUI 색상을 바꾸고, 화면 자체를 하얀색으로 바꾸는 것이 가장 효율적일 것 같다. 

더불어 완벽하게 전체화면이 된다면, 위에 라즈베리파이 바도 안 보이고 좋을텐데... 그러려면 html-javascript를 활용하는 편이 더 나았으려나 싶기도 하다. (나는 파이썬으로 해보고 싶었으니!)


이걸 어딘가 어둡고, 조명이 아래에서 비추며(영향이 있을까), 꽤 괜찮은 스팟에다가 설치해보려고 한다. 물론 코드도 바꿔야할테고. 아아, 무려 모니터가 절전모드까지 된다. 이건 어떻게 조절해야하지. 


이제, 코드를 공개한다. 

물론 여기서 아직도 고쳐야 할 게 많다. 위에서 말했듯 색깔도 그렇고, 아직 실시간으로 변하는 것이 제대로 작동하지 않는다. 더구나 최근 GUI배치를 이리저리 바꿨더니 별로 안 예뻐지기도 했다. UI도 넣을거다. 흐린 날은 예쁜 구름이 뜨고, 맑은 날은 햇님이 방긋 웃는 애니메이션도 첨가하고 싶다. 

이렇듯 아직도 하고 싶은 게 참 많다. 




일단 하긴 했다!!!! 




>> 비용 

나 같은 경우엔 위에도 썼다시피 연구실에 굴러다니는 것들(라즈베리파이 키트, 각종 케이블), 차후 구매 조건으로 받은 샘플 거울(실제로 구입도 했다) 등에서 돈을 꽤 아꼈다. 만일, 모든 것을 내가 샀다면, 아마 이정도 나오지 않았을까.

1. 라즈베리파이3 (요즘 나온 것을 사는 게 낫지 않겠나!) - 35불. 다만 초보자용 키트를 통째로 사는 게 좋을 것 같다. 스타트키트가 현재 10만원 선... 아 좀 비싸긴 비싸다. 파이2만 해도 7만원대였는데. 

2. 모니터 - 알*익스프레스에서 싼 것을 고른 것이 우리돈 4만원쯤 했다. (앞에 day 8을 보시라) 대신 오래 기다려야한다. 한 2~3주 잊고 지내면 온다.

3. 원웨이미러 - 두 가지 종류가 있다. 코팅이 거울 뒷면에 된 것, 앞 면에 된 것. 나는 앞면에 된 것을 골랐는데, 이게 뒷면 코팅보다 그나마 더 밝은 편이다. 참고로 앞면 코팅은 지문이 잘 묻어난다. 6만5000원에 운송비가 포함되는 경우도 있다. 유리라 택배로 배송이 안 돼 배송비가 상당히 비싸다. 공장에 가지러 간다고 하든 업체측과 잘 이야기를 해보든 하길 권한다. 

4. USB 허브, wifi 동글, 무선 마우스, 키보드 등등은 알아서... 

5. 각종 케이블과 재료들 (hdmi to hdmi, usb전원선, 모니터용 직류전원장치, 하드보드지, 접착용 테이프 등) - 이것저것하면 2~3만원 정도

------------------------------------------------------------------------------------------------------------------------------------
= 23만원 정도라고 생각하면 될 것 같다. 아이고 비싸다.


혹자는 이렇게 말했다. "장난감을 만드는 데엔 돈이 드는 법"이라고. 하지만 만들어 보는 것에는 분명 그만한 가치가 있다. 개인적으론 이런 저런 코드 짜보고 짱구 굴리고, 스파크 튀는 것도 구경하고(ㄷㄷ) 예쁘게 조립도 해보면서 꽤 많은 걸 배웠다. 일단 뭐든 완성은 해봐야한다. (그렇게 치면 이건 아직 미완오브 미완이지만 ㅠㅠ 차근차근 더 보완해갈테다!!!) 



>> 코드

여기저기서 가져오고 고치고 하느라 사실 크레딧 표시가 잘 안 됐다. 그저 이런 느낌으로 했다는 것만 참고해주시길. 

import wx

import time

from urllib2 import urlopen

from json import loads

import codecs

from forecastiopy import *


class Total(wx.Frame):

    def __init__(self, parent, id, title):

        super(Total, self).__init__(parent, id, title, size=(800, 600))

        

        font= wx.Font(24, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False,'Arial')   

        

        self.SetForegroundColour('#6DC9C9')

        self.SetBackgroundColour('#4A4A4A')

        

        self.Bind(wx.EVT_PAINT, self.OnPaint)

        

        self.Centre()

        self.Show()


        dt = wx.DateTime()

        self.seoul = wx.StaticText(self, -1, dt.FormatTime(), (20,20))

        self.seoul.SetFont(font)


        self.OnTimer(None)


        self.timer=wx.Timer(self)

        self.timer.Start(1000)

        self.Bind(wx.EVT_TIMER, self.OnTimer)

        self.Refresh()

        

    def OnPaint(self, event):

        dc = wx.PaintDC(self)

        

        r = dc.GetFullTextExtent('M')

        for i in xrange(3):

            px, py = 20, 180+r[1]*i

            dc.DrawText(title_list[i], px, py)

            font1 = wx.Font(16, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.NORMAL)

            self.SetFont(font1)

            

        dc.EndDrawing()

       

        dc2 = wx.PaintDC(self)

        k = dc2.GetFullTextExtent('M')

        for j in xrange(3):

            px, py = 20, 100+k[0]*j

            dc2.DrawText(weatherlist[j], px, py)

        dc2.EndDrawing()

        

        

    def OnTimer(self, evt):

        self.dt = wx.DateTime() 

        now= self.dt.Now()

        self.seoul.SetLabel(' ' + str(now.Format(('%d %a %T'), wx.DateTime.GMT9)))  

        

#news again

def call_the_articles():

    url = 'http://api.nytimes.com/svc/topstories/v1/home.json?api-key=키는 본인이 받아서 쓰시길'

    return loads(urlopen(url).read())

articles = call_the_articles()


def x():

    l = []

    #if __name__ == '__main__':

    for story in articles['results']:

        l.append(story['title'].encode('utf-8', 'replace'))

    return l

title_list = x()    


#weather forecast again

apikey = ' 이건 본인이 받아서 쓰시길 ' 

Seoul = [37.335887, 126.584063]

fio = ForecastIO.ForecastIO(apikey,

                            units=ForecastIO.ForecastIO.UNITS_SI,

                            lang=ForecastIO.ForecastIO.LANG_ENGLISH,

                            latitude=Seoul[0], longitude=Seoul[1])

def call_forecast():

    a = []

    if fio.has_daily() is True:

        daily = FIODaily.FIODaily(fio)

        a.append('In 24hrs : ' + unicode(daily.icon))

    if fio.has_currently() is True:

        currently = FIOCurrently.FIOCurrently(fio)

        a.append('Now : ' + unicode(currently.icon) + '  ' + unicode(currently.temperature) + ' C')

        a.append(unicode(daily.summary))

        return a

weatherlist = call_forecast()


#call

def main():

    ex = wx.App()

    Total(None, -1, 'good')

    ex.MainLoop()

    


if __name__ == '__main__':

    main()


'DIY IOT - smart mirror project' 카테고리의 다른 글

smart mirror project [day 11]  (3) 2016.05.04
smart mirror project [day 9]  (0) 2016.04.18
smart mirror project [day 8]  (0) 2016.04.12
smart mirror project [day 7]  (0) 2016.03.28
smart mirror project [day 6]  (0) 2016.02.25

smart mirror project [day 7]

DIY IOT - smart mirror project

3월 28일 (작업날짜로 굳이 친다면) 일곱번째 날 

오늘의 목표(?) 혹은 완료된 작업(?) : 거울을 찾았다. 그리고 모니터도 골랐다. 그리고....


......물론 마지막 코딩을 하고 뭐 어쩌고 한 지는 꽤 오랜 시간이 흘렀다만(무려 한 달이 넘었다ㅠㅠ 그러니까 굳이 핑계를 대자면 학기 시작하면서 좀 바빠서...), 며칠간의 리서치와 노가다 끝에 드디어 살 것(;;;)을 정했다는 소식을 전하기 위해 글을 남긴다. 

그러니까 지난 시간까지 한 건 코드를 짜는 일이었다. 


얼추 이정도 까지는 완성이 됐는데, 한 가지 '며칠째' 손을 댔다 뗐다를 반복하는 부분이, 바로 '뉴스와 날씨의 실시간 동기화'다. 온갖 것을 다 써보았다. tkinter, schedule, 뭐 또 여러가지. 

하지만 아직까지도 문제는 해결되지 않고 있고 오늘 밤에는 기필코 해낼 것이다 ㅠㅠ  

내 귀여운 USB허브. 그런데 팔뚝에 꽂거나 3개 이상 꽂으면(그 말이 그 말인가) 인식이 안 된다. 고장났다는 뜻이다. 두 개라도 쓰려고 일단 모셔놨다.


오늘은 드디어 며칠간 재고 고르고 하던 미러를 득템했다. 구입처 : (주)미라클글라스   http://www.미라클글라스.com

▲뒤에는 임시로 아이패드의 시계 화면을 띄운 모습. 상당히 잘 비추고, 또 잘 비친다.


이 거울은 샘플용으로 업체 팀장님이 들고 오신 것인데, 어차피 위에 필름이 조금 벗겨져 못 쓰는 거라며 주고 가셨다. (물론 나는 거울을 추가로 구매할 예정이다. 별도로 실험하는 게 있어서... 여기엔 자세히 쓸 수 없다만.)

참고로 이 거울은 '원웨이 미러(one-way mirror)'라는 특수유리다. 유리 한 면에 코팅을 씌운 것인데, 두 가지 종류가 있었다. 한 가지는 미러 바깥쪽(우리가 보는 쪽)에 반사 필름을 붙여 가공한 것이고 다른 한 가지는 반대면(모니터 유리와 맞닿는 곳)에 필름을 붙인 것이다. 각 장단을 따지자면, 미러 바깥쪽에 반사 필름을 붙이면 뒤쪽에서 비추는 화면이 좀 더 잘 보이고, 대신 지문이 상당히 잘 묻어난다. 반대로 반대면에 필름을 붙인 것은 지문이 거의 묻어나지 않는 반면, 뒤쪽에서 비추는 화면이 조금 더 어둡다. 더 푸른 빛깔로 비춘다고 생각하면 된다. 나는 어차피 지문을 묻히지 않을 것이라는 일념하에 전자를 선택했다. (위 사진도 전자다)

가격은 통상 큰 규모로 설치하는 경우에 따라 견적을 내기 때문에 1m*1m = 20만원(ㄷㄷ)이라고 했는데, 어차피 우리는 그보다 훨씬훨씬 작은 것이 필요하다. 나같은 경우엔 300*400(mm)를 문의했다가 A4사이즈인 210*270(mm)로도 견적을 냈는데, 사실상 가격은 6만 5000원으로 같았다. 유리 가장자리는 모두 공정해주실 예정이고, 다만 퀵비는 별도... (물론 나는 직접 찾으러 갈 수도 있다....!!!) 유리는 모두 수입산이고, 우리나라에선 더이상 제작하지 않는다고 했다. 

고로 주문은 내일 들어간다. (아아 내지갑... 혹자의 말마따나 '장난감을 만드는 데에는 돈이 드는 법이다'...)


그렇다면 화면은 어찌하느냐? 

한국내에서 찾으려든다면 역시나 몹시 비싸다. 7인치짜리 모니터 하나가 최저 8만원이다. 굳이 필요도 없는 터치스크린을 장착해서 그런가...

무려 'DIY 모니터 만드는 법'을 공유하는 카페까지 들어가본 결과, 많은 이들이 '어차피 라즈베리파이로 만들거라면, 이베이에서 모니터 모듈을 사라!'라는 가르침을 설파하고 있었다!! 그래서 굳이 이베이에 들어가서 봤더니, 읭? 죄다 메이드인 차이나인데다가 배송비도 제법 든다. 

다년간의 검색 실력을 곁들인 덕에 나는 '그렇다면 알리익스프레스가 짱'이라는 사실을 깨우쳤고, 결국 알리에 들어가 이와 같은 모니터를 발견하기에 이른다!


오늘 사려고 봤더니 내일부터 2불 가까이 깎아준대서 (우리돈으로 2천원이 넘지 않는가! ㅎㅎ) 내일 주문할 예정이다. 20불 짜리도 있었는데, 그 업체보다 여기가 좀 더 빠르게 배송해준다고(평이 좋아서) 해서 이쪽으로 주문하려고 한다. 

모두 온다면, 드디어 조립까지 할 수 있는 것이다 ㅠㅠ 



......그러고보니 날씨용 GUI랑 실시간 업뎃이랑...... 아직도 산넘어 산이다. 



(오늘밤엔 좀 해볼까...)







'DIY IOT - smart mirror project' 카테고리의 다른 글

smart mirror project [day 9]  (0) 2016.04.18
smart mirror project [day 8]  (0) 2016.04.12
smart mirror project [day 6]  (0) 2016.02.25
smart mirror project [day 5]  (1) 2016.02.23
smart mirror project [day 4]  (0) 2016.02.22