'2019/10'에 해당되는 글 9건

  1. 2019.10.25 Hardware | Arduino 를 DIY 해보자 - 3
  2. 2019.10.23 Hardware | SMD 솔더링에 대한 고찰
  3. 2019.10.15 Hardware | 레트로 led 글자판 HPDL-1414 사용기 - 1
  4. 2019.10.12 Hardware | 공기질 측정용 MiCS-6814 센서를 사용해 보자 - 1 26
  5. 2019.10.08 Hardware | LCD2004 를 arduino 로 컨트롤 해보기 - 1
  6. 2019.10.07 Hardware | Arduino 로 Gimbal 컨트롤 하기 2
  7. 2019.10.04 Hardware | 재생토너 chip 교환기 - 2
  8. 2019.10.02 Hardware | SMD 부품 납땜용 오븐 취득기
  9. 2019.10.01 Hardware | ebook 크레마 사운드업 액정 수리기 27

Hardware | Arduino 를 DIY 해보자 - 3

|

이 글은 아래 Arduino 를 직접 만들어보는 작업의 3편이 되겠습니다.


* Hardware | Arduino 를 DIY 해보자 - 1

http://chocoball.tistory.com/entry/Hardware-Arduino-DIY-itself-1


* Hardware | Arduino 를 DIY 해보자 - 2

http://chocoball.tistory.com/entry/Hardware-Arduino-DIY-itself-2




0. Duemilanove


저번에 실패한 Arduino Nano 는 뒤로 하고, 이번에는 Duemilanove 입니다.


위는 정품 layout 이고, 밑에 사진이 이번에 작업할 보드 입니다.






1. Part list


Arduino Duemilanove 에 들어가는 부품 리스트 입니다.

아래 리스트는 보드프리의 PDF 파일과 arduino 사이트에서 EAGLE 파일을 참고하였습니다.


* 보드프리

BL-381(BOM).pdf

BL-381(duemilanove).pdf

* Arduino

arduino-duemilanove-schematic.pdf

arduino-duemilanove-reference-design.zip


-------------------------------------------------------------------------------------------------------
|                  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               |
-------------------------------------------------------------------------------------------------------


이제 위의 리스트를 가지고 하나씩 구매한 이력을 남겨 봅니다.


그냥 arduino duemilanove 하나 사면 3천원대에서 clone 제품을 구할 수 있으나,

이참에 준비하면서 부품들도 구해보고, 사용법도 알아보고 공부하기 위한 목적으로 진행했습니다.





2. Pin Header


외부 기기와 연결되기 위한 Pinout 용 Header 입니다.


기존에 보유하고 있는 긴 한줄읠 pin header 를 잘라서 사용할 수 있으나, 지저분해 질 수 있고,

깔끔하게 보이고 싶어서 궂이 구입했습니다.


* Single row female 2.54mm Pitch PCB Female Pin Header Connector Straight Single Row 2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/20/40Pin

https://www.aliexpress.com/item/Single-row-female-2-54mm-Pitch-PCB-Female-Pin-Header-Connector-Straight-Single-Row-2-3/32838866439.html



도착은 주문한데로 6pin 용과 8pin용, 10개씩 배달되었습니다.



요로코롬 생겼습니다.






3. Fuse


실장되는 Fuse 는 전기적인 규격이 동일하고, 과전류가 흐른 뒤 다시 스스로 복구되는 Self Healing (Self Resetting) Fuse 입니다.


* 20PCS/LOT 1812 SMD SMD self-healing fuse 0.5A 500mA 15V MF-MSMF050-2

https://www.aliexpress.com/item/20PCS-LOT-1812-SMD-SMD-self-healing-fuse-0-5A-500mA-15V-MF-MSMF050-2/32842202101.html



무리없이 도착.



수령한 제품은 웹사이트에서 본 사진과는 다르지만, 한번 믿고 써보기로 합니다.





4. Oscillator


CPU를 돌리고 명령어를 전달하는 역할을 하는 oscillator 입니다.


* hc-49s Crystal Oscillator electronic Kit resonator ceramic quartz resonator hc-49 DIP 7 kinds X 5pcs 32.768K 4 8 12 16 20 25 MHZ

https://www.aliexpress.com/item/hc-49s-Crystal-Oscillator-electronic-Kit-resonator-ceramic-quartz-resonator-hc-49-DIP-7-kinds-X/32844442076.html



필요한건 16 Mhz 이지만, 낱개로 파는 경우는 없어서 세트로 구매합니다.



요로코롬 생겼네요.






5. LED


아래 링크의 제품을 구매하면 필요한 색깔이 모두 들어 있습니다.

* 100pcs=5colors x 20pcs 5050 5730 1210 1206 0805 0603 LED Diode Assortment SMD LED Diode Kit Green/ RED / White / Blue / Yellow




이왕이면 한꺼번에 받기위해 한 업체에 몇가지를 같이 주문하였습니다.



왠지 LED 부품은 받을때마다 기분이 좋습니다.






6. Capacitor


Capacitor 는 세라믹과 둥그런 알루미늄 캡 캐패시터 두가지를 사용합니다.


* MCIGICM 100pcs 0805 smd capacitor ceramic 22pf 100nf 1uf 2.2uf 4.7uf 10uf 47uf 22uf capacitors kit sets 0.5pF-47uF


부품이 많다 보니, 10uF 은 빼고 처음 주문을 넣어버려, 다른거 주분할 때 같이 주문했습니다.



0805 SMD 버전이라 100개씩 묶음이라고 해도 배송 용량이 적네요.



알루미늄 캡 캐패시터는 LED 구입한 업체에서 같이 구입해서 이미 도착했습니다.


* Free Shipping 20pcs SMD 50V 35V 25V 16V 10V 100UF 220UF 47UF 33UF 22UF 10UF 4.7UF 2.2UF 1UF Aluminum Electrolytic Capacitor


100uF 35V 버전입니다. 사양서에는 25V로 정의되어 있으나, 보다 더 넓은 영역에서 동작할 수 있는 35V 를 구매.
여러 사이트를 뒤져봐도 캐패시터 용량 큰거는 문제 없다고 합니다.





7. Resistor


저항은 1K 와 10K 두가지가 필요합니다.


* 20Value * 20PCS =400PCS 0805 SMD Resistor Kit 1% 1/8W (10 ohm~1M ohm) component diy samples kit free shipping


위의 세트구성은 다음과 같습니다.

10R / 22R / 47R / 100R / 220 / 470R / 750R / 1K / 2K2 / 4K7 / 6K8 / 10K

22K / 47K / 75K / 100K / 220K / 470K / 750K / 1M



* 2000pcs 0805 SMD Resistor Kit Assorted Kit 1ohm-1M ohm 5% 80valuesX 25pcs=2000pcs Sample Kit

https://www.aliexpress.com/item/5-0805-SMD-resistor-pack-80-kinds-of-commonly-used-precision-resistor-for-each-25-Total/32297723532.html



위의 세트구성은 다음과 같습니다.


10 / 100 / 1K / 10K / 100K

12 / 120 / 1K2 / 12K / 120K

15 / 150 / 1K5 / 15K / 150K

20 / 200 / 2K / 20K / 200K

22 / 220 / 2K2 / 22K / 220K

27 / 270 / 2K7 / 27K / 270K

30 / 300 / 3K / 30K / 300K

33 / 330 / 3K3 / 33K / 330K

39 / 390 / 3K9 / 39K / 390K

47 / 470 / 4K7 / 47K / 470K

51 / 510 / 5K1 / 51K / 510K

62 / 620 / 6K2 / 62K / 620K

68 / 680 / 6K8 / 68K / 680K

75 / 750 / 7K5 / 75K / 750K

82 / 820 / 8K2 / 82K / 820K

91 / 910 / 9K1 / 91K / 910K



엄청 작네요. 이것이 0805 SMD 저항이군요.






8. Switch


이전 Wi-Fi 모듈을 firmware upgrade 하기 위해 구입한 tactile switch 에 포함되어 있어,
이번에 추가로 구입하지 않았습니다.

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


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


도착한 PCB 에 필요한 부품은 through hole 부품이네요.
SMD 부품도 같이 있어서 필요시에는 SMD 버전을 사용해도 될 것 같습니다.




9. Diode


M7 은 1N4007 이라는 diode 의 별칭인 것이라는 것을 처음 알았습니다.

* 7 kinds*10pcs=70pcs/lot SMD diode package / M1 (1N4001) / M4 (1N4004) / M7 (1N4007)/ SS14 US1M RS1M SS34 KIT



LED 도착시 같이 왔습니다. 생각보다 이것도 크기가 꽤 작네요.






10. FT232RL


USB 통신을 위한 controller 입니다.

ATmega328P 는 CPU 자체에 USB 컨트롤러 부분이 없어서 이렇게 추가 USB controller chip 이 필요합니다.


참고로, Arduino Micro 에 사용되는 ATmega32U4 는 내장 USB controller 가 있어,

이렇게 추가 USB controller chip 이 필요 없습니다.


* 5pcs/lot New FT232RL FT232 FTDI USB FS SERIAL UART SSOP28 serial chips imported original In Stock


이제야 chip 들이 도착하는군요.



이번에 구입한 FTDI chip 은 마킹이 깔끔해 보여서 흔한 fake chip 은 아닌 듯 합니다.

모두 조립 후, 한번 확인해 볼께요.






11. Voltage regulator


5V 800mA 용량의 레귤레이터 입니다.

좀더 큰 용량으로 하고 싶었으나, 이쪽 지식이 충분치 않고, 과전류시 chip 들의 안전이 보장되지 않기에 스펙대로 구매했습니다.


* Free shipping 10pcs/lot MC33269DT-5.0G 5V .8A MC33269DT-5. 33269DT MC33269DT 33269DT MC33269 MC33269DT-5.0RKG

https://www.aliexpress.com/item/Free-shipping-5pcs-lot-MC33269DT-5-0G-5V-8A-MC33269DT-5-33269DT-MC33269DT-33269DT-MC33269-MC33269DT/32826048602.html



배송 포장 표기는 Cable Tools... 무엇?



전압/전류 관련 부품이다 보니, 다른 부품들보다 크기가 큽니다.






12. DC power jack plug socket

일전에 Transistor Tester 를 DIY 할 때, power jack 의 안쪽 심 두께가 달라서 기존 adapter 들을 사용 못하는 상황이 있었습니다.
결국 맞는 사양으로 이식했고, 그 뒤로 내경이 2.1mm 용으로만 통일하고 있습니다.

다행히 Duemilanove 스펙에도 5.5/2.1mm 사양으로 되어 있네요.

* 10Pcs PCB Mount 5.5 x 2.1 mm Female DC Power Black Jack Plug Socket Connector G08 Drop ship


잘 도착했구요.


내경도 2.1mm 인듯 하구요.


기존 DC adapter 에도 잘 맞습니다.



PCB 에도 맞춰 보니 문제 없네요.






13. ATmega328P

드디어! main chip 인 ATmega328P 입니다.

* 1PCS ATMEGA328P-PU DIP28 ATMEGA328-PU DIP ATMEGA328P U DIP-28 328P-PU new and original IC



중요 부품이지만, 그런거 없습니다. 여타 부품처럼 평이하게 도착했습니다.



선명하게 CPU 마킹이 되어 있습니다. Socket 이랑 같이 찍어봤습니다. 이쁘다...






14. DIP28 Socket

ATmega328P 을 얹일 DIP28 socket 입니다.

* 5pcs DIP-28 Round Hole 28 Pins 2.54MM DIP DIP28 IC Sockets Adaptor Solder Type 28 PIN 2.54 IC Connector

https://www.aliexpress.com/item/10pcs-Round-Hole-28-Pins-2-54MM-DIP-IC-Sockets-Adaptor-Solder-Type-28-PIN-2/32799885322.html




구멍이 round hole 과 lead 방식이 있습니다.

자주 chip 을 뺏다 꼈다 할 경우에 round hole 이 장점이 있고, lead 방식은 오랜동안 그냥 놔둘 경우 좋다고 합니다.


사실 lead 방식이 접점이 확실합니다.

다만, 이왕 하는 김에 고급지게 해보고자 round hole 타입을 구매해 봤습니다.

round hole 은 금속 다리 부분이 주조 방식으로 제작되므로 좀더 비쌉니다. 그리고 점점도 나쁘지 않아요.



PCB 에 잠깐 얹어 봤습니다. 아주 부드럽게 잘 맞습니다.






15. SOP8 OP AMP

다리가 8개인 OP AMP 입니다.


* 50PCS LM358DR SOP8 LM358 SOP LM358DT SOP-8 SMD LM358DR2G new and original IC

https://www.aliexpress.com/item/10PCS-LM358DR-SOP8-LM358-SOP-LM358DT-SMD-LM358DR2G-new-and-original-IC-free-shipping/32533323519.html



ATmega328P 과 함께 도착한 부품입니다.






16. SOT-23 MOSFET

Transistor 의 digital 버전이라고 불릴 수 있는 MOSFET 입니다.


* HMICICAWK Original 100% NEW 2955 NDT2955 SOT-223 10PCS/LOT

- https://www.aliexpress.com/item/NDT2955-DT2955-T2955-2955-SOT-223-Original-100-NEW-10PCS-LOT/32734398979.html



씌여진 문구에 SOT-223 이라고 되어 있습니다만, 배송된 것은 DPAK 버전으로 큰게 왔습니다.



크고 좋아보입니다만 보드에 맞질 않습니다.



Dispute 환불을 걸고 다른 업자에게 주문했더니만, SOT-233 버전을 또 보냈더랬습니다.



마킹이 조금 이상합니다만 문제 없겠죠?



다시 보낸다는 이야기가 없어, 다른 판매자에게 이미 주문을 또 했더랬습니다.


* BQ24040DSQR AP3608EG-G1 SN74LVC2G66DCTR NDT2955 MMFT2955 NTF2955 SP202EEN IR2153S STP100N8F6 MBR40100CT TPS60400DBVR D15XB80

https://www.aliexpress.com/item/BQ24040DSQR-AP3608EG-G1-SN74LVC2G66DCTR-NDT2955-MMFT2955-NTF2955-SP202EEN-IR2153S-STP100N8F6-MBR40100CT-TPS60400DBVR-D15XB80/32908941557.html



SOT-233 버전의 MOSFET 이 또 왔어!



이놈은 마킹이 프린팅 되어 있네요.






16. 실장

모든 부분이 준비되었고, SMD 실장을 위한 Flux Paste 와 오븐이 구비되었으니, 작업을 시작합니다.
(대략 준비기간 1년.... 눈물)



대략 실장될 부품을을 위치 시켜보구요.



Flux Paste 를 바르면서 진행해야 하므로, 부품들이 도망가지 않게 테이프에 layout 에 맞게 안착/준비 시켜 놓습니다.



한땀 한땀... 이라고 하기엔 다소 지저분하게 작업을 진행합니다.



오븐을 통해 구워져 나오진 첫번째 Duemilanove 작품.



온도 조정에 실패해, 흰색 기판이 빵색으로 되었습니다.

결국 LED 극성을 거꾸로 해버려, 부품 때어 내다가 패턴이 나가는 사태가... 폐기 처분.



꽤 시간이 지난 후, 다시 새로 PCB 받아서 심기일전, 다시 시작.



이번에는 Flux Paste 를 적정량 도포할 정도로 실력이 조금 향상.



구워지기 전 사진.



오븐에 구워져 나온 후, USB, Power Jack, Pin header, Switch 등등, CPU 만 빼고 모두 장착.



마지막으로 CPU 장착.... 아... 감격.




17. bootloader


이제, arduino 를 IDE 등을 통해 소스코드 넣고 동작시키려면 bootloader 를 올려야 합니다. 지금은 완전 깡통 상태.



위의 사진의 ICSP 부분을 통해서 bootloader 를 밀어 넣을 수 있습니다.



연결법은, 예전 bootloader update 할 때의 방법과 동일합니다.


* Software | Arduino Nano Bootloader 를 update 해보자

https://chocoball.tistory.com/entry/Software-Arduino-Nano-Bootloader-update



========================================
| Source (Nano) | Target (Duemilanove) |
========================================
|      D12      |     MISO  (pin 1)    |
|      5V       |     5V    (pin 2)    |
|      D13      |     SCK   (pin 3)    |
|      D11      |     MOSI  (pin 4)    |
|      D10      |     RESET (pin 5)    |
|      GND      |     GND   (pin 6)    |
----------------------------------------


처음 작업 시, Arduino Micro 를 활용해서, 스샷이 이렇게 되었네요. 소스 아두이노를 Nano 로 하면 Nano로 선택.



Source 아두이노에 "Arduino ISP" 스케치를 올립니다.



Programmer 를 "Arduino as ISP" 를 선택.



이제 다른건 다 놔두고, target arduino 기종을 선택. 대망의 Duemilanove 선택!



"Burn Bootloader" ~~~~~~~~~~!!!



동영상은 예의.



크아~~~~ 성공.



1년 이상 걸려서 조금 지친감이 없지 않아 있지만, 기분 너무 좋습니다.

이제 자가 Arduino Duemilanove 가 생겨, 다양한 프로젝트를 동시에 할 수 있는 여유가 생겼습니다.


And

Hardware | SMD 솔더링에 대한 고찰

|

1. SMD


Surface-Mount Device 의 약자로, PCB 기판을 뚫고 납땜하는 것이 아닌, PCB 기판 위에 바로 납땜할 수 있는 부품을 일컫습니다.


결과적으로 PCB 의 상하부 양면을 다양한 부품들로 채울 수 있고,

부품 자체를 소형화 할 수 있어, 제한된 공간 안에 많은 부품을 실장할 수 있는 장점이 있습니다.

다만, 작아진 부품 크기로 인해, 일반 인두기로는 한계가 있습니다.


그리하여, SMD 납땜은 다음과 같은 준비가 필요합니다.


- Solder Paste : 납 알갱이와 flux 가 결합된 paste. 가열하면 이쁜 납 접점이 만들어 집니다.

- 액체 Flux : 비교적 낮은 온도로 납을 녹여 패턴을 정리할 수 있슴.

- 온풍기 : 작은 소자에 열을 가해야 하므로, 인두기가 아닌 뜨겨운 바람으로 가열해 주는 장비.

- 트위저 : 핀셋 같은 것으로, 작은 부품을 세밀하게 위치시킬 수 있는 기구.


Arduino 를 DIY 하면서 SMD 실장을 하게 되었고, 그 시행착오 과정을 공유해 봅니다.




2. Solder Paste


솔더 페이스트는 주걱으로 떠서, 스텐실 위에 바르는 형식과, 주사기 같은 형식이 있습니다.


* High quality 35GSolder Paste Flux Original HK MECHANIC Soldering Paste XG-40 XG-50 XG-Z40Solder Tin Sn63/Pb67 For soldering iron

https://www.aliexpress.com/item/32957538277.html



스텐실이 없어 불필요함에도, 왜 구입했는지 이유는 모르겠지만, 깡통형과 주사기형 둘다 구입했습니다.



주사기형은 위와 같습니다. 183 도쯤에서 녹는다고 하네요.

구글에서 찾은, Solder paste 가 발라진 모양을 보면 아래 사진과 같습니다. 저게 녹아서 깔끔한 납접점을 만들어 줍니다.

인두기로 지져서 하는 납땜과는 결과물이 하늘과 땅 차이 입니다.





3. Solder Paste 주둥이


위의 주사기형 solder paste 는 조금씩 사용하기에는 주둥이가 너무 넓습니다.

조금씩 짜서 사용하려면, 주사기 바늘같은 제품이 필요합니다.


* 10pcs/set Dispensing Needles Syringe Tip Needle 1.5" Length 14 Gauge Syringes for Mixing Many Liquid

https://www.aliexpress.com/item/32978438776.html



위의 링크에서 구입했습니다.



도착샷은 예의 입니다.



각각 따로 구입한 solder paste 와 바늘.



설마 맞을까 했지만 기우.



딱 들어맞고 고정되는 바늘.






4. 트위저


끝이 뭉툭한 일반 핀셋으로는 힘들고, 끝부분이 첨예하게 만들어져 있는 트위저가 필수 입니다.


* 1/6 PCS Anti-static ESD Stainless Steel Tweezers Maintenance Tools Industrial Precision Curved Straight Tweezers Repair Tools

https://www.aliexpress.com/item/32955271790.html



도착샷은 예의.



2천원 정도에 이정도 제품이면 만족.



이 정도로 예리해야 조그마한 SMD 부품들을 집어서 원하는 위치에 안착시킬 수 있습니다.



오무렸을 때, 이렇게 끝이 딱 맞아야 사용하기 편합니다.



살짝 꺾인 트위저가 손목이 편한 상태로 작업이 가능합니다.



딱 2천원 정도의 품질. 많이 아쉬운 부분.



비교적 길이가 긴 부품을 잡을 수 있는 트위져.



강철로 만들어져 있어서, 끝 맞춰 보겠다고 구부려서 구부려지는게 아님.






5. 주사기


액체 Flux 를 적당량 뿌리기 위한 주사기도 필요합니다.

일반 약국에서 500원인가... 주고 샀던 기억이 (확실하지 않지만, 매우 저렴).



그냥 사용하기에는 너무 위험하니, 끝부분을 잘라냅니다.



액체 플럭스를 주입하고 사용하면, 엄청 경제적으로, 소량 / 적정량을 사용 가능합니다.

주사기를 활용하기 전까지는 거의 들이 붙다 싶이 하여, 필요 없이 많이 낭비했습니다.


액제 플럭스 구입기는 아래 링크 참조.


* Hardware | 납땜 주변 용품

https://chocoball.tistory.com/entry/Hardware-soldering-gadgets






6. 열풍기 / 오븐


열풍기로는 부분적으로 가열할 수 있어, 원하는 부분만 땜을 할 수 있습니다.

오븐을 이용하더라도 solder paste 를 녹일 수 있습니다.


다만, 오븐을 사용하면, PCB 전체를 가열하게 되므로, 작업을 한방에 해결할 수 있도록 밑작업이 필요합니다.

오븐 취득기는 아래 눈물의 포스트를 참고해 보세요.


* Hardware | SMD 부품 납땜용 오븐 취득기

https://chocoball.tistory.com/entry/Hardware-SMD-soldering-oven-salvage


오븐을 이용하여 solder paste 를 녹이면, 다음 동영상처럼 진행됩니다.

바쁘신 분은 40초부터 보시길.



제가 구한 오븐을 가지고 작업하면, solder paste 가 녹는 온도인 183도까지 대략 3분정도 걸립니다.

(알기 쉽도록 아래 사진에서는 타이머 10분부터 시작)


"쪼륵~" 하면서 붙는 모습을 지켜 보는 것이, 왠지 모를 쾌감.






7. Solder Paste 납땜의 주의점


아래는 실패한 arduino duemilanove 기판입니다. 좋은점과 실패한 부분을 하나씩 짚어 보죠.



- 빨간색 화살표 : solder paste + 오븐 작업 후, IC 다리가 서로 붙은 상태로 완성되는 경우가 많습니다.

인두기 + 액체 flux 로 살짝씩 지져주면서 정리해 줍니다.


- 파란색 화살표 : LED 전극이 잘못된 것을 알고, solder wick 으로 납을 제거 후, 기판에서 때어 내려고 했으나,

납이 완전히 제거되지 않은 상태에서 힘을 가해버려, PCB 기판 패턴이 일어나버린 상태. 이것때문에 이 기판은 폐기.


- 노란색 화살표 : solder paste 를 아주 조금만 했으나, 가장 적절하고 이쁘게 붙은 케이스.

부족하다 싶을 정도만 solder paste 를 도포하는 것이 맞는 방법인 듯 합니다.



위의 사진은 일반 인두기로 땜한 작품.

열이 너무 많이 가해지거나, 납이 필요 이상 많아진 결과를 보여줍니다.



일반 인두기로는 패턴이 부품 밑으로만 만들어져 있는 납땜은 거의 불가능 합니다.

Oscillator 바닥에 만들어진 패턴에 어찌어찌 인두기로 작업 했으나, 너무 많은 열을 가해서 정상 작동하지 못할 것으로 예상.

그 외의 부분은 납이 필요 이상 많은 경우.



Solder paste 끼리 가깝게 도포되었을 경우, 서로 붙어버리는 결과가.

오픈에서 구운 다음, 빨리 식힌다고 바로 꺼내면, 미처 굳지 못한 납으로 인하여 부품이 떨어져 버리는 결과도 생김.

시간을 충분히 들여, 완전히 식을 때까지 기다리는 것이 필요.



Solder paste 도포 후, 부품 실장 시, 살포시 올려만 놓으면, 삐뚤삐툴하게 고정됩니다.

Solder paste 도포한 위에, 부품을 꾹 눌러서 안착시키는 것이 필요.



더욱이 부품이 확실히 붙지 못하고 분리되어 버릴 수도 있슴.



부족하다 싶은 정도가 가장 적절.



대략 이런 모양으로 되면 best.



빨간색 사각형 안은, 전원 관련 부품들이 올라갈 부분이며, 패턴 면적도 크므로, 일반 부품보다 많이 도포한 케이스.

파란색 사각형 안은, 밀집된 IC 다리일 경우, 지그재그로 하면, 서로 붙지도 않고 후처리 필요 없는 깔끔한 땜이 됨.



Before.



After. 어때요? 잘 되었죠?

(4개 기판 실패 후, 겨우 성공)



세밀한 다리를 가지는 IC 는 최소한의 solder paste 만을 사용.




8. 양면 기판일 경우


양면 PCB 의 경우는 한쪽을 굽고, 열을 차단시키는 캡톤 테이프로 감쌓아,

반대편 작업 시, 먼저 작업한 부품들이 이탈되는 것을 방지.



양면 PCB 기판이지만, 위의 과정을 통해 성공한 케이스.



뒷면도 깔끔하게 마무리 되었습니다.



시행착오를 꽤 겪었지만, 하나씩 알아가는 것이 즐겁습니다.

이 경험들을 바탕으로, 최종적으로 성공한 arduino DIY 글을 올려보도록 하겠습니다.


And

Hardware | 레트로 led 글자판 HPDL-1414 사용기 - 1

|

1. 인류의 문명


인류의 문명 발달, 그 이전 인간의 진화에서 가장 큰 변화는 "" 이었다고 합니다.

위험을 피하고, 주위 환경을 살피며, 좋은 상대를 고르는... 수정체같은 이 "눈" 은 확실히 다른 인체 기관과 다른 부분이 있습니다.


눈으로 보는게 중요한 것은 "생존" 에 필수 이며, 현대에 와서는 "기호" 로 바뀌는 것 같습니다.

그래서인지 요즈음, 레트로 LED 에 관심이 굉장이 많아졌습니다.



어렸을 적에 멋져 보였던 기계들에서 사용되었기 때문에 그런 것일까요?




2. HPDL-1414


레트로 LED 들은 요즘도 팔지만, 더 이상 생산을 하지 않는다던지, 수요가 없어서 희소가치가 높아져 있습니다.

그래서 다들 비쌉니다. 아시죠? 제가 1만원 이상 되는거 사기 어렵다는거. (직장인의 비애)


나중에 구입하게 되면 사용기를 올리겠지만,

현재 구할 수 있는 레트로 LED 중에서는 HPDL-1414 가 가장 저렴하지 않은가 합니다.


낼름 구입해 봤습니다.


* 1pcs X HPDL-1414 HPDL1414 Four character smart digital display. Digital Tube. Free Shipping

https://www.aliexpress.com/item/32920650954.html



요즘 알리 배송은 예전만큼 느리지 않습니다.



일단 두 개 구입했습니다.



인터넷에서 돌아다니는 사진과는 조금 다른 제품 마무리 입니다만, 나름 예쁩니다.



예전부터 말레이시아에서 이런 류의 부품들이 많이 생산되는 것 같습니다.

다만, 여기에 말레이시아라고 쓰여 있지만, 정말 그런지는 아무도 모르죠.



각 표시창이 볼록하게 되어 있어서, 가시성을 높여주는 모양입니다.



회로 chip 은 수지로 막혀 있네요. 카피품이면 chip 이 다르겠지만, 동작은 오리지널과 차이 없는 듯 합니다.





3. 사양


인터넷에서 스켄 버전이 있지만, 가장 깔끔한 사양서 PDF 를 발견하게 되어, 일반 사양서와 함께, 여기에 공유해 봅니다.


dl1414-4-char-magnified-led-display-siemens.pdf

HPDL-1414.pdf


사양서 대로라면, 아래 캐릭터를 표현할 수 있습니다.





4. 연결


I2C 통신이나 컨트롤러가 없기 때문에, HIGH/LOW 특성으로 단순 표시를 시도해 봅니다.

아직 이쪽 지식이 많이 않은지라, 아래 사이트의 소스를 그대로 사용했습니다.


* HPDL-1414 Test

http://psyclesam.blogspot.com/2013/03/hpdl-1414-test.html


연결은 다음과 같습니다.


-----------------------------------------
| HPDL-1414 |  function  | Arduino Nano |
-----------------------------------------
|     1     | Data Input |      D5      |
|     2     | Data Input |      D4      |
|     3     |  WR Wrtie  |      D10     |
|     4     |Digit Select|      D9      |
|     5     |Digit Select|      D8      |
|     6     |     VCC    |      5V      |
|     7     |     GND    |      GND     |
|     8     | Data Input |      D0      |
|     9     | Data Input |      D1      |
|     10    | Data Input |      D2      |
|     11    | Data Input |      D3      |
|     12    | Data Input |      D6      |
-----------------------------------------


소스는 다음과 같습니다.


const int dTime = 25;  // delay beteewn digit writes
const int lTime = 250; // delay between loops
const int cMin = 33;   // start Decimal Ascii value 32(space) to 95 (underscore) 
const int cMax = 95;   // start Decimal Ascii value 32(space) to 95 (underscore)


void setup() {
  DDRD = DDRD | B11111111; // set direction bits for pins 7-0
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
}

void loop() {
  int asciiDec = cMin;
  while(asciiDec < cMax)  {
    // loop ascii set
    PORTD = (asciiDec);
    delay(1);                // wait for a ms 
    digitalWrite(8, HIGH);   // 8=A0 9=A1 select digit HH=3 LH=2 HL=1 LL=0
    digitalWrite(9, HIGH);   // 8=A0 9=A1 select digit HH=3 LH=2 HL=1 LL=0
    delay(1);                // wait for a ms    
    digitalWrite(10, LOW);   // Write pin Low
    delay(1);                // wait for a ms
    digitalWrite(10, HIGH);  // Write Pin High
    delay(dTime);            // delay between characters ms seconds

    PORTD = (asciiDec);
    delay(1);                // wait for a ms 
    digitalWrite(8, LOW);    // select digit
    digitalWrite(9, HIGH);   // select digit
    delay(1);                // wait for a ms
    digitalWrite(10, LOW);   // Write pin Low
    delay(1);                // wait for a ms
    digitalWrite(10, HIGH);  // Write Pin High
    delay(dTime);            // delay between characters ms seconds

    PORTD = (asciiDec);
    delay(1);                // wait for a ms 
    digitalWrite(8, HIGH);   // select digit
    digitalWrite(9, LOW);    // select digit
    delay(1);                // wait for a ms
    digitalWrite(10, LOW);   // Write pin Low
    delay(1);                // wait for a ms
    digitalWrite(10, HIGH);  // Write Pin High
    delay(dTime);            // delay between characters ms seconds  

    PORTD = (asciiDec);
    delay(1);                // wait for a ms 
    digitalWrite(8, LOW);    // select digit
    digitalWrite(9, LOW);    // select digit
    delay(1);                // wait for a ms
    digitalWrite(10, LOW);   // Write pin Low
    delay(1);                // wait for a ms
    digitalWrite(10, HIGH);  // Write Pin High
    delay(dTime);            // delay between characters ms seconds

    asciiDec++;              // increment character
    delay(lTime);            // loop delay ms seconds
  }

}




5. 동작


이미 검증하신 분을 그대로 따라 했더니만, 힘들지 않게 간단하게 표시를 시켜볼 수 있었습니다.



4개 LED 에 동일한 글짜를 표시하고, 바로 다음 글짜로 옮겨가는 단순한 구동입니다.



동영상도 올려 봅니다.

이 레트로 LED 의 매력을 느낄 수 있죠?



확대 스코프로 안을 들여다 봤습니다.

금으로 된 bonding 이랑, 발광하는(?) 소자들이 보입니다.



발광하게 되면 이렇게 보여요. 신기.





6. Reference


이번에는 간단한 동작만을 따라해 봤지만, 아래 두 사이트를 참고하여 좀더 다양한 표시 방법에 도전해 보겠습니다.

특히 I2C 를 통한 통신이 되면 편하게 문자를 표시할 수 있을것 같네요.


* Alphanumeric LED Displays Revisited

http://paul.zawada.us/2011/12/alphanumeric-led-displays-revisited.html



* Arduino Snippets: DL1414 LED Character Display

https://softsolder.com/2012/12/07/arduino-snippets-dl1414-led-character-display/


참고로, 추가 2개 더 구입함...


And

Hardware | 공기질 측정용 MiCS-6814 센서를 사용해 보자 - 1

|

1. 공기


사람이 건강하게 살아가는데 필요한게 뭘까 라고 생각했을 때, 육체적 관점에서 보면 아래와 같다고 생각합니다.


- 깨끗한 공기

- 깨끗한 물

- 오염되지 않은 먹거리

- 쾌적한 주거 환경

- 충분한 수면

- 충분한 운동


예전에는 당연한 것이였지만, 이 시대에 와서는 가장 돈을 많이 들여야 하는 항목들이 되었습니다.

과거로 회기하는데 드는 비용이죠.


자고로, 산업혁명이 일어나 지구가 오염되기 전 상황으로 되돌아 가는 것이, 육체적인 건강한 삶 되겠습니다. (나의 생각)

나만 잘한다고 되는건 아니라 요원하긴 하지만...


이 arduino 나 sensor 를 가지고 노는 이유도, 전자적인 지식을 습득해 나가는 것에 대한 희열 말고도,

위의 "건강한 삶을 보낼 수 있는 환경" 에 대한 추구가 다른 주된 이유이기도 합니다.


그래서, "깨끗한 공기" 가 목적이지만, 그 이전에 현재 "어떤 공기" 속에서 살고 있는지 알아보고 싶어졌습니다.

일전에 공기질의 척도만 나타내 주는 센서를 가지고 놀아본 적이 있습니다.


* Hardware | ZP07-MP901 공기질 측정 센서

https://chocoball.tistory.com/entry/Hardware-ZP07-MP901-air-quality-sensor


다만 위의 센서는 공기의 성분까지는 알려주지 못해 그닥 쓸모가 없었죠.





2. 센서


기체를 알아보는 sensor 는 꽤 많이 나와 있습니다. 대표적으로는 MQ series 가 있지요.





이 MQ 시리즈를 이용하면 왠만한건 다 잡아 낼 수 있을 것 같습니다.


다만, 이 MQ 시리즈의 단점이 히터를 통해서 기체를 태우고 그에 따른 반응으로 측정을 하는 방법인지라,

가스나 화기를 취급하는 곳에서는 발화의 원인이 될 수 있습니다. 그래서 인화 물질을 취급하는 공장이나 병원에서는 사용되지 못합니다.


그러던 중, MiCS-6814 라는 센서의 존재를 알게 됩니다.



이 센서는 metal oxide = 기체에 의한 금속 산화도 에 따른 저항 값을 가지고 측정하므로, MQ 시리즈보다는 더 안전합니다.


SGX-CMOS-Gas-Sensor-MiCs-6814.pdf

pollutant-visualizer.pdf


잡아낼 수 있는 기체들은 다음과 같다고 하네요.


• Carbon monoxide CO 1 – 1000ppm

• Nitrogen dioxide NO2 0.05 – 10ppm

• Ethanol C2H5OH 10 – 500ppm

• Hydrogen H2 1 – 1000ppm

• Ammonia NH3 1 – 500ppm

• Methane CH4 >1000ppm

• Propane C3H8 >1000ppm

• Iso-butane C4H10 >1000ppm


하나의 센서 chip 으로 많은 성분을 잡아 낼 수 으며, 소형인지라,

MQ 시리즈를 구입해서 실험 해보기 보단, 이놈으로 결정하였습니다.




3. Grove - Multichannel Gas Sensor


MiCS-6814 를 활용하기 위해 가장 좋은 방법은,

MiCS-6814 를 활용한 breakout board 인 Grove 사의 Multichannel Gas Sensor 를 구입하는 것 입니다.


* Grove - Multichannel Gas Sensor

http://wiki.seeedstudio.com/Grove-Multichannel_Gas_Sensor/



Arduino 와의 통신도 I2C로 이루어 지며, 센서의 3개 측정값 - CO, NH3, NO3 - 의 조합으로 다른 기체도 유추해 놓는것 같습니다.

거기에 정확하지는 않지만, 어느정도 calibration 도 잡혀 있을 것이구요.


다만, 항상 그렇 듯, 가격이 문제 입니다. 요즘은 팔지도 않거니와, 실 구매 가격은 약 10만원 정도.

나중에 혹시 PCB 라도 꾸며서 만들 수 있으면 만들어 보고자, 여기에 회로 관련 정보를 올려 놓습니다.


Grove-Multichannel_Gas_Sensor_v1.0_sch.pdf

Grove-Multichannel_Gas_Sensor_v1.0_eagle_files.zip

1143_Datasheet-MiCS-6814-rev-8.pdf


* Firmware (Seeed-Studio/Mutichannel_Gas_Sensor)

https://github.com/Seeed-Studio/Mutichannel_Gas_Sensor




4. 구입


눈물을 뒤로 하고, AliExpress 로 향합니다.


* 1pcs CJMCU- MICS-6814 Air Quality CO VOC NH3 Nitrogen Oxygen Gas Sensor

- https://www.aliexpress.com/item/32762216430.html



저를 위로해 주는 기교적 착한 가격. 거진 3만원돈 이지만, 과감하게 투자해 봅니다. (6개월 고민... ㅠㅠ)



대단한건 아니지만, 도착했을 시 꽤 기뻤습니다. 이제야 이런 고급진 센서 써보는구나~ 라고.



정말 단순한 구조. 레귤레이터도 없어...



뒷면입니다.





5. 연결


어떻게 arduino 와 연결하여, 각 기체의 값을 알아낼까 찾아보던 중 아래 사이트를 발견합니다.


* Wiring MiCs 5524 / 6814 CMOS MEMS Gas Detection Sensor

https://www.14core.com/wiring-mics-5524-6814-cmos-mems-gas-detection-sensor/



걍 analog pin 에 직결하라고 하네요?

제가 구매한 breakout 보드에는 MOSFET 도 없고 그렇지만, 일단 아래 소스를 가지고 돌려 봅니다.


int NH3 = 0;
int NO2 = 1;
int CO = 2;

void setup() {
	pinMode(NH3, OUTPUT);
	pinMode(NO2, OUTPUT);
	pinMode(CO, OUTPUT);
	
	Serial.begin(9600);
	Serial.println("MiCS 6814 simple test");
}
 
void loop() {
	int sense_val_1 = analogRead(NH3);
	int sense_val_2 = analogRead(NO2);
	int sense_val_3 = analogRead(CO);
	
	Serial.print("NH3 : ");
	Serial.print(sense_val_1);
	Serial.print(" \t NO2 : ");
	Serial.print(sense_val_2);
	Serial.print(" \t CO : ");
	Serial.println(sense_val_3);
	
	delay(1000);
}


Serial Monitor 로 값을 확인해 보고, EXCEL 로 그래프를 그려 봅니다.



음... 뭔가 알아보기 힘드네요. 각 기체의 값이 서로 비슷하게 나와버립니다.






6. 저항을 추가하여 연결


아래 사이트에서 이 아저씨가 한 작업은,

측정값이 현실적으로 되려면 analog pin 에 입력되는 값은, 3.3V 를 저항을 거쳐서 연결하라고 합니다.

(이론적으로는 50K ohm 이 좋으나, 제품으로 나오는 저항은 47K ohm 이 제일 가까운 값)


* ESP32, PMS5003, BME280, MICS6814 Sensor Build

http://kstobbe.dk/2019/02/16/esp32-pms5003-bme280-mics6814-sensor-build/



또한, 아래 arduino forum 에서는, 각 단자에 47K ohm 통해 연결하는 전원은 3.3V 보단, 5V 를 먹이라고 하네요.

아마도 MiCS-6814 구동 전압이 5V 임을 감안하면, 동일한 입력 값이 좀더 예민한 값의 도출에 좋다는 이야기 같습니다.

(솔직히 잘 모름)


* CJMCU-6814 adapter board with MICS-6814 CO/NH3/NO2-sensor

https://forum.arduino.cc/index.php?topic=619992.0


Tested the sensor with the code and schematic. Connected 47k to 3 gases and 5v rather than 3v. The results seem to reflect well to CO. Have not tested NO2 and NH3.


바로 따라해 봅니다.



Serial Monitor 에서 측정된 값이구요.



EXCEL 에서 그래프화 해 봤습니다.

오오오오오, 뭔가 나오네요.



가능한 24시간동안 예열하도록 안내가 되어 있듯이, 예열 구간동안 특정 값으로 꾸준히 변화되는 것을 알 수 있습니다.

위의 빨간 표시한 부분은, 시험삼아 숨을 한번 불어본 구간입니다. 변화를 잘 감지하는군요!



하룻밤 측정해본 결과 입니다.

각 기체의 상관 관계와 실내 공기 내에서의 NH3, NO2, CO 의 값은 이정도인 듯 합니다.




7. 15bit ADC + 저항을 추가하여 연결


Arduino 내장 10 bit ADC 를 가지고 측정한 결과 보다는 15 bit ADC 가 훨씬 정확합니다.

아래 포스트 이후로, 향후 모든 측정값은 더 높은 ADC 를 통하라고 배웠습니다.


* Hardware | ADS1115 16bit 4채널 ADC 를 사용해 보자

https://chocoball.tistory.com/entry/Hardware-ADS1115-16bit-4channel-ADC


ADS1115 이 입력값을 받구요.



소스를 ADS1115 용으로 살짝 수정해 줍니다.

#include "Wire.h"
#include "Adafruit_ADS1015.h"
 
Adafruit_ADS1115 ads(0x48);
 
void setup(void) {
    Serial.begin(115200);
    ads.begin();
}
 
void loop(void) {
    int16_t adc1; // CO
    int16_t adc2; // NH3
    int16_t adc3; // NO2
     
    adc1 = ads.readADC_SingleEnded(1);
    adc2 = ads.readADC_SingleEnded(2);
    adc3 = ads.readADC_SingleEnded(3);

    Serial.print("NH3 : ");
    Serial.print(adc2);
    Serial.print(" \t NO2 : ");
    Serial.print(adc3);
    Serial.print(" \t CO : ");
    Serial.println(adc1);
     
    delay(1000);
}


Serial Monitor 에서 확인한 값 들 입니다.

확실히 뭔가 엄청나게 숫자가 불어나 있습니다.



EXCEL 을 통해서 그래프화 시켜 봅니다.



패턴은 47K ohm 저항 꼽고 측정할 때와 비슷하게 나왔습니다.


다만, 높은 ADC 를 통하여 해상도는 좋아졌지만,

어떤 기준값으로 나누어야 할지 알지 못하기 때문에, trend 만 알 수 있지 정확한 수치화까지는 진행하지 못했습니다.




8. Next Step


이런 공기질 측정에서의 수치화는 calibration 인데,

그렇게 하려면 실제 실험실 환경을 통해서, 실제 기체를 가지고 기준을 잡아야 합니다.


위의 방법이 현실적으로 불가능 하기에,

다음에 할 것으로는 Grove - Multichannel Gas Sensor 의 breakout 을 만들어서 (아님 구입해서),

제조사인 SeeedStudio 의 경험이 녹아들어가 있는 firmware 와 소스코드를 가지고 수치화 해보는 것 이겠습니다.


공기 질에 관한 센서는 몇 개가 더 있습니다. 계속 놀아보도록 하지요.

To Be Continued...


And

Hardware | LCD2004 를 arduino 로 컨트롤 해보기 - 1

|

1. 시작


흠흠흠~ 하면서 인터넷을 보던 중, arduino 로 컨트롤 하는 Liquid Crystal Display 를 보게 됩니다.

이게 흔히 말하는 LCD 이죠.


OLED 와 비교하여 부피도 크고, 명암 조절을 수동으로 해줘야 하는 등, 불편한 device 라고 생각하고 있던 중,

LCD 의 푸른색 색감을 보고 반해버렸습니다.


Display 부품을 늘이고 싶지 않았지만, 이제 구입할 때가 된것 같아 구입합니다.


* LCD2004+I2C 2004 20x4 2004A blue screen HD44780 Character LCD /w IIC/I2C Serial Interface Adapter Module For Arduino

https://www.aliexpress.com/item/32831845529.html



결코 싼 가격은 아니지만, 이왕 구입하는 김에 보편적으로 많이 사용하는 녹색과 색감에 반한 푸른색, 두 개를 삽니다.





2. 도착


한 2주만에 재품을 받았습니다.

무료 배송이 점점 없어지고 배송비 책정이 되면서 배송 기간이 점점 짧아지고 있는 듯 합니다.



푸른색, 녹색 두개가 와서 PCB 를 비교해 보니, 서로 동일한 듯 하나 살짝 다른 모습 입니다.



I2C 컨트롤러의 칩 한쪽은 마킹이 너무 얇아 fake 제품처럼 보입니다.

조금이라도 진품처럼 보이는 쪽은 파란색 버전 입니다.



납땜도 녹색보다는 파란색이 잘 되어 있습니다.



PCB 마킹도, 파란색은 동판에 미리 새겨져 있고, 녹색은 프린팅 되어 있네요.



뭐, 생산하다가 점점 원가절감 하면서 변화된 것 일 수도 있습니다.

보통 녹색을 많이 사용하니, 녹색이 원가절감이 더 된 것 일수도 있구요.





3. Pin


Pin 수는 16개로, 아래와 같은 사양을 가집니다.


-------------------------------------------------------------------
|  pin  |                        function                         |
-------------------------------------------------------------------
|  VSS  | connected to ground                                     |
-------------------------------------------------------------------
|  VDD  | connected to a +5V power supply                         |
-------------------------------------------------------------------
|   V0  | to adjust the contrast                                  |
-------------------------------------------------------------------
|   RS  | A register select pin that controls where in the LCD's  |
|       | memory you are writing data to. You can select either   |
|       | the data register, which holds what goes on the screen, |
|       | or an instruction register, which is where the LCD's    |
|       | controller looks for instructions on what to do next.   |
-------------------------------------------------------------------
|  R/W  | A Read/Write pin to select between reading and writing  |
|       | mode                                                    |
-------------------------------------------------------------------
|   E   | An enabling pin that reads the information when HIGH    |
|       | level(1) is received. The instructions are run when the |
|       | signal changes from HIGH level to LOW level.            |
-------------------------------------------------------------------
| D0-D7 | to read and write data                                  |
-------------------------------------------------------------------
|   A   | Pins that control the LCD backlight. Connect A to 3.3V. |
-------------------------------------------------------------------
|   K   | Pins that control the LCD backlight. Connect K to GND.  |
-------------------------------------------------------------------


대충 훑어 보면, back light 전원, 본체 전원, 명암 조절, data 통신과 컨트롤 라인 등이 있습니다.

제가 구매한 제품은 I2C 모듈인 "PCF8574" 컨트롤러가 달린 제품입니다.

그러니, 일일이 모두 연결할 필요 없이 I2C 를 통해, 단 4가닥 선으로 컨트롤 할 수 있습니다.


이 chip 의 생산은 Philips, TI, NXP 등에서 생산되고 있네요. PDF 사양서를 올려 놓습니다.


LCD2004

TC2004A-01.pdf

Systronix_20x4_lcd_brief_data.pdf

RK-10290_410.pdf

50586.pdf


HD44780

HD44780.pdf

LCD Interfacing using HD44780 Hitachi chipset compatible LCD.pdf


PCF8574

PCF8574_PCF8574A.pdf

PCF8574T.pdf

pcf8574.pdf





4. I2C


Arduino 와 연결은 I2C 이므로, 4가닥으로 처리됩니다.



Liquid Crystal I2C 라이브러리가 필요합니다.

일반 Liquid Crystal I2C 라이브러리를 설치해도 되나, 궂이... 궂이 PCF8574 용 라이브러리를 찾아서 설치해 봅니다.

(범용 Liquid Crystal I2C 라이브러리가 아님)



위의 라이브러리를 설치하면 아래처럼 sample code 를 사용할 수 있습니다.


File > Examples > LiquidCrystal_PCF8574 > LiquidCrystal_PCF8574_test



I2C 활용시에는 항상 address 를 확인해 봐야 합니다.

Arduino 와 I2C 로 연결 후, i2cdetect 소스를 돌려 봅니다.



0x27 로 잡혀 있네요.

참고로 다른 I2C 센서들과 연동 시에 address 충돌이 일어나면, 아래 사진의 A0, A1, A2 쇼트 조합으로 주소를 바꿀 수 있습니다.






5. I2C 소스


친절하게도 example 소스가 충분히 잘 만들어져 있는지라, 그냥 돌려 봅니다.


#include "LiquidCrystal_PCF8574.h"
#include "Wire.h"

LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display
int show = -1;

void setup() {
	int error;
	
	Serial.begin(115200);
	Serial.println("LCD...");
	
	// wait on Serial to be available on Leonardo
	while (!Serial)
		;
	Serial.println("Dose: check for LCD");
	
	// See http://playground.arduino.cc/Main/I2cScanner how to test for a I2C device.
	Wire.begin();
	Wire.beginTransmission(0x27);
	error = Wire.endTransmission();
	Serial.print("Error: ");
	Serial.print(error);
	
	if (error == 0) {
		Serial.println(": LCD found.");
		show = 0;
		lcd.begin(20, 4); // initialize the lcd
	} else {
		Serial.println(": LCD not found.");
	} // if
} // setup()

void loop() {
	if (show == 0) {
		lcd.setBacklight(255);
		lcd.home();
		lcd.clear();
		lcd.print("Hello LCD");
		delay(1000);
		
		lcd.setBacklight(0);
		delay(400);
		lcd.setBacklight(255);
	} else if (show == 1) {
		lcd.clear();
		lcd.print("Cursor On");
		lcd.cursor();
	} else if (show == 2) {
		lcd.clear();
		lcd.print("Cursor Blink");
		lcd.blink();
	} else if (show == 3) {
		lcd.clear();
		lcd.print("Cursor OFF");
		lcd.noBlink();
		lcd.noCursor();
	} else if (show == 4) {
		lcd.clear();
		lcd.print("Display Off");
		lcd.noDisplay();
	} else if (show == 5) {
		lcd.clear();
		lcd.print("Display On");
		lcd.display();
	} else if (show == 7) {
		lcd.clear();
		lcd.setCursor(0, 0);
		lcd.print("*** first line.");
		lcd.setCursor(0, 1);
		lcd.print("*** second line.");
		lcd.setCursor(0, 2);
		lcd.print("*** third line.");
		lcd.setCursor(0, 3);
		lcd.print("*** forth line.");
	} else if (show == 8) {
		lcd.scrollDisplayLeft();
	} else if (show == 9) {
		lcd.scrollDisplayLeft();
	} else if (show == 10) {
		lcd.scrollDisplayLeft();
	} else if (show == 11) {
		lcd.scrollDisplayRight();
	} else if (show == 12) {
		lcd.clear();
		lcd.print("write-");
	} else if (show > 12) {
		lcd.print(show - 13);
	} // if
	
	delay(1400);
	show = (show + 1) % 16;
} // loop()


Serial Monitor 에서 확인해 보니, 잘 인식 되었네요.



너무 쉽게 되어서 살짝 김이 빠지는 정상적인 결과.



동영상도 올려 봅니다. (동영상은 16x2 버전으로 돌린 결과. 수정된 위의 소스로 20x4 로 변경된 소스를 사용하면 4줄 다 사용.)






6. Direct 연결


여기서 끝내면 너무 재미 없는지라, 한땀한땀 직접 연결해 봅니다.

워낙 오래된 부품이라, 아래 arduino 정식 사이트에서 자세히 소개되어 있습니다.


* TUTORIALS > Examples from Libraries > LiquidCrystal > HelloWorld

https://www.arduino.cc/en/Tutorial/HelloWorld?from=Tutorial.LiquidCrystal


각 Pin 의 정보는 다음과 같습니다.



실제 arduino 와 연결은 다음과 같습니다.


--------------------------------
| LCD2004 |    Arduino Nano    |
--------------------------------
|   VSS   |         GND        |
|   VDD   |         5V         |
|   V0    | S of potentiometer |
|   RS    |         D12        |
|   R/W   |         GND        |
|   E     |         D11        |
|  D0-D3  |    no connected    |
|   D4    |         D5         |
|   D5    |         D4         |
|   D6    |         D3         |
|   D7    |         D2         |
|   A     |         3.3V       |
|   K     |         GND        |
--------------------------------


Diagram 으로도 그려 봤습니다. (Digital pin 은 실제와 살짝 틀림)






7. Potentiometer


여기서 필요한 것이 potentiometer 입니다. 가변 저항이죠.

다이얼을 돌려서 저항값을 변화시키는 부품이죠. 구입을 미뤄 오다가, 이번 기회에 사용하고자 구입 했습니다.


* 5 PCS/Lot Potentiometer Resistor 1K 10K 20K 50K 100K 500K Ohm 3 Pin Linear Taper Rotary Potentiometer for Arduino with Cap

https://www.aliexpress.com/item/32948875673.html



구입한 버전은 10K Ohm.



글의 문맥상 뜬금 없지만, 도착샷 입니다. 빠질 수 없죠.



요런 모양 입니다.




8. Direct 연결 구동


직접 연결하는 방법은 Arduino IDE 에서 기본 제공합니다.



소스는 다음과 같구요.

기본 16x2 버전으로 되어 있으니, 20x4 버전으로 살짝 수정해 줍니다.


/*
  LiquidCrystal Library - Hello World
 
 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.
 
 This sketch prints "Hello World!" to the LCD
 and shows the time.
 
  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 
 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe
 
 This example code is in the public domain.
 
 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */
 
// include the library code:
#include "LiquidCrystal.h"
 
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(20, 4);
  // Print a message to the LCD.
  lcd.setCursor(0, 0);
  lcd.print(" Chocoball's Tech");
  lcd.setCursor(0, 2);
  lcd.print(" chocoball.tistory");
}
 
void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 3);
  // print the number of seconds since reset:
  lcd.print(millis() / 1000);
}


전부 연결하면 아래와 같습니다.



동영상도 올려 봅니다.



hello, world! 를 저의 블로그명으로 바꿔 봤습니다.



단순한 표시 방법과 오랜 기간 수정된 라이브러리 덕으로, 정말 스트레스 없이 구동 시켰습니다.




9. I2C 와 Direct 연결시 명령어 차이


I2C 를 통한 함수와, 직접 연결했을 시에 사용할 수 있는 명령어 구성이 살짝 다릅니다.

고맙게도 아래 사이트에서 잘 정리된 테이블이 있어서 여기에 올려 봅니다.


* LCD Display Tutorial for Arduino and ESP8266

https://diyi0t.com/lcd-display-tutorial-for-arduino-and-esp8266/






10. 커스텀 폰트


명령어 차이를 자세하게 올려준 사이트에서 폰트 커스텀에 대해서도 내용이 있어서 따라해 봤습니다.

이 때, 사용하는 LiquidCrystal_I2C 라이브러리는 범용을 사용하는 지라, 아래 라이브러리를 설치합니다.



소스는 아래와 같습니다. 폰트라기 보단 캐릭터 입니다.


#include "Wire.h"
#include "LiquidCrystal_I2C.h"

// Set the LCD address to 0x27 in PCF8574 by NXP and Set to 0x3F in PCF8574A by Ti
LiquidCrystal_I2C lcd(0x27, 20, 4);

byte customChar1[] = {
  B01110,
  B01110,
  B00100,
  B11111,
  B00100,
  B01110,
  B01010,
  B01010
};

byte customChar2[] = {
  B01110,
  B01110,
  B10101,
  B01110,
  B00100,
  B00100,
  B01010,
  B10001
};

void setup() {
  lcd.init();
  lcd.backlight();
}

void loop() {
  lcd.createChar(0, customChar1);
  lcd.home();
  lcd.write(0);
  delay(1000);
  lcd.createChar(0, customChar2);
  lcd.home();
  lcd.write(0);
  delay(1000);
}


Bitmap 을 이용해서 만들었고, 화면 refresh 를 통해서 움직이는 것 처럼 구성했네요.



동영상도 올려 봅니다.



참고로, 이 Liquid Crystal 은 Hitachi HD44780 를 사용하거나 호환품들이라 아래 폰트를 기본 제공합니다.


HD44780.pdf






11. 아...


인터넷에서 보지 말아야 할 것을 봐버렸습니다.



이렇게 이쁘게도 커스터마이징 할 수 있는거군요.

다음은, 커스텀 폰트를 가지고 놀아보겠습니다.


And

Hardware | Arduino 로 Gimbal 컨트롤 하기

|

1. 길고 긴 시작


때는 2015년, 한창 Kickstarter 에 열을 올려, 이것 저것에 투자(?) 하고 있을 때,

당시 저에게는 너무 생소한 Gimbal 이라는 것을 접하게 됩니다.


지금이야 드론이나 스포츠 경기 촬영, 또는 일반인이 손으로 가지고 다니면서 흔들림 방지 해주는 분야에까지 널리 사용되지만,

이 때까지만 해도 이런 종류의 기기는 전문가 집단만 사용하고 있었죠.


다 제껴두고 아래 소개 동양상 보고 홀딱 반해서 투자하게 됩니다. 75 USD...


* Gimbal for your Lights Camera or Action

https://www.kickstarter.com/projects/2035152529/gimbal-for-your-lights-camera-or-action/description



일단 동영상을 함 봐보세요. 2015년 감각으로... 사고싶어 지죠?!


당시에는, 아무 생각 없이 투자한 것이라, 어떻게 활용할지, 어떻게 컨트롤 할지 상상도 못하고 있었습니다.

제품이 도착 후, servo 로 움직인다는 것을 알고 (도착해서야!) arduino 를 활용해 기본적인 동작만 확인하고 쳐박에 두었습니다.

왜냐 하면, arduino 에 대한 지식이 얕았기에 뭘 더 할 수가 없었거든요.


아래는 지금까지 gimbal 과 관련된 포스트 들 입니다.


* Hardware | Arduino 로 Servo 를 움직여 보자

https://chocoball.tistory.com/entry/Hardware-Arduino-Servo


* Hardware | Arduino 의 Sensor Shield 사용해 보기

https://chocoball.tistory.com/entry/Hardware-Arduino-Sensor-Shield


* Hardware | Dual-axis XY Joystick Module

https://chocoball.tistory.com/entry/Hardware-dual-axis-XY-Joystick-Module


마지막으로 Joystick 모듈을 사용해 보고서, 드디어! gimbal 활용의 완성판을 작성할 수 있을것 같아, 이 글을 쓰기 시작했습니다.





2. 연결


최종 목적은 Joystick 을 가지고, Gimbal 을 상하좌우 움직이는 것 입니다.

이게 단순하지만, Joystick 의 운동 한계성으로 그리 쉽게는 되지 않더군요.


일단, Arduino > Joystick > Gimbal (servo) 를 아래와 같이 연결합니다.


  Joystick | Arduino Nano
--------------------------
    GND    |     GND
    5V     |     5V
    VRX    |     A0
    VRY    |     A1
    SW     |     D2
--------------------------
  Servo 1  |
--------------------------
    RED    |     5V
    BLACK  |     GND
    SIGNAL |     D9
--------------------------
  Servo 2  |
--------------------------
    RED    |     5V
    BLACK  |     GND
    SIGNAL |     D8
--------------------------


실제 diagram 은 다음과 같습니다.



실제 코드에서는 Joystick 의 SW_pin 이 D2 에 연결되는 등, 위의 그림과 조금 다릅니다만, 대략적인 연결 구조만 보시면 되겠습니다.





3. 간단 구동


일단 Joystick 이 유효한 방법인지 알아볼 수 있는 간단한 코드 입니다.

인터넷 어디에선가 참조했는데 링크를 까먹었습니다. 간단한 연결법이라 검색해서 쉽게 찾을 수 있습니다.


#include "Servo.h"

Servo myservo1; // create servo object to control a servo
Servo myservo2;
int potpin1 = A0; // analog pin used to connect the potentiometer
int potpin2 = A1;
int val; // variable to read the value from the analog pin

void setup() {
	myservo1.attach(9);
	myservo2.attach(10); // attaches the servo on pin 9 to the servo object
}

void loop() {
	val = analogRead(float(potpin1)); // reads the value of the potentiometer (value between 0 and 1023)
	val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
	myservo1.write(val); // sets the servo position according to the scaled value
	delay(15); // waits for the servo to get there
	
	val = analogRead(float(potpin2)); // reads the value of the potentiometer (value between 0 and 1023)
	val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
	myservo2.write(val); // sets the servo position according to the scaled value
	delay(15);
}


아래는 연결하고 실제 구동 영상입니다.



잘 돌아가쥬?

단, 여기서 문제점들이 몇가지 있습니다.


- ripple value

회로적인 문제로 ripple 값이 발생하여, 조이스틱을 움직이지 않았지만 덜덜 떨거나 깔끔한 움직임이 나오지 않습니다.

ripple 를 제거 해야 합니다.

- speed

돌아가는 속도가 너무 빨라, 원하는 방향으로 위치하기가 힘듭니다.

- available range

X 축의 경우, 90 돌아가지만, gimbal 은 360 가 돌아가게끔 되어 있습니다.

CCTV 등 에 사용된다고 가정하면, 필요 없는 각도나 회전은 발생하지 않게끔 해야 합니다.

- last position

Joystick 의 성질 상, 움직힘 후 가운데로 되돌아 옵니다.

특정 위치를 잡게 하려면 동작시키지 않을 때에는 마지막 위치를 기억하고 있어야 합니다.

- centering

어떤 위치에서든 다시 초기 위치로 되돌아 오는 기능이 있으면 편할 것 같습니다.


이 글의 나머지 부분은, 결국 위의 문제를 해결하는 내용으로 진행됩니다.





4. Ripple Value


Joystick 을 가만히 놔둬도 계속 떨거나, 움직일 때 자연스럽지 못합니다.

Serial Monitor 로 값의 변화를 찍어 봤죠.



아무것도 안했는데도 값이 출렁 거립니다.

전후값을 비교해 보니, 가만히 있어도 최대 11 정도 값이 변하는 것을 알 수 있습니다.



그래프로 도식화 해보면, 그 현상을 충분히 알 수 있습니다.

이는 전기적인 ripple 일 수도 있습니다.


* How can I filter out noise from ADC lines without delay or signal change?

https://arduino.stackexchange.com/questions/994/how-can-i-filter-out-noise-from-adc-lines-without-delay-or-signal-change


  +5V                        +5V
   |                          |
(sensor)---resistor---+---(Arduino)
   |                  |       |
   |              capacitor   |
   |                  |       |
  GND----------------GND-----GND

이 경우 RC 필터를 넣으면 됩니다. 캐패시터 값으로 0.1uF capacitor 를 사용하면 적절하다고 하네요.


So if you are sampling at around 1000 Samples/second (i.e., a sampling interval of 1 millisecond), then 100 Ohms of resistance and (roughly) 100 uF ceramic capacitor may be adequate. (The RC time constant here is RC == 100 Ohms x 100 uF = 10 milliseconds).


다만, 저항이 들어가면서 값의 외곡이 생기니 software 적으로 처리하기로 합니다.


0              512            1023 
<---------------|--------------->
          497 |   | 527

그럼 어떻게 하느냐.

Joystick 에서 arduino 로 보내지는 전체 analog 신호 0~1023 에서,

정 가운데 앞뒤로 15씩 잘라, 이 구간의 ripple 이나 작은 움직임을 무시하기로 합니다.


...
		if ( (0 <= val) && (val < 497) ) {
			myservo1.write(angle1--);
		} else if ((527 <= val) && (val < 1024)) {
			myservo1.write(angle1++);
...


위의 코드에서 보면, 중간값을 잘라 낸 앞뒤 값에서 val 을 읽어 들이는 것으로 했습니다.




5. Speed & Last Poision


원래 소스에서는 최종 위치로 바로 움직이도록 값을 넣어 주지만, 수정된 소스에서는 각도를 1도씩 움직이게 했습니다.

그러면서, delay 값을 낮춘 채로 유지했습니다.


...
		if ( (0 <= val) && (val < 497) ) {
			myservo1.write(angle1--);
		} else if ((527 <= val) && (val < 1024)) {
			myservo1.write(angle1++);
		} else {
			// do nothing
		}
...
	delay(10);
...
		if ( (0 <= val) && (val < 497) ) {
			myservo2.write(angle2--);
		} else if ((527 <= val) && (val < 1024)) {
			myservo2.write(angle2++);
		} else {
			// do nothing
		}
...
	delay(10);  
}


속도에 변화를 더 주고 싶으면, angle 은 1도씩 움직이는 것은 놔두고, delay 를 조정 합니다.

저는 delay(10) 이 가장 적절했습니다.


또한, 최종 각도를 입력하는 것이 아닌, 한쪽 방향으로 움직임만 있으면 (exist) 1도씩 움직이게 한 결과,

자연스럽게 마지막 위치에서 멈춰있게 되었습니다.




6. Available Range


180도로 움직이는 Servo 를 풀로 사용하면, 카메라를 달았을 때, 촬영 범위를 벗어나거나 회전하게 됩니다.


일단 Y 축 servo 를 생각하면,

천장과 땅바닥을 촬영 각도에서 빼게 된다면, 전체 180 도에서 140도로 좁히면 됩니다.

그렇다면, 20 > 160 도 사이를 움직이게 코딩해 줍니다.


X 축은 180 회전이 720도 회전, 90 회전이 360도, 45 회전이 180도, 22.5 회전이 되어야 비로서 90도가 됩니다.

즉, 좌우로 22.5 를 먹여야 원하는 좌우 180도로 움직이는 결과가 되지요.


...
	if ( (67 < angle1) && ( angle1 < 112) ) { // making available range
...
	} else if ( angle1 == 67) {
		angle1++;
	} else if ( angle1 == 112) {
		angle1--;
	}
...
	if ( (20 < angle2) && ( angle2 < 160) ) { // making available range
...
	} else if ( angle2 == 20) {
		angle2++;
	} else if ( angle2 == 160) {
		angle2--;
	}
...


코딩에서는 90도가 center 이므로, 이 중간을 기준으로 좌우 +/- 한 값으로 범위를 정의했습니다.

위의 소스 마지막 부분에서, 각도의 끝에 있는 값에서 +1 / -1 씩 해준 이유는, 계속 범위 안에 들기 하기 위함입니다.

이게 없으면, 1도씩 움직이던 angle 값이, 범위 밖으로 나가면서 예외상황에 빠지게 됩니다.


코딩 해보신 분이라면, 예외사항 처리가 얼마나 중요한지 아실꺼예요.




7. Centering


Joystick 에서 SW_pin 이 존재합니다.

유일하게 digital 입력이며, 조이스틱을 누르면 딸깍 하는 소래를 내는 그 부분 입니다.


마침 잘 된 거죠. Centering 을 이 SW_pin 을 사용하면 됩니다.


#include "Servo.h"

const int SW_pin = 2; // digital pin for centering
...
void setup() {
	pinMode(SW_pin, INPUT);
	digitalWrite(SW_pin, HIGH);
...
}

void loop() {
	
	if (!digitalRead(SW_pin)) {
		angle1 = 90;
		angle2 = 90;
		myservo1.write(angle1);
		myservo2.write(angle2 );
	}
...
}


SW_pin 에 입력이 있으면, 중앙이 되는 90 도를 강제적으로 input 하게 하면 됩니다.




8. 정리


지금까지 해결했던 문제들을 한데 모아 소스코드로 만들면 아래와 같이 됩니다.


#include "Servo.h"

const int SW_pin = 2; // digital pin for centering
Servo myservo1; // create servo object to control a servo
Servo myservo2;
int potpin1 = A0; // analog pin used to connect the potentiometer
int potpin2 = A1;
int val; // variable to read the value from the analog pin
int angle1 = 90;
int angle2 = 90;

void setup() {
	pinMode(SW_pin, INPUT);
	digitalWrite(SW_pin, HIGH);
	myservo1.attach(9);
	myservo2.attach(10); // attaches the servo on pin 9 to the servo object
	
	myservo1.write(angle1);
	myservo2.write(angle2);
	delay (1000); // initalizing
}

void loop() {
	
	if (!digitalRead(SW_pin)) {
		angle1 = 90;
		angle2 = 90;
		myservo1.write(angle1);
		myservo2.write(angle2 );
	}
	
	val = analogRead(float(potpin1)); // reads the value of the potentiometer (value between 0 and 1023)
	if ( (67 < angle1) && ( angle1 < 112) ) { // making available range
		if ( (0 <= val) && (val < 497) ) {
			myservo1.write(angle1--);
		} else if ((527 <= val) && (val < 1024)) {
			myservo1.write(angle1++);
		} else {
			// do nothing
		}
	} else if ( angle1 == 67) {
		angle1++;
	} else if ( angle1 == 112) {
		angle1--;
	}
	delay(10);
	
	val = analogRead(float(potpin2)); // reads the value of the potentiometer (value between 0 and 1023)
	if ( (20 < angle2) && ( angle2 < 160) ) { // making available range
		if ( (0 <= val) && (val < 497) ) {
			myservo2.write(angle2--);
		} else if ((527 <= val) && (val < 1024)) {
			myservo2.write(angle2++);
		} else {
			// do nothing
		}
	} else if ( angle2 == 20) {
		angle2++;
	} else if ( angle2 == 160) {
		angle2--;
	}
	delay(10);  
}


코드의 최적화는 생각하지 않고, 오로지 구현에만 신경쓴 소스입니다.

모든 구현이 들어간 코드를 입힌 동영상 입니다.



원하는 수준까지 동작 구현이 되어서 기분이 좋네요.

향후, ESP8266 을 이용하여 원격 조정이나 Web UI 를 통한 컨트롤도 가능하겠습니다.


모두 happy arudino~!


And

Hardware | 재생토너 chip 교환기 - 2

|

1. 레이저 프린터


1년 전에 Fuji Xerox 의 CP116w 를 구매하고 잘 사용하고 있습니다.

거기에 더해 재생 토너도 사용하고 있죠.


* Hardware | 재생토너 chip 교환기 - 1

https://chocoball.tistory.com/entry/Hardware-refill-toner-chip-replacement-1


* Hardware | Fuji Xerox 의 CP116w 토너 교환기

https://chocoball.tistory.com/entry/Hardware-Fuji-Xerox-CP116w-toner-replacement


정품 or 재생 토너라 할 지라도, 각 색의 카트리지에 붙어 있는 chip 이 망가지면 다시 새 chip 으로 교환해야 합니다.


토너의 사용량은 카트리지에 남아있는 토너가루를 실제로 측정해서 인지하는 것이 아니라,

얼마나 그 색을 사용했느냐에 따라 counting 을 하고, 그 정보를 카트리지 chip 에 기록하여, 어림 짐작 합니다.


그래서 일정량을 print 하면, low toner 라고 소프트웨어에서 인지하게끔 하는 것이죠.




2. 구입


토너 카트리지에 달려있는 이 chip 은 전기적으로 약하기에,

사용하다가 불량이 날 수도 있고, 실제로 프린트를 많이 해서 남아있는 counter 가 적어져 low toner 가 발생할 수 있습니다.


어찌 되었던, 재생 토너 가루와 함께, 이 chip 을 미리 구비해 놔야 프린터 생활을 끊김 없이 지속 할 수 있습니다.

재생토너 구입시 딸려온 chip 과 더불어, 이미 한번 구입 했지만, 다다익선이라 생각하고 다른 PCB 모양의 chip 도 구입해 놨습니다.


* 1set Toner Cartridge chip For Xerox DocuPrint CP115w CP116w CP225w CM115w CM225fw cp115 cp116 cp225 cm115 cm225 115 powder reset

https://www.aliexpress.com/item/32808201383.html



도착샷은 블로그 생활에 필수.






3. chip 교환


메인 chip 은 수지로 보호 되어 있고, 그 주위에 저항과 캐페시터가 자리잡고 있습니다.

전기적 관점에서는 저항과 캐페서터가 신호라인에 존재하는 것이 더 안정적인 것임을 잘 알고 있습니다.



이로써, 총 세 가지 버전의 chip 을 사용해 보게 되네요.



토너 뚜껑을 분리하고 보니, 토너가루는 아직 충분해 보입니다만,

Chip 이 low toner 라고 카운팅 되었으니, 이참에 새로운 chip 으로 리셋 하면서 가루도 충분히 채워 줍니다.



이것 저것 하다 정신 없다보니 이렇게 흘렸습니다.

참고로 토너 가루는 발암물질이라 합니다. 최대한 가족들에게 호흡되지 않도록 잘 치우도록 합니다.



기존 chip 을 제거하고, 새로운 칩으로 교환합니다.

이번에 교환한 칩은, 이번에 구입한게 아닌, 예전에 구입한 놈으로 교환해 봤습니다. (처음 써봄)



프린터와 연결되는 접점은 동일합니다.




4. 마무리


사진은 없지만, low toner 알람은은 사라지고, OS 및 printer 에서, 새 toner 가 장착되었다고 인식하였습니다.

재생토너라도 전혀 품질에 영향이 잆으며, 간단한 chip 교환 만으로도 마르고 닳도록 레이저 프린터를 사용할 수 있습니다.


다른 분들에게도 조금이남아 도움이 되길 바라면서...




Update - 20200524


저번에 Magenta 칩을 다 써버려 이번에 Magenta 칩만 따로 구입했습니다.


* 4PCS CT202264 CT202265 CT202266 Toner Cartridge Chip For Fuji Xerox DocuPrint CP115W CP116W CP225W CM115W CM225fw Printer Chips

https://www.aliexpress.com/item/32824588409.html



제품 사진을 보면, 뒷면에 실장된 칩을 수지로 덮어 정전기 등의 외부 자극으로부터 보호해주는 형식이라서 선택했습니다.

한달만에 도착했습니다.



이런... 판매용 그림과는 전혀 다른, 경험상 잘 고장나는 형식의 제품으로 배달되어 왔습니다.



아놔... >_<




Update - 20200812


지속적으로 chip 이 망가지고 있습니다.

그러다 보니 점점 chip 보유량이 줄어들어, 갑작스러운 고장에 대응할 수 없을 듯 하여 5개씩 뭉탱이로 구입했습니다.


* 20 x Reset Chip for Fuji Xerox DocuPrint CM115w CM115 CM225w CM225 CP115w CP115 CP116w CP116 CP225W CP225 Toner Cartridge Chip

https://www.aliexpress.com/item/32808885287.html



요즘은 빨리 도착하는군요.



봉투 뒷면에는 아래와 같은 문자가 적혀 있네요. 판매상도 구분이 필요한지 자세하게 적어 놨습니다. 0.035 는 무슨 뜻인지 모르겠네요.



당분간은 chip 이 모자랄 걱정은 없을 듯 합니다.



And

Hardware | SMD 부품 납땜용 오븐 취득기

|

1. SMD 부품의 납땜


일전에 Arduino Nano 의 PCB 만을 구해서 DIY 했더랬습니다.


* Hardware | Arduino 를 DIY 해보자 - 2

https://chocoball.tistory.com/entry/Hardware-Arduino-DIY-itself-2



결국은 실패 했고, 그 원인 중 하나로는 SMD 납땜을 일반 인두기를 이용했기 때문이라고 생각했습니다.

그래서, soldering paste 를 활용하는 열풍기를 만들어야 겠다고 생각했고, 그에 따른 12V 전원을 위해 PC Power Bench 가 필요했습니다.


모두 DIY 로 진행하던 중이라, 부품 수급과 시간이 많이 걸리고 있었습니다. 그러다가 새로운 국면을 맞이하게 됩니다.





2. 득템


이 글 제목이, 왜 "구매기" 가 아니라, "취득기" 라고 제목을 붙였냐면,

저의 땜취미를 싫어하는 가족들의 비난을 조금이라도 회피하고자, 쓰레기장에서 "줏어" 왔기 때문입니다.



다만, 상태가 아래와 같이 전원선을 잘라 놨네요...

(재활용은 허락치 않겠다라는 굳은 의지)






3. 수리 항목


우선 잘려진 전원선을 구해다, 끊어진 부분과 이어줘야 합니다.



구조는 아주 간단합니다.

+, - 선과 접지선을 전원선과 이어주면 됩니다.

우선 필요한 부품은, 전원 케이블과 끊어진 부분을 서로 이어지는 커넥터네요.


전원 케이블은 주위에 굴러다니는, 굵고 아름다운 전원선을 사용하기로 합니다.



커넥터 부분은 납땜 + 절연 테이프를 사용해도 되나, 깔끔하게 작업을 진행하고자 커넥터를 따로 구입하였습니다.


* 단선 연선 복합꽂음커넥터 1P 2P 3P / 전선연결단자

http://shopping.interpark.com/product/productInfo.do?prdNo=747212445



전선 연결단자는 LED 전등으로 바꿔줄 시에도 필요한 부품이라, 1P 100 개 들이 1봉을 배송비 포함 10,500원에 구입했습니다.





4. 수리 진행


연결할 부분을 과감하게 자릅니다.



뾰롱~! 작업 하느라 사진을 못 찍어, 중간 과정 생략.



각 전선 3개 피복을 벗기고, 테스터기로 +/- 확인하여 전열선으로 연결해 줍니다.

접지선에는 남는 선 하나를 연결해 주면 끝납니다.



확실히 전선 연결 커넥터를 이용하니, 작업 시간이 엄청나게 짧아집니다.

좋은 공구와 자재는 작업 효율을 극대화 하는군요.



전원선 굵기가 너무 굵어, 기존 고정 부품이 구멍에 다 들어가지를 못합니다.

느슨해 지면 안되므로, 피복 벗기고 난 고무를 덧대었습니다.


이것으로 작업은 완료.




5. 온도 측정


작동 확인과 SMD 부품 납땜에 사용되는 solder paste 가 녹을 수 있는 온도까지 온라 가는지 확인해 봤습니다.



후훗, 작동도 잘 되고 150 도까지 무난하게 올라 갑니다.





6. 적합 테스트


납 알갱이가 버무려진 solder paste 로 테스트 해봅니다.



웃... 183 도가 필요했군요.



시험삼아 동판에 발라서 구웠더니만, 잘 녹고 굳었습니다.

계속 전원을 인가하면, 상한선 없이 계속 온도가 올라갑니다. 적절한 온도에서 전원을 차단하는 것이 포인트네요.


신기하게도, soldering paste 는 물처럼 녹았다가 물방울들이 모이듯 접점으로 납이 모여듭니다.

손으로 하는 납땜기술이 전혀 필요가 없습니다.


Arduino Duemilanove 의 PCB 를 가지고 테스트 해 봤습니다.



잘 되었는데, 확실하게 한다고 너무 구워버려 기판이 좀 탔네요. ㅠㅠ

납이 녹고 붙으면, 오래 끌지 않고 전원을 차단하는게 중요해 보입니다.





7. 이번에 확인한 사실들


* 온도 조절이 최종 품질을 좌우한다. 약 200 도 정도가 maximum.

* 온도 조절을 위해서 oven 용 온도계도 검토해 본다.

* SMD 를 기판에 바른다는 느낌의 납만 필요하므로, 부족하다 싶을 정도로 solder paste 를 발라 놓는다.

* 180 도 이상에서 납이 붙으므로, 플라스틱 재질이 들어간 부붐이나 열에 약한 부품은 따로 납땜한다.


SMD 부품을 올리는 arduino DIY 프로젝트에 속도가 붙을 것 같습니다.

많이 기쁩니다.


And

Hardware | ebook 크레마 사운드업 액정 수리기

|

1. 수리 의뢰


독서를 좋아하는 회사 동료는 크레마 사운드업을 들고 출퇴근 하면서 글을 많이 읽습니다.

책에 대해 이런저런 이야기 하다가, 일전에 크레마 사운드업 액정이 깨졌지만, 이만한게 없어서 또 샀다고 하더군요.


흠흠... 새로운 기기의 수리 기회인가?

일단 가져와 보라 했습니다.



크레마 계열이 소금 액정이라 쉽게 깨진다고 하네요.



e-ink 라서 그런지, 죽기 바로 직전의 화면을 계속 보여줍니다.

저렴하게 수리할 수 있겠다라는 느낌을 가지고 수리 의뢰를 받습니다.





2. 분해


어떤 액정을 사용하는지, 수리가 가능한지를 알아보기 위해 분해를 시작합니다.

외관상 볼트는 보이지 않으니, 헤라를 넣어서 상하판을 분리하기 위한 적당한 위치를 찾습니다.



전원 스위치 옆부분을 살짝 밀어보니 단차가 생깁니다. 구조적으로 지지대가 적어 헤라를 넣기 적당해 보이네요.



드드득 하면서 분리가 됩니다.



특별한 상처 나지 않고 기분 좋게 분리가 되었습니다.



나중에 배터리 교환도 쉽게 가능하겠네요.



페이지 넘기는 버튼과 연결된 부분 말고는 마무리는 나쁘지 않아 보입니다.

크렉이, 이 페이지 넘기는 버튼 쪽에서 생겼네요. 세게 눌렸거나 이동중에 이쪽 부분에 충격이 가해져서 깨진 것 같습니다.



기판이 이뻐서 기판만 찍어봅니다.



위에서 보이는 것 처럼, 액정과 연결된 부분은 총 세 곳 입니다.

사진에서 오른쪽은 터치센서 커넥터 이고, 왼쪽 작은것은 LED 커넥터와 액정 데이터 커넥터 입니다.



기판 분해를 시작합니다. 오른쪽에 테이프를 놔두고 나사가 도망가지 않게 하나하나를 붙여 놓습니다. 



터치센서 커넥터 분리하구요.

액정과 화면밝기 (LED) 커넥터를 분리합니다.



기판이 분리되고 드디어 액정의 정보를 확인 할 수 있습니다.

ED060XCD 네요.



크렉 전체 샷 입니다.



액정 밑 부분의 검은 색 LED 빛샘 방지 테이프를 살살 벗긴 후,

태두리의 양면 테이프를 헤어드라이기로 달궈서 분리시키면, 최종적으로 상판과 액정이 분리됩니다.



검은색 스폰지 부분도 분리해 줍니다. 양면테이프라 조심해서 분리해야 추가 파손을 막을 수 있습니다.



e-ink 라 그런지, 이 난리를 쳐도 마지막 모습으로 잉크가 세겨져 있습니다.

손으로 만져보면 꼭 인쇄된것 같이, 검은 색 부분이 오돌토돌 합니다.



커넥터 들을 자세히 보면, 액정 위에 LED 조명, 그리고 터치 센서가 올라가 있는 것을 확인 할 수 있습니다.


액정 > LED > 터치 센서 순서 입니다.



LED 와 터치 센서는 재활용 해야 하니, 액정만 잘 분리해야 합니다.



여러 겹으로 연결되어 있으니, 최소한의 껍질만 벗겨내야 합니다.



깨진 액정을 마지막으로 제거하구요.



액정과 LED 판 사이에 있는 마지막 한장 (e-ink 로 더러워진) 층만 벗겨내면 끝 입니다.

액정을 제거하면서 자잘한 무수한 유리가루가 튑니다. 손에도 찔리면 너무 작아서 찾을 수도 없어요.


가능하면 보호 장갑을 착용하고 작업하시길 권해 드립니다.

저는 귀찮아서 걍 했습니다.





3. 액정 대체품 선정


원래 재품인 ED060XCD 를 구입하면 좋겠지만, LED 와 터치센서 한몸으로만 팔고 있습니다.

45 USD... 이럴꺼면 그냥 정식 수입 업체에 수리 맡기면 됩니다.


폭풍 검색 후, 아래 15 USD 로 액정 수리기를 발견합니다.

* 크레마 사운드 15.50$에 액정 수리하기

https://cafe.naver.com/ebook/468036



위위 사진의 흰색 스티커 부분을 보면 사운드의 액정은 ED060XH7 모델입니다.


구글링 합니다.

ED060XH7를 사용하는 다른 e북 제품이 다른 액정 모델과 혼용해서 쓰고 있다는 것을 발견합니다.

ED060XD4 !!! 

다른 모델도 있었던 거 같은데 기억이 안 나네요;

알리를 검색합니다. 가격 차이가 없네요 ㅡㅜ


즉, 크레마 사운드 (사운드업이 아님) 는 액정이 ED060XH7 인데, 6인치 다른 모델로 사용이 가능하다는 이야기 입니다.
크레마 사운드업은 ED060XCD 이지만, 이놈도 다른 모델로 이식 가능하다는 추측이 나옵니다.


다른 외국 수리기들을 보니 PCB 가 거의 비슷하면서, 6인치 모델의 액정들은 여러가지 버전들이 사용되었습니다.
실패의 가능성도 있으니, 가장 낮은 급인 ED060XD4 를 주문하기로 합니다.


* 6" ED060XD4(LF)C1 ED060XD4(LF)T1-00 ED060XD4 U2-00 Without a touch light ebook eink lcd display





4. 6인치 액정 제품들


참고로 6인치 e-ink 제품들에 대한 리스트를 올려 봅니다.



여기서 알게된 사실은, 크레마 사운드에 들어간 액정이, 사운드업에 들어간 액정보다 더 좋습니다. (DPI 가 더 높음)


그래서, 액정 교체시 가장 좋은 선택은, 터치센서와 LED 가 빠진, 민짜 ED060XH7 만을 구입해서 이식하는 것 입니다.

그런데, 아직 민짜 ED060XH7 만을 파는 곳이 없네요.





5. 도착


9월 초에 주문을 넣었지만, 한가위가 끝나고 9월이 다되어 갈 때쯔음 도착했습니다.



제품이 액정이니 만큼, 잘 포장되어 왔습니다.



뽁뽁이로 잘 쌓여져 왔구요.



마지막 테스트한 화면으로 배송이 되었습니다.



여타 액정과 비슷해 보입니다.



커넥터 부분에 캐패시터 SMD 와 칩이 하나 달려 있습니다.

전체적인 모양은 원래 액정과 다르나, 커넥터 끝부분은 동일합니다.






6. 조립


우선 PCB 에 연결해서 정상 동작 하는지 확인해 봅니다.



오오오!!! 동작해!



확인이 끝났으니, 확신을 가지고 조립을 시작합니다.



바로 본격적인 조립으로 들어갑니다. 순서는 분해의 역순...


먼저 분리해 놨던, 터치센서와 LED 뭉치를 상판에 올려 놓습니다.

양면테이프에 원래 붙여져 있던 흔적이 있으니, 정확히 맞춰서 올려 줍니다.

이게 틀어지면 PCB 커넥터 부분에서 불필요한 힘을 받을 수 있으니 주의애햐 합니다.



그 위에, 이번에 도착한 새로운 액정을 올려 줍니다.



LED 빛샘을 방지하는 검은 테이프를 올려서 다시 잘 붙여 줍니다.



검은색 쿠션도 붙여 주구요. (이거 붙이는거 잊어버려 나중에 한번 더 분해...)



테이프에 붙여서 챙겨 놨던 나사들을 하나씩 다시 조여 줍니다.



LED 커넥터를 결합해 줍니다.

커넥터를 오픈하는 방법이 다른 것과 달리 뒤쪽을 열어줘야 합니다. 그리고 선을 넣을 때 좀 빡빡합니다. 주의해서 연결해 줍니다.



터치 센서와 액정 커넥터를 이어주고, 전원 스위치 커넥터도 연결해서 마무리 해줍니다.

나머지는 뚜껑을 닫고 문제 없이 동작하기를 빌면 끝.





7. 확인


모두 조립하고 전원을 인가합니다.

두둥!!! 성공입니다.



터치도 화면 밝기도 잘 동작합니다.



집에 있는 인터넷에 연결해서 Wi-Fi 도 확인해 봅니다.



그 사이에 시스템도 업데이트 되었네요. 테스트 겸 시스템 업데이트도 해 줍니다.



모든게 정상으로 마무리 되었습니다. 뿌듯!





8. 인계


원래 주인에게 돌려 주면서 기존 액정과 비교해 봤습니다.



확실히 원래 사용된 ED060XCD 가 ED060XD4 보다 가독성이 좋습니다.



보호필름 차이도 살짝 있겠지만, 액정 차이가 있다는 것은 확실해 보입니다.

원래 액정이 잔상도 훨씬 더 적구요.






9. NEXT


왠지 그냥 끝내기가 아쉬워, 액정 고장난 크레마 하나를 더 구해서 수리 해보고 싶어 졌습니다.

지금까지 조사하고 확인한 정보들이 있으니, 다음번은 쉽게 가능할 것 같습니다.



1만원에 중고장터에서 구입 했습니다.

액정 깨진 크레마 카르타가 도착하면, 또다시 "저렴한" 수리 도전해 보겠습니다.


And
prev | 1 | next