오늘의 회로도는 LED를 켜는 가장 기본이 되는 명령어에 대해서 알아볼까 한다.
[LED를 켜기 위한 사전 지식]
우선 아두이노의 기본적인 정보부터 탐색해볼까 한다.
POWER: 전원과 관련된 부분이다.
3.3V, 5V가 (+) 역할을
GND가 (-) 역할을 한다
ANALOG IN: 아날로그 신호를 입력(IN) 받는 단자
DIGITAL: 디지털 신호를 입출력 받을 수 있는 단자
(~PWM) : Pulse Width Modulation 펄스 폭 변조.
역할은 아래에 적겠음
[아날로그 신호와 디지털 신호]
1. 디지털 신호: 전기 신호의 일종으로 0(LOW)과 1(HIGH)로 표현된다.
아두이노의 디지털 단자는 5v의 출력을 내므로
LOW=0v=없음
HIGH=5v=있음
으로 기억해도 좋다.
아두이노의 디지털 핀은 0부터 13으로
핀당 40mA의 전류 출력이 가능하므로
(아두이노 총 출력은 약 500mA)
높은 전류량은 외부 전원을 사용해야 한다.
TX와 RX는 데이터 통신용으로 쓰니까 빼고 사용하자
2. 아날로그 신호: 연속적으로 변하는 신호
아두이노에서는 아날로그 신호를
0~5V의 신호를 1023 개의 신호로 나누어 다룰 수 있다!!!
즉, 다양한 정보를 세세하게 아두이노가 사용할 수 있다는 것이다.
즉 디지털 신호로는 LED를 켜요. 꺼요. 같이
명확한 명령만 보낼 수 있다면
아날로그 신호로는 점점 더 밝게 해주세요 같은게 가능하다는 거다.
(▼▼▼ 그냥 이땡땡의 궁금증 + 아날로그 디지털 구분하기)
사실 이게 은근 헷갈렸다.
당연히 아날로그는 옛날 것 ㅋㅋ 디지털은 최신 것 ㅋㅋ
0과 1만 이해하는 건 뭔가 초기 컴퓨터가 하는 거 아닌가!!!
아날로그 시계도 옛날건데....
아날로그의 뜻: 외부적인 원인에 의해 연속적으로 변하는 물리량으로 나타내는 일.
디지털의 뜻: 연속적 실수가 아닌, 특정한 최소 단위를 갖는 이산적(離散的)인 수치를 이용하여 처리하는 방법
(by 위키백과)
즉 아날로그 시계는 초침이 연속적으로 움직이고, 디지털 시계는 눈에 보이는 시간이 정지되어 표시된다.
그래도 역시 아날로그 하면 옛 것이 떠올라서
아날로그 감성.... 뭔가 풍부한 감정의 옛생각들
디지털 감성.... 요즘 시대의 삭막함
이렇게 멋대로 붙여서 기억했다 ㅋㅋㅋㅋㅋ
[아날로그 출력 핀은 없나요?]
디지털 핀이 디지털 입력과 출력이 가능하다.
아날로그 입력 핀은 단자가 별도로 있다.
그런데 아날로그 출력 핀은 따로 보이지 않는다.
이걸 디지털 신호에 약간 조작을 해서 아날로그 신호처럼 만들어낸다
그 방법이 PWM. 0과 1의 신호를 파파박 끊어서 보내서 마치 전압이 줄어든 것 같은 효과를 낸다 ㅋㅋㅋ
~ 표시가 있는 핀(3,5,6,10,11)은 PWM이 가능한
디지털 핀으로 아날로그 신호를 보낼 수 있다.
[LED를 켜기 위한 명령어] - LED로 전압을 보내!
digitalWrite(핀번호, HIGH): 해당 핀번호로 5v 신호를 보낸다
digitalWrite(핀번호, LOW): 해당 핀번호로 5v 신호를 보낸다
analogWrite(핀번호, 숫자): 해당되는 숫자만큼만 보내! 이 때 숫자는 0~255 사이의 값으로 가능
delay(시간): 이 시간만큼 작동 그대로 멈춘다. 이 때 단위는 ms. 1초=1000ms
[1. 켜고 끄기 반복해보기]
void setup()
{
pinMode(10, OUTPUT); // 디지털 10번핀을 출력모드로 설정
}
void loop()
{
digitalWrite(10, HIGH); // 10번에 디지털 신호 보내기
delay(500); // 0.5초 대기
digitalWrite(10, LOW); // 10번에 디지털 신호 안보내기(LED 꺼짐)
delay(500); // 0.5초 대기
}
[코드 분석]
켠다 끈다는 디지털 신호로 충분하므로 digitalWrite를 쓴다.
켜진다 -> 대기 -> 꺼진다 -> 대기
대기 간격이 0.5초니까 깜박이는 것처럼 보인다.
여기까지 했으면 loop에 의해서 반복
너무 쉬워서 깜박이는 영상은 창의력 문제에서!
[2. 점차적으로 밝아지는 LED]
void setup()
{
pinMode(10, OUTPUT); // 디지털 10번핀을 출력모드로 설정
}
void loop()
{
for (int i =0; i<255; i=i+10) // i가 10보다 작으면 10을 더한다
{
analogWrite(10,i); // 10번핀에 i만큼의 신호 출력
delay(100); // 0.1초 대기
}
}
[명령어]
for(초기값; 조건식; 증감식):
초기값에서 시작해서 조건식을 만족하면
다음 중괄호의 명령을 수행하고 증감식을 계산
조건식을 만족하지 않을때까지 반복
(반복되는 명령을 입력할 때 사용한다.)
int: 변수 설정
[코드 분석]
먼저 i=0이다. 255보다 작으므로 아날로그 신호를 0 출력하고 0.1초 대기. 그리고 i=10이 된다.
이제 새롭게 i=10이 되고 255보다 작으므로 아날로그 신호 10 출력. 0.1초 대기. 그리고 i=20이 된다.
..............
언젠가 i=250이 되고 255보다 작으므로 아날로그 신호 250 출력. 0.1초 대기. 그리고 i=260이 된다.
이제 i가 255보다 크므로 for 문이 끝난다.
그럼 loop에 의해 다시 시작
[시뮬레이션]
☆☆☆ LED의 저항계산, 직렬연결, 병렬연결 결과가 궁금하다면?
2020/03/07 - [공부하는 이땡땡/건담을 만들어보자] - 건담에 넣을 LED 연결방법 (LED 병렬 연결, 저항계산법, 강하전압)
[오늘의 창의력 문제]
LED가 점차 밝아지다 세번 깜박인다.
그리고 이것을 반복.
어떻게 코딩하면 될까?
▽▽▽ 코드정보
void setup()
{
pinMode(10, OUTPUT); // 디지털 10번핀을 출력모드로 설정
}
void loop()
{
for (int i =10; i<255; i=i+10) // i가 10보다 작으면 10을 더한다
{
analogWrite(10,i); // 3번핀에 i만큼의 신호 출력
delay(100); // 0.1초 대기
}
digitalWrite(10, LOW); //디지털롸이트를 세 번 반복(하이부터 시작하면 깜박임 한번이 안보임)
delay(500);
digitalWrite(10, HIGH);
delay(500);
digitalWrite(10, LOW);
delay(500);
digitalWrite(10, HIGH);
delay(500);
digitalWrite(10, LOW);
delay(500);
digitalWrite(10, HIGH);
delay(500);
digitalWrite(10, LOW);
delay(500);
}
여담: 오늘 처음으로 컴퓨터 화면 녹화를 해봤다 by 곰캠
노래 틀고 녹화해서 ㅋㅋㅋ 음소거 하고 다시 인코딩했다 by 곰믹스
조만간 곰믹스 + 곰캠 패키지 살 듯
'공부하는 > GPT, 코딩' 카테고리의 다른 글
택트 스위치로 LED를 켜보자(2) - 신호를 입력받아 LED 제어 (151) | 2020.03.09 |
---|---|
택트 스위치로 LED를 켜보자(1) - 택트스위치의 구조 (1645) | 2020.03.09 |
아두이노를 컴퓨터와 연결해보자~( IDE 설치 / 씨리얼 모니터에 원하는 문장 출력하기) (669) | 2020.03.07 |
아두이노로 LED를 켜보자(프로그래밍 없이!) (8) | 2020.02.17 |
아두이노의 전원을 켜보자 (0) | 2020.02.17 |
댓글