'알리익스프레스'에 해당되는 글 141건
- 2018.05.16 Hardware | ATtiny85 를 사용해 보자 - 2
- 2018.05.16 Hardware | ATtiny85 를 사용해 보자 - 1 2
- 2018.04.15 Life | 여행용 가방 롤러 수리하기
- 2018.04.03 Hardware | TCS230/TCS3200 color sensor 를 사용해 보자
- 2018.03.28 Hardware | Fuji Xerox 의 CP116w 토너 교환기
- 2018.03.25 Hardware | Cross cable 로 MediaWiki 서버 연결해 보기
- 2018.03.06 DIY | 캠핑용 화로대를 업그래이드 해보자
- 2018.03.04 Hardware | Arduino 의 AREF pin 에 대해 알아보자
- 2018.03.01 Hardware | HC-SR501 PIR motion sensor - 2 2
- 2018.02.28 Hardware | Arduino 로 Photoresister 가지고 놀기 - 2
1. 준비물
ATtiny85 에 구동 program 를 업로드 하기 전에, 구성품 준비가 필요합니다.
관련해서는 다음에 링크된 이전글을 참고해 주세요.
* Hardware | ATtiny85 를 사용해 보자 - 1
- http://chocoball.tistory.com/entry/Hardware-ATtiny85-1
참고로 ATtiny85 의 datasheet 는 다음과 같습니다.
- Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf
2. 참조 사이트
ATtiny85 에 프로그램 업로드를 위해서는 몇가지 방법이 있지만,
저는 다음 사이트를 기준으로 참고하였습니다.
* Breathing life into the DigiSpark clone with ATtiny MCU
- https://makbit.com/web/firmware/breathing-life-into-digispark-clone-with-attiny-mcu/
3. Arduino - ArduinoISP
자, 이제 준비가 완료 되었으니 이제 시작을 해 볼까요?
ATtiny85 에 프로그램을 심으려면,
바로 PC 와 USB를 통해 연결하면 안되고 "PC -- USB -- Arduino -- ATtiny85" 식으로 연결하여 프로그래밍 할 수 있습니다.
중간에 위치한 Arduino 를 브릿지 형식으로 사용하는 것입니다. 이름하야 In-circuit Serial Programmer (ISP) 라는군요.
이를 위해, Arduino 가 ISP 로 동작할 수 있도록 Arduino 에 ISP 프로그램을 업로드 해줍니다.
File > Examples > 11.ArduinoISP > ArduinoISP
이걸로 Arduino 쪽의 준비는 끝났습니다.
4. Arduino IDE - Perferences
다음으로 IDE의 Preferences 메뉴로 이동하여 ATtiny85 보드를 Arduino 에서 인식시킬 수 있도록 관련된 library 를 인스톨 합니다.
이를 위하여, 다음 URL 중 하나를 Preferences 의 Boards Manager URLs 에 다음 중 하나를 선택하여 입력해 줍니다.
* ATtinyCore
- http://drazzy.com/package_drazzy.com_index.json
* Digispark
- http://digistump.com/package_digistump_index.json
File > Preferences > Additional Boards Manager URLs
보통은 Digispark 용을 사용해도 되나,
Spence Konde 라는 사람이 만든 ATTinyCore 는 좀더 정밀하게 설정할 수 있고, 문제 없이 동작한다고 합니다.
* Spence Konde
- https://github.com/SpenceKonde/ATTinyCore
저는 Spence Konde 를 선택했습니다.
5. Arduino IDE - Board Manager
다음으로 ATtinyCore 라이브러리를 Board Manager 를 통해 설치합니다.
Tools > Board > Board Manager > search "ATtinyCore"
위의 과정까지 거치면, 아래처럼 Board 에서 ATtiny85 를 선택할 수 있습니다.
6. Arduino IDE - Programmer
이제 마지막으로 운용할 Programmer 를 선택합니다.
이미 우리는 Arduino 를 ISP 로 사용할 것을 알기에, "Arduino as ISP" 를 선택하면 됩니다.
ATtinyCore 라이브러리가 설치되어 있으므로, "Arduino as ISP (ATtinyCore)" 를 선택해도 됩니다만,
왠지 default 로 제공되는 것을 사용하고 싶어서 "Arduino as ISP" 를 선택했습니다.
어느쪽을 선택해도 문제없을것 같아요.
이제 Arduino IDE 에서의 준비는 끝났습니다.
7. Layout
ATtiny85 의 Pin 배열은 다음과 같습니다.
위의 그림을 참조하여 Arduino 와 ATtiny85 를 다음과 같이 연결합니다.
ATtiny85 | Arduino Nano --------------------------- VCC | 5V GND | GND Reset | D10 Pin 0 | D11 Pin 1 | D12 Pin 2 | D13 ---------------------------
추가로 Arduino 의 GND/RESET 에 10uF 캐패시터를 연결해 줍니다.
이유는 Arduino 가 ATtiny85 에 업로드 할 때, auto reset 을 방지하기 위함이라 합니다.
실제 모양은 다음과 같아요.
그간 고생해서 얻은 "DIP to SOIC converter" 가 빛을 발하는 순간입니다.
이제 물리적인 구성은 완료 되었습니다.
8. sketch
소스는 아래 link 를 참조하였습니다.
깜빡이 간격이 좀 짧은것 같아 increment / decrement 를 5에서 1로 변경했습니다.
* Attiny85 blink fade for loop 3 LED
- https://codebender.cc/sketch:354605
해당 소스는 단순히 LED 를 깜빡이게 하는것 외에도,
PWM (Pulse With Modulation) 기법을 이용하여 LED 점등을 fade 효과를 낸 것입니다.
/* This code will allow you to mix fading and blinking on 3 LEDs Jill Dawson */ int Pin0 = 0; // LED connected to pwm pin 0, which can blink or fade int Pin1 = 1; // LED connected to pwm pin 1, which can blink or fade int Pin2 = 2; // LED connected to digital pin 2, which can only blink void setup() { // nothing happens in setup // declares pins as outputs pinMode (0, OUTPUT); pinMode (1, OUTPUT); pinMode (2, OUTPUT); } //Loop repeats void loop() { // fades pin 0 in from min to max in increments of 5 points for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) { // sets the value (range from 0 to 255): analogWrite(Pin0, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } // fades pin 0 out from max to min in increments of 5 points for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1) { // sets the value (range from 0 to 255): analogWrite(Pin0, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } // blinks LED 1 three times { digitalWrite (1, HIGH); //turns pin 1 on delay (1000); //waits for 1 second digitalWrite (1, LOW); //turns pin 1 off delay (1000); //waits for 1 second digitalWrite (1, HIGH); //turns pin 1 on delay (1000); //waits for 1 second digitalWrite (1, LOW); //turns pin 1 off delay (1000); //waits for 1 second digitalWrite (1, HIGH); //turns pin 1 on delay (1000); //waits for 1 second digitalWrite (1, LOW); //turns pin 1 off } // blinks LED 2 three times { digitalWrite (2, HIGH); //turns pin 2 on delay (1000); //wait for 1 second digitalWrite (2, LOW); //turns pin 2 off delay (1000); //waits for 1 second digitalWrite (2, HIGH); //turns pin 2 on delay (1000); //wait for 1 second digitalWrite (2, LOW); //turns pin 2 off delay (1000); //waits for 1 second digitalWrite (2, HIGH); //turns pin 2 on delay (1000); //wait for 1 second digitalWrite (2, LOW); //turns pin 2 off delay (1000); //waits for 1 second } // fades pin 1 out from max to min in increments of 5 points for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) { // sets the value (range from 0 to 255): analogWrite(Pin1, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } // fades out from max to min in increments of 5 points: for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1) { // sets the value (range from 0 to 255): analogWrite(Pin1, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } }
Arduino IDE 에서 업로드 합니다.
AVR Part 항목을 보면 ATtiny85 로 정확히 인식합니다.
ATtiny85 에 FLUSH 가 성공하면 위와 같이 문제없이 완료가 됩니다.
9. 결과
짜잔~!
FIN
이제 ATtiny85 에 프로그램을 업로드 하여 standalone 으로 동작하는 것까지 확인할 수 있었습니다.
"ATtiny85 + DIP to SOIC adapter + USB board" 를 USB 에 직접 연결하여,
Arduino ISP 없이도 Digispark 처럼 프로그램을 업로드 할 수 있는게 목표므로, 다음 글에서 구성해 보도록 하겠습니다.
'Hardware' 카테고리의 다른 글
Hardware | Amazon Kindle Paperwhite 구매기 (0) | 2018.05.29 |
---|---|
Hardware | 전자저울 구매하기 (0) | 2018.05.20 |
Hardware | TCS230/TCS3200 color sensor 를 사용해 보자 (0) | 2018.04.03 |
Hardware | Raspberry Pi 3 model B 의 RPC 와 UK 생산지 차이를 비교해보자 (0) | 2018.03.29 |
Hardware | Fuji Xerox 의 CP116w 토너 교환기 (0) | 2018.03.28 |
1. 시작
Arduino Nano 를 사용하고 있지만, 실제 프로젝트 구성시 이렇게 많은 핀들이 필요할지 의문이 드는 때가 있습니다.
인터넷을 돌아다니다 보면, Arduino 본체는 아니지만 소스코드는 거의 동일하지만, chip 은 조그마한 것이 사용된 것을 볼 수 있습니다.
그 이름하야 ATtiny85.
Arduino Nano 에 들어가는 chip 이 Atmel 사의 MEGA328P 인데,
이 ATtiny85 의 생산회사도 Atmel 사 입니다.
이 ATtiny85 는 두가지 package 가 존재합니다.
하나는, 아래 보이느 DIP8 형태 (다리가 8개 벌레같은 칩) 의 ATtiny85.
'
다른 하나는, SOIC 형태 (납착한 보드 납땝식) 의 ATtiny85 입니다.
다리는 8개밖에 없는지라, power / ground 빼면 6개 이고, chip control 하는 1번을 빼면,
실제 가용할 수 있는 pin 수는 5개가 되겠군요.
실제 project 상에서 사용되는 Pin 수는 그리 많지 않기때문에,
간단한 sensor 를 이용하여 기능 구현할 때에는 Arduino 보단, 이런 ATtiny85 를 사용하는 것이 훨씬 경제적으로 보입니다.
- 장소 차지가 적다
- Power가 더 적게 먹을 것이다
- 기판 적층시 component 처럼 실장할 수 있다
2. 최종 모양
ATtiny85 에 프로그램을 upload 하기 위해서는, FTDI 나 Arduino ISP 모드를 이용하여 8k 자체 메모리에 업로드 해야 합니다.
위의 방법이 일반적이지만, 아래 그림의 처럼
직접 Arduino IDE 에서 프로그래밍 하여 USB를 통해 upload 할 수 있는, Digispark 모양으로 만들고 싶었습니다.
* Digispark
- http://digistump.com/products/1
클라우드펀딩인 Kickstarter 에서도 큰 방향을 일으킨 제품입니다.
* Digispark - The tiny, Arduino enabled, usb dev board!
- https://www.kickstarter.com/projects/digistump/digispark-the-tiny-arduino-enabled-usb-dev-board
지금까지 내용을 정리하면 최종 모습은 아래와 같은 모양이 됩니다.
- SOIC 형태
- Digispark 처럼 USB 를 통한 개발 보드 형태
알리에서 검색해 보면, DIP 소켓 을 사용하여 Digispark 처럼 사용할 수 있게 해주는 보드가 있습니다.
그럼 위의 DIP 소켓을 SOIC 로 변환해주는 adapter 를 이용하면, 최종적으로 SOIC를 사용할 수 있겠군요.
이제 구상이 끝났으니 AliExpress 에서 구입을 진행해 봅니다.
2. 구입 - ATtiny85
먼저 SOIC 타입의 ATtiny85 를 구매합니다.
* Free Shipping 5PCS Original Integrated circuit parts ATTINY85 ATTINY85-20SU
5개에 1만원 정도이니, 여타 다른 chip 들에 비하면 비싼 편 입니다.
릴 package 를 끊어서 보내줬군요.
확대해서 보면 Atmel 사의 TINY85 라고 쓰여 있습니다.
여기서 잠깐, 구매한 ATtiny85 는 20SU 라는 코드가 달려 있습니다.
제품사양을 보면 20SH 는 좀더 비싸고, 20SU 는 조금 더 쌉니다. 기호의 의미는 다음과 같다고 하네요.
– H: NiPdAu lead finish
– U: matte tin
U는 주석이고, H 는 NiPdAu (Nickel-Palladium-Gold) 로 납땜시, 더 확고하고 쉽게 접합된다고 합니다.
이렇게까지 전문적으로 아직 필요가 없으므로, 무난하게 20SU 버전으로 구입합니다.
3. 구입 - USB board
ATtiny85 chip 을 엊고 USB 를 연결하게 할 수 있는 보드를 구매합니다.
물론 ATtiny85 가 DIP 소켓에 꽂혀 있는 일체형이나 SOIC chip 이 납땜되어 있는 버전도 팔지만,
SOIC 를 바꿔 끼울 수 있도록 adapter 를 사용할 것이기에 깡통 USB 보드를 선택합니다.
* ATtiny13A/ATtiny25 /ATtiny45/ATtiny85 Pluggable Development Programming Bare Board
배송 포함 1천원정도니 부담없습니다.
잘 도착해서 보니, 기판 찌꺼기가 같이 붙어 있네요.
뭐 이 가격이니 이해할 수 있습니다.
뒷면입니다.
기판 찌꺼기는 펜치로 잡고 구부리면 쉽게 제거됩니다.
제거되면 기분이 뭔가 좋아집니다. 이런 즐거움도 선사해 주는군요.
나중에 adapter 가 도착하여 ATtiny85 와 채결할 때, 호기심으로 1번 핀을 거꾸로 채결해 봤더니 연기가 나더군요.
(나중에 안 사실이지만, 이 연기는 솔더링 잘되라고 도포된 약품이 레귤레이터 열로 증발한 것)
USB 연결시에 PC 에서 인식 못하는 문제가, 이 태워먹은 결과라고 잘못 생각하고 바로 2개를 추가로 주문했습니다.
(USB 를 연결하여 Digispark 처럼 사용하려면, 필요한 과정이 더 있슴)
총 3개가 되었군요.
4. 구입 - DIP to SOIC converter
USB 의 DIP 소켓을 SOIC 를 엊을 수 있게 하는 adapter / converter 를 주문합니다.
* SOIC8 SOP8 to DIP8 EZ Socket Converter Module Programmer Output Power Adapter With 150mil Connector SOIC 8 SOP 8 To DIP 8
잘 도착했습니다.
포장도 잘 되어 있네요.
정전기 방지 포장까지 되어 있습니다.
Chip 규격이 다양한 만큼 알아야 할것도 많네요.
AliExpress 의 무료배송 마약때문에, 새로 구입한 converter 가 도착하려면 최소 2주 이상을 또 기다려야 합니다.
이거 하나 하는데 도대체 얼마나 기다려야 하는겨.
가끔 AliExpress 를 통한 놀이는 기다림이 대부분인것 같습니다.
기다리다가 열정이 식어버려, 다시 끌어올리는데 시간이 많이 걸리는 경우가 있어요.
5. 구입 - 또다른 DIP to SOIC converter
이제 정확한 제품 규격을 알게 되었으니 제대로 구입합니다.
제품명에 "Universal" 이라는 문구가 왠지 신뢰갑니다.
* Universal Adapter Sockets SOP8 SOP 8 to DIP8 DIP 8 for all Programmer 200 208 mil
드.디.어! 정확한 converter 가 도착 했습니다.
대충 포장되어 있더라도 상관 없습니다.
아아아아아! 이거 얼마나 걸린거야.
6. 최종 모습
겨우 최종 결과 모습이 되었습니다.
별것도 아닌것 같은데 너무 오래 걸렸네요.
USB 보드 + DIP to SOIC adapter + ATtiny85 구성 입니다.
모두 합체하면 이렇게 되죠.
FIN
여기까지 오는데 너무 힘을 빼서, 실제 Arduino IDE 를 이용한 program uploading 은 다음 편에서 다루도록 하겠습니다.
1. 시작
쌤소나이트에서 2005년, 그러니까 지금으로부터 거의 13년전에 구입한 여행가방이 있습니다.
가방에 붙어있는 정식 명칭은 "SAHO SPIN .55" 인데, 너무 오래되서인지 구글 이미지에 검색도 되지 않는군요.
잘 쓰고 있었는데, 휠 바퀴의 고무 부분이 삭아서 진동과 소음이 심해졌습니다.
AS 센터의 글을 종합해 보면, 바퀴 한짝당 교환 금액이 대략 1만 5천원 가량 한답니다.
흠...
2. 가방의 정보
가방 안감의 지퍼를 열면, 안쪽에 다음과 같은 태그가 숨어 있습니다.
태그를 뒤집어 보면, 일련번호와 정식 명칭 정보가 부착되어 있습니다.
SAHO SPIN .55 라는군요.
너무 오래되서인지 구글 이미지에는 딱 맞는 제품이 보이지 않고,
부분적으로 플라스틱으로 구성된, 업그레이드 된 것처럼 보이는 제품이 겨우 검색됩니다.
이름이 SAHO 가 아니라 SAHORA 입니다.
교환될 상태를 보니, 본체와 고정되는 세트로 교환하고 싶으나 부품이 없는것 같고,
바퀴만 갈아보려고 크기를 알아봅니다.
대략 휠하우스 반지름이 26mm 정도 되니, 휠 직경이 50mm 정도면 될 것 같습니다.
비교적 고무가 남아있는 바퀴의 지름을 재어 보니 거의 50mm 군요.
휠의 두께는 18mm 정도 하는군요.
AliExpress 에서 검색해본 결과 여러가지가 검색되지만,
아래 제품이 가장 적당해 보이고 많이들 구입한 히스토리가 있습니다.
* Osmond 50x18mm Luggage Suitcase Replacement Wheels OD 50 1.97 Inch ID 6 W 18 Axles 30 Repair Set Lowest Price Bag Accessories
제품 설명도 실측한 정보랑 거의 동일합니다.
3. 구입 및 도착
가격이 좀 있다 보니, 무료배송이라 하더라도 항공으로 배송되어, 1주일만에 도착하였습니다.
한꺼번에 모두 갈려고 2세트, 바퀴 4개를 구입했습니다.
4. 교환
쌤소나이트의 휠들은 볼트/너트로 되어 있지 않고, 축의 철심 끝이 리벳처럼 뭉틍그려져서 고정되는 방식입니다.
그래서 바퀴 교환을 위해서는 철심을 절단할 수밖에 없는 구조입니다.
줄질을 열씸히 하다보면 절단이 되고 분리가 됩니다.
철심 한쪽의 head 는 플라스틱 고정 모양과 같이 사각형 모양을 하고 있어서,
바퀴의 힘으로 축이 돌아가거나 느슨해 져서 풀리는 것을 애초에 방지하고 있습니다. 꼼꼼히도 만들어 졌네요.
이정도의 철심을 잘라야 하는지라, 4개를 다 자르게 되면 팔과 어깨가 뻐근합니다.
별로 일도 아닐것 같지만, 이거 하고 피곤해서 바로 10시간을 잤더랬습니다.
바퀴를 분리하면 휠베이스 안쪽에 부품 넘버가 있습니다.
"HI-W10501 I 6" 처럼 보입니다만.... 알아봤자 필요 없는 정보 되겠습니다.
교환용 바퀴와 와셔를 안쪽에 끼워주고, 배달되어 온 축으로 고정한 다음, 한쪽을 아래처럼 나사로 고정합니다.
나사 안쪽에 순간접착제를 넣어서, 고정 후, 혹시 모를 풀림을 방지했습니다.
비교적 정상인 하나 남은 바퀴 하나와 비교샷 입니다.
구조는 거의 동일하군요.
표면 고무가 벗겨져 나간 바퀴와 비교적 정상인 바퀴의 비교 입니다.
홀라당 벗겨져 있네요.
짜잔~~~ 모두 교환한 샷 입니다.
어이쿠 허리야.
기존 제품의 깔끔함과는 비교할 수 없겠지만, 다시 되살아난 바퀴의 기능과 비교하면 DIY 할만 합니다.
제품을 모르는 사람이면, 기성 부품이라고 생각이 될 정도입니다.
적출된 바퀴들 입니다.
속에 끼어 있던 먼지와 때가 같이 나왔습니다. 으웩!
FIN
아래는 완성 동영상 입니다. 시원스럽게 잘 굴러가네요. 아 기분 좋아.
사실 다른 Samsonite 가방의 바퀴 2개가 먼저 고장났을 시,
교환하고 싶어 AS 센터 및 해외 Samsonite 웹사이트를 뒤져서 알아 봤으나, 너무 오래된 제품이라 제고 부품을 찾을 수가 없었습니다.
이 제품도 바퀴가 고장나고 확인해 보니 마찬가지였죠.
DIY 밖에 없다고 생각하고 AliExpress 를 뒤져보니 비슷한 규격이 있어서 교환하게 되었습니다.
교환된 바퀴로 가방에 새생명이 불어 넣어진 느낌입니다.
조금 아쉬운 점은, 직경 55mm 바퀴가 있으면 보다 잘 맞을듯 한데, 55mm 바퀴는 없더라구요.
모두 즐거운 DIY 하세요~.
'Life' 카테고리의 다른 글
Life | iPhone 6S Plus 밧데리 교환 DIY (0) | 2018.05.19 |
---|---|
Life | 세면대 파이프를 교환해 보자 (0) | 2018.05.13 |
Life | 중국의 Xiamen 방문기 (0) | 2018.03.29 |
DIY | 캠핑용 화로대를 업그래이드 해보자 (0) | 2018.03.06 |
Life | 샤오미 미밴드 1S 손목밴드 교환기 (0) | 2018.02.04 |
1. Color Sensor
색을 인식하는 센서가 있다고 해서 주문해 봤습니다.
* Color sensor TCS230 TCS3200 Color Recognition Sensor Detector Module DC 3-5V Input
2. 도착
한 2주 걸렸습니다.
잘 쌓여서 왔습니다.
뒷면입니다.
저 가운데 있는 센서가 컬러 센서 인듯 하군요.
디지털 현미경으로 한번 확인해 봤습니다.
RGB 소자가 격자로 자리잡고 있네요.
소자 연결 부분은 금선으로 연결되어 있는 것이 보입니다.
센서의 스팩은 다음과 같습니다.
* TCS230
3. Pinout
Arduino 와의 pin 연결은 다음과 같습니다.
TCS230 | Arduino Nano --------------------------- GND | GND OE | - S1 | D4 S0 | D3 | S3 | D6 S2 | D5 OUT | D2 VCC | 5V ---------------------------
Layout 은 다음과 같습니다.
4. Sketch
* Arduino Color Sensing Tutorial – TCS230 TCS3200 Color Sensor
아래는 color 센서에서 가장 기초가 되는 sketch 입니다.
소스를 보면 S2 / S3 를 high / low 를 가지고 RGB 를 구분하여 입력을 받는 구조 입니다.
/* Arduino Color Sensing Tutorial * * by Dejan Nedelkovski, www.HowToMechatronics.com * */ #define S0 3 #define S1 4 #define S2 5 #define S3 6 #define sensorOut 2 int frequency = 0; void setup() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(sensorOut, INPUT); // Setting frequency-scaling to 20% digitalWrite(S0,HIGH); digitalWrite(S1,LOW); Serial.begin(9600); } void loop() { // Setting red filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,LOW); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); // Printing the value on the serial monitor Serial.print("R= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100); // Setting Green filtered photodiodes to be read digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); // Printing the value on the serial monitor Serial.print("G= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.print(" "); delay(100); // Setting Blue filtered photodiodes to be read digitalWrite(S2,LOW); digitalWrite(S3,HIGH); // Reading the output frequency frequency = pulseIn(sensorOut, LOW); // Printing the value on the serial monitor Serial.print("B= ");//printing name Serial.print(frequency);//printing RED color frequency Serial.println(" "); delay(100); }
위의 소스는 센서의 주파수 특성을 그대로 표현해 줄 것입니다.
5. 결과
아래 무지개 색을 빨강부터 차례대로 비추어본 결과 입니다.
값이 주르륵 변하는게 보이네요.
값의 변화를 그래프로 표시해보니 다음과 같습니다.
빨간색일 경우는 빨간색이 가장 높고, 파란색일 경우는 파란색 파장이 가장 높습니다.
위의 결과는 단순히 frequency - 주파수의 값을 나타내므로, 0~255 까지를 보여주는 color decimal value 는 아닙니다.
6. color code 형식으로 표시
color code 방식으로 표시를 하기 위해선, 아래 사이트에서 소개된 TCS3200 sample 을 사용하면 됩니다.
* ARDUINO COLOR SENSOR / COLOR RECOGNITION SENSOR TCS230
- http://www.instructables.com/id/Arduino-COLOR-Sensor-Color-Recognition-Sensor-TCS2/
* Sample library
Library 에 중요한 코드가 들어가 있어서 sample sketch 는 너무 간단합니다.
심심한 부분도 있고 해서 color OLED 를 함께 사용한 code 를 짜 봅니다.
목표는 color OLED 에 현재 인식되는 color 도 표시하고 RGP decimal value 도 표시해 주는 것입니다.
#include "TCS3200.h" uint8_t RGBvalue[3]; TCS3200 colSens; // for color OLED #define sclk 13 #define mosi 11 #define cs 10 #define rst 9 #define dc 8 #include "Adafruit_GFX.h" #include "Adafruit_SSD1331.h" #include "SPI.h" // Option 1: use any pins but a little slower Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, mosi, sclk, rst); // Color definitions #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF void setup() { Serial.begin(115200); Serial.println("BEGIN"); colSens.begin(); display.begin(); display.fillScreen(BLACK); } void loop() { colSens.loop(); colSens.getRGB (RGBvalue); //colSens.getRGBtoMaxCorrection (RGBvalue); // clear previous text display.fillRect(2, 2*(display.height())/12, (2.5*(display.width()))/6-1, 9*(display.height())/12, BLACK); display.setCursor(2, 2*(display.height())/12); display.setTextColor(RED); display.print("R "); //printing name display.print(RGBvalue[0]); display.setCursor(2, 5.5*(display.height())/12); display.setTextColor(GREEN); display.print("G "); //printing name display.print(RGBvalue[1]); //printing RED color frequency display.setCursor(2, 9*(display.height())/12); display.setTextColor(BLUE); display.print("B "); //printing name display.print(RGBvalue[2]); //printing RED color frequency // check what color is sensing if (RGBvalue[0] == 255 && (70 < RGBvalue[1] && RGBvalue[1] < 80) && (80 < RGBvalue[2] && RGBvalue[2] < 90)) display.fillRect(2.5*(display.width())/6, (display.height())/12, 5*(display.width())/6, 11*(display.height())/12, RED); else if (RGBvalue[0] == 255 && RGBvalue[1] == 255 && (60 < RGBvalue[2] && RGBvalue[2] < 70)) display.fillRect(2.5*(display.width())/6, (display.height())/12, 5*(display.width())/6, 11*(display.height())/12, YELLOW); else if ((110 < RGBvalue[0] && RGBvalue[0] < 120) && (160 < RGBvalue[1] && RGBvalue[1] < 170) && (100 < RGBvalue[2] && RGBvalue[2] < 110)) display.fillRect(2.5*(display.width())/6, (display.height())/12, 5*(display.width())/6, 11*(display.height())/12, GREEN); else if ((70 < RGBvalue[0] && RGBvalue[0] < 80) && (98 < RGBvalue[1] && RGBvalue[1] < 108) && (200 < RGBvalue[2] && RGBvalue[2] < 210)) display.fillRect(2.5*(display.width())/6, (display.height())/12, 5*(display.width())/6, 11*(display.height())/12, BLUE); }
if 문이을 간결하게 하거나 변수화 시킬 수 있는 부분은 많으나, 그냥 발로 짰습니다.
또한, text update 를 하는 방법을 몰라 그냥 fillRect() 함수로 문대 버리다 보니, 인터럽트가 걸려서 색 인식 update 가 늦습니다.
판별 루틴에서 프린트된 빨간색과 센서가 인식되는 값이 달라서, 센서 인식 값 기준으로 +5/-5 로 값의 범위를 맞췄습니다.
그냥 보여주기식 꼼수...
이하 동영상 입니다.
동영상에서는 노란색 인식이 똥망이네요.
FIN
색을 인식하는 모듈을 어디에 쓸꺼냐고 물어보면... 딱히 적절한 대답이 생각나지 않습니다 만...
언젠가는 한번 있을지도... (아니면 없을지도...)
'Hardware' 카테고리의 다른 글
Hardware | 전자저울 구매하기 (0) | 2018.05.20 |
---|---|
Hardware | ATtiny85 를 사용해 보자 - 2 (0) | 2018.05.16 |
Hardware | Raspberry Pi 3 model B 의 RPC 와 UK 생산지 차이를 비교해보자 (0) | 2018.03.29 |
Hardware | Fuji Xerox 의 CP116w 토너 교환기 (0) | 2018.03.28 |
Hardware | Cross cable 로 MediaWiki 서버 연결해 보기 (0) | 2018.03.25 |
1. 레이저 프린터
일전에 잉크젯 프린터를 사용했더랬습니다.
돈좀 아껴 보겠다고 무한 리필셋도 같이 구입해서, 막히면 뚫고, 막히면 뒤집어 보고, 매번 손은 잉크로 범벅이고.
아예 노즐이 막힌것 같으면 정품 잉크통 사서 또 리필셋 연결하고 실패하고....
아놔 이게 사용하라고 만들어 놓은 리필품인지 진정 의심이 들었더랬죠.
그런 저의 노고를 알게된 직장 상사분이 광명을 찾아 주셨습니다.
후지제록스의 레이저 프린터를 구입하거라~
구입하고 나니 완전 신세계였죠.
무엇보다도 잉크 노즐막힘 스트레스가 없어졌습니다.
세상에는 참 좋은게 많네요.
2. 토너~!
그렇습니다.
토너 색이 떨어진 것이지요. 구입하여 사용한지 대략 8개월이 지나가고 있던 때였습니다.
예전 그 직장 상사님이 말씀하시던 이야기가 떠올랐습니다.
구입시 낑궈져 있던 토너는 조금만 들어있는 것이니, 곧 토너를 구입하게 될게야~
정품을 검색해 보니 대략 10만원 언저리네요.
역시 레이저라 그런가...
마음의 고향, 알리익스프레스에서 기웃거려도 조금 쌀뿐 그리 많이 차이나지 않았습니다.
일단, 어떤 제품을 사용해야 하는지, 토너를 집어 넣는 옆구리를 까봅니다.
교환은 편하게 작업할 수 있도록 되어 있네요.
흠흠...
이렇게 생겼군요. 제품 번호도 사진을 찍어서 기록합니다.
3. 재생토너~!
검색을 해보니 재생토너라는 것이 존재하고, 정품 토너와 차이를 거의 느낄 수 없다고 하네요.
폭풍 검색과 사용기를 통해서 제일 신뢰가고 품질이 좋은 업체를 하나 찾아 냅니다.
맙소사, 색소 하나당 3천800원!
서울시내 점심값도 안되요.
이럴 수 있는건가? 의심이 들지만, 구매자들의 평이 찬양 일색이네요.
각 색소 한개와 검은색 2개를 구입합니다.
검은색은 많이 사용되니 2개를 구입한거죠.
3. 도착
품질이 자신이 있고, 소중한 구입품이니 가장 비싼 우체국 택배로 보내주셨습니다.
결제 다음날 도착했네요.
뭔가 최대한 원가 절감한 흔적이지만 전혀 괘념치 않습니다.
그만큼 싸게 구입할 수 있었으니까요.
종이박스에서 꺼내 보면, 비닐로 밀봉된 카트리지가 나옵니다.
흠흠 이런 모양이군요.
검정색은 다른 카트리지보다 2배 큽니다?!
2개 구입할 필요가 없었네요.
4. 교환
빨간불이 떠서 토너가 떨어진 카트리지를 분리해 냅니다.
사진에 보이는 노란색과 그 위 조금 떨어진 구멍으로 손가락을 넣고 찝어 내듯이 힘을 내면 쉽게 분리됩니다.
배달되어 온 재생토너의 연결부 입니다.
토너가루가 새지 않도록 잘 밀봉되어 있습니다.
플라스틱 캡슐을 분리하면, 두꺼운 테이프로 2중 밀봉 된 것을 볼 수 있습니다.
이 테이프도 분리합니다.
네... 검은색은 다른 색의 두배예요.
교환하는데 5분도 안걸렸어요.
5. 외형적 차이
재생토너는 후지제록스의 로고가 없네요.
사용하는데 문제가 없으니 전혀 괘념치 않습니다.
재생토너는 윗부분의 플라스틱의 뚜껑이 없어서 chip 이 노출되어 있습니다.
아마 이 부분을 통하여 chip 정보를 수정하겠죠?
사용하는데 문제가 없으니 전혀 괘념치 않습니다.
FIN
그 후에 시간이 없어서 확인은 못해봤지만, 잘 나올꺼라 봅니다.
뭔가 문제가 있으면, 이 포스팅에 업데이트 할께요.
정상이면 업데이트 하지 않겠습니다.
재생토너 만세~!
'Hardware' 카테고리의 다른 글
Hardware | TCS230/TCS3200 color sensor 를 사용해 보자 (0) | 2018.04.03 |
---|---|
Hardware | Raspberry Pi 3 model B 의 RPC 와 UK 생산지 차이를 비교해보자 (0) | 2018.03.29 |
Hardware | Cross cable 로 MediaWiki 서버 연결해 보기 (0) | 2018.03.25 |
Hardware | RadarBox24 신청부터 설치까지 (0) | 2018.03.07 |
Hardware | Arduino 의 AREF pin 에 대해 알아보자 (0) | 2018.03.04 |
1. 시작
Raspberry Pi 3 model B를 사용하여 MediaWiki 를 개인 서버로 활용하고 있습니다.
도메인은 아직 구입하지 못했지만, "www.chocoball.com" FQDN 을 치면, Host 파일에서 해당 IP를 할당받은
Raspberry Pi 3 model B 로 접속합니다.
이제 회사에서 보안 문제로 IP를 할당받기 어려워 고민에 빠졌습니다.
2. Crossover cable
크로스 케이블은 중간에 hub 를 거치지 않고, 직접 PC to PC, PC to Server 로 연결할 수 있는 방법입니다.
실제 IP 를 받지 않아도 PC / Laptop 과 직접 연결하여 통신할 수 있습니다.
원리는 Hub 를 통해서 in / out 이 연결 되면, RX/TX 를 교환해 주는데,
Crossove 케이블을 직접 연결하면, Hub 를 통한 것 처럼 되는 원리 입니다.
알리익스프레스에서 cross cable 로 검색해 보니, 다음과 같은 제품이 있네요!
원래는 크로스 케이블 전체를 구입해야 하나,
기존 LAN선 끝부분에 어뎁터처럼 연결하여 크로스 케이블 RX/TX 를 교환해주는 효과를 내는 제품이었습니다.
* RJ45 CAT5 CAT5E Network Ethernet Connector male to female Cable cross Adapter New Free Shipping
기존 Lan 케이블을 사용할 수 있고, 이 어뎁터만 끼우면 Crossover 케이블이 되므로 좋아 보이네요.
아래는 제품 설명입니다.
RJ45 crossover In-line Coupler provides a Male-to-Female feed-through connection.
Enable connecting 2 LAN cables to become an extension.
Compatible with all routers/hubs/network RJ45 connections.
The adapter will allow you to connect 2 PCs or hubs with regular network cables instead of crossover cables
Convert your patch cable into a crossover cable by connecting it to this adapter
Gold plated connectors
Meets draft 11 of the EIA / TIA 586A category and specification
Color : blue. Type : Adapter.
외형입니다.
왠만하면 중국어로 되어 있습니다. 중국어를 이제 공부해야 할것 같습니다.
3. 도착
한 3주만에 도착했습니다. 뽁뽁이로 잘 쌓여서요.
확대한 사진입니다. 제조 마무리는 잘 되어 있는것 같습니다.
조그마한 때도 같이 왔네요.
4. 연결
일반 Lan 케이블 끝에 이번에 구입한 어뎁터를 끼우고, Raspberry Pi 3 model B 의 Wired Lan port 에 접속시킵니다.
Lan 케이블 한쪽 끝은 노트북 Wired Lan port 에 연결합니다.
5. 설정
Raspberry Pi 3 model B 에서도 인터넷을 사용할 수 있도록 공유 설정을 해 줍니다.
* Control Panel > Network 와 Internet > Network 접속
무선 네트웍 아이콘을 오른클릭 하여, 설정 메뉴로 진입합니다.
공유 탭에서 인터넷 접속을 "로컬 네트웍" 접속에 공유하기를 설정해 줍니다.
이제 Windows 7 에서 설정이 완료 되었습니다.
이제 유선랜은 무선랜의 인터넷이 공유됩니다.
6. 유선랜 연결
Raspberry Pi 3 model B 에서 확인해 봅니다
IP를 잘 할당 받았네요..
인터넷 외부와 접속 되는지 ping 으로 확인해 봅니다.
성공입니다~!!!
7. 역으로 접속
이제 Laptop 에서 Raspberry Pi 3 model B 에서 돌아가는 MediaWiki 에 접속하기 위해 IP 를 찾아 봅니다.
이미 위에서 직접 Raspberry Pi 에 consol 연결하여 확인해 보았지만,
그렇지 않을 경우는 이렇게 arp 명령어를 이용하여 찾을 수 있습니다.
Host 파일을 이용하여 직접 접속할 수 있도록 resolver 를 설정해 줍니다.
- C:\Windows\System32\drivers\etc\hosts
짜잔~~~.
이제 직접 접속할 수 있게 되었습니다.
이제 따로 IP 를 할당받지 않고, 명함 크기만한 Raspberry Pi 3 model B 를 직접 가지고 다니면서 활용할 수 있게 되었습니다.
사실, VMware 같은 가상 서버를 만들면 되지만...
8. 번외
손 맛사지기 USB 충전기를 이번에 사용했더니, 다음과 같은 dmesg 메시지가 나오네요.
Under voltage 워닝도 나오고 Raspberry Pi 3 model B 와 Ubuntu Mate 의 페어는 괜찮은것 같습니다.
FIN
Raspberry Pi 시리즈는 Model A 1+ > Model B 1 > B 1+ > B 2 까지,
안전성을 위해서 비싸더라도 아래 제조사의 통 알루미늄 케이스를 구입해서 사용하고 있었습니다.
* Pi Holder (Pi 3 B only) SECURE Case with Heat Dissipation
Model 3 B+ 가 새로 나왔다 하니, 이제 통알루미늄 케이스를 구입해서 쉽게 가지고 다닐수 있게 할까 생각해 봅니다.
'Hardware' 카테고리의 다른 글
Hardware | Raspberry Pi 3 model B 의 RPC 와 UK 생산지 차이를 비교해보자 (0) | 2018.03.29 |
---|---|
Hardware | Fuji Xerox 의 CP116w 토너 교환기 (0) | 2018.03.28 |
Hardware | RadarBox24 신청부터 설치까지 (0) | 2018.03.07 |
Hardware | Arduino 의 AREF pin 에 대해 알아보자 (0) | 2018.03.04 |
Hardware | HC-SR501 PIR motion sensor - 2 (2) | 2018.03.01 |
1. 시작
저희 가족은 캠핑을 좋아합니다.
봄에서부터 가을까지, 주말에 기회가 되면 전국 방방곡곡 쾌적하고 놀기 좋은곳을 찾아 떠나지요.
또한 저는 불장난과 고기를 좋아해서 "모닥불 = BBQ" 없는 캠핑은 상상할 수 없습니다.
지금 사용하는 화로대는 2번째 화로대 입니다만, 너무 만족하며 사용하고 있었습니다.
과거 중소기업 출품회에서 부도난 회사가 1만 5천원에 떨이하는 제품을 구해온 것이라고 합니다.
자잘한 부분에서 아쉬움이 남지만, 도장 품질이나 철판 두깨등을 보면 잘 만들어진 제품입니다.
그러던 어느 2016 캠핑장에서 짐 싸다가...
어? 다리를 지지하는 캡이 빠지네요? 홀라당~
리벳으로 고정된 지지 캡이 힘이 가해지니 힘없이 빠져버리는 것이였습니다.
이런....
다른 다리들도 조립 다리를 끼운 상태로 비틀어 보니 쉽게 빠져 버리네요.
2. 수리해 보자
너무 잘 사용하고 있던 것이라 애정도 있고 해서, 수리해 보기로 마음 먹습니다.
우선 리벳 잔재를 제거해 줍니다.
이게 쉽게 제거되지 않네요.
리벳 특성상 앞뒤로 둥글게 튀어나온 형상이어서, 그 힘으로 지지하는 지라, 쉽게 빠지지 않습니다.
휴... 겨우 한쪽 뺐습니다.
이걸 네귀퉁이를 전부 해야 하네요.
공판장에서 직경이 얼추 비슷한 나사를 사서 고정 했습니다.
너무 뿌듯합니다.
다만 처음 구매한 나사 길이가 너무 길어 (12mm), 8mm 짜리로 다시 구매했습니다.
여기까지 구매 비용 3,000 원 * 4박스 (12mm 짜리 2박스 + 8mm 짜리 2박스) = 1만2천원.
거의 본체 가격게 근접하는 가격이 됩니다.
3. 뚜껑
다리 고정부분을 고치다 보니,
뚜껑 부분의 헐거워진 리벳도 신경쓰이기 시작합니다.
한번 해봤으니, 똑같은 방법으로 리벳을 제거해 줍니다.
다만, 뚜껑 지지용 리벳은 더 단단하게 조여져 있습니다.
구멍이 작아, 동일한 리벳이라 하더라도 넉넉하게 고정되다 보니 힘이 제대로 받았습니다.
다리 지지용으로는 부족하지만 뚜껑용은 충분합니다.
다리 지지용으로는 크기가 좀더 큰 리벳으로 했으면 이런 고생은 안했을 것이라는 것을 발견하니 아쉬웠습니다.
이런것 까지 신경쓰며 제조되었으면, 좀더 팔리지 않았을까?
거의 뭉거뜨려야만 빠질 수 있게 되어 있습니다.
플라이어 끝으로 찝어 잡아 내면서 갈아 냈습니다.
겨우겨우 해서 하나 뽑았습니다.
이걸 4 부분을 작업했습니다.
플라이어를 세게 잡고 뽑다가 손도 찝혀서 피도 봤습니다. ㅠㅠ
8mm 가 부족하여 12mm 짜리를 쇠톱으로 잘라서 사용하기로 합니다.
새로 구입하면 필요 없는 나사가 너무 많이 남게 되니, 최대한 활용해 보기로 합니다.
생각 외로 잘 잘립니다.
거의 다 잘렸을 때에는 플라이어로 구부리면 쉽게 잘려 나갑니다.
감쪽같이 동일하게 길이를 만들었습니다.
다칠 수 있으니, 끝부분은 사포로 갈아 냅니다.
나사의 직경보다 뚜껑 고정 리벳의 구멍이 작아서 드릴로 구멍을 넓혀 줍니다.
이거 하나 하는데도 많은 공구와 작업이 필요할 줄이야.
스페이서를 끼우고 반대쪽에서 너트를 끼워 조이면 끝 입니다.
아... 아름답다.
다리 고정 부분과 뚜껑 지지 부분의 리벳을 모두 볼트 너트로 교환했습니다.
아주 튼튼하게 고정되어서 왠만해서는 고장날 염려가 없어 보입니다.
4. 손잡이
화로대이다 보니 플라스틱 손잡이가 부스러져 버렸습니다.
지속적으로 열을 받으니 견딜수가 없었겠죠.
또한 튀어나온 손잡이라, 트렁크에 싣고 갈 때, 차 내벽을 긁거나
짐을 쌓을 시, 다른 짐들과 여간 걸리적거리는게 아니였습니다.
삭아서 부러져 버린 시기가 2017년 여름.
AliExpress 에서 "stainless box handle" 로 검색해서 나온 제품들을 보면 그때 당시에는 배송료까지 하면 기본 2만원 이상이었습니다.
한국에서도 2017년에는 송료 포함 8천원 정도 했습니다.
음... 배보다 배꼽이 더 커지네...
그러다 "바이핸즈" 라는 사이트에서 "박스손잡이/J204" 라는 2천원에 팔고 있네요!!!
송료 포함하면 4천5백원.... 8천원보다는 더 아낄 수 있었습니다.
올해 캠핑도 가야 하니, 바로 주문 합니다.
짜잔~~~ 딱 좋은 크기와 무게감 입니다.
위의 사진 중간에 보이는 구멍 두개가 원래 손잡이가 있던 자리 입니다.
지속적인 열로 인하여 바스라져 버렸죠.
요 위치 입니다.
자리를 우선 잡아 보고, 각 구멍에 네임펜 등으로 표시해 둡니다.
철판이 두꺼워서 인지 드릴로 잘 뚤리지 않습니다.
어느정도 뚫다가 못을 이용하여 구멍을 내 줍니다.
구멍이 뚫리면, 다시 드릴을 넣어서 돌려주어 다듬어 줍니다.
샤샤샥 !!!
장착 완료 !!!
검정색에 은빛 stainless 이지만, 묵직함에서 오는 신뢰성은 이루 말할수 없습니다.
안쪽도 잘 고정 했습니다.
5. 완성 !!!
대단히 만족 스럽습니다.
뭔가 뿌듯합니다.
후훗 나 좀 멋진걸 !!!
하지만 가족 아무도 좋은 반응을 보여주지 않습니다... (흠~~ 심드렁)
눕혀 놓으면 손잡이가 자동으로 내려가서 옆모습이 깔끔해 집니다.
이제 트렁크에서 다른 짐들에 간섭 없이 잘 수납이 될 것 같습니다.
FIN
본체 가격은 쌌지만, 2년여에 걸친 수리와 비용, 고민의 시간을 따져 보면,
혹자는 "그냥 새거 사..." 라고 말 할 수 있을지 모르겠습니다만, DIY 로 성취감을 느껴보신 분이라면 이해 하시겠죠 !!!
Eco frendly, Green Earth 를 위한 project 하나가 이렇게 완성 되었습니다.
이제 캠핑가서 가족한테 한번 더 자랑해 봐야징.
2018.04.01 update
뜬금없이 자려고 누웠다가 채결 부분이 걱정이 되었습니다.
손잡이 안쪽에 바로 너트를 채결시켜 놔서,
무거운것을 넣어 두면 철판에 피로가 많이 쌓여 혹시 철판이 찟어지지 않을까 걱정이 되었습니다.
집에 굴러다니는 적당한 와셔를 끼워 넣어 줬습니다.
이제 안심입니다.
'Life' 카테고리의 다른 글
Life | 여행용 가방 롤러 수리하기 (0) | 2018.04.15 |
---|---|
Life | 중국의 Xiamen 방문기 (0) | 2018.03.29 |
Life | 샤오미 미밴드 1S 손목밴드 교환기 (0) | 2018.02.04 |
Life | LED 전등의 잔불을 없애보자 (0) | 2017.12.26 |
Life | 선풍기 분해 청소하기 (0) | 2017.12.21 |
1. 시작
일전에 여러 photoresistor 의 수치적인 차이를 확인해 보았습니다.
* Hardware | Arduino 로 Photoresister 가지고 놀기 - 2
- http://chocoball.tistory.com/entry/Hardware-Arduino-Photoresister-2
여기서 사용했던 arduino 의 또다른 기능.
그것은 AREF 였습니다.
위의 글에서는 참고한 사이트를 단순히 따라하다 보니 진정 AREF 의 기능을 모르고 사용했더랬습니다.
오늘은 이 AREF 에 대해 좀더 알아보도록 하죠.
2. What is the AREF?
왜 욕하냐구요?
아닙니다. Arduino 는 영어하는 형들이 만들었으므로, 기본 영어로 모든 문서가 되어 있습니다.
AREF 는 Analog REFerence 의 약자 입니다.
가장 명확한 설명은 당연 arduino 제조사 사이트겠지요.
* analogReference()
- https://www.arduino.cc/reference/en/language/functions/analog-io/analogreference/
다만 뭔가 와닿지 않습니다.
다른 사이트를 살펴 보지요.
* Arduino Tutorials – Chapter 22 – the AREF pin
- http://tronixstuff.com/2013/12/12/arduino-tutorials-chapter-22-aref-pin/
설명이 자세하게 잘 나와 있습니다.
요는, analogRead() 를 통해서 입력받은 voltage 값이 작거나 차이가 적을 때, digital 화 시켜서 leveling 을 해준다는 것 입니다.
실제로 photoresistor 를 가지고 놀았을 때, 소자간의 차이가 거의 없는 경우는,
단순히 voltage 값만 안다고 해서 그 차이를 느낄 수가 없었습니다.
3. ADC
이런 analog 값을 digital 로 바꿔주는 기능이 ADC 입니다.
그럼 ADC가 뭐야? 라고 할 수 있습니다. (욕 아니예요)
* Analog to Digital Conversion
- https://learn.sparkfun.com/tutorials/analog-to-digital-conversion
위의 그림처럼 5V 기준으로 4가지로 레벨링 한다고 합시다 (0, 1, 2, 3),
입력값이 1V라고 한다면 1.25V ~ 0V 사이이므로 0값을 리턴하고, 3V 라고 한다면 2값을 리턴하게 됩니다.
위의 경우는 2의 2승인 2-bit 해상도의 ADC 입니다.
Arduino 는 10-bit ADC 가 내장되어 있어서, 2의 10승인 1024 leveling 이 가능합니다.
실제 output 값은 0~1023 까지가 되지요.
아래는 실제 photoresistor 를 측정했을 시의 표시 값들입니다.
실제 voltage 값이 아니라 0~1023 으로 leveling 한 값이 측정되게 됩니다.
4. Sketch
그럼 어떻게 사용하는 것일까요?
아래 소스처럼 선언해주면 됩니다.
void setup() { ... analogReference(EXTERNAL); ... }
옵션의 의미는 다음과 같습니다.
* DEFAULT
- 5V 전압이 기본인 arduino 에서는 5V,
3.3V 전압을 사용하는 arduino 에서는 3.3V 를 기준 전압으로 사용합니다.
* INTERNAL
- 내장 기준 전압을 사용한다는 의미이며, ATmega168/ATmega328 를 사용한 arduino 에서는 1.1V,
ATmega8 를 사용한 보드에서는 2.56V 가 기준 전압이 됩니다.
Arudino MEGA 는 아래 두가지 (1V1 / 2V56) 기준이 사용됩니다.
* INTERNAL1V1 (only for Arduino MEGA)
- 내장 1.1V 를 기준 전압으로 사용합니다.
* INTERAL2V56 (only for Arduino MEGA)
- 내장 2.56V 를 기준 전압으로 사용합니다.
* EXTERNAL
- AREF 핀에 외부 전원 (0~5V)을 연결하여, 이를 기준 전압으로 사용합니다.
- 이것을 우리가 사용한 것이죠.
FIN
이제 analogRead() 를 사용할때면 analogReference() 를 사용하여 쉽게 leveling 할 수 있을것 같습니다.
'Hardware' 카테고리의 다른 글
Hardware | Cross cable 로 MediaWiki 서버 연결해 보기 (0) | 2018.03.25 |
---|---|
Hardware | RadarBox24 신청부터 설치까지 (0) | 2018.03.07 |
Hardware | HC-SR501 PIR motion sensor - 2 (2) | 2018.03.01 |
Hardware | Arduino 로 Photoresister 가지고 놀기 - 2 (0) | 2018.02.28 |
Hardware | Digitial Compass - HMC5883L 사용기 - 1 (0) | 2018.02.19 |
1. 시작
HC-SR501 을 가지고 움직임이 있을 시 반응하는 센서를 가지고 놀아 봤더랬습니다.
* Hardware | HC-SR501 PIR motion sensor
- http://chocoball.tistory.com/entry/Hardware-HCSR501-PIR-motion-sensor
그러던 중, Photoresistor 단자를 발견합니다.
아래는 HC-SR501 회로도 입니다.
제조사의 사이트에 올라와 있는 회로도와 실제 기판을 봐도 이미 R3 (1MΩ) 이 실장되어 있어서,
제대로 된 값의 photoresistor 만 달면 기능하게 되어 있네요.
좀더 찾아 보니, 아예 세트로 파는 업자도 있습니다.
요는 photoresistor 를 이용하여, 항상 모션 탐지를 하는 것이 아니라,
어두워졌을 때에만 작동하도록 하는 것 입니다.
흠흠, 그럼 photoresistor 를 구입해야 겠죠?
2. Photoresistor 가지고 놀기
HC-SR501 에 photoresistor 를 붙여서 구동하기 위해, 우선 photoresistor 를 가지고 놀아봅니다.
* Hardware | Arduino 로 Photoresister 가지고 놀기 - 1
- http://chocoball.tistory.com/entry/Hardware-Arduino-Photoresister-1
이때 구입한 제품이 GL5528.
간단한 동작을 확인 했으니, 본격적으로 HC-SR501 에 붙여 봅니다.
3. HC-SR501 에 납땜하기
Photoresistor 는 RL 이라는 자리에 납땜하면 됩니다.
+/- 전극 구분이 없어서 그냥 두 다리 고정하고 납땜하면 됩니다.
높이 잘 계산해서 올려주고요.
장착되면 위와 같은 모습이 됩니다.
다리를 옆으로 벌려서 흔들리지 않게 하고 납땜합니다.
짜잔 !!!
4. Layout 및 Sketch
구성은 예전 글에서 사용했던 구성과 sketch 와 완벽히 동일합니다.
HC-SR501 PIR sensor | Arduino Nano ---------------------------------- S | D8 + | 5V - | GND ---------------------------------- Piezo busser | Arduino Nano ---------------------------------- S | D11 + | 5V - | GND ----------------------------------
회로 구성입니다.
Sketch 입니다.
/******************************************************* Uses a PIR sensor to detect movement, sounds a buzzer *******************************************************/ //the time we give the sensor to calibrate (10-60 secs according to the datasheet) int calibrationTime = 30; int ledPin = 13; // choose the pin for the LED int inputPin = 8; // choose the input pin (for PIR sensor) int pirState = LOW; // we start, assuming no motion detected int val = 0; // variable for reading the pin status int pinSpeaker = 11; //Set up a speaker on a PWM pin (digital 9, 10, or 11) void setup() { pinMode(ledPin, OUTPUT); // declare LED as output pinMode(inputPin, INPUT); // declare sensor as input pinMode(pinSpeaker, OUTPUT); //give the sensor some time to calibrate Serial.begin(9600); Serial.print("Calibrating sensor "); for(int i = 0; i < calibrationTime; i++) { Serial.print("."); delay(1000); } Serial.println(" Done!"); Serial.println("SENSOR is ACTIVE now"); delay(50); } void loop() { val = digitalRead(inputPin); // read input value if (val == HIGH) { // check if the input is HIGH blinky(); // blink LED when motion haas been detected // digitalWrite(ledPin, HIGH); // turn LED ON playTone(300, 160); delay(150); if (pirState == LOW) { // we have just turned on Serial.println("Motion detected!"); // We only want to print on the output change, not state pirState = HIGH; } } else { digitalWrite(ledPin, LOW); // turn LED OFF playTone(0, 0); delay(300); if (pirState == HIGH){ // we have just turned off Serial.println("Motion ended!"); // We only want to print on the output change, not state pirState = LOW; } } } void playTone(long duration, int freq) { // duration in mSecs, frequency in hertz duration *= 1000; int period = (1.0 / freq) * 1000000; long elapsed_time = 0; while (elapsed_time < duration) { digitalWrite(pinSpeaker,HIGH); delayMicroseconds(period / 2); digitalWrite(pinSpeaker, LOW); delayMicroseconds(period / 2); elapsed_time += (period); } } void blinky() { for(int i=0; i<3; i++) { digitalWrite(13, HIGH); delay(200); digitalWrite(13, LOW); delay(200); } }
5. 흠...
손으로 photoresistor 를 가리면 동작은 하는데, 기민하게 동작하지 않았습니다.
원래 회로는 short 된 회로인데,
photoresistor 를 연결하면 광원이 있는 곳에서 close 상태로 만들어 주어 모션 감지를 하지 않게 (disable) 됩니다.
주위가 어두워 지면 photoresistor 의 dark resistance 가 올라가
원래 회로가 가지고 있던 short 상태를 만들어 주는 것인데,
어정쩡하게 저항이 발생하면 제대로 short 된 상태로 넘어가지 못하는 것이었습니다.
뭔가 Photoresistor 가 망가졌나? 생각하고 다른 GL5528 센서로 교환하다, 옆에 있던 캐패시터 옆구리를 지져버렸습니다.
아놔...
다행히 기존에 구입해 놨던 capacitor 가 있어서 교체합니다.
* Hardware | AliExpress 에서 condenser 를 구입해 보자
- http://chocoball.tistory.com/entry/Hardware-AliExpress-condenser-buy
기존의 capacitor 보다는 굵은 소자라 뭔가 신뢰가 가네요.
6. 다른 Photoresistor
Capacitor 를 교환했고, photoresistor 도 교환했음에도 불구하고 여전히 기민하게 동작하지 않습니다.
Photoresistor 를 가리고 한참 기다리고 있어도 운 좋으면 detecting 하고, 그렇지 않으면 아무 반응이 오지 않았습니다.
결국 구입한 photoresistor 의 수치적인 한계라고 확신하고, 다른 photoresistor 를 구입해서 테스트 해보기로 합니다.
처음 구입할때는 보이지 않았던, 5가지 묶음 세트가 있네요.
바로 구입합니다. (아니 왜 저 세트로 처음부터 안파냐고...)
* Photoresistor Kit 5Kindsx10pcs 5506 5516 5528 5537 5539 Light Dependent Resistor LDR Pack Photoresistor Package for Arduino
각 소자 번호에 따라 어떤 값을 보이는지 테스트 해봤습니다.
* Hardware | Arduino 로 Photoresister 가지고 놀기 - 2
- http://chocoball.tistory.com/entry/Hardware-Arduino-Photoresister-2
수치를 그래프화 해본 결과, 처음 구입한 GL5528 (녹색) 은 가장 어둡게 해도
dark resistance 가 조금 높게 나옵니다. (스펙상으로는 1MΩ 이긴 한데...)
확인 결과 새로 구입한 세트에 있는 5539 (하늘색) 이 더 높은 dark resistance 를 보여 줬습니다.
어둡게 하면 거의 short 상태를 만들어 줄 수 있을 것 같습니다.
수치적으로도 5MΩ 정도면 short 상황을 만들 수 있겠네요.
7. 구동 확인
기존 GL5528을 제거하고 새로 구입한 5539 를 납땜해 주었습니다.
이제 대망의 마지막 확인 입니다.
5539 photoresistor 는 센서의 구불구불이 더 촘촘하네요.
어둡게 하면 의도대로 잘 동작합니다.
Photoresistor 에 샤프심 캡을 씌워, 어두운 상황을 만들어 동작 시키니 예상대로 반응합니다.
FIN
작년 7월에 처음 photoresistor 를 구매하여 실패의 실패를 거듭하여 겨우 확인 했습니다.
HC-SR501 센서는 이제 서랍으로 들어갈 수 있게 되었습니다.
Photoresistor 는 종류와 가용 범위가 많아서 잘 선택하고 사용해야겠습니다.
이제야 마음 편하게 다른 센서들 공부를 할 수 있겠네요.
'Hardware' 카테고리의 다른 글
Hardware | RadarBox24 신청부터 설치까지 (0) | 2018.03.07 |
---|---|
Hardware | Arduino 의 AREF pin 에 대해 알아보자 (0) | 2018.03.04 |
Hardware | Arduino 로 Photoresister 가지고 놀기 - 2 (0) | 2018.02.28 |
Hardware | Digitial Compass - HMC5883L 사용기 - 1 (0) | 2018.02.19 |
Hardware | MAX4466 마이크 앰프 breakout board 사용해 보기 (0) | 2018.02.11 |
1. 시작
Photoresistor 를 가지고 놀아 봤더랬습니다. (아래 글)
* Hardware | Arduino 로 Photoresister 가지고 놀기 - 1
- http://chocoball.tistory.com/entry/Hardware-Arduino-Photoresister-1
다만, 위의 사진에서 보이듯 광원을 받는 센서부의 홈 갯수가 적어 보이는 것 같았습니다.
밑의 사진처럼 촘촘하면, 뭔가 더 예민하게 반응할 것 같았습니다.
이미 PIR motion sensor 에도 GL5528 을 가지고 적용해 봤으나 (아래 글),
완벽한 어둠이 있지 않으면 동작하지 않아, 적당한 어둠에도 동작하도록 하기 위해 위와 같이 촘촘한 센서를 찾아보게 됩니다.
* Hardware | HC-SR501 PIR motion sensor
- http://chocoball.tistory.com/entry/Hardware-HCSR501-PIR-motion-sensor
2. 주문
AliExpress 를 뒤져 봅니다.
제가 GL5528을 구입할 때만 해도 다양한 센서를 한묶음으로 파는 경우를 못본것 같은데, 이제는 팔고 있네요.
* Photoresistor Kit 5Kindsx10pcs 5506 5516 5528 5537 5539 Light Dependent Resistor LDR Pack Photoresistor Package for Arduino
미리 이런게 있었더라면...
하면서 바로 주문을 넣습니다.
다양한 센서라 그런지, 다른 부품들보다는 다소 비싼 편 입니다. 한, 500원 정도 ?! :-)
3. 도착
한 2주 걸려서 도착했습니다. 알리에서 주문한 것 치곤 빠른 편 입니다.
스폰지 형태로 잘 포장되어 왔구요.
한뭉텅이로 왔구요.
각 부품이 10개씩 포장되어 들어 있구요.
네 그렇습니다.
이렇게 촘촘한 photoresistor 센서를 얻기 위해, 첫번째 시행착오를 거쳐 두번째 구매를 하게 된 것이죠.
다만, 각 센서의 감도 차이를 알고 싶어졌습니다.
물론 spec. 문서를 보면 나와 있습니다만, 주변의 빛의 세기에 따라 어떤 형태의 값들로 움직이는지 보고 싶었습니다.
또한 예전에 구입한 GL5528 이 다른 센서들과 비교하여,
PIR 센서에 적합한 센서를 찾기 위해 값을 비교해 보기로 합니다.
4. Layout
입력은 5V 이지만, 0~1023 레벨로 결과값을 받을 수 있게, 3.3V 를 AREF pin 에 연결합니다.
저도 이번에 AREF를 사용하면서 AREF 의 용도를 알게 되었습니다.
AREF 에 대해서는 따로 정리해 봤습니다.
* Hardware | Arduino 의 AREF pin 에 대해 알아보자
- http://chocoball.tistory.com/entry/Hardware-Arduino-AREF-pin
아래는 구성도 입니다.
아래는 실제 배선 샷 입니다.
사진에는 마지막에 추가한 GL5528 이 없습니다.
이 테스트를 하기 전에 사진을 찍은 후, 자고 일어났더니 예전 GL5528 이 생각이 나, 추가하여 결과값을 추출하였습니다.
저항은 10k ohm 입니다.
이는 아래 사양서에서 볼 수 있듯이, 일반적인 낮의 100 lux 에서 대략 10k ohm 의 값을 가지기 때문입니다.
5. Sketch
원리는 다음과 같습니다.
V = IR
* case 1 : 10KΩ
- 10KΩ + 10KΩ = 20KΩ
- I = 5V / 20KΩ = 0.25mA
- 0.25mA * 10KΩ = 2.5V
- 5V - 2.5V = 2.5V --> analog input
* case 2 : 30KΩ
- 30KΩ + 10KΩ = 40KΩ
- I = 5V / 40KΩ = 0.125mA
- 0.125mA * 30KΩ = 3.75V
- 5V - 3.75V = 1.25V --> analog input
* case 3 : 100KΩ
- 100KΩ + 10KΩ = 110KΩ
- I = 5V / 110KΩ = 0.045mA
- 0.045mA * 100KΩ = 4.54V
- 5V - 4.54V = 0.54V --> analog input
less light --> more resistance --> less analog input
more light --> less resistance --> more analog input
결론은,
많은 광량일 경우는 높은 치수를, 즉 낮은 저항 수치를 가지고,
적은 광량일 경우는 낮은 치수를, 즉 높은 저항 수치를 가지고 서로의 성능을 비교하는 과정입니다.
지금까지의 과정과 아래 소스는 다음 blog 를 참조하였습니다.
* Photo resistors, in depth
- https://piandmore.wordpress.com/2016/10/14/photo-resistors-in-depth/
예전에 구입한 GL5528 를 A5 에 추가 연결하였으므로, 소스에서도 입력과 출력에 대해 A5 를 추가하였습니다.
//////////////////////////////////////////////////////////////////////////////////// // // PI and more // Photo resistors in depth // // https://piandmore.wordpress.com/2016/10/14/photo-resistors-in-depth/ // //////////////////////////////////////////////////////////////////////////////////// // // The number of steps after which the header is repeated // #define STEPCOUNT 10 // // The current step count // byte step = STEPCOUNT; void setup() { // // Setup serial // Serial.begin(115200); Serial.println("Ready"); // // Set the reference for measuring the analog signals // For some reason I got incorrect readings without connecting // the 3.3v (on my Arduino Nano) to AREF and setting this // reference analogReference(EXTERNAL); // // Setup all analog inputs. We are using 5 which is the maximum // for the Nano on which I tested. // pinMode(A0,INPUT); pinMode(A1,INPUT); pinMode(A2,INPUT); pinMode(A3,INPUT); pinMode(A4,INPUT); pinMode(A5,INPUT); } void loop() { // // Increase our counter // step++; // // If we are over our STEPCOUNT then we repeat the header // if (step>STEPCOUNT) { // // The reference to the different photo resistors // GL5506, GL5516, GL5528, GL5537 and GL 5539 // Serial.println("* 5506 5516 5528 5537 5539 GL5528"); step = 0; } // // Print all analog values to serial // Serial.print(" "); Serial.print(analogRead(A0)); Serial.print(" "); Serial.print(analogRead(A1)); Serial.print(" "); Serial.print(analogRead(A2)); Serial.print(" "); Serial.print(analogRead(A3)); Serial.print(" "); Serial.print(analogRead(A4)); Serial.print(" "); Serial.print(analogRead(A5)); Serial.println(); delay(250); }
위의 sketch 를 실행시키면 다음과 같이 "Serial Monitor" 를 통해서 값을 확인할 수 있습니다.
6. 결과
제조사의 사양서는 찾을 수 없었지만, 5506 부터 나와있는 사양 테이블은 아래와 같습니다.
그래프를 보면 결과값과 비슷하게 나온것 같습니다.
강한 불빛인 휴대폰 플레쉬부터, 거실 불 하나만의 광량, 손으로 그늘을 만들고,
마지막에 손으로 가리는 순간들의 값을 EXCEL 정리해 봤습니다.
* EXCEL
- photoresistor_record_20180225.xlsx
숫자로만 보면 들쑥날쑥 하여 알아보기 힘듭니다.
아래의 그래프로 그려봤습니다.
EXCEL 숫자만 보면, 과연 순서대로 나열해서 했나 싶을 정도로 들쑥날쑥 합니다만,
그래프로 그리면 확실히 그 경향을 알 수 있습니다.
FIN
예전에 구입한 GL5528 (녹색) 은, 이번에 구입한 5528 (회색) 과 확연한 값의 차이를 나타냅니다.
오히려 5537 (노랑) 과 더 비슷해 보이는군요.
위의 결과를 가지고 생각해 보면, photoresistor 를 직접 사용하기 전에는 측정을 통하여 사용처에 맞는 센서를 골라야 하겠군요.
'Hardware' 카테고리의 다른 글
Hardware | Arduino 의 AREF pin 에 대해 알아보자 (0) | 2018.03.04 |
---|---|
Hardware | HC-SR501 PIR motion sensor - 2 (2) | 2018.03.01 |
Hardware | Digitial Compass - HMC5883L 사용기 - 1 (0) | 2018.02.19 |
Hardware | MAX4466 마이크 앰프 breakout board 사용해 보기 (0) | 2018.02.11 |
Hardware | 2.54mm pin header 구매하기 (0) | 2018.02.11 |