TIL 43 | [Arduino] NEO-ABOT

yoonsik123·2022년 9월 26일
0

Arduino

목록 보기
1/2
post-thumbnail

⛓ 아두이노의 입/출력

아두이노에서 입/출력은 크게 디지털 방식아날로그 방식으로 나눌 수 있다.

🔗 디지털 출력(D0 ~ D13)

LED 제어, 모터제어, 소리음 만들기(부저) 등

🔗 디지털 입력(D0 ~ D13)

푸시 버튼이나 간단한 센서 감지 등

🔗 아날로그 출력(~D3, ~D5, ~D6, ~D9, ~D10, ~D11)

디지털 출력으로 사용하는 포트 중 '~' 표시가 있는 포트들은 PWM 기능이 있는 포트들이다.

LED 밝기 조절, 모터 속도 조절 등

🔗 아날로그 입력(A0 ~ A5)

가변저항기 또는 광센서 연속신호 감지


PWM 이란 ?

PWM 은 Pulse Width Modulation(펄스폭 변조)의 약자로, 펄스폭을 조절해서 전류를 조정한다는 의미이다.
이러한 출력 방식은 결과적으로 아날로그성 신호를 출력할 수 있게 해준다.

디지털 신호(0v / 5v)는 시간에 따라 주기(Pulse)로 나눌 수 있다. 그리고, 각 주기 별로 높은구간(HIGH)과 낮은구간(LOW)이 존재한다.

PWM 출력은 주기 별로 HIGH의 비율(Duty)을 조절함으로 써 아날로그성 신호를 출력할 수 있게 해주는 출력방법이다.

아두이노는 PWM핀을 통해 PWM신호를 출력함으로써
0~5V를 0~255(256가지)의 신호로 나눠줄수 있다.


아두이노 BOE 쉴드 하드웨어

  • ATmega328

    microcontroller

  • Digital I/O (디지털 입출력)

    D0 ~ D13

  • Analog In (아날로그 입력)

    A0 ~ A5

  • Analog Out (아날로그 출력)

    ~D3, ~D5, ~D6, ~D9, ~D10, ~D11

  • USB Port

  • DC power

    input Plug

  • 리셋 스위치

    프로그램이 꺼졌다가 다시 실행된다. BLink코드의 경우, 다시 시작한다는 의미로 13번 포트에 5v 전원이 짧게 두번 들어가, 13번 포트에 연결된 led가 두번 깜빡인다.
    13번 포트에 led가 아닌 모터가 연결되어 있는 경우, led가 깜빡인것처럼 5v 전원이 짧게 들어가며 모터가 약간씩 돌아간다.

  • 3접점 전원 스위치

    0(왼쪽), 1(가운데), 2(오른쪽) 세 단계로 나뉜다.

    0 으로 연결 시 : USB 포트를 통해 보드에만 전원이 들어온다.
    (서보모터 포트까지도 전원이 들어오긴 하지만 모터를 구동하기엔 전원이 약하게 들어옴)
    1 로 연결시 : DC 전원 플러그(건전지)를 통해 전원이 들어와 보드만 동작하게 된다.
    2 로 연결시 : DC 전원 플러그(건전지)를 이용해 보드와 서보모터까지 전원이 공급된다. 건전지를 이용해 모터 구동까지 가능!

  • 서보모터 연결포트

    가운데 점퍼를 보면 위에 2개의 핀이 연결되어 있는 것을 볼 수 있다. 이 경우 12, 13번 포트에 전원이 공급된다.

    가운데 점퍼의 위치가 위에 2개 핀이 연결되어 있는 형태인 경우, 12, 13번 포트에 서보모터를 연결하여 사용가능.


기본 프로그래밍

🌌 loop()

한번 실행하면 계속 반복되는 것이 아니라, 한번 함수를 실행하고 종료하는 식으로 작동한다.

이는 하나의 지역변수를 유지하지 않고 함수 종료 시 변수값을 초기화 하여 새로운 값을 할당할 수 있게 한다.

하나의 변수를 계속 반복하여 사용하고 싶은 경우 변수를 전역으로 선언하면 된다.

아두이노 시리얼 모니터에 "HI !" 반복 출력

void loop() {
  // put your main code here, to run repeatedly:
    Serial.print("Hi !");
    delay(1000);
}

다음 코드를 실행하면 1000 밀리세컨드 만큼 간격을 두고 반복되어 "HI !"가 가로로 출력된다.

Serial.prinln("Hi !");
"HI !" 를 세로로 반복하여 출력한다


int led = 13;
void setup() {
  // put your setup code here, to run once:
  pinMode(led, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(led, HIGH);
  delay(1000);
  digitalWrite(led, LOW);
  delay(1000);
}

13번 포트에 연결한 led를 전역으로 선언한다.

pinMode(led, OUTPUT); 코드를 통해 led를 출력(OUT PUT)으로 설정한다.

pinMode() 함수는 특정한 핀을 입력으로 사용할지 출력(INPUT / OUTPUT)으로 사용할지 결정하게 해주는 함수이다.

digitalWrite() 함수

digitalWrite(포트, HIGH/LOW) 함수는 0v 아니면 5v 둘 중 하나로만 설정이 가능하다.

HIGH로 설정한 경우, 해당 포트의 출력 전압 값이 0v 에서 5v로 바뀌게 된다.

반대로 LOW로 설정한 경우, 해당 포트의 출력 전압 값이 5v 에서 0v로 바뀌게 된다.


int ledPin = 9;    // LED connected to digital pin 9

void setup() {
  // nothing happens in setup
}

void loop() {
  // fade in from min to max in increments of 5 points:
  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);
    // wait for 30 milliseconds to see the dimming effect
    delay(30);
  }

  // fade out from max to min in increments of 5 points:
  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);
    // wait for 30 milliseconds to see the dimming effect
    delay(30);
  }
}

for (int fadeValue = 0; fadeValue <= 255; fadeValue += 5)
코드를 통해 0 에서 255 까지 값을 30milliseconds를 간격으로 5씩 증가시켜 analogWrite함수의 fadeValue 파라미터에 반복해서 대입하여 ledPin(9번핀)에 연결된 LED의 불빛이 점점 밝아지게 하였다.

for (int fadeValue = 255; fadeValue >= 0; fadeValue -= 5)
코드에서는 반대로 255 에서 0 까지의 값을 값을 30milliseconds를 간격으로 5씩 감소시켜 analogWrite함수의 fadeValue 파라미터에 반복해서 대입하여 ledPin(9번핀)에 연결된 LED의 불빛이 점점 어두워지게 하였다.

analogWrite() 함수

아날로그 출력 핀의 전압을 설정하는 함수이다.
전압을 0v 에서 5v 사이에 원하는 값으로 설정할 수 있다.

digitalWrite()는 0v 아니면 5v 둘 중 하나로만 설정이 가능해, On / Off 제어만 가능했다.

하지만 analogWrite() 함수를 사용하면, 0v ~ 5v의 전압 부분을 0 ~ 255 사이로 설정이 가능하다.
analogWrite() 함수를 사용할 때에는 반드시 보드에 ~ 표시가 있는 핀을 사용해야 한다. 이 핀을 PWM 핀이라고 한다.

analogwrite() 함수는 다음과 같이 analogwite(핀 번호, 전압); 선언한다.
위에 Blink Program (2)에서는 analogwrite()의 매개변수로, 전역으로 선언한 ledPin과 for문의 fadeValue를 선언하였다.


profile
꾸준함의 힘

0개의 댓글