'Arduino'에 해당되는 글 104건

  1. 2018.11.10 Hardware | Transistor 구매
  2. 2018.11.09 Hardware | 스위치 부품 구매하기
  3. 2018.10.04 Hardware | ESP-01 or ESP8266 사용기 - 1 4
  4. 2018.09.18 Hardware | Arduino 를 DIY 해보자 - 1 4
  5. 2018.09.04 Software | 회로설계 프로그램 EAGLE 2
  6. 2018.08.14 Hardware | Raspberry Pi CPU Info screen 구매기 2
  7. 2018.08.12 Hardware | Safecast bGeigi nano firmware upgrade
  8. 2018.08.06 Hardware | MAX31865 + PT100 온도센서 조합 2
  9. 2018.08.01 Hardware | ML8511 UV sensor 를 가지고 놀아보자
  10. 2018.07.31 Hardware | MAX31855 + K-type 온도센서 조합 2

Hardware | Transistor 구매

|

1. 이제는 transistor 까지 왔다


이 취미를 하다 보면, 당연히 여기까지 오게 되어 있습니다.

어쩌면 늦은 감이 없지 않아 있죠.


그렇습니다. 트랜지스터 입니다. 짜잔~!



트랜지스터는 오늘날의 IC 칩이 나오게 된 기초 소자였으며,

현재의 전자혁명을 가져오게 한 근본되는 소자 입니다.



트랜지스터는 두가지 역할이 있습니다.


- 증폭

- on/off 스위치


자세한 동작 원리는 internet 에 흘러 넘치므로 특별히 여기서는 다루지 않을께요.





2. 구매


오늘도 예외없이 AliExpress 의 바다를 헤엄칩니다.


가장 널리 쓰이는 트랜지스터 소자 중, 그 두가지가 BC547, BC557 이라고 하네요.


* (50Pcs/lot)BC547+BC557 Each 25Pcs BC547B BC557B NPN PNP Transistor TO-92 Power Triode Transistor kit Bag

https://www.aliexpress.com/item/Free-shipping-BC547-BC557-Each-25pcs-all-50pcs-bag-BC547B-BC557B-NPN-PNP-Transistor-TO-92/32630943547.html




여러 종류가 한묶음으로 파는 판매자도 있어, 아래 제품도 함께 구매합니다.


* 170PCS Transistor Assorted Kit S9012 S9013 S9014 9015 9018 A1015 C1815 A42 A92 2N5401 2N5551 A733 C945 S8050 S8550 2N3906 2N3904

https://www.aliexpress.com/item/170PCS-Transistor-Assorted-KitS9012-S9013-S9014-S9015-S9018-A1015-C1815-A42-A92-2N54012N5551-A733-C945-S8050/32475353272.html







3. 기호 읽기


트랜지스터에 씌여 있는 숫자 및 기호 읽는 방법은 아래와 같습니다.


* Reading_Transistor_Markings.pdf


즉, 소재의 종류, 사용처, 그리고 연번 순서네요.


예로, BC547 은 다음과 같은 성질을 갖는 것이죠.


- B : Sillicon

- C : Transistor - audio frequency, low power

- 547 : Serial number


아주 자세한 specification : https://components101.com/bc547-transistor-pinout-datasheet


좀더 전기적인 특성은 위의 spec. sheet 를 봐야겠지만, 씌여진 내용으로만 봐도 실리콘으로 만들어진

라디오에 적합한 트랜지스터라는 것을 알 수 있습니다.


위의 PDF 에도 설명이 잘 되어 있지만,

좀더 보기 쉽게 만들어진 웹사이트가 있어서 그 내용을 출처와 함께 여기에 남깁니다.


* Transistor & Diode Numbering Codes

https://www.electronics-notes.com/articles/electronic_components/transistor/transistor-codes-numbering.php







4. 도착 및 확인


전기적인 특성 모두를 트랜지스터에 표기된 숫자 및 기호만으로는 알 수가 없어,

transistor tester 를 이용하여 보여주는 값들을 정리해 봅니다.


분명 트랜지스터를 가지고 놀게 되면 이 data 가 요긴하게 쓰일꺼라 생각합니다.


BC547 (BJT-NPN)




| hFE |  Ic   |  Ube  | ICEO | ICEs |
-------------------------------------
| 351 | 3.3mA | 651mV |  4uA |  2uA |




BC557 (BJT-NPN)




| hFE |  Ic   |  Ube  | ICEO | ICEs |
-------------------------------------
| 393 | 3.6mA | 659mV |  1uA |  -   |



S9012 (BJT-PNP)



| hFE |  Ic   |  Ube  | ICEO | ICEs |
-------------------------------------
| 272 | 2.5mA | 654mV |  -   |  -   |



S9013 (BJT-NPN)



| hFE |  Ic   |  Ube  | ICEO | ICEs |
-------------------------------------
| 144 | 1.4mA | 617mV |  2uA |  5uA |



S9014 (BJT-NPN)




| hFE |  Ic   |  Ube  | ICEO | ICEs |
-------------------------------------
| 336 | 3.1mA | 651mV |  4uA |  2uA |



S9015 (BJT-PNP)




| hFE |  Ic   |  Ube  | ICEO | ICEs |
-------------------------------------
| 362 | 3.4mA | 646mV |  -   |  -   |



S9018 (BJT-NPN)




| hFE |   Ic   |  Ube  | ICEO | ICEs |
--------------------------------------
| 106 | 0.99mA | 717mV |  2uA |  5uA |



A1015 (BJT-PNP)




| hFE |   Ic   |  Ube  | ICEO | ICEs |
--------------------------------------
| 305 |  2.8mA | 642mV |  -   |  -   |



C1815 (BJT-NPN)




| hFE |   Ic   |  Ube  | ICEO | ICEs |
--------------------------------------
| 373 |  3.5mA | 651mV |  4uA |  2uA |



A42(KSP42) (BJT-NPN)




| hFE |   Ic   |  Ube  | ICEO | ICEs |
--------------------------------------
| 157 |  1.5mA | 607mV |  1uA |  4uA |



A92(KSP92) (BJT-PNP)




| hFE |  Ic   |  Ube  | ICEO | ICEs |
-------------------------------------
| 140 | 6.2mA | 648mV |  -   |  -   |



2N5401 (BJT-PNP)




| hFE |  Ic   |  Ube  | ICEO | ICEs |
-------------------------------------
| 194 | 1.8mA | 633mV |  -   |  -   |



2N5551 (BJT-NPN)




| hFE |   Ic   |  Ube  | ICEO | ICEs |
--------------------------------------
| 127 |  1.2mA | 620mV |  5uA |  2uA |



A733 (BJT-PNP)




| hFE |  Ic   |  Ube  | ICEO | ICEs |
-------------------------------------
| 252 | 2.3mA | 655mV |  -   |  -   |



C945 (BJT-NPN)




| hFE |   Ic   |  Ube  | ICEO | ICEs |
--------------------------------------
| 351 |  3.3mA | 652mV |  4uA |  2uA |



S8050 (BJT-NPN)




| hFE |   Ic   |  Ube  | ICEO | ICEs |
--------------------------------------
| 226 |  2.1mA | 594mV |  1uA |  2uA |



S8550 (BJT-PNP)




| hFE |  Ic   |  Ube  | ICEO | ICEs |
-------------------------------------
| 301 | 2.8mA | 643mV |  -   |  -   |



2N3906 (BJT-PNP)




| hFE |  Ic   |  Ube  | ICEO | ICEs |
-------------------------------------
| 185 | 1.7mA | 643mV |  -   |  -   |



2N3904 (BJT-NPN)



| hFE |   Ic   |  Ube  | ICEO | ICEs |
--------------------------------------
| 370 |  3.4mA | 657mV |  7uA |  4uA |





FIN


트랜지스터 한아름이 있으니, 마음이 풍족하군요!

어떤 프로젝트를 하든 바로 확인해 볼 수 있는 부품이 생겼습니다.


And

Hardware | 스위치 부품 구매하기

|

1. 스위치, 스위치, 스위치...


전자 공작(?) 을 하다 보면, 스위치 부품이 필요할 때가 옵니다.

저의 경우는 ESP8266 의 firmware 올릴 때가 그 때였네요.


* Hardware | ESP-01 or ESP8266 사용기 - 1

http://chocoball.tistory.com/entry/Hardware-ESP01-or-ESP8266-using-1






2. 구매


우리의 친구 AliExpress 에서 검색해 봅니다.


빵판에서 사용할 수 있는 버튼을 찾아보니 아래 제품이 나오네요.

이 스위치는 눌렀다가 힘을 빼면 접점이 없어지는 스위치 입니다. 보통 PC 의 reset 버튼 같은거죠.

영어 명칭은 "tactile button" 이라고 합니다.


* Smart Electronics Tactile Push Button Switch Momentary 12*12*7.3MM Micro Switch Button + 5 Colors Tact Cap

https://www.aliexpress.com/item/Smart-Electronics-20PCS-Tactile-Push-Button-Switch-Momentary-12-12-7-3MM-Micro-Switch-Button-20PCS/32730484504.html



위는 OMRON 사의 B3F-4055 의 카피품 입니다.

참고로 ORMON 사의 B3F 형식의 스위치 설명서 입니다.


en-b3f.pdf



내구성은 차이가 나겠으나, 기본 동작용으로 사용하기엔 이만한게 없을것 같습니다.


또다른 제품은 10가지 각종 스위치가 들어가 있는 제품입니다.

SMD 실장용도 들어가 있네요.


* Smart Electronics 10 Kinds of Tactile Switches Push Button SMD Tact Switch Switch 100pcs

https://www.aliexpress.com/item/Free-shipping-10-Kinds-of-Tactile-Switches-Push-Button-SMD-Tact-Switch-Switch-100Pcs-lot/32728800916.html



PC의 전원처럼 한번 꾹~ 누르면 회로적으로 short 되었다가,

다시 누르면 open 되는 스위치부터, 자동차 remote key 처럼 손끝으로 눌림이 느껴지는 SMD 스위치까지 다양하게 들어 있습니다.

이게 1.90 USD 라뉘~~~. 여기에 무료 배송은 덤.






3. 도착


배송기간이 거진 한달이 되는거 빼곤 잘 도착했습니다.






4. 각 스위치의 모양


우선 tactile 버튼 입니다.

한놈은 다리가 구부러져서 왔네요.



대충 벌려서 빵판에 눌러주면 적당한 크기로 알아서 펴 집니다.

누를 때 스위치같이 느껴지려면 모자를 씌워주면 됩니다.



윗면의 돌기가 모자의 갈고리에 이쁘게 맞춰서 들어갈 수 있도록 설계되어 있습니다.

물론 쉽게 제거도 가능합니다.



참 아기자기 한 스위치 입니다.



요놈은 SMD 방식으로 기판 위에 실장되는 tactile button 입니다.

대충 눌러도 되면서 SMD 방식으로는 이게 많이 쓰이는것 같습니다.

아두이노의 reset 스위치에도 이게 쓰이는것 같아요.



위의 tactile button 의 다리가 긴 버전입니다.

through hole 에 끼워서 납땜할 수 있도록 다리가 길게 되어 있습니다.

물론 사진에서처럼 빵판에 끼워서도 사용 가능합니다.



다음은 desktop 의 case 에 가장 많이 쓰이는 스위치 입니다.



한번 누르면 눌려진 상태로 고정되는 (close) 스위치와,

reset 버튼처럼, 누르는 힘이 빠지면 바로 올라오는 (tactile) 스위치 입니다.



눌렀을 때, 어디가 새로 closed 되는지 확인해 보니, 양쪽을 마주보는 6개의 다리 중에서

대각선 다리끼리 스위치를 눌렀을 때 쇼트 됩니다.


왜 다리가 6개인지는 아직 잘 모르겠습니다.



위의 스위치는 슬라이드로 on/off 기능하는 스위치 입니다. 많이 쓰이는거죠


아래는 tactile button 인데, 기판을 관통해서 납땜하는 버전입니다.



아래부터는 SMD 형식입니다..



다리가 4개짜리도 있고, 2개짜리도 있고.



헤드가 많이 튀어 나온 것도 있고, 조금만 튀어 나온것도 있고.



납작한 것도 있고.



위의 버튼은 arduino nano 의 중국 copy 버전에서 자주 보는 버튼이네요. :-)




5. 스위치 가족


한데 모아서 찍어봤습니다.



이제 swich 나 button 은 추가로 구매할 일은 거의 없겠죠?


And

Hardware | ESP-01 or ESP8266 사용기 - 1

|

1. 시작


아두이노에 연결해서 사용할 수 있는 저가의 Wi-Fi 모듈로는,

유명한 Espressif Systems 사의 ESP8266 와, Ai-Thinker 사의 ESP-01 모듈이 있습니다.


다른 여타 sensor 나 module 처럼 금방 사용할 수 있겠지 하고 덤볐다가, 지옥이 열렸습니다.


* ESP8266

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



저가이면서 Wi-Fi 구성이 된다니, 신기할 따름입니다.

바로 구매하여 확인해 봅니다.





2. 구매


AliExpress 에서 쉽게 검색이 됩니다.

외형이 살짝 다른 두 종류가 있어서 두가지 모두 구입해 봅니다.


한개는 8Mb flash memory 라고 하는군요.


* ESP-01, ESP8266,WIFI module 8Mb flash memory

https://www.aliexpress.com/item/WIFI-module-ESP-01-ESP8266-8Mb-flash-memory/32733744011.html





* Upgraded version ESP-01 ESP8266 serial WIFI wireless module wireless transceiver ESP01 ESP8266-01

- https://www.aliexpress.com/item/Free-shipping-ESP8266-serial-WIFI-wireless-module-wireless-transceiver/32341788594.html







3. 외형


모양은 이렇게 생겼습니다.



제조사는 다르지만 기본 chip 및 구성은 거의 동일합니다.



위의 그림에서 8Mbit Flash 라는 제품이 밑에 보이는 것인데,

memory chip 두께가 살짝 더 두꺼워 보입니다.



평범한 뒷모습.





4. Pin 배열


Pin out 이 2열로 되어 있어서, 빵판에서 그냥 꼽으면 short 가 발생합니다.

점퍼선으로 연결해도 되지만 깔끔하지 못할 뿐더러 연결시 자꾸 헷갈리기도 합니다.


Wi-Fi 모듈 보드 한쪽이 안테나를 형성하고 있어서,

이렇게 한쪽으로 모두 pin 을 모아야 하는 것은 이해가 갑니다만 빵판에서는 최악입니다.

꽤나 불편합니다.



AliExpress 에서 우연하게 breadboard 에서 편하게 사용할 수 있도록 해주는 adapter 를 발견하였습니다.


* 2PCS For ESP-01 Esp8266 ESP-01S Model Of The ESP8266 Serial Breadboard Adapter To WiFi Transceiver Module Breakout UART Module

https://www.aliexpress.com/item/Breadboard-Adapter-for-ESP8266-ESP-01-ESP-01S-Wifi-Transceiver-Module-Breakout/32775467213.html



아래는 실재 사용한 사진입니다.

수직을 수평으로 피면서 양쪽으로 pin 들을 분리해주는 



이 adapter 를 사용하면, 이쁘게 양쪽으로 pin 들을 구분해 줍니다.

여러분들도 꼭 구입해 보아요.





5. 먼저 알고 있어야 할 것들 - BAUD RATE


ESP8266 은 쉽게 접근할 수 있는 모듈이 아닙니다.

값싸고 성능이 괜찮은 대신, 문제 없이 구동시키려면 몇 가지 조건이 충족되어야 합니다.


이런 배경지식 없이 덥볐다가 시행착오에 꽤 많은 시간을 쏟아 부어야 했습니다.


거의 모든 ESP8266 모듈들은 공장 출하시 UART serial IO 속도가 115200 으로 정해져 있습니다.

Arduino Mega 와 같이 HW Serial 이 두개면 문제가 없습니다.


단, Arduino Uno/Nano 의 경우, 하나밖에 없는 HW Serial 을 USB 연결용으로 사용해 버리므로 문제가 됩니다.

결국, Arduino Uno/Nano 는 ESP8266 와 SoftwareSerial 로 연결되어야 하나,

SoftwareSerial 은 115200 처럼 높은 baud rate 를 지원하지 않습니다.


그래서 연결하려는 arduino 가 Uno/Nano 라면, BAUD RATE 를 변경해 줄 필요가 있습니다.

다음은 AT 명령어를 이용하여 통신 속도를 변경하는 방법 입니다.


AT+UART_DEF= baudrate , databits , stopbits , parity , flow control



보통 9600 으로 설정시 다음과 같은 명령어를 사용합니다.


AT+UART_DEF=9600,8,1,0,0


여기서 주의할 점은, ESP8266 에 구워진 AT 명령어 firmware 버전에 따라 사용하면 안되는 명령어들이 있습니다.

"AT+CIOBAUD=9600" 나 "AT+IPR=9600" 는 일시적으로만 동작되거나 ESP8266 을 벽돌로 만들어 버릴 수도 있습니다.


그러므로, 항상 최신버전의 AT firmware 를 먼저 굽고 사용해야 합니다.

firmware upgrade 에 대해서는 아래에서 자세하게 다룹니다.





6. 먼저 알고 있어야 할 것들 - 충분한 전류


ESP8266 모듈은 전력을 많이 소비합니다. 250mA 정도는 사용한다고 하네요.


ESP8266 구동에 필요한 3.3V 를 지원하기는 하지만,

200mA 이상 나오지 않는 Nano 의 3.3V 포트에 연결하면 정상적으로 동작하지 않습니다.


전류가 부족해서 나타나는 증상은, LED indicator 가 정상적으로 점멸하지 않다거나,

(아래 사진은 추가 전원을 이용하여 정상적으로 동작하는 모습)



AT 명령어에 대한 response 가 중구난방입니다.



전력을 충분히 공급하는 회로로는 3가지가 있습니다.



하나. arduino + level shifter



Uno 5V 포트는 3.3V 포트에 비해 더 많은 전류를 지원해 주지만,

거의 300mA 에 육박하는 전류를 커버하기 위해서는 외부 전원장치가 필요하므로, 이 방법은 시도해 보지 않았습니다.



. 외부 전력 공급장치


아래 보이는 것처럼 외부 전력 공급장치를 사용하는 것입니다.

예전 빵판 구입시 딸려 온 것을 사용해 봤습니다.


* Hardware | MB102 Breadboard Power Supply Module 를 사용해 보자

http://chocoball.tistory.com/entry/Hardware-MB102-Breadboard-Power-Supply-Module




셋. FTDI USB 모듈이나 그 호환 모듈


FTDI 나 CP2102 를 사용하면, 중간에 arduino 와 연결할 필요 없이 PC 와 직접 연결이 가능하며,

모듈 자체적으로 3.3V 및 충분한 전류가 공급됩니다.



저 개인적으로는 FTDI 모듈보다 CP2102 가 더 안정적인 동작을 보이는것 같습니다.


참고로 FTDI 일 경우, 장치 관리자에서 단순히 "USB Serial Port" 로 보여서 port 번호를 알 수 없습니다.

(Arduino IDE 를 띄우면 port 정보가 나오기는 함)



이는 Driver install 시에 보면, Driver 2개가 서로 연동 하면서 변경되는 port 정보를 알 필요 없이 만들어주기 위한 방법으로 보입니다만,

저에겐 오히려 귀찮은 방식입니다.



반면 CP2102 일 경우, 포트번호가 표시되므로, putty 를 이용하여 serial 접속시 포트번호를 지정할 수 있습니다.



앞으로 ESP8266 에 관련된 확인은 CP2102 를 가지고 진행하겠습니다.





7. 먼저 알고 있어야 할 것들 - 최신 firmware


AliExpress 를 통해서 구매한 firmware 들은 2015년 이전 버전을 그대로 적용해서 출하하고 있습니다.



Firmware 버전이 너무 낮으면, 대응되는 명령어도 적을 뿐더러 뭔가 많이 불안한 반응을 보입니다.

가능하면 최신 버전으로 flash 해줘야 마음이 편합니다.



Ai-Thinker 사에서 최신 firmware 라고 올라와 있는 것을 간단하게 flash 해서 update 한 결과 입니다.

여기까지 오는데 8개월 걸렸네요.


그렇습니다.

결국 이 ESP8266 을 잘 쓰려면, firmware flash 를 잘 해놓는게 가장 기본이 됩니다.

그러기 위해서는 충분한 전류를 공급하는 전원도 구비해야 하는 것 이구요.





8. 먼저 알고 있어야 할 것들 - flash 파일


Flash 파일은 몇가지 종류와 버전이 존재합니다.

Espressif Systems 사에서 공개한 일반적인 버전의 flash file 과, Ai-Thinker 사가 공개한 flash file 이 있습니다.


오늘 flashing 하려는 것은 Ai-Thinker 사의 Wi-Fi 모듈이므로, 해당 모듈용 최신 파일을 준비합니다.


* ESP8266 最新SDK发布

http://wiki.ai-thinker.com/esp8266/sdk

ai-thinker_esp8266_dout_aicloud_v0.0.0.6_20170517.7z


압축을 풀면 몇가지 버전이 나오는데, 저는 8Mbit 인것 같아서, 작은 사이즈의 8Mbit 을 사용합니다.



또한 flashing 할 때, flash file 별로 메모리상의 주소를 지정해 줘야 합니다.

다행히 Ai-Thinker 사는 한 뭉탱이로 flash file 을 만들어 놔서, 주소가 메모리 첫번째 부터 쓰게끔 "0x00000" 을 지정하면 됩니다.



다른 버전과 좀더 복잡한 내용은 다음 post 에서 다루도록 하겠습니다.

(내용이 너무 넘처남...)





9. 먼저 알고 있어야 할 것들 - flash tool


Firmware upgrade 를 위한 flash tool 로는 몇가지가 있지만,

저는 "Espressif Systems" 사에서 공개하고 있는 "FLASH_DOWNLOAD_TOOLS" 가 사용하기 편했습니다.


* ESP8266EX Resources


* FLASH_DOWNLOAD_TOOLS V3.6.4

flash_download_tools_v3.6.4_0.rar


* FLASH_DOWNLOAD_TOOLS V2.4

FLASH_DOWNLOAD_TOOLS_v2.4_150924.7z


V3.6.4 에서는 baud rate 가 기본 115200 이상만 지원합니다.

만일 arduino 와 연결을 위해 9600 으로 낮추게 설정 했을 경우에는 firmware 를 upgrage 하기 위해 AT+UART_DEF 를 사용해야 하나,

혹시 그 firmware version 이 낮아서 이 command 를 못 알아먹을 경우에는 방법이 없습니다.


그럴 때에는 version 이 낮아서 조금 찜찜하기는 하나, 9600 을 지원하는 V2.4 를 사용하면 됩니다.


이제 "어떻게" 잘 firmware flash 를 하는지를 알아봐야겠습니다.






10. Firmware flashing 회로


Flashing 을 위한 회로는 몇가지가 있지만, 저는 아래 글을 참고하였습니다.


* Update the Firmware in Your ESP8266 Wi-Fi Module

https://www.allaboutcircuits.com/projects/update-the-firmware-in-your-esp8266-wi-fi-module/



CH_PD 핀에 전원 인가 시 필히 저항을 달았으며,

RST 에 reset switch 와 GPIO0 에 flash 용 swtich 를 달았습니다.



똑딱이 스위치를 이 회로를 구성하기 위해서 구입했더랬습니다!!!


* Hardware | 스위치 부품 구매하기

http://chocoball.tistory.com/entry/Hardware-buying-switch-components


스위치의 사용법은 다음과 같습니다.


1. RST 의 스위치를 누른다.

2. FLASH 의 스위치를 누른다.

3. RST 의 스위치에서 손을 뗀다.

4. FLASH 의 스위치에서 손을 뗀다.

5. Flash program 에서 "시작" 을 누른다.


안정적으로 전원이 공급되므로 LED 가 정상으로 점등, 점멸 합니다.





11. Firmware flashing


굳이 V2.4 을 이용하여 flash 하였습니다.



위에서 열거한 방법을 반복해 보자면, 아래처럼 진행하면 됩니다.


1. RST 의 스위치를 누른다.
2. FLASH 의 스위치를 누른다.
3. RST 의 스위치에서 손을 뗀다.
4. FLASH 의 스위치에서 손을 뗀다.
5. Flash program 에서 "시작" 을 누른다.


여기까지 오는데 8개월이 걸렸습니다.

눈물좀 훔치겠습니다... ㅠ.ㅠ



정상적으로 진행되는 과정의 스샷 입니다. 5% 진행되었을 때 캡춰했네요.


아래는 flash start 누른 후의 화면들을 캡춰 했습니다.

여러가지 확인하는 과정들이 있네요.



동영상으로 떠 봤습니다.

지금 다시 봐도 감격스럽네요.







12. ESP8266 에 console 로 접속하기


PC 에서 console 접속하려면 terminal 어플이 필요합니다.

여기서는 open source 이면서 사용하기 편한 putty 를 이용했습니다.


* Download PuTTY: latest release (0.70)

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html


이제 문제없이 접속이 되니, putty 를 통해서 serial port 로 연결합니다.



AT 를 치고, Ctrl + M, J 하면 타이핑한 내용이 ESP8266 에 전송되고 그 결과를 보여줍니다.



접속 mode 라던지, 현재 상태, 그리고 집에서 쓰는 Wi-Fi AP 에서 할당받은 IP 를 확인해 봤습니다.

(따로 AT+CWJAP 이라는 command 를 통해서 접속하는 과정이 필요)


위에서 마지막에 나오는 "192.168.123.135" 이 ESP8266 이 할당받은 IP 입니다.

ESP8266 은 내부에 web server 를 탑재하고 있어서 browser 를 통해서도 접속이 가능합니다.


이 외에 여러가지 AT command 들이 있습니다만,

글이 너무너무 길어지기에 오늘은 간단한 결과 들만 올려 봅니다.

(누차 이야기 하지만, 여기까지 오는데 8....)





13. ESP8266 에 web 으로 접속하기


브라우저에서 접속해본 스샷입니다.



몇가지 설정을 web 을 통해서도 수정할 수 있게 되어 있네요.


아래는 web 에서 제공하는 "REBOOT" 버튼을 클릭하고 얻은 결과 입니다.

정상적으로 잘 동작 합니다.



Wi-Fi 연결 정보가 "AT+CWJAP" 이라는 command 로 저장되어 있기 때문에,
REBOOT 후에도 기존 Wi-Fi AP 에 접속 하는군요.





FIN


오랜 시행착오의 시간이 지나갔습니다. (사실 주말 가끔밖에 시간이 안나서...)


ESP8266 은 기능이 다양하고 강력한 대신, 길들여서(?) 사용하기가 여간 까다롭지 않습니다.

배경 지식도 많이 필요하구요.


다른 블로그 글들을 보면, 다들 쉽게 하던데 왜 나는 이렇게 어렵게 하는지 모르겠습니다.

이왕 여기까지 온거, 완벽하지는 않지만 납득이 가는 선까지 정리해 보고자 합니다.


다음 포스트에서는 나머지 이야기들을 정리해 보겠습니다.


And

Hardware | Arduino 를 DIY 해보자 - 1

|

1. Arduino 를 실제로 만들어 보자


PCB를 직접 만들어 보고자 이곳저곳을 찾아 다니던 중,

BinGoon 이라는 분의 블로그를 알게 되었습니다.


* BinGoon 의 소소한(?) 일상

http://binworld.kr/


여기서 보게된 Arduino 직접 제작기.

http://binworld.kr/25?category=494229


원래 PCB 부터 설계, 프린팅부터 하는게 진정한 DIY 이긴 하지만, 준비할게 너무 많은지라

블로그에 안내된 대로 Arduino PCB를 무료로 보내주는 분에게 부탁하여 PCB 만 따로 받기로 합니다.


Board Lab (Board Free)

http://www.boardfree.kr/





2. Arduino 의 역사


Arduino 를 처음 시작할 때도 그랬지만, 그 종류가 많아 초보자가 처음 선택하기란 쉽지 않습니다.

자료를 찾고 알아가는 재미도 있지만, 처음에는 막막하더군요.


무료 PCB 주문을 위해, 어떤 Arduino 를 할 것인지 선택함에 있어서도 다시금 고민이 됩니다.

그래서 이번에 좀더 체계적으로 알아보기로 합니다.


기본적인 정보는, 아래 Wikipedia 를 참고했습니다.


* List of Arduino boards and compatible systems

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


제작에 앞서 기준이 되는 것은 "최신 업그래이드 된 버전의 Arduino" 였습니다.

Arduino 도 햇수가 지나면서 최적화 되고, 새로운 버전들이 생겨났거든요.


이왕 만들꺼면 최적화가 가장 많이 이루어전 최신 arduino 로 하는게 좋다는 생각이었습니다.

과거 발전사를 한눈에 보려면 아래 arduino 사이트를 보면 됩니다.


* Arduino Older Boards

https://www.arduino.cc/en/Main/Boards


위의 Wikipedia 와 Arduino 두 사이트를 보고 정리된 발전 수순은 대략 다음과 같습니다.

(많이 쓰이는 메인 스트림 기준으로)


NG --> Diecimila --> Duemilanove --> Uno --> Leonardo --> Zero


Zero 는 2015년부터 정식 릴리즈 되었지만, 사양이 넘사벽이고 DIY 하기엔 너무 부품이 많습니다.

또한 무로 PCB 사이트에서도 제공되는 리스트에 포함되어 있지 않습니다.


그럼 Duemilanove / Uno / Leonardo 정도로 좁혀지는군요.





3. Arduino 중에서 어떤걸 선택해야 할까?


이제 하나씩 알아봅니다.


* Arduino Duemilanove

https://www.arduino.cc/en/Main/arduinoBoardDuemilanove



* 제작 연도 : 2009

* CPU : ATmega328P

* USB chip : FTDI FT232R

* USB socket : USB 1.0 Standard Type B


Improved : automatically switching between USB and external power, eliminating jumper


* ARDUINO UNO REV3

https://store.arduino.cc/usa/arduino-uno-rev3



* 제작 연도 : 2010

* CPU : ATmega328P

* USB chip : ATmega16U2

* USB socket : USB 1.0 Standard Type B


This uses the same ATmega328 as late-model Duemilanove, but whereas the Duemilanove used an FTDI chip for USB, the Uno uses an ATmega16U2 (ATmega8U2 before rev3) programmed as a serial converter.


* ARDUINO LEONARDO WITH HEADERS

https://store.arduino.cc/usa/arduino-leonardo-with-headers



* 제작 연도 : 2012

* CPU : ATmega32U4

* USB chip : USB controller built-in at CPU

* USB socket : USB 2.0 Micro B


The Leonardo uses the Atmega32U4 processor, which has a USB controller built-in, eliminating one chip as compared to previous Arduinos.


참고로 compact version 인 Nano 도 확인해 봅니다.


* ARDUINO NANO

https://store.arduino.cc/usa/arduino-nano



* 제작 연도 : 2008

* CPU : ATmega328

* USB chip : FTDI FT232R

* USB socket : USB 2.0 Mini B


역시 제작년도가 가장 최근(?) 인 2012년에다가 USB chip 이 내장되어 있어서 깔끔하며,

USB socket 도 휴대폰 충전용으로 가장 많이 쓰이는 USB micro B 인 "Leonardo" 로 결정합니다.







4. 선택의 재고


Leonardo 로 선택했지만, 몇가지 마이너한 문제가 있습니다.


* 제공되는 PCB 의 형태


BoardFree 에서 제공되는 Leonardo 의 부품들은 SMD 형태가 아니라,

예전 라이오 공작시 사용되는 큰 부품들을 사용할 수 있도록 제작되었습니다.



향후 여러가지 PCB를 직접 제작하여 회로를 꾸밀 때,

부품을 SMD 로 많이 준비하려 하려던 차라 이와 맞지 않습니다.


또한 왠일인지 USB socket 이 USB 1.0 Standard Type B 입니다.

결국 대상에서 제외할 수밖에 없네요.



* chip 실장의 난위도


그럼 그 다음 타자인 Uno 가 괜찮냐? 그건 또 아닙니다.
그 이유로는 USB 컨트롤로인 ATmega16U2 이 아래와 같이 생겼습니다.



실제로 납땜하게 되면 아래와 같은 모습이 되는데, 좋은 플럭스와 납땜 팁이 필요합니다.



결국 무난하게 "Duemilanove" 가 가장 적당해 보이는군요.

BoardFree 에서는 2가지의 PCB 를 보내주므로 "Nano" 도 함께 부탁하기로 합니다.


USB socket 은 micro USB 로 변환시켜주는 부품을 찾아서 해결해 보기로 합니다.





5. Part list 만들기

각 arduino 사이트를 가면 "EAGLE file" 이라는 것이 있습니다.
Autodesk 에서 만든 전자회로 설계 software 에서 읽을 수 있는 파일입니다.


이 파일을 통해서 회로를 볼 수 있습니다.

또한 export 를 통하여 part list, 즉 부품 리스트도 뽑아볼 수 있습니다.

간단한 사용법은 다음에 오는 포스트에서 설명하겠습니다.


* Software | 회로설계 프로그램 EAGLE 

http://chocoball.tistory.com/entry/Software-circuit-design-EAGLE


위의 방법을 통해 만들어진 Duemlianove 와 Nano 의 부품 리스트 입니다.


arduino-duemilanove-part-list.txt

nanov3.2-part-list.txt





6. BoardFree 신청 및 도착

신청서 양식대로 메일을 보내면 착불로 보내 줍니다.
전날 신청했는데 바로 그 다음날 도착했습니다! 고마운 분들이십니다.


PCB 부품이라서 부피가 그리 크지 않습니다.


뽁뽁이로 잘 쌓여 있습니다.
그리고, 2가지 PCB를 보내주시면서 서로 긁히지 않도록 중간에 명함도 끼워 주셨습니다.


짜잔~ Duemilanove 와 Nano 의 PCB 입니다.






7. PCB 의 품질

도착한 PCB 의 클로즈 업 사진입니다.


무료라서 기대하지 않아 그랬는지, 처음 받고나서 놀랬습니다.

품질이 예상 이상으로 좋았습니다. 쓰루홀도 정확했고, 프린딩도 좋았습니다.



무엇보다도 두께가 1.7mm 로 상당히 두껍습니다. 이렇게 좋은 품질일줄은 몰랐네요.

또한번 이자리를 빌어 감사의 말씀 드립니다.



앞면입니다.



뒷면입니다. 볼수록 깔끔하네요.



왼쪽 윗부분은 전원부 입니다. 아름답네요.



Nano 의 PCB 입니다.





8. 최종 부품 리스트 및 구매

Duemilanove / Nano 에 동일하게 들어가는 부품 포함하여 최종 리스트를 만들어 보려 했으나,
Nano 는 0603 SMD 기준이고, Duemilanove 는 0805 SMD 기준이라서 FT232RL 와 LED 빼고는 따로 구입해야 하네요.

우선 Duemilanove 부품만 최종 리스트업 해 봅니다.

-------------------------------------------------------------------------------------------------------
|                  name                  | value         | type                                       |
-------------------------------------------------------------------------------------------------------
| C1, C4, C5, C8, C9, C10, C11, C12, C13 | 100nF         | 0805 SMD                                   |
| C2, C3                                 | 22pF          | 0805 SMD                                   |
| C6, C7                                 | 100uF 35V     | Aluminum Electrolytic Capacitor            |
-------------------------------------------------------------------------------------------------------
| R1, R10, R11                           | 10k Ohm       | 0805 SMD                                   |
| R4, R5, R6, R7, R8, R9                 | 1k Ohm        | 0805 SMD                                   |
| L, PWR, RX, TX                         | LED           | 0805 SMD                                   |
-------------------------------------------------------------------------------------------------------
| D1                                     | M7 (1N4007)   | Rectifier Diode                            |
| F1                                     | 500mA 15V     | L1812 Resetable Fuse                       |
-------------------------------------------------------------------------------------------------------
| J1, J3                                 | 8             | single row female 2.54mm pitch pinhead     |
| J2, POWER                              | 6             | single row female 2.54mm pitch pinhead     |
| ICSP                                   | 6             | double row male 2.54mm pitch pinhead       |
| S1                                     | B3F-10XX      | OMRON B3F-10XX series switch               |
| X2                                     | DC-21MM       | 5.5/2.1mm female DC power jack plug socket |
| X4                                     | USB B type    | USB B type female socket                   |
-------------------------------------------------------------------------------------------------------
| IC1                                    | ATMEGA328P-PU | DIP28 8-bit Microcontroller                |
| IC2                                    | FT232RL       | SSOP28 USB UART interface IC               |
| IC4                                    | MC33269D-5.0  | 5V 800mA LDO voltage regulator             |
| IC5                                    | LM358D        | SOP8 Op Amp                                |
| Q2                                     | 16MHz         | HC-49S crystal oscillator                  |
| T1                                     | NDT2955       | SOT-23 MOSFET                              |
-------------------------------------------------------------------------------------------------------
| R2                                     | 100_NM        | no need to implement "no-mount"            |
| RESET-EN                               | jumper        | "auto-reset" on ATmega168                  |
| X3                                     |   JP4         | use like FTDI breakout board               |
-------------------------------------------------------------------------------------------------------


위에서 R2, RESET-EN, X3 과 관련한 부품은 실제로 실장할 필요는 없습니다.

이제 구매를 진행하고 납땜을 하면 되겠습니다.


Nano 부품 구입은 이번 프로젝트에 회사 동료를 한명 꼬셨으니, 그 분이 구입하도록 해야겠습니다. :-)

물론 제가 구입한 Duemilanove 부품은 2개 이상씩 구입했으니 나누면 됩니다.





FIN

부품이 도착하면 실제로 납땜해 보도록 하죠.

마지막 한가지, USB B type 은 아직 주문하지 않았습니다.
micro USB 로 변경하고 싶은데, PCB 모양과 micro USB 를 어떻게 붙여야 할지 모양이 나오지 않네요...

음... 어떻게 해야 할까?

And

Software | 회로설계 프로그램 EAGLE

|

1. 회로 설계


가끔 필요한 도구를 기성품으로 구입하기에는 돈이 아깝고, 이왕 하는 김에 나만의 기판을 만들어 보고싶었습니다.

물론 간단하게 만들꺼면, 빵판을 사서 납땜하면 됩니다.



다만, 결과물이 깔끔하지 못하고 쇼트 등의 문제가 발생할 수 있습니다.

이왕 이쪽으로 발음 담궜으니, 본격적으로 PCB 회로를 만들어 보려고 합니다.


이럴때 맨 먼저 필요한것은 회로를 설계하는 것이죠.





2. EAGLE


대학 시절 OrCAD 라는 것으로 회로를 설계해 봤으나, 평가판으로 기초적인 설계였고,
앞으로는 상용적으로 사용되고 있는 버전으로 익혀보려고 찾아 봅니다.


Arduino 의 PCB는 공유되어 있으니, 공식 사이트에 가서 확인해 봅니다.
EAGLE Files 라고 되어 있네요.

EAGLE 이 이쪽 계열에서는 무엇인지 찾아봅니다.


EAGLE은 Autodesk 가 만든, 전문 회로 설계 어플입니다.





3. 설치해 보자


Autodesk 의 EAGLE 페이지 가면, "Free Download" 가 있습니다.



취미생활과 간단한 것을 만드는 사람들에게 적합하다 하네요.

저를 가르키는것 같습니다.


Free 하지만, single side - 즉 멀티 레이어나 듀얼 레이어가 아닌,

한면 layer 만을 가지고 만들꺼면 충분한 기능 (저에게는 과한 기능)을 제공합니다.



파일을 다운로드 받고 설치하면 해당 directory 가 생성됩니다.

"eagle.exe" 파일을 실행시키면 문제없이 실행됩니다.


요즘 최신 버전은 9.1.3 이군요.

버전이 upgrade 되면, 기존 폴더로 덮어 쓰는게 아닌 새로운 폴더를 또하나 만들어서 생성합니다.

아마 실행화일에 대해 예전 version 호환성 관리를 안하는 프로그램 같습니다.






4. 부품 리스트를 생성해 보자


지금 계획하고 있는 것은 Arduino 를 자체적으로 만들어 보자 입니다.

그러기 위해서는 어떤 전자 부품을 구입해야 하는지 part list 를 알아야 하는데,
internet 을 뒤져도 마땅한 정보가 없네요.

EAGLE 에서는 확인이 가능합니다.

우선 arduino 공식 사이트에서 EAGLE file 을 다운로드 받습니다.
압축을 풀면 그 중에 brd 라는 확장자 파일이 있어요.


이름으로부터 예상할 수 있듯이, 보드 정보 파일입니다.



파일을 열면, 도면 및 칫수 정보가 싸그리 다 나옵니다.



여기서, "File > Export > Partlist" 를 선택하면, 부품 리스트를 얻을 수 있습니다.



* Duemilanove Partlist : arduino-duemilanove-part-list.txt





FIN


위에서 추출한 부품 리스트 입니다.

Part     Value          Package       Library      Position (mil)        Orientation

C1       100n           C0805RND      rcl          (1870 990)            R180
C2       22p            C0805RND      rcl          (1620 1210)           R0
C3       22p            C0805RND      rcl          (1405 1210)           R180
C4       100n           C0805RND      rcl          (710 805)             R0
C5       100n           C0805RND      rcl          (710 685)             R0
C6       100u           PANASONIC_D   rcl          (1075 225)            R90
C7       100u           PANASONIC_D   rcl          (755 225)             R90
C8       100n           C0805RND      rcl          (795 1780)            R0
C9       100n           C0805RND      rcl          (1870 1210)           R180
C10      100n           C0805RND      rcl          (620 1780)            R0
C11      100n           C0805RND      rcl          (785 1030)            R0
C12      100n           C0805RND      rcl          (950 505)             R0
C13      100n           C0805RND      rcl          (1095 945)            R0
D1                      SMB           diode        (710 505)             R180
F1       500mA          L1812         rcl          (560 945)             R0
IC1      ATMEGA8        DIL28-3       atmel        (1825 645)            R180
IC2      FT232RL        SSOP28        SmartPrj     (700 1500)            R0
IC4      MC33269D-5.0   DPACK         linear       (300 685)             R90
IC5      LM358D         SO08          linear       (960 730)             R180
ICSP     ICSP           2X03          pinhead      (2555.51181 1098.0315) R270
J1                      1X08          pinhead      (2150 2000)           R180
J2                      1X06          pinhead      (2250 100)            R0
J3                      1X08          pinhead      (1290 2000)           R180
L                       0805RND       led          (1095 1655)           R180
POWER                   1X06          pinhead      (1550 100)            R0
PWR                     0805RND       led          (2325 1440)           R0
Q2       16MHz          HC49/S        crystal      (1525 1055)           R180
R1       10k            R0805RND      rcl          (1870 1100)           R0
R2       100_NM         R0805RND      rcl          (1095 1035)           R0
R4       1k             R0805RND      rcl          (1095 1305)           R180
R5       1k             R0805RND      rcl          (1095 1570)           R180
R6       1k             R0805RND      rcl          (2150 1440)           R0
R7       1k             R0805RND      rcl          (1095 1740)           R0
R8       1k             R0805RND      rcl          (1095 1125)           R180
R9       1k             R0805RND      rcl          (1095 1215)           R180
R10      10k            R0805RND      rcl          (940 945)             R0
R11      10k            R0805RND      rcl          (785 945)             R0
RESET-EN                SJ            jumper       (450 1330)            R270
RX                      0805RND       led          (1095 1390)           R180
S1                      B3F-10XX      switch-omron (2173.0315 1067.47244) R0
T1       NDT2955        SOT223        zetex        (240 1010)            R90
TX                      0805RND       led          (1095 1485)           R180
U$1      FIDUCIALMOUNT  FIDUCIA-MOUNT SmartPrj     (776.77165 2004.72441) R0
U$2      FIDUCIALMOUNT  FIDUCIA-MOUNT SmartPrj     (2469.68504 1644.09449) R0
U$3      FIDUCIALMOUNT  FIDUCIA-MOUNT SmartPrj     (146.85039 134.25197) R0
X2       DC21MMX        DC-21MM       powersupply  (210 330)             R90
X3                      JP4           jumper       (710 1175)            R180
X4                      PN61729       SmartPrj     (150 1500)            R270


바로 봐서는 뭐가 뭔지 모르겠지만, Part / Value / Package 정보를 가지고 구글링 등을 통하여 해당 부품을 확정할 수 있습니다.


익혀야 할 것이 하나 더 생겼네요. 아이 즐거워~.


And

Hardware | Raspberry Pi CPU Info screen 구매기

|

1. Headless


Raspberry Pi 3 를 사용하고 있습니다.


* Hardware | PiAware 로 항공기 추적하기

http://chocoball.tistory.com/entry/Hardware-PiAware-FlightAware


* Hardware | Cross cable 로 MediaWiki 서버 연결해 보기

http://chocoball.tistory.com/entry/Hardware-connect-MediaWiki-with-Cross-cable


* Hardware | Raspberry Pi 3 model B 의 RPC 와 UK 생산지 차이를 비교해보자

http://chocoball.tistory.com/entry/Hardware-Raspberry-Pi-3-model-B-RPC-UK-compare


* Linux | Ubuntu-Mate 를 원격 데스크탑으로 사용해 보자

http://chocoball.tistory.com/entry/Linux-UbuntuMate-remote-desktop


* Hardware | Raspberry Pi 3 model B+ unboxing

http://chocoball.tistory.com/entry/Hardware-Raspberry-Pi-3-model-B-plus-unboxing


다만, desktop 환경이 아니라 서버처럼 사용하고 있죠.

이런 사용을 headless 라고 부릅니다.


연결도 SSH 를 통해서 연결하므로, 키보드 / 마우스 / 모니터가 필요 없어서

유지하기에 깔끔한 형태로 사용할 수 있습니다.


다만 문제가 되는건, SSH 를 통한 원격 연결시 사용되는 Raspberry Pi 의 IP가 dynamic 발급이 되므로,

가끔씩 접속하려는 IP를 확인해야 할 필요가 있습니다.


이때는 키보드 / 모니터 연결하여 "ifconfig" 를 때려봐야 알 수 있죠.


그렇습니다. 매우 귀찮습니다.





2. Raspberry Pi 용 간단 모니터를 구입하자


터치패드가 되며, 칼라는 바라지도 않습니다.

단순한 정보만 표시해주는 제품을 찾아 봅니다.


* Raspberry Pi 3 Model B CPU Info LCD Screen 1.6 inch 84x48 with Backlight Switch Compatible Pi2/1 / Orange Pi

https://www.aliexpress.com/item/Raspberry-Pi-3-Model-B-CPU-Info-LCD-Screen-1-6-inch-84x48-with-Backlight-Switch/32822409671.html



상품소개의 사진을 보니 IP 도 표시해주는 sample code 도 존재하나 봅니다.

세상 편해졌습니다. 바로 구매합니다.





3. 도착


1만원이 넘는 제품이라 그런지 2주만에 도착했습니다.



포장은 잘 되어 있네요.


안에 들어있는 박스에 제품이 들어있습니다.



짜잔~... 흠?!!!



뭔가 좀 이상합니다.


그렇습니다. 소개 사진과 다른 제품입니다.

업자 말로는 업그레이드 버전이라고 하는데, 제가 보기에는 다운그레이드 제품입니다.





4. 다운그래이드인 이유


아래는 업자가 개시하고 있는 사진입니다.



우선 앞면.

백라이트 on/off 스위치가 작고 간결하며 딱 저 위치가 사용하기 편합니다.



배달된 제품은 백라이트 스위치가 뒷면에 있고, 조작 버튼도 딱딱합니다. 한마디로 불편함.



또한 I2C pinout 이 구비되어 있습니다. 도착한건 생략되어 있습니다.

이 pinout 이 있으면, arduino 프로젝트에도 그대로 사용할 수 있습니다.

물론 GP pin 이 있으므로 그쪽으로 연결하면 되겠지만, 이렇게 깔끔하게 해놓은 것을 사용하고 싶었죠.



저는 Raspberry Pi 에 MediaWiki 를 집어 넣고, 개인정보 관리를 하고 있습니다.

그래서 portable 성이 중요한데...

저 pin 들 때문에 이 screen shield 는 가지고 다니면 손등이 뚫리겠어요.


업자는 V4.2 로 올라가면서 더 좋아졌다고 하지만, 저는 아직 dispute 를 풀지 않았습니다.





5. Python 으로 동작


우찌 되었든, 일단 동작이 되는지 확인해 봅니다.

다음 링크는, 이 제품컨셉을 처음 만든 회사의 사이트처럼 보입니다.


* SUNFOUNDER

http://wiki.sunfounder.cc/index.php?title=Raspberry_Pi_5110_Mini_LCD_84*48_PCD8544_Usage


우선 git 을 통해 repository 를 다운로드 받고, 실행시키면 됩니다.

git clone https://github.com/sunfounder/Adafruit_Nokia_LCD.git



그 다음 필요한 python 파일을 인스톨 해줍니다.

cd Adafruit_Nokia_LCD
sudo apt-get install python-dev
sudo python setup.py install
sudo apt-get install python-imaging



그런 다음, 해당 디렉토리로 가서 py 파일을 실행시키면 됩니다.

cd examples
sudo python image.py



자주보던 사진을 실재로 눈앞에서 보게 되네요.

동작에는 문제가 없어 보입니다.





6. C compiler 를 통한 실행파일로 동작


이제 IP 를 표시해주는 어플로 동작시켜 봅니다.

아래 사이트에서 cpu_show_v1.zip / cpu_show_v2.zip / cpu_show_v3.zip 을 다운로드 받아서 해동합니다.


* Raspberry Pi Viet Nam

https://raspberrypi.vn/thu-thuat-raspberry-pi/huong-dan-cai-dat-raspberry-pi-cpuinfo-screen-3315.pi


- cpu_show_v1.zip : cpu_show_v1.zip

- cpu_show_v2.zip : cpu_show_v2.zip

- cpu_show_v3.zip : cpu_show_v3.zip



처음에 "curl -O" 명령어를 사용했더니만 redirection 되는거 모르고 엄한 파일만 해동하려 했습니다.

가능하면 wget 사용하세요.


각 버전별로 보여주는 내용이 살짝 다릅니다.

v2 는 온도를 추가로 보여주고, v3 는 실행파일까지 만들어져 있네요.


v3 의 cpushow 실행파일을 실행시켜 보면 다음과 같습니다.



taobao 이메일 쓰는 5iPi 누구야~.

입맛에 맞게 화면을 수정하려면, "pcd8544_rpi.c" 파일의 프로그램을 조금 수정해야 할 필요가 있습니다.


일단 compile 할 수 있도록 필요한 페키지를 인스톨 합니다.


cd /home
git clone git://git.drogon.net/wiringPi
cd wiringPi
sudo ./build



warning 이 뜨고 그렇지만 사용하는데는 문제가 없어 보이는군요.



마지막에 wiringPi 페키지가 인스톨 되면, 컴파일시 "-lwiringPi" 옵션을 꼭 붙이라고 합니다.

이 주의문구 무시했다가 2시간가량 삽질했습니다.



wiringPi 가 잘 인스톨 되었는지 확인하려면 "gpio -v" 를 통해서 GPIO 통신을 시도합니다.

위의 화면처럼 나오면 정상적으로 인스톨 되었습니다.


자... 아까의 taobao 및 IP 를 해결해 봅시다.



소스를 보니 저 부분에서 수정해주면 되겠네요.

IP는 eth0 로 정의되어 있지만 device 리스트에는 enxb... 로 시작하는 device 명이니, 그걸로 수정합니다.



위와같이 하니, 온도 및 IP 가 모두 정상적으로 표시되었습니다.



문자가 들어갈 칸 수가 모자라, 제일 위의 문구는 빼버리고 IP 정보를 표시하게 했습니다.


IP octet 이 길어서, 마지막 숫자가 넘어가버렸네요.

대충 5라고 알수는 있는데... 10번 시도해서 알수 있는 부분이니 그냥 넘기기로 합니다.

(이제 막 귀찮아지기 시작)


아... 컴파일은 아래 명령어 입니다.


gcc -o cpushow pcd8544_rpi.c PCD8544.c -L/home/wiringPi/wiringPi/ -lwiringPi


최종적으로 잘 동작하는 동영상 입니다.



시작시 자동으로 프로그램이 back ground 로 실행될 수 있으며,

logging / 화면으로 결과를 나타내지 않도록, 아래 줄을 "/etc/rc.local" 파일의 "exit 0" 앞에 추가해 줍니다.


/home/cpu_info/cpushow >/dev/null 2>&1 &






FIN


cross cable 로 연결된 기기는 PC 가 IP를 자동 발급하고, arp 명령어를 통해서 알수 있다는걸 깜빡 했습니다.



나, 이거 왜산거야?


And

Hardware | Safecast bGeigi nano firmware upgrade

|

1. firware upgrade


모든 기기는, 그 동작의 기본이 되는 firmware 가 있습니다.

저번에 만들어 봤던 Safecast bGeigie nano 도 firmware 가 있으므로 upgrade 해봅니다.


지금까지 bGeigie nano 에 대해서는 다음 포스트들을 읽어보세요.


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

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


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

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


* Hardware | bGeigie Nano 의 battery 를 업그레이드 해보자

http://chocoball.tistory.com/entry/Hardware-bGeigie-Nano-battery-upgrade


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

http://chocoball.tistory.com/entry/Hardware-bGeigie-Nano-checking-radiation



참고로 firmware upgrade 하기 전에는 1.3.4 입니다.


사용된 환경은 Mac 입니다.

아무래도 unix based OS 이고, arduino / FTDI 사용시 반응이 빠릿빠릿 해서 입니다.





2. FTDI driver


우선 FTDI for mac 드라이버를 인스톨 합니다.


* Future Technology Devices International Ltd.




위 링크에서 최신 driver 를 다운로드 받아서 설치합니다.



정식 명칭은 FTDI USB Serial Driver 군요.







3. AVR 설치


아래 링크에서 다운로드 받아서 설치합니다.


CrossPack for AVR® Development



오랜만에 Mac 에서 설치작업을 해보는군요.



2013년에 나온게 최신버전인가 보군요.






4. FTDI 연결하기


bGeigie nano 의 중앙 처리장치인 arduino FIO 옆에 pinout 이 있습니다.

firmware 업그래이드를 위해 마련된 FTDI 연결 포트입니다.


신기하게도 알리에서 구입한 FTDI breakout board 의 pinout 과 순서가 완벽히 일치합니다.

RX/TX 도 서로 엇갈리게 되어 있고, Vcc / GND 등 모두 짝이 맞춰져 있습니다.



참고로, firmware update 시의 주의사항 입니다.


NOTE: The Nano power switch MUST be turned OFF before connecting (the Fio board powers from the FTDI cable)!
NOTE: If you have a BLEBee or other wireless module, it MUST be removed before reprogramming, since it shares TX/RX signals!


즉, 전원은 꼭 off 로 해 놓고, FTDI 에서 받는 3.3V 를 이용하라는 것이고,

Bluetooth 용인 BLEBee 모듈을 꼭 제거하고 실행하라는 것 입니다. 그렇지 않으면 TX/RX 가 선점되어서 통신이 시작되지 못합니다.

(삽질 하루 걸림...)



꼭! BLEBee 모듈은 제거!



FTDI 와 연결합니다.

지금까지 여러가지 해봤더니, 어느새 FTDI 를 가지고 있네요?


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

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





5. 최신 firmware 다운로드 및 upgrade


최신 firmware 를 다운로드 받습니다.


- wget https://github.com/Safecast/bGeigieNanoKit/raw/master/bGeigieNano.hex


파일을 다운로드 받으려고 하면, redirection 되어서 다음 화면의 링크에서 다운로드 받네요.



"bGeigieNano.hex" 가 그 최신 파일입니다.



다음 명령어로 flashing 합니다.


avrdude -DV -p atmega328p -P /dev/tty.usbserial-A50285BI -c arduino -b 57600 -U flash:w:bGeigieNanao.hex:i


USB port 는 각 기기마다 다르게 보일 터이니, ls 명령어로 우선 확인해 보고 맞는 이름을 사용하면 되겠습니다.

저의 경우는 "/dev/tty.usbserial-A50285BI" 였습니다.



짜잔~. 최신 버전인 1.4.2 로 업그레이드 되었습니다.



참고로 Windows OS 에서의 실행 결과 입니다.

나중을 위해 명령문도 기록해 놓습니다.


C:\"Program Files (x86)"\Arduino\hardware\tools\avr/bin/avrdude -CC:\"Program Files (x86)"\Arduino\hardware\tools\avr/etc/avrdude.conf -DV -p atmega328p -PCOM5 -c arduino -b 5700 -U flash:w:bGeigieNano.hex:i




6. 마무리


최신 firmware 로 upgrade 한 다음, microSD 및 GPS reset 을 해 줍니다.


GPS reset 은, microSD 를 뺀 다음, 부팅시켜주는 것이고,

microSD는 FAT 로 포맷하고, 필요한 파일인 "config.txt", 및 "SAFECAST.TXT" 만 root 에 copy 하고 리부팅 하면 됩니다.






FIN


거부감 없이 bGeigie nano 의 firmware 를 업그레이드 해봤습니다.

사실 microSD 카드에 logging 하는 기능이 정상 동작하지 않아, 궁여지책으로 해본 작업이었습니다.


firmware upgrade 를 해도 개선이 안되는 것을 보면, 다른 문제가 있어 보이네요.

국내에 얼마나 많은 분들이 가지고 계실지는 모르겠습니다만, 참고가 되었으면 합니다.




Update 20191228


마지막에 기술했다 시피, microSD 카드에 logging 되지 않는 현상과,

toggle switch 로 mode 를 변경시켜도 mode 가 변하지 않는 문제가 지속되었습니다.


일단, toggle switch 의 접점 문제로 인하여 mode 변경이 되지 않는게 아닌가 하여, 관련 부분 납땜을 다시 정리해 주기로 합니다.



살살 분해 합니다.



좀 많이 튀어 나온 부분이나, 납이 부족하다고 생각되는 부분을 정리해 줍니다.



이 작업 후에도 개선은 되지 않더군요... ㅠㅠ



1년 4개월이 흐른 뒤...

긴 휴가를 맞이하여 다시한번 도전하기로 합니다.


9개월 전에 새로운 firmware 가 올라 왔군요. 버전은 1.4.3.

그 전 버전이 1.4.2 였으니 마이너 업데이트 이긴 하지만, 밑져야 본전 입니다.



Firmware 업데이트 후, 되는군요... 문제가 고쳐졌습니다. ㅠㅠ



CPM 을 표시하면서 logging (microSD 에 기록) 하는 모드가 정상으로 돌아 왔습니다!!!



물론, 단순 측정 모드 (logging 하지 않음) 도 잘 되구요.

이제야 제대로 사용할 수 있으려나 합니다.


And

Hardware | MAX31865 + PT100 온도센서 조합

|

1. MAX31865


K-Type 온도 센서를 arduino 와 연결하여 측정하는 MAX31855 은 아래 포스팅에서 가지고 놀아 봤습니다.


* Hardware | MAX31855 + K-type 온도센서 조합

http://chocoball.tistory.com/entry/Hardware-MAX31855-Ktype


그 외의 온도센서에 대해서는 아래 포스트들을 참고해보세요.


* Hardware | AM2322 Temperature & Humidity Sensor

http://chocoball.tistory.com/entry/Hardware-AM2322-Temperature-Humidity-Sensor


* Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614

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


* Hardware | Arduino BMP280 고도/온도/기압 센서

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


* Hardware | BME280 sensor

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


* Hardware | DS18B20 온도센서

http://chocoball.tistory.com/entry/Hardware-DS18B20-temperature-sensor


여기서 주의할 점은, MAX31865은 MAX31855와 제일 마지막 앞번의 digit 차이 입니다.

주문시 주의해야 합니다.


* MAX31865 : PT100 / PT1000 용

* MAX31855 : K-type 용





2. MAX31865 구입


AliExpress 에서 검색하면 아래의 링크가 가장 많이 구입한걸로 나옵니다.

바로 주문 넣습니다.


* MAX31865 SPI PT100/PT1000 RTD-to-Digital Converter Board Temperature Thermocouple Sensor Amplifier Module For Arduino 3.3V/5V

https://ko.aliexpress.com/item/MAX31865-PT100-PT1000-RTD-to-Digital-Converter-Board-Temperature-Thermocouple-Sensor-Amplifier-BModule-For-Arduino/32777498066.html







3. 도착


다른 센서들보다는 조금 높은 가격입니다.

그러나 업자는 항상 1 USD 미만으로 보내주십니다. :-)



포장은 일반적인 간단한 포장입니다.



Adafruit 제품과 거의 동일하게 만들었습니다.



Chip 을 확대해 봤습니다.

Taiwan 에서 생산된 M31865 라고 인쇄되어 있습니다.



Pin array 와 terminal 을 납땜해 줍니다.

Rref 의 저항은 431 = 430 ohm 입니다.





4. Thermocouple K-Type 구매하기


MAX31865 를 구입하면서, 거의 동시에 온도 센서도 주문에 넣습니다.


* Thermocouple K-Type Thermocouple Thermometer Probe WRNT-03 200mm*1000mm

https://ko.aliexpress.com/item/Thermocouple-K-Type-Thermocouple-Thermometer-Probe-WRNT-03-200mm-1000mm/32615649856.html



분명히 K-Type 이라고 적혀 있습니다.



Probe 형이라 길이가 깁니다. 포장도 큼지막 합니다.



뽁뽁이로 잘 쌓여서 도착했습니다.



음? CU50?



이미 MAX31855 글에서도 CU50 에 대해서 적었습니다.


MAX31865 / MAX31855 의 개념이 없었고, K-Type / PT100 / PT1000 개념도 없이 처음 질렀던 온도계 센서 입니다.

더욱 헷갈리게 된 것은, K-Type 이라고 주문한게 CU50 이 도착해, 처음 한동안은 뭐가 문제인지 몰랐습니다.


그 뒤에 센서 및 coverter chip 종류가 다르다는걸 알았죠.


* CU50 / WRNT-03 spec.

K1118591875.pdf



뭘 모르면 알때까지 삽질해야 하는 것은 인생의 진리 입니다.





5. PT100 구입하기


MAX31865 는 PT100 / PT1000 용 analog to digital converter 입니다.

PT1000 은 예민하면서 실험실용으로 사용되고 있어서, PT100 을 선택합니다.


* MYLB-0-400C PT100 Type 5mm x 50mm Temperature Controller Thermocouple Probe 2 Meters

https://ko.aliexpress.com/item/MYLB-0-400C-PT100-Type-5mm-x-50mm-Temperature-Controller-Thermocouple-Probe-2-Meters/32746546570.html




점점 진실에 접근하는 느낌이 듭니다.



도착.




포장 문제 없슴.

선은 3 wire 센서 이군요.



흠흠.



색이 다른 터미널끼리는 거의 100 ohm 의 차이를 보입니다.

이는 PT100 의 일반적인 현상이며, 더운 여름에 측정하다 보니 저항값이 조금 높습니다.


이 저항값의 변화를 가지고 온도를 측정하는 것입니다.



동일 선끼리는 거의 0 ohm 입니다.





6. Pinout / Layout


Pinout 에 대해서는 아래 Adafruit 의 링크를 참조해 보세요.


* Adafruit MAX31865 RTD PT100 or PT1000 Amplifier

https://learn.adafruit.com/adafruit-max31865-rtd-pt100-amplifier/pinouts


 MAX31865  | Arduino Micro
---------------------------
    Vin    |      3.3V
    GND    |      GND
    CLK    |      D13
    SDO    |      D12
    SDI    |      D11
    CS     |      D10
---------------------------


Layout 입니다.






7. sketch


레퍼런스 소스를 이용해서 기본적인 동작 확인에 들어갑니다.

우선 Library Manager 에서 max31865 를 검색해서 install 해줍니다.



인스톨이 완료되면, "File > Examples > Adafruit MAX31865 library > max31865" 을 선택하여 소스를 로딩합니다.



아래는 sketch 입니다.


/*************************************************** 
  This is a library for the Adafruit PT100/P1000 RTD Sensor w/MAX31865

  Designed specifically to work with the Adafruit RTD Sensor
  ----> https://www.adafruit.com/products/3328

  This sensor uses SPI to communicate, 4 pins are required to  
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include 

// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 max = Adafruit_MAX31865(10, 11, 12, 13);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 max = Adafruit_MAX31865(10);

// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF      430.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL  100.0

void setup() {
  Serial.begin(115200);
  Serial.println("Adafruit MAX31865 PT100 Sensor Test!");

  max.begin(MAX31865_3WIRE);  // set to 2WIRE or 4WIRE as necessary
}


void loop() {
  uint16_t rtd = max.readRTD();

  Serial.print("RTD value: "); Serial.println(rtd);
  float ratio = rtd;
  ratio /= 32768;
  Serial.print("Ratio = "); Serial.println(ratio,8);
  Serial.print("Resistance = "); Serial.println(RREF*ratio,8);
  Serial.print("Temperature = "); Serial.println(max.temperature(RNOMINAL, RREF));

  // Check and print any faults
  uint8_t fault = max.readFault();
  if (fault) {
    Serial.print("Fault 0x"); Serial.println(fault, HEX);
    if (fault & MAX31865_FAULT_HIGHTHRESH) {
      Serial.println("RTD High Threshold"); 
    }
    if (fault & MAX31865_FAULT_LOWTHRESH) {
      Serial.println("RTD Low Threshold"); 
    }
    if (fault & MAX31865_FAULT_REFINLOW) {
      Serial.println("REFIN- > 0.85 x Bias"); 
    }
    if (fault & MAX31865_FAULT_REFINHIGH) {
      Serial.println("REFIN- < 0.85 x Bias - FORCE- open"); 
    }
    if (fault & MAX31865_FAULT_RTDINLOW) {
      Serial.println("RTDIN- < 0.85 x Bias - FORCE- open"); 
    }
    if (fault & MAX31865_FAULT_OVUV) {
      Serial.println("Under/Over voltage"); 
    }
    max.clearFault();
  }
  Serial.println();
  delay(1000);
}


결과는 아래와 같습니다.



뭔가 많이 이상하군요... 뭐가 문제일까...





8. Jumper !!!


그렇습니다.

Adafruit 의 점퍼 설정을 대충 읽은 결과 입니다.



위의 글에 나와 있듯이, 미세하게 연결된 24 부분의 선을 잘라줘야 합니다.

시키는 대로 했으나 제대로 되지 않았습니다.


처음에는 CU50 으로 삽질하면서 2 wire 설정으로 납땜 했다가, 납 지워줬다가, 3 wire 설정으로 다시 납땜 했다가,

기판이 지저분해진 상태이고, 자주 인두로 지져서 기판 상태가 엉망으로 되면서 고장난게 분명하다는 결론에 도달했습니다.

(모두 합하면 10시간동안 삽질함)





9. 재구매


breakout 보드값이 비싸지만, 모든걸 다 해본 뒤라 새로운 converter 를 구입하기로 합니다.

이번에는 색이 다른것으로 구입합니다.


배송료 합하면 거의 6천원이군요... ㅠ.ㅠ


* 31865 MAX31865 RTD platinum resistance temperature detector module PT100 to PT1000

https://www.aliexpress.com/item/31865-MAX31865-RTD-platinum-resistance-temperature-detector-module-PT100-to-PT1000/32814557294.html



잘 도착했습니다. 얼른 시험해보고 싶습니다.



점퍼 사시의 간극이 커서 잘 납땜해야 합니다.



Rref 저항은 430 ohm 으로 동일하며, 2 4 사이에 미세하게 연결되어 있는것도 확인했습니다.

커터로 잘 그어서 절단해 줍니다.



두둥!

잘 연결하고 확인해 봅니다.



Aㅏ.....

그렇습니다. 여러 삽질을 하는 동안, 기존 breakout 기판이 고장난 것이었습니다.

그간 삽질하면서 학습한 내용을 토대로 잘 jumper 도 납땜하고, 자를껀 자르고 연결하니 한방에 성공합니다.



애증의 MAX31865 와 PT100 센서 입니다.



찬물 / 상온 물 / 뜨거운 물을 가지고 확인한 동영상 입니다.

calibration 이 필요해 보이지만, 그딴거는 나중에 기회되면 하겠습니다.

여기까지 오는것만 해도 힘들었습니다.



그래프화 시킨 그림입니다.

동작에 무리 없어 보입니다.





FIN


제가 가지고 있는 온도센서 및 converter breakout 보드는 다 확인해 봤네요.

CU50 만 빼고... 이놈은 어떻게 해야 할까요.


And

Hardware | ML8511 UV sensor 를 가지고 놀아보자

|

1. 여름


유독 2018년의 여름은 예년보다 더욱 덥습니다.

지구 온실효과로 내년 뉴스에도, "올해도 최고 온도를 갱신했습니다!" 라는 멘트를 들을 수 있을것 같습니다.


오존층 파괴등으로 인하여 피부에 직사광선을 쬐는 것은 이제 위험한 시대입니다.

자외선 - Ultraviolet 인거죠.



위 표는 UV 세기에 따라 어떤식으로 몸을 보호해야 하는지 나타내주는 표 입니다.

더이상 선글라스는 패션이 아니군요.





2. ML8511 센서 구매


UV 를 측정해주는 아나로그 센서로는 ML8511 이 있습니다.

AliExpress 를 검색하니 아래가 가장 많이 팔렸던 제품입니다.


* GY-8511 ML8511 UVB Breakout Test Module Ray Sensor UV Detector Analog Output Module

https://www.aliexpress.com/item/GY-8511-ML8511-UVB-Breakout-Test-Module-Ray-Sensor-UV-Detector-Analog-Output-Module/32451073500.html



기능은... 280-390nm 를 가장 잘 측정해 준다 합니다.


The ML8511 breakout is an easy to use ultraviolet light sensor.

The MP8511 UV (ultraviolet) Sensor works by outputing an analog signal in relation to the amount of UV light that's detected.

This breakout can be very handy in creating devices that warn the user of sunburn or detect the UV index as it relates to weather conditions.


This sensor detects 280-390nm light most effectively.

This is categorized as part of the UVB (burning rays) spectrum and most of the UVA (tanning rays) spectrum.

It outputs a analog voltage that is linearly related to the measured UV intensity (mW/cm2).

If your microcontroller can do an analog to digital signal conversion then you can detect the level of UV!


이 구간은 피부를 가장 잘 타게 만드는 구간이라고 하네요.







3. ML8511 도착


뭐 특별히 이상한 점 없이 잘 도착 하였습니다.



이렇게 생겼습니다.



다리를 납땜해줍니다.



숫자가 적힌 부분은 마무리가 되지 않은 부분이므로, 니퍼로 제거해 줍니다.



센서를 확대해 봤습니다.

금으로 된 점퍼가 모든 단자에 연결되어 있지 않은 것을 보니, 가지고 있는 성능을 완전히 구현해 놓은 것은 아닌것 같군요.





4. Layout / Pinout


Pinout 은 다음과 같습니다.


   ML8511  | Arduino Micro
---------------------------
    3V3    |    A1 / 3.3V
    GND    |      GND
    OUT    |      A0
    EN     |    A1 / 3.3V
---------------------------


SparkFun 의 다음 link 가 도움이 됩니다.


* ML8511 UV Sensor Hookup Guide

https://learn.sparkfun.com/tutorials/ml8511-uv-sensor-hookup-guide


다만, 중국제는 pin 수가 하나 더 많아서 헷갈릴 수 있습니다.

결국 같은 pinout 이지만, 동일한 GY8511 을 사용한 다음 blogpost 가 더 도움이 되었습니다.


* GYM8511ML UV Sensor Connection To Arduino Nano

http://twenty5nov.blogspot.com/2016/02/gym8511ml-uv-sensor-connection-to.html



Layout 은 다음과 같습니다.






5. sketch


위의 SparkFun 사이트의 소스를 사용해 봅니다.


 /* 
 ML8511 UV Sensor Read Example
 By: Nathan Seidle
 SparkFun Electronics
 Date: January 15th, 2014
 License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).

 The ML8511 UV Sensor outputs an analog signal in relation to the amount of UV light it detects.

 Connect the following ML8511 breakout board to Arduino:
 3.3V = 3.3V
 OUT = A0
 GND = GND
 EN = 3.3V
 3.3V = A1
 These last two connections are a little different. Connect the EN pin on the breakout to 3.3V on the breakout.
 This will enable the output. Also connect the 3.3V pin of the breakout to Arduino pin 1.

 This example uses a neat trick. Analog to digital conversions rely completely on VCC. We assume
 this is 5V but if the board is powered from USB this may be as high as 5.25V or as low as 4.75V:
 http://en.wikipedia.org/wiki/USB#Power Because of this unknown window it makes the ADC fairly inaccurate
 in most cases. To fix this, we use the very accurate onboard 3.3V reference (accurate within 1%). So by doing an
 ADC on the 3.3V pin (A1) and then comparing this against the reading from the sensor we can extrapolate
 a true-to-life reading no matter what VIN is (as long as it's above 3.4V).

 Test your sensor by shining daylight or a UV LED: https://www.sparkfun.com/products/8662

 This sensor detects 280-390nm light most effectively. This is categorized as part of the UVB (burning rays)
 spectrum and most of the UVA (tanning rays) spectrum.

 There's lots of good UV radiation reading out there:
 http://www.ccohs.ca/oshanswers/phys_agents/ultravioletradiation.html
 https://www.iuva.org/uv-faqs

*/

//Hardware pin definitions
int UVOUT = A0; //Output from the sensor
int REF_3V3 = A1; //3.3V power on the Arduino board

void setup() {
	Serial.begin(9600);
	
	pinMode(UVOUT, INPUT);
	pinMode(REF_3V3, INPUT);
	
	Serial.println("ML8511 example");
}

void loop() {
	int uvLevel = averageAnalogRead(UVOUT);
	int refLevel = averageAnalogRead(REF_3V3);
	
	//Use the 3.3V power pin as a reference to get a very accurate output value from sensor
	float outputVoltage = 3.3 / refLevel * uvLevel;
	
	float uvIntensity = mapfloat(outputVoltage, 0.99, 2.8, 0.0, 15.0); //Convert the voltage to a UV intensity level
	
	Serial.print("output: ");
	Serial.print(refLevel);
	
	Serial.print("\tML8511 output: ");
	Serial.print(uvLevel);
	
	Serial.print("\tML8511 voltage: ");
	Serial.print(outputVoltage);
	
	Serial.print("\tUV Intensity (mW/cm^2): ");
	Serial.print(uvIntensity);
	
	Serial.println();
	
	delay(100);
}

//Takes an average of readings on a given pin
//Returns the average
int averageAnalogRead(int pinToRead) {
	byte numberOfReadings = 8;
	unsigned int runningValue = 0;
	
	for(int x = 0 ; x < numberOfReadings ; x++)
		runningValue += analogRead(pinToRead);
	runningValue /= numberOfReadings;
	
	return(runningValue);
}

//The Arduino Map function but for floats
//From: http://forum.arduino.cc/index.php?topic=3922.0
float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
	return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}


Serial out 으로 보면 reLevel / uvLevel / outputVoltage / uvIntensity 를 아래와 같이 확인할 수 있습니다.



뭔가 와닿지 않죠?





6. OLED 로 UV Index 표시하기


Youtube 를 보니 UV Index 를 LCD 에 표현해 주는 분이 계셨습니다.


* Arduino UV Meter using the UV31A Ultraviolet Sensor

http://www.electronics-lab.com/project/arduino-uv-meter-using-uv30a-ultraviolet-sensor/



센서와 LCD 스크린도 다르지만 컨셉은 이해할 수 있었습니다.



따라하지 아니할 수가 없네요.

저는 SSD1306 과 ML8511 을 사용해서 소스를 converting 해 봅니다.


우선 처음 부팅시 보여주는 logo 를 만드는 작업을 하였습니다.

너무 길어지니 따로 포스팅 하였습니다.


* Hardware | SSD1306 에 로고를 세겨보자

http://chocoball.tistory.com/entry/Hardware-SSD1306-create-logo


표시해주는 UV Index 는 UV31A 센서가 기준이라, 가지고 있는 ML8511 로 하면 전혀 다른 숫자들이 나옵니다.


찾고 찾아보니, 중국에서 ML8511 을 가지고 UV Index 를 테이블화 하여 작성된 논문이 있었습니다.


* See UV on Your Skin: An Ultraviolet Sensing and Visualization System

BodyNets_2013_UV.pdf


논문 안에 기재된, 아래 테이블을 가지고 적용하면 되겠네요!



Vcc = 3.0V 이고, ML8511 은 3.3V 이지만, 소스에서 보정을 해주므로 그리 큰 문제는 되지 않을것 같습니다.


다음이 완성된 최종 sketch 입니다.

LOGO를 새기는 부분과 "else if" 를 이용한 UV Indexing 부분으로 나뉘어 있습니다.

나머지는 SparkFun 의 소스도 사용했구요. 한마디로 짜집기 버전입니다.


#include "SPI.h"
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
  
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

static const unsigned char PROGMEM UVMeter[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x18, 0x03, 0x18, 0x01, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x1C, 0x03, 0x18, 0x03, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x1C, 0x03, 0x1C, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x07, 0xC0, 0x07, 0x00, 0x00, 0x1C, 0x03, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0x0F, 0xC0, 0x0E, 0x00, 0x00, 0x1C, 0x03, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0x0F, 0xE0, 0x3E, 0x00, 0x00, 0x1C, 0x03, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF0, 0x0F, 0xF0, 0x7E, 0x00, 0x00, 0x1C, 0x03, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0x0F, 0xF8, 0xFE, 0x00, 0x00, 0x1C, 0x03, 0x06, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xDF, 0xFD, 0xFE, 0x00, 0x00, 0x1C, 0x03, 0x07, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1C, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1C, 0x03, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x1C, 0x03, 0x03, 0x98, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7F, 0xE0, 0x03, 0xFF, 0x00, 0x00, 0x1C, 0x07, 0x01, 0x98, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7F, 0x03, 0xE0, 0x7F, 0x00, 0x00, 0x0C, 0x06, 0x01, 0xB0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0x3F, 0xFE, 0x1F, 0x3F, 0xF0, 0x0E, 0x0E, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x06, 0x0F, 0xF8, 0xFF, 0xFF, 0x8F, 0xFF, 0xC0, 0x07, 0xFC, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00,
0x07, 0xFF, 0xF1, 0xFF, 0xFF, 0xC7, 0xFF, 0x80, 0x03, 0xF8, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00,
0x03, 0xFF, 0xE7, 0xFF, 0xFF, 0xF3, 0xFF, 0x00, 0x00, 0x00, 0x60, 0x18, 0x00, 0x00, 0x00, 0x00,
0x03, 0xFF, 0xCF, 0xFF, 0xFF, 0xF9, 0xFF, 0x00, 0x00, 0x00, 0x70, 0x38, 0x00, 0x20, 0x00, 0x00,
0x01, 0xFF, 0x9F, 0xFF, 0x7F, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x70, 0x38, 0x00, 0x20, 0x00, 0x00,
0x00, 0xFF, 0x9F, 0xF0, 0x07, 0xFC, 0xFE, 0x00, 0x00, 0x00, 0x58, 0x28, 0x38, 0x78, 0x38, 0x48,
0x00, 0x7F, 0x3F, 0xC0, 0x01, 0xFE, 0x7E, 0x00, 0x00, 0x00, 0x58, 0x68, 0x6E, 0x78, 0xCC, 0x7C,
0x00, 0x3E, 0x7F, 0x80, 0x00, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x48, 0x48, 0xC6, 0x20, 0x84, 0x60,
0x00, 0x1E, 0x7F, 0x00, 0x00, 0x7F, 0x3C, 0x00, 0x00, 0x00, 0x4C, 0xC8, 0xC2, 0x21, 0x86, 0x40,
0x00, 0x1E, 0x7E, 0x00, 0x00, 0x3F, 0x3C, 0x00, 0x00, 0x00, 0x4C, 0x88, 0xFE, 0x21, 0xFE, 0x40,
0x00, 0x3C, 0xFE, 0x00, 0x00, 0x3F, 0x9F, 0x00, 0x00, 0x00, 0x46, 0x88, 0x80, 0x21, 0x80, 0x40,
0x00, 0x7C, 0xFC, 0x00, 0x00, 0x1F, 0x9F, 0xF0, 0x00, 0x00, 0x47, 0x88, 0xC0, 0x21, 0x80, 0x40,
0x00, 0xFC, 0xFC, 0x00, 0x00, 0x1F, 0x9F, 0xFC, 0x00, 0x00, 0x43, 0x08, 0x42, 0x30, 0xC0, 0x40,
0x03, 0xFC, 0xFC, 0x00, 0x00, 0x1F, 0x9F, 0xFE, 0x00, 0x00, 0x43, 0x08, 0x7E, 0x1C, 0x7C, 0x40,
0x07, 0xFC, 0xFC, 0x00, 0x00, 0x1F, 0x9F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

String UV = "0"; 

//Hardware pin definitions
int UVOUT = A0; //Output from the sensor
int REF_3V3 = A1; //3.3V power on the Arduino board

void setup() {
	pinMode(UVOUT, INPUT);
	pinMode(REF_3V3, INPUT);
	
	display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
	display.clearDisplay();
	display.drawBitmap(0, 0, UVMeter, 128, 32, WHITE);
	display.display();
	
	delay(3000);
}

 
void loop() {
	int stringLength = 0;
	UV = readSensor();
	
	display.clearDisplay();
	display.drawRect(0, 0, display.width(), display.height(), WHITE);
	display.drawFastHLine(0, 10, 128, WHITE);
	
	display.setTextSize(1);
	display.setTextColor(WHITE);
	display.setCursor(40, 2);
	display.print("UV INDEX");
	
	stringLength = UV.length();
	printUV(stringLength);
	display.display();
	
	delay(150);
}

void printUV(int length) {
	switch(length) {
		case 1:
			display.setTextSize(3);
			display.setTextColor(WHITE);
			display.setCursor(60, 10);
			display.print(UV); break;
		case 2:
			display.setTextSize(3);
			display.setTextColor(WHITE);
			display.setCursor(55, 10);
			display.print(UV); break;
		default: display.print(UV); break;
	}
}

String readSensor() {
	String UVIndex = "0";
	
	int uvLevel = averageAnalogRead(UVOUT);
	int refLevel = averageAnalogRead(REF_3V3);
	
	//Use the 3.3V power pin as a reference to get a very accurate output value from sensor
	float voltage = 3.3 / refLevel * uvLevel;
		
	if(voltage<=0.993) {
		UVIndex = "0";
	} else if (voltage>0.993 && voltage<=1.073) {
		UVIndex = "1";
	} else if (voltage>1.073 && voltage<=1.153) {
		UVIndex = "2";
	} else if (voltage>1.153 && voltage<=1.233) {
		UVIndex = "3";
	} else if (voltage>1.233 && voltage<=1.313) {
		UVIndex = "4";
	} else if (voltage>1.313 && voltage<=1.393) {
		UVIndex = "5";
	} else if (voltage>1.393 && voltage<=1.473) {
		UVIndex = "6";
	} else if (voltage>1.473 && voltage<=1.553) {
		UVIndex = "7";
	} else if (voltage>1.553 && voltage<=1.633) {
		UVIndex = "8";
	} else if (voltage>1.633 && voltage<=1.713) {
		UVIndex = "9";
	} else if (voltage>1.713 && voltage<=1.793) {
		UVIndex = "10";
	} else if (voltage>1.793 && voltage<=1.873) {
		UVIndex = "11";
	} else if (voltage>1.873 && voltage<=1.953) {
		UVIndex = "12";
	} else if (voltage>1.953 && voltage<=2.033) {
		UVIndex = "13";
	} else if (voltage>2.033 && voltage<=2.113) {
		UVIndex = "14";
	} else if (voltage>2.113 && voltage<=2.193) {
		UVIndex = "15";
	} else if (voltage>2.193 && voltage<=2.273) {
		UVIndex = "16";
	} else if (voltage>2.273 && voltage<=2.353) {
		UVIndex = "17";
	} else if (voltage>2.353 && voltage<=2.433) {
		UVIndex = "18";
	} else if (voltage>2.433 && voltage<=2.513) {
		UVIndex = "19";
	} else if (voltage>2.513 && voltage<=2.593) {
		UVIndex = "20";
	} else if (voltage>2.593) {
		UVIndex = "21";
	}
	
	return UVIndex;
}

//Takes an average of readings on a given pin
//Returns the average
int averageAnalogRead(int pinToRead) {
	byte numberOfReadings = 8;
    unsigned int runningValue = 0;
     
    for(int x = 0 ; x < numberOfReadings ; x++)
        runningValue += analogRead(pinToRead);
    runningValue /= numberOfReadings;
     
    return(runningValue);
}






7. 밖에 나가서 확인해 보자


저녁 6시가 되니, 해가 뉘엿뉘엿 지고 있습니다.

해떨어지기 전에 얼른 나가서 확인해 봅니다.



실내에서는 당연히 UV Index = 0 입니다.



저무는 해를 향해 조준합니다.



오옷!

3 ~ 4 정로를 보여주네요.



동영상 갑니다.


지역은 다르지만 New York 의 월별/시간대별 UV Index 그래프 입니다.

오후 4시만 되어도 3 이하로 떨어지는군요.


현재 한국은 한여름이고, 오후 6시라도 햇볕의 기운이 아직 남아 있으므로, "3 ~ 4" 는 적절하게 인식한것 같습니다.



집에 resin 을 굳히는 UV lamp 가 있다는걸 뒤늦게 생각해 내어,

UV lamp 로도 확인해 봅니다.



해지는 햇살과 비슷하게 3 ~ 4 정도를 나타내네요.





FIN


UV sensor 인 ML8511 을 가지고 알차게 실험해 봤네요.

이참에 OLED 에 로고 새기는 방법도 터득했구요.


해가 거듭될수록 자외선의 위험성이 강조되는 요즈음,

향후를 위해서라도 한번쯤은 확인해 보고 싶었던 센서 였습니다.


다른 분들도 참고가 되었으면 좋겠습니다.


And

Hardware | MAX31855 + K-type 온도센서 조합

|

1. 또 온도센서야?


지금까지 시험해본 온도센서들 입니다. 5개나 있네요.


* Hardware | AM2322 Temperature & Humidity Sensor

http://chocoball.tistory.com/entry/Hardware-AM2322-Temperature-Humidity-Sensor


* Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614

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


* Hardware | Arduino BMP280 고도/온도/기압 센서

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


* Hardware | BME280 sensor

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


* Hardware | DS18B20 온도센서

http://chocoball.tistory.com/entry/Hardware-DS18B20-temperature-sensor



* Hardware | AM2322 Temperature & Humidity Sensor

http://chocoball.tistory.com/entry/Hardware-AM2322-Temperature-Humidity-Sensor


* Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614

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


* Hardware | Arduino BMP280 고도/온도/기압 센서

- http://chocoball.tistory.com/entry/HardwareArduinoBMP280


* Hardware | BME280 sensor

- http://chocoball.tistory.com/entry/HardwareBME280



출처: http://chocoball.tistory.com/entry/Hardware-DS18B20-temperature-sensor [초코볼의 inside Tech]


* Hardware | AM2322 Temperature & Humidity Sensor

http://chocoball.tistory.com/entry/Hardware-AM2322-Temperature-Humidity-Sensor


* Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614

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


* Hardware | Arduino BMP280 고도/온도/기압 센서

- http://chocoball.tistory.com/entry/HardwareArduinoBMP280


* Hardware | BME280 sensor

- http://chocoball.tistory.com/entry/HardwareBME280



출처: http://chocoball.tistory.com/entry/Hardware-DS18B20-temperature-sensor [초코볼의 inside Tech]

* Hardware | AM2322 Temperature & Humidity Sensor

http://chocoball.tistory.com/entry/Hardware-AM2322-Temperature-Humidity-Sensor


* Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614

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


* Hardware | Arduino BMP280 고도/온도/기압 센서

- http://chocoball.tistory.com/entry/HardwareArduinoBMP280


* Hardware | BME280 sensor

- http://chocoball.tistory.com/entry/HardwareBME280



출처: http://chocoball.tistory.com/entry/Hardware-DS18B20-temperature-sensor [초코볼의 inside Tech]


* Hardware | AM2322 Temperature & Humidity Sensor

http://chocoball.tistory.com/entry/Hardware-AM2322-Temperature-Humidity-Sensor


* Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614

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


* Hardware | Arduino BMP280 고도/온도/기압 센서

- http://chocoball.tistory.com/entry/HardwareArduinoBMP280


* Hardware | BME280 sensor

- http://chocoball.tistory.com/entry/HardwareBME280



출처: http://chocoball.tistory.com/entry/Hardware-DS18B20-temperature-sensor [초코볼의 inside Tech]

네 그렇습니다.

온도 센서에는 기존에 확인했던 위의 센서들 말고, 준비하고 있는게 아래 3가지가 있습니다.


- K-type

- PT100 / PT100

- Cu50


이 포스트에서는 K-Type 에 대해 알아보려 합니다.





2. K-type


이번에는 K-type 온도센서 이므로, 해당의 제품을 구매합니다.


* Thermocouple K-Type Thermocouple Thermometer Probe WRNT-03 200mm*1000mm

https://www.aliexpress.com/item/Thermocouple-K-Type-Thermocouple-Thermometer-Probe-WRNT-03-200mm-1000mm/32615649856.html



일반적으로 Thermocouple K-type 은 선이 두가닥인데, 도착한 놈은 세가닥 입니다.

거기에 더해서 "Cu50" 이라는 라벨도 붙어 있습니다...


분명 난, K-Type 을 보고 주문한건데 말입니다.

사양서도 확인해 보면 WRNT-03 이라서 Probe type 의 thermocouple 이라고 생각했습니다만, 도착한건 그냥 Cu50 인듯 합니다..



세가닥 단자들 사이는 55 Ohm / 0 Ohm 의 차이를 보입니다.

100 Ohm 정도면 PT100 인데, 55 Ohm 이면 좀 애매하네요.



확실히 잘 사용되지 않는 Cu50 이 맞는 듯 합니다.

이놈은 이놈 나름대로 사용될 수 있는 방법을 찾아봐야겠습니다.



음?

테스터기로 측정하고 있을 때 눈에 들어오는 테스터용 온도 probe !!!



위 사진의 오른쪽 다발로 보이는 것이 테스터용 온도 센서 입니다.



혹시나? 하고 메뉴얼을 찾아 보니 "K-type" 이라고 적혀 있네요!



우연히 K-Type 온도센서를 구할 수 있게 되었습니다.

역시 K-Type 은 단자가 2개인게 확실합니다.





3. MAX31855


보통 온도 센서들은 아날로그 값으로 표현하므로, digital 로 변환해주는 converter 가 필요합니다.

K-Type 온도센서용으로는 MAX31855 라고 하는군요.


Arduino 용 K-Type 모듈인 MAX31855 를 구입합니다.


* MAX31855 MAX6675 SPI Type K Thermocouple Temperature Sensor Board Module For Arduino

https://ko.aliexpress.com/item/MAX31855-K-Type-Thermocouple-Breakout-Board-Temperature-200C-to-1350-Celsius-for-Arduino/32746337946.html



아래는 도착 사진 입니다.



친절하게 알아서 사용하라는 중국 생산자의 배려 입니다.



기록을 위해 뒷면도 찰칵.






4. sketch


Arduino IDE 에서 Library Manger 를 열고 max 라는 키워드로 검색하면, MAX31855 가 나옵니다.

인스톨 하세요.



패키지 인스톨 후, "File > Examples > Adafruit MAX31855 library > serialthermocouple" 을 선택합니다.



Sketch 는 다음과 같아요.


/*************************************************** 
  This is an example for the Adafruit Thermocouple Sensor w/MAX31855K

  Designed specifically to work with the Adafruit Thermocouple Sensor
  ----> https://www.adafruit.com/products/269

  These displays use SPI to communicate, 3 pins are required to  
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include "SPI.h"
#include "Adafruit_MAX31855.h"

// Default connection is using software SPI, but comment and uncomment one of
// the two examples below to switch between software SPI and hardware SPI:

// Example creating a thermocouple instance with software SPI on any three
// digital IO pins.
#define MAXDO   3
#define MAXCS   4
#define MAXCLK  5

// initialize the Thermocouple
Adafruit_MAX31855 thermocouple(MAXCLK, MAXCS, MAXDO);

// Example creating a thermocouple instance with hardware SPI
// on a given CS pin.
//#define MAXCS   10
//Adafruit_MAX31855 thermocouple(MAXCS);

void setup() {
  while (!Serial); // wait for Serial on Leonardo/Zero, etc
  
  Serial.begin(9600);
  
  Serial.println("MAX31855 test");
  // wait for MAX chip to stabilize
  delay(500);
}

void loop() {
  // basic readout test, just print the current temp
   Serial.print("Internal Temp = ");
   Serial.println(thermocouple.readInternal());

   double c = thermocouple.readCelsius();
   if (isnan(c)) {
     Serial.println("Something wrong with thermocouple!");
   } else {
     Serial.print("C = "); 
     Serial.println(c);
   }
   //Serial.print("F = ");
   //Serial.println(thermocouple.readFarenheit());
 
   delay(1000);
}



음? 정상적으로 동작하지 않는군요.

혹시 몰라 MAX31855 의 전 버전인 MAX6675 라이브러리를 설치하고 sketch 를 실행시켜 봅니다.



음... 안되는군요.

뭐가 문제일까요?





5. 중국 공장의 나쁜 버릇


폭풍 검색을 해도 문제를 해결한 케이스를 볼 수 없다가,

우연히 Youtube 의 댓글에서 힌트를 찾았습니다.


MAX6675 와 MAX31855 breakout 보드의 차이점은 1번과 2번 pin 이 연결되어 있느냐 없느냐의 차이라고 합니다.



제가 구입한 MAX31855 breakout 보드의 1번과 2번을 보니 붙어 있네요.



위는 MAX6675 의 breakout board 의 layout 입니다.

1번과 2번이 연결되어 있네요.



MAX31855 의 breakout board 의 1번 / 2번 pin 은 서로 붙어있지 않습니다.



Adafruit 의 정식 판매용 MAX31855 breakout board 도 1번 / 2번 pin 도 떨어져 있습니다.



위의 사진은 중국 AliExpress 제품의 소개 사진입니다.

Chip 은 MAX31855 지만, breakout board 는 전압 regulator 도 없는 MAX6675 용 breakout board 와 비슷합니다.


즉, 중국 업자들은 기존 MAX6675 breakout board 에,

스펙이 비슷한 MAX31855 chip 을 얹은게 아닌가 하는게 internet 친구들의 예상입니다.


MAX31855 는 minus 온도까지 측정할 수 있는 등 upgrade 되었으나,

MAX6675 breakout board 를 사용하면서 기능 확장도 안되고, pinout spec. 에 맞지 않게 된거죠.


쉽게 말하면,

upgrade 제품이니까 맞겠지 하고 MAX6675 breakout board 에 MAX31855 를 얹으면서 정상작동하지 않는 것이였습니다.

(이거 팔아도 되는거야? 구매한 다른사람들은 어떻게 사용한거지?)



결국 위의 사진처럼 1번/2번 pin 사이의 연결을 완전히 긁어 내어 단락시키니 정상 작동하였습니다.

아놔....





6. K-Type +/- 단자 사이에 capacitor


해결점을 찾아서 정상 작동까지는 왔으나,

값이 널을 뛰어 안정적으로 측정하지 못했습니다.



위에서 보듯이 많은 사람들이 단자에 capacitor 를 사용했더랬습니다.


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

http://chocoball.tistory.com/entry/Hardware-AliExpress-Ceramic-Condenser-buying


뭘 하려면 여러가지가 구비되어야 하는군요.

다행이 ceramic capacitor (condenser) 가 있었습니다.



사용된 것은 10nF = 0.01uF 입니다.



Capacitor 를 연결하고서야 안정적으로 값을 확인할 수 있었습니다.





7. Pinout / Layout


Pinout 은 다음과 같습니다.


 MAX31855  | Arduino Micro
---------------------------
    Vin    |      5V
    GND    |      GND
    DO     |      D3
    CS     |      D4
    CLK    |      D5
---------------------------



구성도는 다음과 같습니다.



실제 사진입니다.






8. 결과


이제서야 제대로 측정이 되었습니다.

chip 자체적으로 Internal Temp 를 측정 가능한게 신시합니다.



여름 저녁이라 거실 실내 온도가 31도군요.

올해는 더워도 너무 덥습니다. 1994년도 5월에 입대하고 기초훈련 받던 때가 생각나네요.

그때도 이만큼 더웠던것 같습니다. 유격훈련 한번 하고 나면 동기들이 탈진해서 쓰러지곤 했더랬습니다.


우리 기수, 다른 중대 훈련병 중에 행군중 탈진으로 죽은 전우가 있어,

저의 다음 기수부터는 행군을 생략했다는 이야기를 들었습니다.

저의 행군 중에도, 옆에서 쓰러진 동기는 흰자위를 보이며 땅바닥에서 경련을 일으킬 정도로 극한의 날씨였습니다.



위는 K-type thermocouple 에 라이터 불로 온도를 높혔을 때를 동영상으로 찍어 봤습니다.



EXCEL 의 그래프 작업으로 internal / sensor 의 온도변화를 그래프로 표현해 봤습니다.

흠흠, 잘 변화를 감지했군요.





FIN


제대로 함정을 밟았지만, 잘 헤쳐나온것 같습니다.

Breakout board 는 되도록 reference (Adafruit / Sparkfun) 과 잘 비교해 본 다음, 문제가 없어보이면 구입하는게 좋을것 같습니다.


And
prev | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ··· | 11 | next