'분류 전체보기'에 해당되는 글 335건

  1. 2017.12.26 Hardware | AliExpress 에서 Ceramic Condenser 를 구입해 보자
  2. 2017.12.26 Life | LED 전등의 잔불을 없애보자
  3. 2017.12.21 Life | 선풍기 분해 청소하기
  4. 2017.12.14 Hardware | Heating Gun 을 만들어 보자 - 1
  5. 2017.12.11 Hardware | DSO150 firmware update
  6. 2017.12.11 Hardware | LED bar graph 를 컨트롤 해보자 - 2
  7. 2017.12.01 Hardware | LED bar graph 를 컨트롤 해보자 - 1
  8. 2017.12.01 Hardware | 74HC595 shift register 를 사용해 보자
  9. 2017.11.27 Life | 쓰고 목적지에서 버리는 자전거
  10. 2017.11.24 Hardware | bGeigie Nano 를 이용하여 방사능을 측정해 보자 2

Hardware | AliExpress 에서 Ceramic Condenser 를 구입해 보자

|

1. 세라믹 콘덴서


콘덴서 / 캐페시터에는 여러 종류가 있습니다.

Arduino 생활에 있어서는 많은 종류 중에서 2가지가 주로 사용 됩니다.


* 전해 콘덴서

* 세라믹 콘덴서


전해 콘덴서에 대해서는 아래 글에서 이미 다른 구매글을 올렸습니다.


* Hardware | AliExpress 에서 condenser 를 구입해 보자

http://chocoball.tistory.com/entry/Hardware-AliExpress-condenser-buy


오늘은 세라믹 콘덴서에 대한 구매 내용입니다.




2. 제품 선택


우리의 AliExpress 를 보면 많은 제품이 나옵니다.

가장 많이 소비자가 선택한 제품을 골라서 주문하였습니다.


* 300PCS Ceramic capacitor 2PF-0.1UF,30 valuesX10pcs=300pcs,Electronic Components Package,ceramic capacitor Assorted Kit


https://ko.aliexpress.com/item/100-New-2pf-0-1UF-Ceramic-Capacitor-Assorted-kit-Assortment-Set-30-Kinds-10PCS-300PCS-Lot/32417975915.html





3. 알아둬야 할 것


세라믹 콘덴서는 주로 작은 용량에 사용되는것 같습니다.

그래서인지, 제한된 소자 면적에 숫자를 다 적을 수가 없어 기호처럼 적혀 있습니다. 



위의 그림 중, 제일 밑에 있는 누런색이 세라믹 콘덴서 입니다. 제가 구입한거죠.


우선 pico / nano / micro 단위부터 인식해야 합니다.


* 1 pico = 1/1000 nano

* 1 nano = 1/1000 micro

* 1 micro = 1/1000


멀티미터가 nano 단위를 지원을 해서, 머릿속으로 계산을 자꾸 해야 합니다.

위의 그림에서는 154 = 150000 pF = 150 nF 입니다.


이 방법을 꼭 기억해서 사용하세요.




4. 읽어보기


자, 읽는 법도 배웠으니 도착한 세라믹 콘덴서의 값들을 확인해 봅니다.


주의할 점은, 워낙 값이 작다 보니 손으로 들고 있으면,

조그마한 흔들거림으로 값이 계속 변한다는 것입니다.


어디에 안착시켜서 값이 안정되길 기다려서 읽는게 필요합니다.

또한, 멀티미터기가 그리 좋은게 아니니 측정값의 신뢰성은 살짝 떨어진다는 것을 유의해 주세요.


가짓수가 많아서 값의 순서는 없습니다.


* 153 = 15000 pF = 15 nF --> 18.32 nF 으로 측정됩니다.



* 103 = 10000 pF = 10 nF --> 13.34 nF 으로 측정됩니다.

underline = 밑줄이 있는 것은 50V/100V 에서 가동된다는 뜻입니다. 없으면 500V 라고 하네요.



* 2 = 2 pF = 0.002 nF --> 0.002 nF 으로 측정됩니다. (Perfect !)



* 3 = 3 pF = 0.003 nF --> 0.028 nF 으로 측정됩니다.



* 68 = 68 pF = 0.068 nF --> 0.072 nF 으로 측정됩니다.



* 471 = 470 pF = 0.47 nF --> 0.45 nF 으로 측정됩니다. (Almost !)



* 472 = 4700 pF = 4.7 nF --> 6.67 nF 으로 측정됩니다.



* 30 = 30 pF = 0.03 nF --> 0.033 nF 으로 측정됩니다.



* 47 = 47 pF = 0.047 nF --> 0.047 nF 으로 측정됩니다. (Perfect !)



* 682 = 6800 pF = 6.8 nF --> 7.93 nF 으로 측정됩니다.



* 22 = 22 pF = 0.022 nF --> 0.22 nF 으로 측정됩니다. (Perfect !)



* 331 = 330 pF = 0.33 nF --> 0.308 nF 으로 측정됩니다.



* 222 = 2200 pF = 2.2 nF --> 2.606 nF 으로 측정됩니다.



* 33 = 33 pF = 0.033 nF --> 0.034 nF 으로 측정됩니다. (Almost !)



* 101 = 100 pF = 0.1 nF --> 0.113 nF 으로 측정됩니다.



* 102 = 1000 pF = 1 nF --> 1.486 nF 으로 측정됩니다.



* 75 = 75 pF = 0.075 nF --> 0.075 nF 으로 측정됩니다. (Perfect !)



* 473 = 47000 pF = 47 nF --> 32.11 nF 으로 측정됩니다.



* 152 = 1500 pF = 1.5 nF --> 2.804 nF 으로 측정됩니다.



* 15 = 15 pF = 0.015 nF --> 0.012 nF 으로 측정됩니다. (Almost !)



* 104 = 100000 pF = 100 nF --> 99.5 nF 으로 측정됩니다. (Almost !)



* 10 = 10 pF = 0.01 nF --> 0.007 nF 으로 측정됩니다. (Almost !)



* 5 = 5 pF = 0.005 nF --> 0.003 nF 으로 측정됩니다.



* 223 = 22000 pF = 22 nF --> 32 nF 으로 측정됩니다.



* 683 = 68000 pF = 68 nF --> 69.5 nF 으로 측정됩니다. (Almost !)



결과는 아래와 같습니다.


* Perfect = 4개

* Almost = 6개


그러나 전체적으로 쓸만한 것 같습니다. 안심하고 회로 구성에 사용하려 합니다.




FIN


중국제라고 무시할 수 없네요.

멀티미터(중국제)도 못 측정할 줄 알았지만 측정이 잘 되고,

세라믹 컨덴서(중국제)도 꽤 정확하게 측정됩니다.


30가지인데, 봉지가 많아서 다 측정을 못하고 어디 구석으로 굴러들어간것 같습니다.

한 5개 정도는 측정을 못했습니다. 측정해 보지 않아도 괜찮게 맞겠죠?

And

Life | LED 전등의 잔불을 없애보자

|

1. LED 잔불


화장실 전구가 나가서 아껴 두웠던 LED 전구로 갈아 끼웠습니다.


그치만, 이게 뭔가요.

전등을 꺼도 도깨비 불처럼 켜져 있네요.


인터넷에 찾아보니 "잔불" 이라고 합니다.



저녁에 자다가 화장실 갈 때는 좋은데,

유령 불같다고 애들이 무서워 합니다.


계속 켜져 있으니, 전기도 더 소비될 것이고, 소자에 무리가 갈 듯 합니다.




2. 전기 상을 바꿔 보기


두꺼비 집에서 인입되는 전기의 상(相) 을 바꿔 보면 된다고 합니다.

공통선 (ground) 와 인입선이 바뀌면서 잔불이 생길 수 있다고 하네요.


도식으로 그려보면....

그려보고 싶지만 귀찮습니다.


전류가 LED 전구로 먼저 들어가게 될 경우에 이런 경우가 생긴다고 하네요.


두꺼비 집 작업 전에 감전을 방지하기 위해 절연되는 장갑을 찾아봅니다.

라텍스 장갑밖에 없네요. 일단 생명을 보존하기 위해 착용합니다.



두꺼비집을 열고 전등 부분만 내려 놓습니다.

빨간색과 검은색을 바꾸어 봅니다.



자 바꾸었으니 올려 봅니다.



실패 !!!




3. 스위치의 LED 제거


스위치의 LED 전구가 있으면, 그로 인하여 전류가 샌다고 합니다.


그림으로 그려보면...

귀찮으니 생략합니다.



스위치 소켓을 분리해야 하니, 커버를 제거합니다.

손에 땀이 많이나 장갑에 물이 고입니다. 장갑을 집어 던집니다.


이사올때도 손을 보지 않아서 어마무시하게 더럽습니다.



송풍기도 같이 연결되어 있으니 배선을 잘 기억해 놔야 합니다.

저는 사진으로 찰칵.



벽에서 나온 선을 제거하면 이렇게 됩니다.



네군데 있는 걸림 돌기를 밀어 내어서 파란색 뚜껑을 땁니다.

잘 안되어서 힘주어서 들어 냈더니만, 사진에서 오른쪽 윗부분의 걸림쇄 부분이 부러졌습니다...



LED 가 붙어있는 기판을 들어낸 모습 입니다.


교류 220V 전원임에도 불구하고 딸랑 저항 한개와 소형 LED로 괜찮은 것인가? 라는 의구심을 갖게 됩니다.

전공이 전자공학이지만 학교를 놀러다녀서 전혀 생각나지 않습니다.

60Hz 라서 반쪽 파형이 무시되어서 그런가 라고 짐작만 해 봅니다.



인두와 납 흡입기를 이용하여 소자들도 분리합니다.

안녕~.



중간에 있는 동판이 왔다갔다 하면서 ON/OFF 를 담당하게 됩니다.

저걸 끼운 상태로 뚜껑을 덮는게 여간 힘든게 아닙니다. 자꾸 위치에서 벗어납니다.


한 10번정도 시도 끝에 뚜껑이 잘 닫혔습니다.




4. 결과


후훗. 성공입니다.

저희 집은 상의 변화가 아니라 스위치단의 LED 제거로 해결되는 구조인 것 같습니다.


스위치단에 뭔가 회로를 추가로 구성하면 될 것 같으나,

시간이 너무 오래 걸리면, 가장으로서의 대처능력을 의심받게 되므로 이 선에서 마무리 합니다.



가장으로서의 자존심을 +1 회복하였습니다.




5. 참고


220V 60Hz 가 걸리는 전원에 어떤 LED 와 저항이 달려있는지 궁금하여 측정해 봅니다.



저항은 약 180kOhm 정도 되네요.



LED 는 1.8V 정도의 소비 voltage 특성을 가집니다.


LED 가 AC power 에 DC로 연결되는 부분은 나중에 좀더 고민해 보겠습니다.

그렇지 않아도, 멀티탭 - power bar 에 사용되는 LED 들은 어떤 처리들이 되어 있는지 궁금했거든요. (같은 원리)




FIN


집안 일은 끝이 없습니다.

And

Life | 선풍기 분해 청소하기

|

1. 여름 정리 (이제 와서 ?!)


지금은 12월이지만, 평소 몸에 열이 많은 저는 선풍기를 달고 살았었습니다.

이제 보내줘야 할 때가 온것 같아, 깨끗하게 청소하고 수납하려고 합니다.


딸들이 아기자기하게 야광 데코레이션을 붙여놔서 upgrade 된 버전 입니다.



사진을 멀리서 찍어, 그 더러움의 실상이 잘 보이지 않는군요.



딱 혼자 쓰기에 적당한 크기 입니다.



올해 집에 오기만 하면 이놈을 안고 살았습니다.



음... 블레이드에 낀 때가 좀 보이네요.

비위가 약하신 분이면, 이쯤해서 뒤로가기를 추천해 드립니다.




2. 분해


뒷면에 보이는 나사를 모두 풀면 쉽게 분해가 됩니다.



나사를 풀다가 알았는데,

공장에서 조립시 급하게 했는지 나사홀에 전선이 끼어서 피복이 벗겨져 있는 부분이 발견되었습니다.



예민한 전자기기는 아니라서 문제는 없어 보입니다만,

아쉬운 부분입니다.




3. 때때때


이제부터 더러운 부분이 나오기 시작합니다.


스트레스도 긍정으로 생각하면 오히려 약이라 했습니다.

이 때를 벗겨 냄으로써 올해 마무리를 하고자 합니다.



뚜혹!

역시 이래야 청소할 맛 나죠!



날개에 들러붙은 때님 입니다.



타이머와 강도 세기 노브 부분입니다.

단순한 구조 입니다.



가장 때가 많이 붙은 전면부 입니다.

이 흰 날개는 바람을 퍼지게 하기 위해 뱅글뱅글 돌아줍니다.



앞면 뱅글뱅글 흰날개는 아쪽 볼트와 채결되어 있어서 모터를 들어내야 가능합니다.



앞면 뱅글뱅글 날깨를 잡아 당기면서 돌려도 빠지긴 합니다만,

모터를 들어내고 저 볼트를 푸는게 더 쉽습니다.



모터는 중국제. 30W 라고 적혀있는것 같습니다.

뭐 중국제 없이는 살 수 없는 시대 이니까요.




4. 세척 및 조립


샤워기 물줄기로 먼지와 때를 날려 버리고,

잘 씻기지 않은 먼지는 거품비누로 몽글몽글 비비고 불려서 물줄기로 씻겨 냈습니다.



깨끗하니까 너무 기분이 좋네요.



피복이 벗겨진 부분도 절연 테이프로 감아서 처리해 둡니다.



아하하하하하~~!!!

조립하고 올해 마지막으로 돌려 봅니다.




FIN


이랬던 기분이...



상쾌해 졌습니다.





And

Hardware | Heating Gun 을 만들어 보자 - 1

|

1. 고장


예전에 설치하여 밤낮없이 돌아가 주던 Stick PC - MeeGoPad T07 4GB 가

어느때부터인가 Windows 10 기동이 되지 않았습니다.


* Hardware | MeeGoPad T07 4G RAM

http://chocoball.tistory.com/entry/Hardware-MeeGoPad-T07-4G-RAM


이 Stick PC 는 원활한 운용을 위해 heat sink 도 신경써서 버전업을 시켜준 상태였습니다.


* Hardware | MeeGoPad 히트싱크 업그레이드 하기

http://chocoball.tistory.com/entry/Hardware-MeeGoPad-heatsink-upgrade


* Hardware | MeeGoPad 히트싱크 업그레이드 하기 - 2

http://chocoball.tistory.com/entry/Hardware-MeeGoPad-heatsink-upgrade-2


그러던 와중에 무한 부팅에 빠지게 되었습니다.



아무래도 24시간용으로 운용하기에는 너무 빈약한 heat sink 와 내구성으로 버텨주지를 못했나 싶습니다.





2. 히팅건


특히 열이 많이 발산되는 부품들은 납땜이 제대로 되어 있지 않을 경우,

냉납이라는 현상으로 정상 작동이 되었다 안되었다 하는 불안한 현상을 보인다고 하였습니다.


무한 부팅이 일어나면서 고쳐지지 않는 것은 필시 냉납이라고 결론을 내리고 열풍기 - heating gun 을 물색합니다.


아래 제품을 구입하고 싶었으나, 세계적인 브렌드인 만큼 가격도 거의 10만원대 입니다.



구글링 하던 중, 비싼 히팅건 대용품은 2가지가 있었습니다.


1. 오븐에 굽기

a. 납이 녹는 200도 이상 올라가는 오븐을 구해야 함

b. 납은 유해 물질이므로, 전자제품 굽는것 전용으로만 활용해야 함

c. 온도 확인을 위해서 오븐 온도계가 추가로 필요함 (추가 구입)




2. 휴대용 토치

a. 대략 1.5 ~ 2만원의 가격대

b. 가스만 있으면 사용 가능

c. 불꽃을 직접 쐬므로, 부품이 녹을 수 있슴



일단 추가로 비용이 들어야 하는게 마음에 들지 않습니다. 흠...





3. 시거젝


그러다가 Youtube 에서 시거젝을 이용한 열풍기 제조기가 있다는 것을 발견했습니다.



뭔가 아주 저렴해 보이면서, 그렇게 어렵지 않게 생겼습니다.

거기다, 시거젝에서 나오는 열이 엄청날 것 같습니다. 효과는 동영상에서 검증이 되었네요.


여러가지 종류가 있습니다.

제대로 만들면 정말 물건이 되겠군요.


* 시거젝을 이용한 열풍기

https://www.youtube.com/watch?v=KpkeJOzD2r0


* 스위치까지 장착된 시거젝 열풍기

https://www.youtube.com/watch?v=juhSAzw_IO4


* thermocouple 온도계를 이용하여 모니터링 하면서 작업하는 열풍기

https://www.youtube.com/watch?v=VrjiRGkcUzs


* 가장 간단하게 만든 동영상

https://www.youtube.com/watch?v=xrH6z7FJdgM


* PC power 를 이용하여, 가장 빠른 방법

- https://www.youtube.com/watch?v=7vgKGkxcm_c


* 더 간단한 방법

https://www.youtube.com/watch?v=7QB3ZQ1OU0w





4. 구입


필요한 것은 시거젝! 바로 알리에서 확인해 봅니다.

후훗, 역시 있군요. 개당 1.28 USD !!!



https://ko.aliexpress.com/item/12V-Auto-Car-Power-Plug-Socket-Output-20mm-Automatic-Cigarette-Lighter-Ignition-2016-New/32656607243.html


여분을 생각해서 2개를 주문합니다.




5. 도착


알리스럽게 도착하였습니다.



구조가 간단하니 파손의 위험은 없어 보입니다.



12V 20MM 규격이라 합니다.



조그만 해서 귀엽습니다.



스프링을 제껴 주면 가장 핵심부품이 보입니다.

워낙 뜨거워지니, 중간에 세라믹 (도자기) 구조물이 있습니다.





6. 전원


시거젝에 연결하는 전원은 12V 입니다.

마침 PC 의 PATA 케이블 - 주로 예전 HDD 연결하는 케이블 - 에 5V / 12V 가 출력되게 되어 있습니다.


https://en.wikipedia.org/wiki/Molex_connector




12V 를 뽑기 위해서 집에 굴러다니는 ATX power 를 꺼내옵니다.

ATX 24pin power connector 에서 16, 17번 pin 을 이용하여 on/off 를 할 수 있다는걸 알게 됩니다.



끝단에 on/off 스위치를 연결하고 jump 선으로 연결해 줍니다.



문제 없이 12V 가 나오는지 확인해 봅니다.



오오오, 잘 나옵니다.




7. 시거젝 분해하기


이제 전원이 준비 되었으니, 시거젝을 12V pin 에 연결해 보도록 합니다.


우선 시거젝을 분리하여 전원선을 연결해 줘야 합니다.

먼저 시거젝을 분리합니다.



손잡이를 돌리면 분리가 됩니다.



꼭지에 있는 너트를 돌려서 분리하면 완전 분리가 됩니다.



바깥 커버를 정위치 시켜주는 스프링도 있습니다.

우리 작업에는 필요 없습니다.



완전 분리가 되었습니다.

바깥 케이스 및 스프링은 필요가 없습니다.





8. 전선 연결


많은 전류가 흐르므로 두꺼운 전원선이 필요합니다.

마침, 멀티탭 수리기 챙겨놨던 전원 케이블에서 적출합니다.


* Hardware | 멀티탭 수리기

http://chocoball.tistory.com/entry/Hardware-fix-power-strip



두꺼워서 좋습니다.

또한, 화재 예방을 위해서 전원 피복이 잘 안타는 재질입니다.



전원선 끝단을 펴 줍니다. 너트 부분에 연결할 부분은 짧게 잘라 줍니다.



요렇게요.

주의할 점은, 밑에 끼워 놓은 금속이 중심 심에 닿지 않도록 합니다. 닿게 되면 회로적으로 short 가 되니 power 가 고장날 수 있습니다.



뚜껑을 돌려서 다시 씌워 줍니다.



전선 다른 한쪽을 피복을 벗겨서 PATA pin 에 연결할 수 있도록 합니다.



연결 완료 !!!

자주 사용할 것이라면, isolation 을 확실하게 해야 하나, 이번에는 잠깐 사용할 것이므로 그냥 이대로 사용합니다.




9. 테스트


잘 동작하는지 전원을 인가해 봅니다.



오오오오!!! 잘 되네요.


마침 멀티미터에 thermocouple 센서를 통하여 200도 이상의 온도도 측정할 수 있는 기능이 있습니다.

측정해 봅니다.



납이 녹는 온도인 200도까지는 정말 쉽게 올라갑니다.

전원을 계속 인가하면 300도 이상까지도 문제 없이 올라갈 기세 입니다.





10. 작업


오늘의 수술 대상인 고장난 MeeGoPad T07 입니다.



Raspberry Pi 용 통구리 heat sink 도 붙여주고, 메모리에도 알루미늄 heat sink 도 붙여줬지만,

결국 열로 인하여 망가진 듯한 Stick PC 입니다.


붙어있던 heat sink 를 모두 벗겨내고, 캡톤 테이프를 둘러 쌓아서, 열에 약한 부품을 보호해 줍니다.



옆에 thermocouple 온도계로 측정하면서, 시간도 측정하면서 하나하나 작업합니다.

Memory 4개, CPU 1개, Storage chip 1개, Video chip 1 개 등, 모두 작업해 줍니다.



모든 작업을 완료하고, 성능이 더 좋은, 아껴 두웠던 BMR-C1 heatsink 를 붙여 줍니다.


* Hardware | BMR-C1 heatsink

http://chocoball.tistory.com/entry/HardwareBMRC1heatsink





11. 결과


결과는 망했습니다.

전원을 넣으면 기판이 엄청 뜨거워지기만 하고 전혀 video 출력으로 나오지 않습니다.


아....





FIN


오래 계획해서 실행에 옮겼지만, 결국 고치지 못했을 뿐 아니라 더 망가뜨려 버렸습니다.


이유로 생각할 수 있는 것은,

------------------------------------------------

1. 충분히 가열한답시고 너무 오래 열을 가했다.

2. 계속 온도가 올라가므로, 동일한 거리를 유지하고 지진다 한들 시간에 비례하여 전달되는 열은 엄청 많다.

3. 납볼이 촘촘히 박혀있는 경우는, 너무 높은 온도로 인하여 근접한 납들과 붙어버렸을 가능성이 있다.

4. 캡톤 테이프를 붙이긴 했지만, chip 근처의 작은 부품들이 손상되었을 수도 있다.



Upgrade 버전을 만들어보고 싶습니다.

아래 내용을 감안하여 다시 재도전 하고 싶습니다.

------------------------------------------------

1. IR infrared 센서를 이용하여 non contact 온도계를 같이 연동시킨다.

2. 설정한, 일정한 온도에 도달하면 전류를 차단하여 일정 온도 이상 올라가지 않게 한다.

3. 기성품과 기슷하게, 비접촉 온도계는 laster pointer 를 달아서 target 을 쉽게 인식할 수 있게 한다.

4. 손잡이를 더 편하게 만드며, 절연을 철저하게 해 놓는다.

5. OLED 를 이용한 설정창과 모니터링을 위해 Arduino 를 활용한다.


그런데, 열풍기 upgrade 한들, 이제 MeeGoPad T07 은 이제 없네?!!! (눈물)

And

Hardware | DSO150 firmware update

|

1. DSO150 에 대해


꼭 하고싶었던, 예전에 조립한 DSO150 오실로스코프의 firmware update 를 하려고 합니다.

DSO150 Oscilloscope 에 대해서는 아래 link 를 참조하세요.


* Hardware | DSO150 Oscilloscope

http://chocoball.tistory.com/entry/HardwareDSO150Oscilloscope


사용을 해보면 뭔가 제대로 동작하시 않는 순간들이 느껴집니다.

제조사인 JYE Tech 에 접속해서 한번 확인해 봅니다.


"Product Update" 라고 보이고 firmware update 를 살펴보라고 뜨네요.


https://www.jyetech.com/Products/LcdScope/e150.php



그 동안 몇번의 update 가 올라와 있었군요.

더 고마운건 몇일 전에 많이 개선된 내용이 올라왔습니다. 얏호~!





2. firmware 파일


먼저 firmware 파일인 HEX 파일을 받습니다.


https://www.jyetech.com/Products/LcdScope/Firmwares_150.php



제가 가지고 있던 제품의 firmware version 이, 113-15001-054 인데,

그 뒤에 6번의 version up 이 있었고, 최신은 최근 12월 5일에 릴리스 된 "110" 입니다.


많은 update 가 있었네요. 다운로드 받습니다.





3. flasher 파일


JYE Tech 사이트에서 flasher 를 다운로드 받을 수 있습니다.


https://www.jyetech.com/Support/Drivers&Tools.php


다만, 버전이 2.7 입니다.

원래 STMicroelectronics 에서 만든 프로그램으로 STMicroelectronics 에서 찾아보니 2015년에 릴리즈된 2.8 버전이 있습니다.


http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/flasher-stm32.html



다만, 프로그램을 받으려면 email 을 제출해야 합니다.

email 을 등록하면, 아래처럼 메일을 통해서 인증된 다운로드 링크를 받을 수 있습니다.






4. USB to Serial


메뉴얼을 보면, 시리얼 인터페이스가 필요합니다.


https://www.jyetech.com/Products/LcdScope/DSO150_HowToUpgradeFirmware.pdf



마침 GPS 센서 연결시에 사용했던 Serial Adapter 가 있습니다!

(원래 사용 목적은 WiFi 구축 하려고 했던건데 언제...)


* Hardware | FTDI Serial Adapter 를 사용해 보자

http://chocoball.tistory.com/entry/Hardware-FTDI-FT232RL-using



USB 에 연결하면 COM port 가 할당됩니다.





5. DSO150 firmware jumper


DSO150 의 main chip 근처에 있는 JP1 / JP2 를 납땜하여, 회로적으로 close 시켜야 firmware update 모드로 진입할 수 있습니다.


납땜하고 다시 납을 제거하는 작업이 번거러우므로, short 시킬 수 있게, 전선을 jumper 크기로 자르고

테이프로 붙여 줍니다.



요렇게요.







6. DSO150 과 Serial Adapter 연결하기


연결 정보는 다음과 같습니다.


 Serial Adapter |  DSO150
----------------------------
      RX        |    TX
      TX        |    RX
     GND        |    GND
----------------------------


RX 와 TX 를 짝으로 해서 연결하면 됩니다.



납땜을 하기 싫어서 Probe Clip 으로 연결해 보았습니다.

* Hardware | Probe Clip 을 사용해 보자


전체 그림은 이렇게 됩니다.



다만, Probe Clip 끝이 날카로워서 기판의 표피를 뚫고 GND 동판과 연결되어 short 되는 현상이 발생됩니다. 이런....



케이스와 간섭되지 않게, 끝을 안쪽으로 향하게 하여 구부러진 Pin 을 납땜합니다.

나중에 또 update 할 때가 되면, 어차피 다시 해야 하니 이 부분만 납땜해서 Pin 을 장착해 주었습니다. 



아~ 깔끔하게 연결되었습니다.




7. FlashLoader 실행하기


STMicroelectronics 에서 다운로드 받은 FlashLoader 를 인스톨 합니다.




COM port 도 잘 잡혔습니다.



음? 그러나 뭔가 문제가 있다고 계속 그럽니다.



연결했던 Silicon Labs 의 Serial Adapter 를 FTDI 로 바꾸었더니, 바로 됩니다.

아마 driver 가 안깔려 있었을 지도 모르겠습니다.


FTDI 가 거의 표준으로 사용되니 문제 없이 동작했을 수도 있었구요.

역시 여러가지 제품을 구비하고 있는게 도움이 됩니다.



정상으로 연결되면, "Remove protection" 경고가 뜹니다.



클릭하면 모든 정보가 지워진다고 하네요. OK 해줍니다.


Flash size 는 64KB 네요.



64K 옵션으로 Target 을 지정해 줍니다.



아까 다운로드 해놨던 HEX 파일을 선택하고, "Optimize (Remove some FFs)" 와

"Verify after download" 를 채크해 줍니다.



Next 를 클릭하면 이제 flushing 이 진행됩니다.

오오오오~~~!!!



완료 되었습니다 !!!





8. Activation


완료 후, version 확인을 해 보지요.



이랬던 버전이... (뒷부분 숫자가 054)



이렇게 변했습니다. (110)

LIB 숫자는 없어지고 JYE Tech 의 중국명과 전화번호가 추가되었습니다.


다만 booting 된 후, 언제부턴가 정상 동작을 하지 않습니다.



짝퉁도 많아서, firmware update 후에는 정품 확인 activation 이 필요한 것을 알게 되었습니다.

"jyetek@gmail" 에 메일을 보냅니다.



메일을 저녁에 보냈는데, 업무시간 시작한지 얼마 안되어 답변이 왔습니다!

빨리 왔네요!



바로 답변 받은 activation code 를 입력합니다.

정상 작동 하네요 !!!




9. Calibration


Activation Code 를 입력하기 전까지는 calibration 도 동작하지 않았습니다.

아마 calibration 완료된 값도 EEPROM 에 저장하는데, 이 EEPROM 접근을 차단시키고 정상 동작을 시키지 않는게

protection 방법인 듯 합니다.


Activation Code 를 입력한 후, reset 된 calibration 을 다시 해줍니다.



역시 그래프가 틀어져 있네요.



C3 와 C5 를 각각 조절해서, 이쁜 사각형 파형이 되도록 조정해 줍니다.



리플이 좀 보이지만, 이쁜 사각형이 만들어진것 같습니다.






FIN


보드에 Serial Adapter 연결 문제, FTDI 의 호환보드 문제, activation code 문제가 있었지만,

깔끔하게 완료되어서 다행입니다.


뭔가 뿌듯한 작업이었습니다.


이제 Pin 도 납땜해 놨으니, 새로운 firmware 가 올라오면 바로 적용할 수 있겠습니다.


And

Hardware | LED bar graph 를 컨트롤 해보자 - 2

|

1. 12 segments


LED bargraph 를 컨트롤시에 shift register 를 사용하면, arduino의 3가지 선으로 LED 들을 조정할 수 있습니다.

다만, shift register 의 사용 가능한 pin 갯수가 8개라서 shift register 로 컨트롤 할 수 있는 LED 갯수가 8개로 한정됩니다.


지금 가지고 있는 LED bargraph 가 12 segments, 즉 12개짜리인 관계로 4개를 사용하지 못하고 있었습니다.


* Hardware | LED bar graph 를 컨트롤 해보자 - 1

     - http://chocoball.tistory.com/entry/Hardware-LED-bar-graph-controlling-1



* Hardware | 74HC595 shift register 를 사용해 보자

http://chocoball.tistory.com/entry/Hardware-74HC595-shift-register


그럼 shift register 2개를 사용하여 12 segments 전부를 사용해 보고자 합니다.





2. Pinout


12개의 LED 를 조작하기 위한 선과 shift register 끼리 연결하는 Pin, GND, Power 선 등 연결은 간단하지만,

jumper 갯수 자체는 1개의 shift register 를 사용했을 때 보다 2배 이상 많아집니다.


  LED       | Shift Register | Shift Register | Arduino
  Bargraph  | SN74HC595N (1) | SN74HC595N (2) |  Nano
--------------------------------------------------------
  anode 7   | Q1 (pin 1)     |                |
  anode 8   | Q2 (pin 2)     |                |
  anode 9   | Q3 (pin 3)     |                |
  anode 10  | Q4 (pin 4)     |                |
  anode 11  | Q5 (pin 5)     |                |
            | Q6 (pin 6)     |                |
            | Q7 (pin 7)     |                |
            | GND (pin 8)    |                |  GND
            | Vcc (pin 16)   |                |  3.3V
  anode 6   | Q0 (pin 15)    |                |
            | DS (pin 14)    |                |  D11     --> dataPin
            | OE (pin 13)    |                |  GND
            | ST_CP (pin 12) | ST_CP (pin 12) |  D8      --> latchPin
            | SH_CP (pin 11) | SH_CP (pin 11) |  D12     --> clockPin
            | MR (pin 10)    |                |  3.3V
            | Q7' (pin 9)    | DS (pin 14)    |
  anode 1   |                | Q1 (pin 1)     |
  anode 2   |                | Q2 (pin 2)     |
  anode 3   |                | Q3 (pin 3)     |
  anode 4   |                | Q4 (pin 4)     |
  anode 5   |                | Q5 (pin 5)     |
            |                | Q6 (pin 6)     |
            |                | Q7 (pin 7)     |
            |                | GND (pin 8)    |  GND
            |                | Vcc (pin 16)   |  3.3V
  anode 0   |                | Q0 (pin 15)    |
            |                | DS (pin 14)    |
            |                | OE (pin 13)    |  GND
            |                | MR (pin 10)    |  3.3V
            |                | Q7' (pin 9)    |
--------------------------------------------------------


포인트는 serial data output 을 다음 shift register 의 serial data input 으로 해주고,

latch 와 clock 은 동기를 위해 동일한 pin ( 12 / 11 ) 에 연결하는 것입니다.


그 외 LED 와 연결하는 parallel data output 은 LED 에 각각 연결하면 됩니다.





3. Layout


선을 연결해 보면 아래와 같이 됩니다.


선이 복잡하므로 10개짜리 LED bargraph 를 사용해서 그려봤습니다.
2배로 선이 많아지죠?

그나마 resistor network 을 이용해서 실제 배선이 많이 간결해 졌습니다.
Resistor Network 에 대해서는 아래 link 글을 참조해 주세요.

* Hardware | Resistor Network 을 사용해보자


제대로 연결하면 잘 움직입니다.

아래 소스를 토대로 참조한 사이트의 핀 배열을 조금 바꾸었습니다.

(원래 사이트에서는 8 + 8 = 16 개 기준으로 만들어 졌슴)





4. Source code


아래는 참조한 사이트 입니다.


http://www.instructables.com/id/Arduino-16-LEDs-using-two-74HC595-shift-registers-/


실제 코드는 아래 github 링크에 있습니다.


- https://github.com/janisrove/Arduino-74HC595-shift-registers/blob/master/ArduinoLEDsWithShiftRegisters/ArduinoLEDsWithShiftRegisters.ino


int latchPin = 8;
int clockPin = 12;
int dataPin = 11;

int numOfRegisters = 2;
byte* registerState;

long effectId = 0;
long prevEffect = 0;
long effectRepeat = 0;
long effectSpeed = 30;

void setup() {
	//Initialize array
	registerState = new byte[numOfRegisters];
	for (size_t i = 0; i < numOfRegisters; i++) {
		registerState[i] = 0;
	}
	
	//set pins to output so you can control the shift register
	pinMode(latchPin, OUTPUT);
	pinMode(clockPin, OUTPUT);
	pinMode(dataPin, OUTPUT);
}

void loop() {
	do {
		effectId = random(6);
	} while (effectId == prevEffect);
	prevEffect = effectId;
	
	switch (effectId) {
		case 0:
			effectRepeat = random(1, 2);
			break;
		case 1:
			effectRepeat = random(1, 2);
			break;
		case 3:
			effectRepeat = random(1, 5);
			break;
		case 4:
			effectRepeat = random(1, 2);
			break;
		case 5:
			effectRepeat = random(1, 2);
			break;
	}
	
	for (int i = 0; i < effectRepeat; i++) {
		effectSpeed = random(10, 90);
		
		switch (effectId) {
			case 0:
				effectA(effectSpeed);
				break;
			case 1:
				effectB(effectSpeed);
				break;
			case 3:
				effectC(effectSpeed);
				break;
			case 4:
				effectD(effectSpeed);
				break;
			case 6:
				effectE(effectSpeed);
				break;
		}
	}
}

void effectA(int speed) {
	for (int i = 0; i < 12; i++) {
		for (int k = i; k < 12; k++) {
			regWrite(k, HIGH);
			delay(speed);
			regWrite(k, LOW);
		}
		
		regWrite(i, HIGH);
	}
}

void effectB(int speed) {
	for (int i = 11; i >= 0; i--) {
		for (int k = 0; k < i; k++) {
			regWrite(k, HIGH);
			delay(speed);
			regWrite(k, LOW);
		}
		
		regWrite(i, HIGH);
	}
}

void effectC(int speed) {
	int prevI = 0;
	for (int i = 0; i < 12; i++) {
		regWrite(prevI, LOW);
		regWrite(i, HIGH);
		prevI = i;
		
		delay(speed);
	}
	
	for (int i = 11; i >= 0; i--) {
		regWrite(prevI, LOW);
		regWrite(i, HIGH);
		prevI = i;
		
		delay(speed);
	}
}

void effectD(int speed) {
	for (int i = 0; i < 6; i++) {
		for (int k = i; k < 6; k++) {
			regWrite(k, HIGH);
			regWrite(11 - k, HIGH);
			delay(speed);
			regWrite(k, LOW);
			regWrite(11 - k, LOW);
		}
		
		regWrite(i, HIGH);
		regWrite(11 - i, HIGH);
	}
}

void effectE(int speed) {
	for (int i = 5; i >= 0; i--) {
		for (int k = 0; k <= i; k++) {
			regWrite(k, HIGH);
			regWrite(11 - k, HIGH);
			delay(speed);
			regWrite(k, LOW);
			regWrite(11 - k, LOW);
		}
		
		regWrite(i, HIGH);
		regWrite(11 - i, HIGH);
	}
}

void regWrite(int pin, bool state) {
	//Determines register
	int reg = pin / 6;
	//Determines pin for actual register
	int actualPin = pin - (6 * reg);
	
	//Begin session
	digitalWrite(latchPin, LOW);
	
	for (int i = 0; i < numOfRegisters; i++) {
		//Get actual states for register
		byte* states = ®isterState[i];
		
		//Update state
		if (i == reg) {
			bitWrite(*states, actualPin, state);
		}
	
	//Write
	shiftOut(dataPin, clockPin, MSBFIRST, *states);
	}
	
	//End session
	digitalWrite(latchPin, HIGH);
}


소스를 잘 보면 16, 15, 8, 7 등의 숫자가 나옵니다.

이를 토대로 12, 11, 6, 5 등으로 12개에 맞춰서 숫자만 바꾸어 주면 됩니다.


따로 변수를 빼놓고, 자동으로 계산해서 사용될 수 있도록 하면, LED 갯수가 바뀌더라도 편할것 같습니다.

참조 사이트 말대로 "Unlimited Pins" 구조가 되겠네요.





5. 구동


아래는 멋지게 구동되는 모습입니다.



Fully! 12개의 LED 들을 모두 사용하는 모습입니다.



거참 source code 잘 짰네요.

수학적인 컨트롤 이므로, 다양한 모양으로 컨트롤이 가능할 듯 합니다.





FIN


이제 몇개의 LED 가 되었든, shift register 를 daisy chain 으로 엮으면 못할게 없겠습니다.


And

Hardware | LED bar graph 를 컨트롤 해보자 - 1

|

1. Arduino 와 LED bar graph


이미 LED bar graph 를 사용해 봤습니다.

아래 글들은 본 포스팅과 관련 있는 글 들입니다.


* Hardware | LED bar graph 를 이용해 보자

http://chocoball.tistory.com/entry/Hardware-LED-bar-graph


* Hardware | Resistor Network 을 사용해보자

http://chocoball.tistory.com/entry/Hardware-Resistor-Network-using


* Hardware | 74HC595 shift register 를 사용해 보자

http://chocoball.tistory.com/entry/Hardware-74HC595-shift-register


우선 arduino 와 direct 연결과 shift register 1개를 이용해서 연결을 해보기로 합니다.





2. Digital Pin 으로 직접 컨트롤


LED bar graph 의 anode 쪽을 arduino 의 digital Pin 에 직접 연결하여 전원을 공급함과 동시에 LED 를 on/off 하는 방법입니다.



Source code 는 쉽지만, arduino 와 직접 연결되는 선이 많아집니다.

또한, D13 pin 까지 쓰면 더이상 연결할 수가 없습니다.


   LED       |   Arduino
   Bargraph  |   Nano
----------------------------
   anode 2   |     D2
   anode 3   |     D3
   anode 4   |     D4
   anode 5   |     D5
   anode 6   |     D6
   anode 7   |     D7
   anode 8   |     D8
   anode 9   |     D9
   anode 10  |     D10
   anode 11  |     D11
   anode 12  |     D12
   anode 13  |     D13
     GND     |     GND
----------------------------


참고한 사이트는 아래와 같습니다.

http://www.4tronix.co.uk/arduino/ArduinoLearning.pdf


int timer = 50; // The higher the number, the slower the timing. int pins[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; // an array of pin numbers int num_pins = 12; // the number of pins (i.e. the length of the array) void setup() { int i; for (i = 0; i < num_pins; i++) // the array elements are numbered from 0 to num pins - 1 pinMode(pins[i], OUTPUT); // set each pin as an output } void loop() { int i; for (i = 0; i < num_pins; i++) { // loop through each pin... digitalWrite(pins[i], HIGH); // turning it on, delay(timer); // pausing, digitalWrite(pins[i], LOW); // and turning it off. } for (i = num_pins - 1; i >= 0; i--) { digitalWrite(pins[i], HIGH); delay(timer); digitalWrite(pins[i], LOW); } }

Source code 는 참고한 사이트것을 그대로 사용하빈다.

단순히 digitalWrite 를 이용한 컨트롤 되겠습니다.



연결 사진 입니다.



구동 동영상 입니다.





3. Shift Register 를 이용하는 방법


Shift Register 를 이용하면 data / latch / clock 핀인 3개의 digital pin 만으로 컨트롤이 가능합니다.

여러 sensor 를 사용할 때에는 이 방법이 최선으로 보입니다.


이미 shift register 를 이용하여 확인해 봤습니다만, 이 글에서 한번 더 해봅니다.


* Hardware | 74HC595 shift register 를 사용해 보자

http://chocoball.tistory.com/entry/Hardware-74HC595-shift-register


우선 74HC595 pin 정보 입니다.



원본 data sheet 는 다음과 같습니다.


595datasheet.pdf


참고한 link 는 다음과 같습니다.


https://www.sqlskills.com/blogs/paulselec/category/shift-registers.aspx


Pin 들의 연결은 다음과 같습니다.


  LED       | Shift Register | Arduino
  Bargraph  |   SN74HC595N   |  Nano
---------------------------------------
  anode 1   | Q1 (pin 1)     |
  anode 2   | Q2 (pin 2)     |
  anode 3   | Q3 (pin 3)     |
  anode 4   | Q4 (pin 4)     |
  anode 5   | Q5 (pin 5)     |
  anode 6   | Q6 (pin 6)     |
  anode 7   | Q7 (pin 7)     |
            | GND (pin 8)    |  GND
            | Vcc (pin 16)   |  3.3V
  anode 0   | Q0 (pin 15)    |
            | DS (pin 14)    |  D11     --> dataPin
            | OE (pin 13)    |  GND
            | ST_CP (pin 12) |  D8      --> latchPin
            | SH_CP (pin 11) |  D12     --> clockPin
            | MR (pin 10)    |  3.3V
----------------------------------------


Layout 입니다.

Arduino 에서는 컨트롤 위한 선이 3개만 사용된 것을 보실 수 있을껍니다.



연결된 모습니다.



Source code 입니다.


shiftOut 이라는 명령어를 쓰면 쉽게 동작시킬 수 있으나,

참고한 사이트의 제작자는 오로지 공부를 위해 digitalWrite 명령어를 사용했습니다.


/*
  Driving a 74HC595 shift register
  01/27/2010
*/

// This pin gets sets low when I want the 595 to listen
const int pinCommLatch = 8;

// This pin is used by ShiftOut to toggle to say there's another bit to shift
const int pinClock = 12;

// This pin is used to pass the next bit
const int pinData = 11;

void setup() {
	pinMode (pinCommLatch, OUTPUT);
	pinMode (pinClock, OUTPUT);
	pinMode (pinData, OUTPUT);
	//Serial.begin (56600);
} // setup

// Using my own method with as few instructions as possible
// Gotta love C/C++ for bit-twiddling!
void sendSerialData2 (byte  value) {
	// Signal to the 595 to listen for data
	digitalWrite (pinCommLatch, LOW);
	
	for (byte bitMask = 128; bitMask > 0; bitMask >>= 1) {
		digitalWrite (pinClock, LOW);
		digitalWrite (pinData, value & bitMask ? HIGH : LOW);
		digitalWrite (pinClock, HIGH);
	}
	
	// Signal to the 595 that I'm done sending
	digitalWrite (pinCommLatch, HIGH);
}  // sendSerialData2
  
void loop() {
	for (int counter = 1; counter < 256; counter++) {
		sendSerialData2 (counter);
		delay (75);
	}
} // loop


구동시킨 동영상 입니다.





4. 더 간단하게 사용해 보기


위와 같은 동작을 시키는 좀더 간단한 tutorial 이 있습니다.


https://www.arduino.cc/en/Tutorial/ShiftOut


shiftOut 이라는 명령어로 쉽게 구현되었습니다.

https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout/


//**************************************************************//
//  Name    : shiftOutCode, Hello World                                
//  Author  : Carlyn Maw,Tom Igoe, David A. Mellis 
//  Date    : 25 Oct, 2006    
//  Modified: 23 Mar 2010                                 
//  Version : 2.0                                             
//  Notes   : Code for using a 74HC595 Shift Register           //
//          : to count from 0 to 255                           
//****************************************************************

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;



void setup() {
	//set pins to output so you can control the shift register
	pinMode(latchPin, OUTPUT);
	pinMode(clockPin, OUTPUT);
	pinMode(dataPin, OUTPUT);
}

void loop() {
	// count from 0 to 255 and display the number 
	// on the LEDs
	
	for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
		// take the latchPin low so 
		// the LEDs don't change while you're sending in bits:
		digitalWrite(latchPin, LOW);
		// shift out the bits:
		shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);  
		
		//take the latch pin high so the LEDs will light up:
		digitalWrite(latchPin, HIGH);
		// pause before next value:
		delay(50);
	}
}


위의 soruce 는 위의 동영상과 완벽하게 동일한 동작을 합니다.

comment out 라인만 빼면 정말 간단하게 구현되어 있다는 것을 알 수 있죠?


/*
  Shift Register Example
  Turning on the outputs of a 74HC595 using an array

  Hardware:
  * 74HC595 shift register 
  * LEDs attached to each of the outputs of the shift register
 */

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

//holders for infromation you're going to pass to shifting function
byte data;
byte dataArray[10];

void setup() {
	//set pins to output because they are addressed in the main loop
	pinMode(latchPin, OUTPUT);
	Serial.begin(9600);
	
	//Binary notation as comment
	dataArray[0] = 0xFF; //0b11111111
	dataArray[1] = 0xFE; //0b11111110
	dataArray[2] = 0xFC; //0b11111100
	dataArray[3] = 0xF8; //0b11111000
	dataArray[4] = 0xF0; //0b11110000
	dataArray[5] = 0xE0; //0b11100000
	dataArray[6] = 0xC0; //0b11000000
	dataArray[7] = 0x80; //0b10000000
	dataArray[8] = 0x00; //0b00000000
	dataArray[9] = 0xE0; //0b11100000
	
	//function that blinks all the LEDs
	//gets passed the number of blinks and the pause time
	blinkAll_2Bytes(2,500); 
}

void loop() {
	for (int j = 0; j < 10; j++) {
		//load the light sequence you want from array
		data = dataArray[j];
		//ground latchPin and hold low for as long as you are transmitting
		digitalWrite(latchPin, 0);
		//move 'em out
		shiftOut(dataPin, clockPin, data);
		//return the latch pin high to signal chip that it 
		//no longer needs to listen for information
		digitalWrite(latchPin, 1);
		delay(300);
	}
}


// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
	// This shifts 8 bits out MSB first, 
	//on the rising edge of the clock,
	//clock idles low
	
	//internal function setup
	int i=0;
	int pinState;
	pinMode(myClockPin, OUTPUT);
	pinMode(myDataPin, OUTPUT);
	
	//clear everything out just in case to
	//prepare shift register for bit shifting
	digitalWrite(myDataPin, 0);
	digitalWrite(myClockPin, 0);
	
	//for each bit in the byte myDataOut
	//NOTICE THAT WE ARE COUNTING DOWN in our for loop
	//This means that %00000001 or "1" will go through such
	//that it will be pin Q0 that lights.
	for (i=7; i>=0; i--) {
		digitalWrite(myClockPin, 0);
		
		//if the value passed to myDataOut and a bitmask result 
		// true then... so if we are at i=6 and our value is
		// %11010100 it would the code compares it to %01000000 
		// and proceeds to set pinState to 1.
		
		if ( myDataOut & (1 << i) ) {
			pinState= 1;
		} else {
			pinState= 0;
		}
	//Sets the pin to HIGH or LOW depending on pinState
	digitalWrite(myDataPin, pinState);
	//register shifts bits on upstroke of clock pin  
	digitalWrite(myClockPin, 1);
	//zero the data pin after shift to prevent bleed through
	digitalWrite(myDataPin, 0);
	}
	
	//stop shifting
	digitalWrite(myClockPin, 0);
}


//blinks the whole register based on the number of times you want to 
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
	digitalWrite(latchPin, 0);
	shiftOut(dataPin, clockPin, 0);
	shiftOut(dataPin, clockPin, 0);
	digitalWrite(latchPin, 1);
	delay(200);
	
	for (int x = 0; x < n; x++) {
		digitalWrite(latchPin, 0);
		shiftOut(dataPin, clockPin, 255);
		shiftOut(dataPin, clockPin, 255);
		digitalWrite(latchPin, 1);
		delay(d);
		digitalWrite(latchPin, 0);
		shiftOut(dataPin, clockPin, 0);
		shiftOut(dataPin, clockPin, 0);
		digitalWrite(latchPin, 1);
		delay(d);
	}
}


위 소스는 segment 의 모양을 dataArray 를 사용하여 표현하는 soruce 입니다.



위의 소스를 구동시킨 동영상 입니다.




FIN


12 segments LED bar graph 를 한개만 써서 하는 것은 확인해 봤습니다.


1 개의 shift register 만 사용하면 8개까지만 사용이 가능하니, 12 segments 을 모두 활용하지 못했습니다.

Shift register 를 daisy chain 으로 추가 엮어 주면 가능하다고 합니다.


따로 글을 작성해 보겠습니다.


And

Hardware | 74HC595 shift register 를 사용해 보자

|

1. Shift Register


LED bar graph 를 컨트롤 하려면 shift register 가 필요 합니다.


Arduino 의 digital pin 에 직접 연결하면 LED bar graph 를 컨트롤 할 수 있습니다만,

D2 ~ D13 에서, 총 12개의 LED 만 동시에 컨트롤을 할 수가 있습니다.


LED bar graph 에 대해서는 다음 글을 참고해 주세요.


* Hardware | LED bar graph 를 이용해 보자

http://chocoball.tistory.com/entry/Hardware-LED-bar-graph


이제 Shift Register 를 구입해 보고자 합니다.




2. 구입


AliExpress 에서 검색해 봅니다.

10개에 1천원도 하지 않는 가격!!! 거기에 무료 배송이라니.

오히려 제가 업자 걱정을 하게 되는 가격입니다.


https://ko.aliexpress.com/item/10pcs-free-shipping-SN74HC595N-SN74HC595-74HC595N-74HC595-DIP-16-Counter-Shift-Registers-Tri-State-8-Bit/32429190104.html





3. 도착


포장은 DIP 다리가 잘 보호되도록 플라스틱 릴에 넣어서 왔습니다.



제가 개인적으로 좋아하는 Texas Instruments 사에서 제조된 chip 입니다.



대학교 실험과목에서 많이 썼었는데...

그땐 공부가 너무 싫어 놀기에만 정신이 팔려 자세히 알지도 못했습니다.


이제는 공부의 개념이 아니라 취미의 개념으로 접근하니 즐겁기만 합니다.




4. Specification


스펙은 제조사에서 공유하고 있습니다.


sn74hc595.pdf


아마 이 문서만 빠삭하게 알고 있으면 활용도 100% 일 듯 합니다.

온갓 온도 / 전압 특성과 패키징에 대해서 자세히 나와 있습니다.


Chip 개발에 있어, 간단한 것이라도 이렇게 많은 내용을 포함해야 한다니 대단한 작업인것 같습니다.



회로 구성에 있어서 보통 5V 로 구동한다고 하지만,

Texas Instruments 에서 생산한 SN74HC959 는 3.3V 에서도 잘 동작하도록 제조된것 같습니다.

사양서에도 2V ~ 6V 사이에 구동된다고 합니다.



Clock 에 따라서 각각의 pin state 를 컨트롤 하고 있다는 것을 알 수 있습니다.




Function table 을 가지고 chip 의 기능을 모두 설명해 놨습니다.
위의 두개의 표만으로 이 chip 의 구동에 대해서 설명이 됩니다.




5. Layout


Shift Register 를 이용하여 arduino 와 연결하면 다음과 같은 구성이 됩니다.


  LED       | Shift Register | Arduino
  Bargraph  |   SN74HC595N   |  Nano
---------------------------------------
  anode 1   | Q1 (pin 1)     |
  anode 2   | Q2 (pin 2)     |
  anode 3   | Q3 (pin 3)     |
  anode 4   | Q4 (pin 4)     |
  anode 5   | Q5 (pin 5)     |
  anode 6   | Q6 (pin 6)     |
  anode 7   | Q7 (pin 7)     |
            | GND (pin 8)    |  GND
            | Vcc (pin 16)   |  3.3V
  anode 0   | Q0 (pin 15)    |
            | DS (pin 14)    |  D11     --> dataPin
            | OE (pin 13)    |  GND
            | ST_CP (pin 12) |  D8      --> latchPin
            | SH_CP (pin 11) |  D12     --> clockPin
            | MR (pin 10)    |  3.3V
----------------------------------------


회로도는 다음과 같습니다.



회로도에서도 알 수 있듯이, arduino 와의 연결선은 단 3개로 단축됩니다.



모든 연결은 shift register 가 담당하니, 선의 복잡도는 그대로일 수 밖에 없습니다.

다만, 복잡한 연결은 shitf register 가 담당하고 arduino 는 추가 기기들을 연결하는 controller 역할을 더 수행할 수 있게 됩니다.





6. Source


구동 source code 입니다.


int latchPin = 12;
int clockPin = 11;
int dataPin = 13;
byte leds = 0;
int currentLED = 0;

void setup() {
	pinMode(latchPin, OUTPUT);
	pinMode(dataPin, OUTPUT);
	pinMode(clockPin, OUTPUT);
	
	leds = 0;
}

void loop() {
	leds = 0;
	
	if (currentLED == 7) {
		currentLED = 0;
	} else 	{
		currentLED++;
	}
	
	bitSet(leds, currentLED);
	
	digitalWrite(latchPin, LOW);
	shiftOut(dataPin, clockPin, LSBFIRST, leds);
	digitalWrite(latchPin, HIGH);
	
	delay(250);
}




7. 확인


실제 연결 사진입니다.



스파게티~~~.





8. 번외


Shift register 는 clock 과 전압 high/low 를 통하여 컨트롤 하게 됩니다.


예전에 AliExpress 에서 부품을 조립하여 사용하는 Oscilloscope 인 DSO 150 를 만들어 놨으니,

파형을 확인해 보고 싶어졌습니다.


* Hardware | DSO150 Oscilloscope

http://chocoball.tistory.com/entry/HardwareDSO150Oscilloscope


Arduino 의 D12 에서 clock 을 발생하므로 확인해 봅니다.



흠흠, 정말 사각형 클럭이 보이네요.


D11 인 data 통신을 확인해 봅니다.



필요한 값을 shift register 에게 보내고 있다는 것을 알 수 있습니다.


LED 측의 값을 확인해 봅니다.



LED 점등은 shift register 를 통하여 High/Low 로 확인이 됩니다.




FIN


Shift register 는 정말 clock 으로 동작하는 것을 확인할 수 있었습니다.

이제 LED bar graph 두개 이상을 한번 연결해 보고싶네요.

And

Life | 쓰고 목적지에서 버리는 자전거

|

1. 쓰고 버리는 자전거


이번에 Singapore 에 한달짜리 출장을 갔습니다.

숙소에서 회사까지는 그리 먼 거리는 아닌데, 버스가 띄엄띄엄 옵니다.


기다리는 시간이 아까워 한번은 걸어갔더랬습니다.

상시 28 ~ 30도인 Singapore 에서 그정도 걸어다니는 건 외노자 뿐입니다.


그러다 곳곳에 그냥 서있는 자전거들을 보게 됩니다.



정말 이렇게 뻘쭘하게 서 있습니다.




2. Obike vs. Mobike


동료에게 물어보니, 길가다 보이면 타고 가다 목적지에서 버리는 자전거 시스템이라고 합니다.

마침 10월 한달동안 free promotion 중이라고 하네요.


바로 해당 어플을 인스톨 합니다.



쓰고 버리는 자전거 시스템을 가장 먼저 도입한 회사가 OBike 라고 합니다.

인스톨 합니다.


Budget 50 SGD 를 미리 카드로 결제합니다.

나중에 refund 받을 수 있다고 하는걸 믿고 결제합니다.



이제 자전거 타러 나갑니다.

올커니 깔끔한 자전거가 저기 서 있네요.



바구니와 잠금장치 근처에 3D barcode 가 세겨져 있습니다.

어플을 실행시키면 스마트폰 카메라를 통하여 해제할 수 있습니다.



음... 바이크가 이렇게 많은데 모든게 수리해야한다고 riding 을 거부합니다.



아니 이게 무슨 조화야.... 이렇게 멀쩡한 자전거가 많은데, 모두 수리해야 한답니다.


한참을 헤매다가 동료가 뭔가 알아낸 듯 이야기 합니다.

"회사명이 다른것 같은데...."


그렇습니다. 이때까지 여러 회사가 경쟁하고 있다는 것을 전혀 모르고 있었습니다.



노란색 자전거는 OBike 라는 회사이고, 주황색은 Mobike 라는 회사입니다.



Mobike 어플을 바로 인스톨 합니다.



인증은 휴대폰 번호로 합니다.

로밍으로 제 번호를 쓰고 있음에도 잘 되었습니다.

인터넷은 Pocket WiFi 였습니다.



Mobike 어플을 깔고 실행시키니 바로 잠금 장치가 해제되네요.



무료 프로모션 기간임을 잊어서는 안됩니다.




3. 각 회사의 사용


두 회사는 거의 똑같은 기능을 제공합니다.

아래는 Mobike 어플입니다.



나의 충전 금액과 사용내역을 확인할 수 있습니다.



사용 내역은 GPS 와 연동되어서 어디서 어디까지 갔는지,

사용에 얼마나 지불되었는지 자세하게 나옵니다.



탄소배출량이 없는 eco drive 라서, 지구를 얼마나 구했는지 보여줍니다.

거기에다 소비된 열량까지!!!



둘이 같은 회사가 아닌지 의심스러울 정도로 거의 완벽하게 interface 가 똑같습니다.



자전거를 잘 찾을 수 있게, 현재 위치를 중심으로 어디쯤에 자전거가 있는지 보여줍니다.

다만 거의 믿을게 못됩니다. 거의 맞지 않아요.

그냥 목적지 방향으로 걸어가면서 발견하면, 타면 됩니다.



Mobike 어플은 반응이 아주 많이 느립니다.

서버 구축이 제대로 되지 않은 듯 합니다.

탑승 완료를 하더라도 어플에서 완료가 뜰 때까지 약 1분 이상을 기다려 줘야 합니다.


제 동료는 1분 기다리지 않아서, 400원 거리를 8천원 청구되었습니다.

무료 프로모션때문에 타기 시작했지, 완성도는 아직 입니다.



바가지는 꼭 쓰라고 그러네요.

그런데 쓰고다니는 사람을 못봤....



룰루~ 후덥지근한 바람을 가르며 패달링 하면,

등줄기에서 땀이 줄줄 흐르며 온몸이 후끈 달아 오릅니다.


역시 이 자전거 타는 사람의 대부분은 외노자일 듯 합니다.




4. Singapore 풍경


자전거의 특성이 기동성을 이용하여 여러 장소를 다녀봤습니다.

자가가 없는 이상, 자전거는 차가 못가는 곳이나 기동성 면에서는 좋다고 생각합니다.



오늘의 목표는 Singapore Sport Hub 입니다.



대법원 골목을 지나...



밀집되어 있는 은행가를 좋은 자리에서 찍어보기도 하고.

(사진 밑에 사람 모여있고 흰색으로 보이는게 Merlion)



Marina Bay Sands 도 멋지게 보이네요.



길을 잘못 들었지만 이런 샷을 찍을 수 있는 장소도 발견하였습니다. 캬~.

Mandarin Hotel 근처입니다.



달리고 달려 National Stadium = Singapore Sport Hub 에 도착했습니다.



역시 되돌아 갈 때에도, 저의 친구 OBike 와 함께.

버스나 지하철 따위는 눈에 들어오지 않습니다.




5. 야경


다른 날, 저녁을 먹고 일전에 지나왔던 자리를 다시 지나갈 기회가 있었습니다.

외노자의 친구, 우리의 자전거로 귀가 입니다.


버스와 지하철 따위는 눈에 들어오지 않습니다.



이게 모두 OBike / Mobike 덕분입니다.

같은 장소에서 야경을 찍을 수 있었습니다.



저녁이라 사람으 거의 없으므로, Merlion 까지 가서 찍어봅니다.

물줄기가 시원하네요.



Merlion 에서 보이는 Marina Bay Sands 입니다.




6. Santosa


내친김에 하루 날 잡아 휴양지인 Santosa 까지 자전거로 달려봅니다.

버스나 지하철 따위는 눈에 들어오지 않습니다.



이런 위트 좋습니다. 휴양지스러운 여유가 느껴지는군요.



바다다~~.

그치만 더러워서 수영을 할 수 없습니다.

"들어가지 않는게 좋을껄~" 이라는 표지판도 보입니다.

저~ 기 멀리에 공장과 수송선에서 신나게 매연이 뿜어져 나옵니다.


Santosa 는 인공섬이라고 하더군요.



보통은 Mobike 가 많이 보이는데, Santosa 로 들어가는 입구인 Vivo City 근처에는 OBike 가 많이 눈에 띕니다.

Vivo City 가 Singapore 제1의 휴양지인 Santosa 와 가까워서, 선발 회사인 OBike 가 먼저 선점한게 아닌가 합니다.





7. 아쉬운 점


기껏 자전거를 발견하여 사용하려고 하면, 고장난게 많습니다.



선진국 Singapore 지만, 담배도 버리지 않고, 쓰레기도 없다는 Singapore 이지만,

Bike Sharing 의 자전거 안장이 없네요?



어떤 자전거는 앞바퀴가 멋대로 휩니다.

난 앞으로 가는데 바퀴는 거부하네요.


그렇습니다.

자전거가 산재해 있고, 일일이 수거를 해서 고치지를 못하니, 고장난 자전거가 수두룩 합니다.


저의 경헙적 수치에 의하면 OBike 는 2/3 이상이 고장났다고 봐야 하겠습니다.

신생 Mobike 는 1/3 정도.


멘테넌스 문제를 해결하지 못하면 비지니스의 지속은 힘들것 같다는 생각이 듭니다.




FIN


한달 동안 Singapore 에서 신세 많이 졌습니다.

한국에도 OBike 가 있네요? (강남 길거리에서 한대 봄)



거의 사용되지 않아서 멀쩡한것 같습니다.



그러나, 역시나 GPS 에서 위치파악은 안되네요.


And

Hardware | bGeigie Nano 를 이용하여 방사능을 측정해 보자

|

1. 측정해보자


방사능 측정기 조립 과정은 아래 두 link 들에 있습니다.


* Safecast bGeigie Nano 를 조립해 보자 - 1

http://chocoball.tistory.com/entry/Hardware-Safecast-bGeigie-Nano-1


* Safecast bGeigie Nano 를 조립해 보자 - 2

http://chocoball.tistory.com/entry/Hardware-Safecast-bGeigie-Nano-2


드디어 방사능 측정을 시작했습니다.

배송받기 까지도 오래 걸렸지만, 완성 후 측정까지도 오래 걸렸습니다.


우선 차의 유리에 부착하여 측정했습니다.



센서가 밖으로 향하게 하고, 자동차 안에서는 OLED 를 볼 수 있으니, 상황을 잘 알수 있습니다.

9개의 GPS 위성과 연결되어 있고, 고도 5m, 측정 개시후 1시간 41분이 지나고 있다는 정보까지 자세하게 나옵니다.



눈으로 동작을 확인하니 즐겁기 그지 없습니다.



46CPM 은 생활 방사능 정도 입니다.




2. App 과 연동해 보자


Safecast 에서 만들어 내 놓은 "Safecast" 를 통하여 스마트폰과 bGeigie Nano 간에 Bluetooth 연동이 가능합니다.



저는 iPhone 이므로, App Store 에서 검색하면 나옵니다.



App 을 인스톨 후, 실행시키면, 가장 가까운 bGeigie Nano 의 bluetooth 를 자동으로 찾아줍니다.

Bluetooth 모듈이 달린 kit 이 조금 더 비쌌지만, 그 값을 하는것 같아요.



연결되면 bGeigie Nano 의 동작 상황을 자세하게 알 수 있습니다.



GPS 를 찾으면, 측정값과 함께 GPS 정보를 함께 저장하기 시작합니다.


이제 bGeigie Nano 의 OLED 를 확인하지 않아도, App 을 통하여 측정 상황을 확인할 수 있습니다.

측정이 끝나면, 바로 인터넷을 통하여 Safecast API 로 측정 log 를 쏴줄수 있습니다.



"api.safecast.org" 에서 자기가 올린 data 를 확인할 수 있으며,

data 내용이 문제 없다면, 추가 정보를 기입하고 승인 요청을 합니다.

data 에 문제가 없고 승인이 끝나면, 전 세계인에게 공유됩니다.




3. Singapore


마침 Singapore 에 한달짜리 출장을 가게 되었습니다.

Singapore 는 어떤 상황인지 궁금합니다.


숙소에서 Singapore Sports Hub 까지 자전거를 타고 가면서 측정해 봅니다.



사용된 자전거는 10월 한달 free promotion 중인 OBike 와 함께 하였습니다.


Obike 는 길 가다가 자전거를 발견하면 바로 타고, 목적지에서 버리면 되는 간편한 시스템 입니다.

비용은 탄 시간에 맞게 지불하면 됩니다만, Singapore 에서는 현재 동일한 서비스를 제공하는 회사들이 있어서

Free promotion 기간이었습니다.


OBike 에 대해서는 따로 글을 작성하였습니다.


쓰고 목적지에서 버리는 자전거

http://chocoball.tistory.com/entry/Life-bicycle-sharing


저기 오늘 같이할 자전거가 저를 기다리고 있군요.



자전거에 문제 없는지 확인하고 바로 올라 탑니다.



조금 돌아왔더니만 1Km 더 주행했습니다.



방사능 측정 결과 입니다.

문제 없는 수치 입니다.


자세히 보면, 하천 근처나 공사가 많이 이루어진 장소에서 값이 비교적 높게 나옵니다. 흠흠... 그렇군.




4. 하늘에서 측정하기


후꾸시마 사태때에 일본 정부에서 항상 빼놓지 않고 이야기 한 내용이,

"비행기 타고 다니면 장난 아니게 방사능 쐬지만 문제 없잖아" 였습니다.


실제로 그런지 무척 궁금한 내용입니다.


귀국하는 비행기에서 측정할 수 있도록 full 충전 해놓고 드디어 비행기 이륙 !



비행기에서 다행히 창가쪽 자리가 배정되었습니다.

GPS 도 무리없이 잘 잡히네요.



이륙 후, 고도 1282m 까지 올라갔습니다.

41 CPM 이면 지상과 거의 다를바 없습니다. 그렇군...



4682m 올라 왔습니다.

86 CPM 으로 값이 살짝 올라갔습니다. 비가 많이 들치고 먼지가 쌓이는 창틀의 홈에서도 81 CPM 이었으니...



5431m. 표시하는 값이 새로운 영역에 도달했습니다.

95 CPM 은 여지껏 처음 보는 수치 입니다.



5873m. 126 CPM 입니다.

이는 지상의 값인 60 CPM 의 약 2배의 값입니다.



6226m. 134 CPM 를 가리킵니다.

고도에 따라 우주에서 오는 방사능은 점점 강해지는 것을 눈으로 실제로 확인하게 되네요.

대기층의 중요함을 정말 피부로 느낍니다.



7362m. 183 CPM.



8201m. 214 CPM.



9104m. 257 CPM.



거의 지상 10Km 상공에서 동영상을 찍어봅니다.



9867m. 309 CPM.

기어이 300 CPM 을 넘었습니다. 지상의 5배 정도 입니다.



비행기의 항속 높이 입니다.

12600m. 524 CPM 을 찍었습니다.


이정도면 저의 사타구니를 납으로 만든 컵으로 가려야 하는게 아닌가 진심 걱정되었습니다.

이렇게 쎌 줄이야 !!!



후덜덜 하네요.

비행기 많이 타면 방사능 샤워를 한다는 이야기는 맞는것 같습니다.



App 을 통해서도 확인이 가능했습니다.



최종적으로 괴적을 그려봤습니다.

중간에 이빨이 빠졌지만, 대체로 잘 측정이 되었습니다.




FIN


도보, 자전거, 자동차, 비행기를 이용하여 여러가지 측정해 봤습니다.

비행기를 빼곤, 일반적으로는 무시할 수 있는 일반적인 수치를 보여줬습니다.


다만, 앞으로 비행기 탈 일이 생기면, 납으로 만든 컵을 가지고 다닐까 합니다.

And