아두이노 나노와 RGB LED, CDS 온도센서, DS18B20 디지털 온도센서로 구성된 제품으로 코딩한 예제입니다.
LED 구동 부분은 LED 체험 키트와 비슷합니다.
아두이노 프로그램 설치 영상입니다. 보기 편한 연상으로 보세요.
Arduino nano 하드웨어 연결
아두이노 나노 확장 실드
확장 실드는 아두이노에서 연결된 핀마다 전 원판을 추가하여
3핀으로 구성하여 센서와 출력장치 연결을 쉽게 하는 보드입니다.
아두이노 모듈에는 전원 핀 이 1~2개만 있으며 연결하려는 센서와 출력 부품 대부분에 전원을 연결해야 합니다.
대부분 전원 연결 때문에 브레드 보드를 사용하여 전선을 연결하기에 선이 복잡해 보이며 브레드 보드의 연결한 전선의
접촉 불량으로 동작이 불안한 경우가 있어 이를 효과적으로 활용하기 위해 확장 실드를 사용합니다.
확장 실드 관련 영상입니다.
듀폰 케이블을 분리합니다.
케이블 연결 (방향 주의)
확장 실드와 처음 연결하는 RGB LED와의 연결은 1:1이 아닙니다.
추가하여 LED를 연결한다면 RGB LED와 RGB LED의 연결은 1:1 연결입니다.
데이터 신호의 시작점인 확장 실드와 RGB LED는 DI 포트로 연결되며 다음 직렬연결 RGB LED는 DO에서 DI 방향으로 연결됩니다.
RGB LED는 3개의 LED(RED, GREEN, BLUE)를 패키지 하여 각 LED의 밝기를 조절하여 색상을 표현합니다.
WS2812 모듈을 디지털 신호로 LED를 제어하며 LED마다 전선을 연결하여 각각 제어하는 게 아닌 디지털 신호를 직렬연결하여 다수의 LED 제어가 가능한 모듈입니다.
LED
LED는 이제 우리 주변에 흔하게 쓰이고 있습니다.
어디에서 쓰고 있는지 생각해 봅시다.
Arduino nano 모듈 Arduino 스케치 설정
제공된 소스파일 폴더의 nano_led_temp.ino 파일을 더블 클릭하여 실행합니다.
Arduino nano 컨트롤러 사용 Arduino IDE 화면구성
아두이노 프로그램 기초 영상입니다.
13번 포트에 연결된 LED 동작
우리가 사용할 WS2812 네오 픽셀 LED에 대한 설명입니다.
LED로 만든 작품들입니다.
네오 픽셀 코딩 영상입니다.
RGB LED 1개 제어
WS2812 모듈을 제어하는 라이브러리는 다양하게 있습니다.
여기서 설명하는 방법 외에도 여러 방법이 있으며 WS2812 또는 네오 픽셀로 검색하면 다양한 코딩 설명이 있습니다.
사용하기 위한 라이브러리 선택
#include "LedStrip.h"
제공된 소스파일에 라이브러리가 포함되어 있습니다. 위의 코드는 해당 라이브러리를 포함하는 명령어입니다. WS2812를 구동하는 라이브러리는 여러 종류가 있습니다.
setup 함수에 다음 코딩이 포함되어 있습니다.
strip.begin(); // ws21812 사용 선언
strip.StripSet(1, 3, NEO_GRB + NEO_KHZ800); // ws2812 하드웨어 연결을 설정합니다.
// 직렬연결 개수, 핀 번호. 데이터 속도 // 연결 개수와 핀 번호를 수정하여 사용합니다.
strip.setBrightness(255); // 최대 밝기 설정이며 255개가 최대 밝기입니다.
네오 픽셀 깜박이기
strip.setPixelColor(번호, strip.Color(red값, green값, blue값)); // 해당 led 색상 값 메모리 저장
- 번호 : 직렬연결된 led 번호이며 처음 연결된 번호는 0입니다. 이어서 연결된 led를 제어하려면 해당 숫자를 적고 해당 led 값을 색상을 설정합니다.
- 색상 값 : 0 ~ 255로 밝기를 표현하여 각 설정한 색상으로 저장합니다.
strip.show(); // 설정한 값으로 led에 데이터를 전송하며 이 함수가 실행되어야 led 색상이 변경됩니다.
----------------------------------------------------------------------------------------------------
void loop(){
strip.setPixelColor(0, strip.Color(100,0,0)); // Red 색상의 밝기 설정
strip.show(); // 설정한 값으로 동작
delay(1000);
strip.setPixelColor(0, strip.Color(0,0,0)); // Red 색상의 밝기 설정
strip.show(); // 설정한 값으로 동작
delay(1000);
}
RGB LED를 동작하기 위해서는 색상 설정을 하고 동작 함수 show를 실행해야 합니다.
strip.setPixelColor(LED 번호, strip.Color(빨강색 밝기, 초록색 밝기, 파란색 밝기));
- LED 번호는 0번부터 시작됩니다.
- 각 색상의 밝기는 0 ~ 255입니다.
•색상을 다른 색으로 변경해 봅시다.
•빛의 3원색으로 혼합한 색상으로 표시됩니다.
•13번 핀에 연결된 단색 LED도 같이 깜박이도록 해 봅시다.
만일 LED 2개를 제어한다면 다음과 같습니다.
- strip.alloff();는 직렬연결된 모든 LED를 끕니다.
•색상은 다른 색으로 변경해 봅시다.
우리가 제어하는 LED 하나가 TV나 스마트폰의 1개의 화소입니다. 이 LED가 모여서 색상을 표시하여 영상을 표현하게 됩니다.
RGB LED 다양한 색상 제어
지정된 여러 색상으로 2개의 LED가 깜박이게 됩니다.
LED의 조명 효과를 위해 종이로 빛을 번지게 만들어 봅시다.
다양한 모양으로 만들어 보세요.
RGB LED 랜덤 색상 제어
- random(255) : 0~255 범위에서 랜덤으로 숫자를 반환합니다.
•미션
LED를 더 연결해 보세요.
- 그룹을 만들어 1개의 보드에 다른 친구들의 LED를 직렬로 더 연결하여 코딩을 수정하고 다수의 LED를 제어해 봅시다.
- 추가되는 LED의 선 연결은 1:1 연결입니다. 선 연결에 주의하세요
- 많아지면 트리 동작이 됩니다.
- LED 보드의 바닥에 다른 보드가 닿거나 철에 닿지 않도록 하세요 (테이프 부착 권장)
RGB LED 효과 주기
신호등 구현하기
가로등 켜고 끄기
R, G, B 값이 같으면 흰색이 됩니다. 숫자를 줄여서 밝기 변화를 확인해 봅시다.
SETUP 설정에 밝기 설정이 가능한데 이 값을 변경하여 밝기 변화를 확인하고 R, G, B 값 변경과 어떤 차이가 있는지 확인해 봅시다.
스마트 가로등 통신으로 켜고 끄기
시리얼 모니터(컴퓨터와 아두이노 보드와 USB to serial 을 통해서 통신을 합니다.)
간단한 통신으로 가로등을 제어했지만 인터넷 환경이나 무선으로 제어하는 기본 원리는 같습니다.
켜짐. 꺼짐 외에 밝기와 색상을 조절하도록 코딩해보자.
시리얼통신 관련 영상입니다. 여러 영상을 보고 개념을 잡아 봅시다.
조도센서란
조도 센서(황화카드뮴(CdS) 셀)는 측정된 빛의 세기에 따라 저항값이 변하는 센서입니다.
Photoresistor 또는 LDR(Light Dependent Resistor)이라고도 불리며, 빛이 강하면 저항값이 약해지고, 빛이 약하면 저항값이 높아집니다. 이러한 성질에 따라 아날로그 신호를 발생시키며 아두이노로 밝기 값을 얻어오거나 LED로 확인할 수 있게 됩니다.
빛의 세기를 측정하는 센서는 CDS 외에도 다양하게 있습니다.
실생활에 사용되는 조도센서
거리의 가로등, 핸드폰의 밝기 조절, 침대 머리맡의 무드 등 밝기 조절 등 주위의 밝기를 인식해 주는 센서를 조도센서(Photoresistor)
또는 LDR(Light Dependent Resistor)라고 합니다
CDS
•센서에 빛을 비추게 되면 센서 내부의 CDS 광도전체에서 전자를 운반해 주는 캐리어의 밀도가 높아 집니다. 증가된 캐리어는 더 많은 전자를 운반하게 되어 전류가 증가하게 됩니다. 증가된 전류는 옴의 법칙에 따라 저항의 크기를 줄여줍니다. 만약 센서에 빛을 비추지 않게 된다면, 캐리어의 밀도는 늘어나지 않게 됩니다. 이 때문에 빛을 센서에 비출 때 보다 더 적은 양의 전류를 가지게 되어 저항의 크기가 늘어나게 됩니다. 이때 생성된 전류는 전극을 타고 리드선으로 흘러 SIG 핀으로 흐르게 됩니다.
조도센서 연결하기
조도센서 관련 영상입니다.
센서 값 측정하기
조도센서 CDS는 밝기에 따라 저항값이 변하며 회로에 저항을 추가하여 CDS 저항값이
변하면 출력되는 전압이 바뀌게 됩니다.
아두이노에서는 이를 아날로그 데이터로 읽어 코딩을 하게 됩니다.
시리얼 모니터를 열어서 숫자를 확인합니다.
어두우면 숫자가 커집니다.
이처럼 아날로그 센서 값 확인은 시리얼 모니터를 활용합니다.
밝았을 때 값과 어두울 때 값을 확인합니다.
어두우면 켜지는 가로등
위에서 측정한 값을 가지고 어두운 기준 값을 계산합니다.
밝을 때 320이고 어두울 때 820이라면 대략 중간 값보다 높게 기준을 잡습니다.
약 620 정도로 잡아봅니다. (여러분은 측정값을 기준으로 잡으세요)
어둠에 따라 밝기를 조절하기
기준 값에 따라 켜고 끄기를 했는데 조도센서의 측정값에 따라 밝기를 조절해 봅시다.
map 함수 : 숫자를 한 범위에서 다른 범위로 변환하는 함수입니다.
위의 코딩에서는 cds 센서가 측정한 범위가 200 ~ 720의 값이 cds 변수에 저장되어 있으며 이를 0 ~ 255 값으로 변환하여 반환(brightness 변수에 저장) 하는 동작을 합니다.
cds 가 200 이면 0이 반환되고 720이면 255가 반환되며 중간 값이면 비율로 저장이 됩니다.
map 함수 알아보기
센서 값을 측정하면서 자주 사용하는 함수입니다.
문법
map(value, fromLow, fromHigh, toLow, toHigh)
매개변수
value: 변환할 수
fromLow: 현재 범위 값의 하한
fromHigh: 현재 범위 값의 상한
toLow: 목표 범위 값의 하한
toHigh: 목표 범위 값의 상한
반환
변환된 값
map(long x, long in_min, long in_max, long out_min, long out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
계산식을 확인해 봅시다.
이전 실험에서 너무 밝거나 어두워지면 예상과 다른 동작을 하게 되는데 이는
x 값이 최소값 보다 작거나 최댓값보다 크면 다른 결과가 리턴되기 때문입니다.
constrain 함수 알아보기
입력값의 최대 최솟값 제한을 합니다.
위의 실습에서 cds 센서 값이 코딩한 범위를 넘어가게 측정되면 map 함수에서 엉뚱한 결과가 리턴됩니다.
map 함수에서 범위를 더 넓게 해도 되겠지만 만일 센서 범위를 720에서 900으로 변경했다고 하면
평상시 밝은 지역에서는 동작을 잘 하겠지만 다른 지역 또는 장소에서는 최대 밝기가 720이면 led는 최대
밝기로 켜지는 게 어렵습니다. 일정 값 이상이면 최댓값을 가지도록 constrain 함수를 사용해 봅시다.
constrain(x, a, b)
x : 제한할 데이터
a : 범위의 하단 값
z : 범위의 상단 값
cds = analogRead(A0);
다음과 같이 수정하여 동작해 봅시다.
cds = constrain(analogRead(A0), 200, 720);
200 보다 작으면 200으로 720보다 크면 720으로 반환하여 cds 변수에 저장하게 된다.
조명의 밝기를 0부터 255까지 조절하였는데 이를 가로등에 적용 가능하도록 수정해 봅시다.
실제 가로등이 약간 흐려진다고 켜지는 게 아니기 때문에 조금 어두워진다고 켜지는 게 아닌
더 많이 어두워지면 켜지게 수정해 보세요.
밝기도 흐리게 켜진 것은 실제로 사용하기에는 애매하니 150부터 켜지도록 수정해 봅시다.
온도센서 연결하기
온도센서의 종류는 많이 있습니다.
CDS처럼 아날로그로 읽어서 온도 값으로 계산하는 센서부터 다양한 디지털 데이터로 온도 값을 전달하는 방식이 있습니다.
온도센서를 선택함에 있어 가격과 온도센서의 측정 범위, 정밀도, 오차를 검토하여 선택하게 됩니다.
이번에 사용하는 DS18B20은 디지털 온도 센서이며 스펙은 다음과 같습니다.
- 허용 전압 입력 : 3.0-5.5V
- 측정 온도 범위 : -55° C to+125° C
- 정밀도 : ±0.5° C ( -10° C to +85° C 범위 내)
-
아날로그 센서의 경우 측정 과정에서 전원 노이즈로 인하여 오차가 발생하거나 정밀도가 1도 이상인 경우가 있어 이보다 정밀한 DS18B20 모듈을 사용합니다.
온도를 읽어오는 getTemp() 함수를 직접 코딩하였고 라이브러리를 통해 사용하는 방법도 있습니다.
검색하여 알아봅시다.
온도에 따라 LED 제어하기
온도에 따라 LED 제어하기 2
map 함수를 적용하여 25도에서 온도가 올라갈수록 빨간색을 더 밝게 하였습니다.
이처럼 센서 값에 따라 LED를 제어했지만 LED가 아닌 에어컨이나 히터를 제어하면 설정한 온도로 제어하는 시스템을 만들 수가 있습니다.
1. 배송비 : 기본배송료는 10,000원 미만 구입 시 3,200원, 100,000원 이상 2,000원 입니다.
(도서,산간,오지 일부지역은 배송비가 추가될 수 있습니다)
2. 평균 배송일은 2~4 일입니다.(입금 확인 후) 설치 상품의 경우 다소 늦어질수 있습니다.[배송예정일은 주문시점(주문순서)에 따른 유동성이 발생하므로 평균 배송일과는 차이가 발생할 수 있습니다.]
3. 오픈 초기라 배송기간기 길지만 열심히 노력하여 단축하도록 하겠습니다.
4. 제주도및 기타 섬지역은 항공료 3,000원이 추가 됩니다.
제품 수령 후 7일(주말/공휴일 포함)이내 다음 사항의 경우 취소, 교환, 환불, AS 가능합니다. |
---|
[취소, 교환, 환불, AS 가능] 1. 수령한 제품의 불량, 파손, 오 배송 등으로 사용이 불가한 경우 2. 고객변심인 경우 제품 포장을 개봉하지 않고, 사용하지 않은 상태인 경우 3. 제품 불량으로 확인되어 수령일 기준 7일이내 (주말/공휴일 포함) 취소, 교환, 환불, AS를 요청하는 경우 |
[취소, 교환, 환불, AS 불가] |
상품이 장바구니에 담겼습니다.
바로 확인하시겠습니까?
상품이 찜 리스트에 담겼습니다.
바로 확인하시겠습니까?