본문 바로가기
공부하는/GPT, 코딩

아두이노로 LED를 켜보자! (디지털핀, 아날로그핀)

by 공부하는이땡땡 2020. 3. 8.
반응형

오늘의 회로도는 LED를 켜는 가장 기본이 되는 명령어에 대해서 알아볼까 한다. 

 

LED를 켜보자!!

 

[LED를 켜기 위한 사전 지식]

우선 아두이노의 기본적인 정보부터 탐색해볼까 한다.

 

 

3가지 색깔을 찾아보자!

 

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 연결방법 (LED 병렬 연결, 저항계산법, 강하전압)

이게 왠 중학교 물리 공부인지.... ㅋㅋㅋ LED 납땜을 어느 정도 하고 건담에 부착하기 전에 어떻게 아두이노에 연결할지 고민해본다. 정석은 다음과 같다 'LED를 병렬로, LED마다 저항을 달아준다' 이 포스팅은..

studylee00.tistory.com

 

[오늘의 창의력 문제]

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 곰믹스

       조만간 곰믹스 + 곰캠 패키지 살 듯

반응형

댓글