', { cookie_domain: 'auto', cookie_flags: 'max-age=0;domain=.tistory.com', cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds }); '2016/07 글 목록 :: MakerLee's Workspace
728x90


저희 집 식구들은 커피를 많이 마시는 편인데


빨대로 간이 더치커피 기계를 만들어 사용해왔습니다만


물조절도 불편하고 공간도 차지하고 여러모로 불편한 부분이 있습니다. 



전에 정량펌프를 알리 익스프레스에서 구매하여 사용해봤지만 


DC 모터를 이용한 싸구려 펌프라서 토츌량도 적당하지 않고 금방 고장나버리더군요.



최근에 더워서 커피 소비량이 늘다보니 다시 한번 마무리해봤는데


저기다가 아두이노+스텝드라이버+파워+LCD를 추가할 생각하니


덩치가 좀 큰듯 하네요.  




시제품 만들어보고 수정할지 말지 생각해봐야겠습니다. 



728x90
728x90

기구부 출력은 부품 하나에도 몇 시간이 걸리므로, 


틈날때마다 계속 아두이노 스케치를 수정하는 중입니다.



제대로 끝까지 스케치를 완성해본 건 처음이라 삽질을 하고 있지만


그래도 기본적인 부분은 어느정도 알고 있으니


레퍼런스나 인터넷을 참조해서 조금씩 진도가 나가고 있습니다.





이 책 강추. 








현재 OLED에 보여주는 정보는


1. 배터리전압

2. 크루즈 모드 or PAS level - pas는 추후 추가 예정

3. 스로틀 레벨 

4. 속도

5. 최고속도

6. 평균속도

7. 이동거리

8. 누적 이동거리



1. 전압 디스플레이 - 이건 쉬웠음. 전압분배로 해결하면 되고 찾아보면 인터넷에 예제도 많음. 


2. 크루즈 or PAS - 아직 계획 없음 


3. 스로틀 레벨 - 아날로그 입력을 그냥 변환해서 보여주면 됨


4. 속도 - 속도센서 필요. 기성제품 분해하자니 돈이 아깝고 리드스위치로 자작하자니 성가시고 


(5,6,7,8번은 속도만 제대로 체크되면 거기서 계산하면 되는거라 따로 뭘 할 필요는 없음)





@OLED 화면 디스플레이되는 한 사이클의 시간이 은근 길어서


스피드 센서 입력은 인터럽트를 필요로 하겠더군요.




인터럽트 발생시마다 1바퀴 만큼 이동한 것으로 확인하고 


millis() 를 이용해 시간을 체크하면 1바퀴 회전시간을 알 수 있습니다. 


이걸로 속도를 계산하고 최고속도나 이동거리 계산 등을 하면 되죠. 



위 OLED 사진에서 맨 아랫줄이 millis 로 계산된 인터럽트 간 타임입니다. 


수동으로 on/off 해보니 인터럽트 타임이 제대로 계산되는데 


그 값을 loop로 넘기는 부분이 잘 안되고 있네요. 





@이동거리는 EEPROM에 저장하지 않으면 리셋됩니다.


EEPROM의 저장한도가 10000번 정도라 하는데 


주행중에 이동거리가 1킬로 증가할 때마다 기록한다고 치면 


1만 킬로 정도가 한계고


적어도 0.1킬로마다 저장하고 싶은데 그러면 1000킬로에 수명이 다 되겠네요


수명을 생각하면서 기록하는 방법을 고민해 봐야할듯







 

기구부 설계와 출력 및 후가공이 끝났습니다. 


볼트로 조이는 부분은 인서트 너트를 사용했는데


꽉 조였을때는 통째로 빠지는 경우가 있어 적당히 조이는게 중요.



설계중 좋은 자전거가 공짜로 생길 뻔한 일이 있어 


부랴부랴 마운트를 착탈식으로 바꿔 새 자전거에 대비하려 했으나 


무산되어버렸습니다..



그래도 마운트 착탈식 구조는 마음에 들어 그대로 사용 예정. 









옆으로 끼운 후 손나사를 돌리면 고정됩니다.  작동도 잘 되는군요.






스로틀은 그냥 오른손 핸들에 끼울 생각이었으나 


변속기와 겹치는 위치를 어떻게 조정할지 생각


스로틀 스위치는 윗부분을 들어내고 


OLED 까지 내장하는 구조로 해야 편할 것 같습니다(후가공 엄청 해야할듯)




스로틀에 OLED와 스위치를 일체형으로 만들고


뒷부분 안장 밑에 나머지 전장부가 들어가면 될 듯 합니다.



728x90
728x90

처음 OLED 에 표시될 부분은 배터리의 전압입니다. 


아두이노는 5V 까지의 입력을 아날로그로 읽을 수 있지만


그 이상의 전압은 전압분배회로를 이용해 분압된 전압을 읽은 후 


분압된 만큼 다시 역으로 계산해서 원래 전압을 표시하면 됩니다. 



RC용 LiPo 배터리를 사용할 생각이고


3셀~6셀 정도의 배터리를 사용한다고 할 때


1셀의 전압은 3.6V 부터 4.3V 까지이므로 


4.3*6셀 = 25.8V 까지를 측정범위로 잡으면 되겠군요 




Vin = Vout / ( R2 / ( R1 + R2)) 를 계산하면 되는데



귀찮으니 그냥 앱을 사용합니다. 





18K 와 4.3K 저항을 사용하면 됩니다. 





그런데 저항박스를 뒤져보니 해당 저항이 없군요...







저항을 쓰기 편하게 Vin 30v, Vout 5V 입력하니 R1 10K, R2 2K 가 나왔습니다. 


입력전압은 1/6 되어 계산이 됩니다. 



  voltValue = analogRead(vinPin);

  batVoltage = voltValue*30/1024;   // Vout 5V * 전압분배비 6 = 30 을 곱한 후 1024로 나눔.



여기서 1024로 나누니 약간 오차가 있어 1080으로 조정해서 맞췄습니다. 



이렇게 한 후 





전압(왼쪽 위)이 제대로 표시가 됩니다. 




728x90
728x90

별 생각없이 화면구성을 짜며 스케치 업로드를 하다가 보니



메모리 용량이 88%? 아직 제대로 스케치 시작도 못했는데 


화면구성만으로 이정도 차지하면 메인 스케치는 어떻게 할것인가 놀랐습니다만



생각해보니 폰트 데이터 용량을 생각해보지 않아 u8glib wiki에 들어가 봤습니다. 








처음 사용했던 속도표시용 폰트의 용량









같은 폰트인데 특수문자들이 제거된 다이어트(?) 폰트









그냥 작은 폰트의 용량






이렇게 심한 차이가 나는군요. 


생각해보면 당연한 것이 폰트 데이터를 전부 메모리에 집어넣지 않으면 출력도 할 수 없으니


쓰건 안쓰건 폰트를 포함시키는 순간 그만큼 스케치 용량이 늘어날 수 밖에 없습니다.





같은 크기인데 다른 폰트(u8g_font_fur30r)를 넣어봤더니 용량 차이가 저렇게 납니다. 


87% -> 58%











크기가 절반인 u8g_font_fur14r 폰트를 사용하고 u8g.setScale2x2(); 명령어로 2배 뻥튀기해봤습니다. 


87% -> 45%









다만 이 경우는 폰트 크기가 두배가 된 만큼 계단현상이 일어납니다. 




큰 폰트는 속도 디스플레이용이라 


아예 0-9까지 비트맵을 넣어 사용하면 더 용량을 줄일 수 있을 것 같습니다만


그건 나중에 정말 용량이 모자랄때나 해보면 될 것 같네요.




728x90
728x90

기구적으로는 이제 95% 정도 된듯. 






사실상 마운트 부분만 맞추면 됩니다만 이것도 기초적인 치수는 다 나왔는데


아예 고정시켜버리느냐 분리가 쉽게 하느냐 고민하다가


계속 달고다니긴 좀 불편할 듯 해서 분리형을 고민하는 중인데


어떤 형태로 해야 편할지 



뭐 이런 자잘한 고민들을 하고 있습니다. 


볼트류 고정 때문에 인서트 너트를 주문해 놨는데 그것들만 도착하면 최종 수정하고 조립하면 될듯. 






일단 서보 테스터로 구동할 수는 있지만


볼륨조정으로 속도를 조정하는건 너무 불편할 것 같아


전에 올렸듯 


전기자전거용 스로틀 - 아두이노 - 서보 로 연결해서 서보/스로틀 컨트롤을 최적화할 생각이고요.




그러다 보니 왠지 아두이노를 기왕 집어넣는 김에 서보 컨트롤러만 쓰기엔 아까울 듯 하여


전에 사서 처박아 두었던 OLED를 꺼내들었습니다. 



ADAFRUIT의 라이브러리를 좀 뒤적여 봤지만 메모리를 너무 많이 차지하고 깜박임도 심해서


U8GLIB으로 변경. 구동방식을 이해하는 데 좀 더 어렵긴 했는데


반응이 빠르고 메모리도 좀 더 적게 차지하네요






0.9인치 OLED는 너무 작아서 가시성이 안좋더군요. 


1.3인치 화이트로 바꾸니 심플하고 가시성도 괜찮습니다. 



아직 아두이노 프로그래밍엔 왕초보지만 U8GLIB WIKI와 


일부 인터넷의 소스코드들을 뚫어져라 봤더니 어느정도 이해는 가능했습니다. 



직접적으로 입출력를 디스플레이하기 전에 화면 구성만 짜보는 중입니다. 


배터리 전압과 속도, 스로틀 출력 등을 화면에 보여주기 위해 조금씩 옮겨보는 중입니다. 


화면에는 그냥 랜덤으로 디스플레이됩니다. 


스로틀 바는 특수문자 폰트를 사용해 디스플레이하려 했더니 


폰트 추가할때마다 메모리를 상당히 소모하더군요.


현재는 기본폰트와 대형폰트 2종류를 사용하고 있습니다. 



좌표가 왼쪽 위부터 0.0으로 시작하기에 숫자가 한자리수일때는 왼쪽으로 붙었다가


두자리수일때 오른쪽으로 왔다갔다 하는 문제가 있어 


숫자를 표시할때마다 두자리수 이상의 숫자는 


글자의 가로픽셀만큼 이동해서 디스플레이하는 식입니다. 



OLED를 붙이려 생각했더니 당연히 속도계를 생각하게 되고 


추가로 몇몇 센서도 붙여보고 싶고


그러다보니 프로그래밍 내용도 점점 복잡해질게 뻔해서


일단 인서트너트와 같이 주문한 아두이노 미니 도착하면 


스로틀제어만 하는 기본형으로 제작을 하고,


추가로 업그레이드를 하는 방식으로 갈 생각입니다. 




728x90

+ Recent posts