Arduino 정리

준우·2024년 6월 18일

iOS 그외의 이야기

목록 보기
2/3
post-thumbnail

적히지 않은 나머지는 쓰면서 익히도록

Arduino H/W 간단 정리

디지털 핀: 0 ~ 5V 두 개의 신호를 다룰 수 있음.

아날로그 핀: 0 ~ 5V 의 신호를 1023개의 신호로 나누어 다룰 수 있음.

즉 신호는 전압의 높이를 이용하는 것이며, 다른 기기에 전원으로도 사용할 수 있음.

아두이노는 C, C++ 기반의 언어를 사용함.

아두이노 전원 입출력

01. 직류 전기(DC)

음극에서 양극으로 한 방향으로만 흐르는 전기

교류 전기와 같은 에너지로 조명을 켜도 덜 밝고 효율이 떨어지며, 전기를 저장할 수 있어 건전지에 사용됨.

02. 교류 전기(AC)

주기적으로 변하는 전기

전압, 전류 극성의 방향 또한 함께 바뀌며 바뀌는 속도는 주파수로 나타냄.

교류 전기는 저장할 순 없음.

아두이노 우노 R3 보드

GND핀: (-) 전원을 입력받으며, 그라운드라고 불림. 연결된 전기의 기준점을 0V 로 맞춰줌.

VIN핀: (+) 전원을 입력받기 위한 단자임.

아두이노 전원 출력

아두이노에 입력된 전압은 레귤레이터를 통해 5V 혹은 3.3V로 변환됨. 그리고 변환된 전원은 전원핀쪽에 5V핀과 3.3V핀, GND(접지)핀을 통해 출력할 수 있음.

레귤레이터: 높은 전압을 일정 전압으로 내려주는 전자부품, 그리고 보드에 내장되어 있음.

저항의 크기를 구하는 식

저항 값에 맞는 옴을 사용해야함. 안 지키게 되며 어떨지, 겪어보시길…

브레드보드: 전자 회로를 구성할 때 사용되며, 부품과 부품을 연결하기 위해 사용함.

아두이노 디지털 신호

아두이노 디지털 신호 입출력

0 ~ 13 번까지 총 14개의 디지털 핀을 통해 디지털 신호를 출력하거나 입력받을 수 있음.

디지털 신호: 전기 신호의 일종, 0(LOW) 또는 1(HIGH) 두 가지의 신호로 구분됨.

01. 아두이노 디지털 신호 입력모드

3 ~ 5V의 전원 입력시, HIGH로 인식
0 ~ 1.5V의 전원 입력시, LOW로 인식

02. 아두이노 디지털 신호 출력모드

HIGH 신호 출력시, 5V 출력
LOW 신호 출력시, 0V 출력

플로팅 현상, 풀업(Pull - up) 저항, 풀다운(Pull - Down) 저항

플롯(Float) 상태 = 플로팅 현상 : 디지털 신호는 0과 1로 표현된다는 것을 기억할 것임. 그런데 디지털 신호가 0과 1도 아닌 애매모한 상태임.
풀업 저항 : 0과 1도 아닌 애매모호한 상태에서 1로 바꿔버리는 것, 그렇게 되면 Default 값은 1, 즉 켜진 상태가 기본임.
풀다운 저항 : 0과 1도 아닌 애매모한 상태에서 0으로 바꿔버리는 것, 그렇게 되며 Default 값은 0, 즉 꺼진 상태가 기본임.

아두이노 센서

센서: 무엇인가를 감지하기 위한 장치, 대상에 접촉하거나 가까이서 데이터를 검출하면, 물리적인 수치로 측정된 값을 출력함.

아두이노 아날로그 신호 입출력

디지털 핀에서는 디지털 신호 입출력이 모두 가능했던 반면, 아날로그 신호는 입력과 출력이 서로 다른 핀에서 가능함. 입력은 ANALOG IN 문구가 표시되어 있는 A0 ~ A5 총 6개에서 가능함. 출력은 디지털핀 숫자 옆에 ~가 붙은 PWM 핀에서 가능함.(아두이노 우노 보드 기준임.)

01. 아두이노 아날로그 신호 입력모드

0 ~ 5V의 아날로그 신호 출력
아두이노는 0 ~ 1023의 값으로 인식

02. 아두이노 아날로그 신호 출력모드

PWM핀을 통해 0 ~ 5V 출력
0 ~ 5V = PWM(0 ~ 255)

참고) PWM(= Pulse Width Modulation) 의 약자로 진동의 폭을 조절한다는 의미임.
디지털 신호는 시간에 따라 주기(Pulse) 로 나눌 수 있음.
PWM 출력은 주기가 높을 때 HIGH, 주기가 낮을 때 LOW 의 비율(Duty) 을 조절함으로 아날로그 신호를 출력할 수 있음.

Arduino S/W 간단 정리

아두이노 IDE

확인 : 컴파일

업로드 : 보드에 코드 업로드

: 포트 및 연결 보드 설정

시리얼 모니터 : 컴퓨터와 아두이노 간에 시리얼 통신을 통해 아두이노의 상태를 모니터로 확인함.

코드 입력창: 명령어를 입력하여 프로그램을 만들기 위한 스크린

아두이노 기본 구조

void setup()void loop() 부분으로 나뉨.

아두이노에서도 다른 언어와 마찬가지로 ; 을 사용하여 마무리 짓고, 카멜케이스를 사용하며, 한 줄 주석은 //, 여러 줄 주석은 /메모/ 를 사용함.

시리얼 통신

시리얼(= Serial) : 직렬

패러렐(= Parallel) : 병렬

시리얼 통신 : 직렬 통신, 데이터를 한 개씩 단시간에 전달

패러렐 통신 : 병렬 통신, 여러 개의 데이터를 한 번에 장시간에 걸쳐 데이터를 전달함.

아두이노 라이브러리

라이브러리: 이미 만들어져 있는 샘플 소스 코드

아두이노 라이브러리 구성(각 파일은 지정된 폴더에 위치해야함.)

  • 스케치 파일(.ino)
  • 헤더파일(.h)
  • C 소스코드 파일(.cpp)

아두이노 라이브러리는 두 종류로 분류됨.

  • 내장 라이브러리
    • 아두이노 IDE 를 설치할 때 함께 제공되는 라이브러리
  • 고유 라이브러리
    • 사용자가 직접 만들어서 제공하는 라이브러리

아두이노 코드 정리(자주 사용하는 것들 위주)

아두이노 기본 문법 코드

  • 조건문 if(조건) {실행} : ‘만약 ~라면 ~한다’와 같은 명령을 만들 수 있음.
    else문 혹은 else if문을 추가하면 코드의 흐름을 더 부드럽게 만들 수 있음.
  • for (초기식;조건식;증감식) - for문을 사용하면 반복되는 비슷한 명령어를 간단한 표현으로
    실행시킬 수 있음. for문은 특정 조건을 벗어날 때까지 실행됨.
  • switch case 조건 선택문 : 1일땐 ~하고, 2일땐 ~하고......와 같은 명령어가 성립됨.
    반환 값 - 읽지 않은 상태의 데이터 중 가장 먼저 저장된 데이터를 반환함.

디지털 신호 입출력 관련 코드

  • pinMode(핀번호, 모드) : 사용할 디지털핀의 모드(입력or출력)를 설정하기 위한 함수
    [핀번호 - 모드를 설정할 디지털 핀 번호][모드 - OUTPUT(출력) 또는 INPUT(입력)]
  • digitalWrite(핀번호, 신호) : 설정 핀에 디지털 신호를 출력하기 위한 함수
    [핀번호 - 신호를 출력한 핀 번호][모드 - HIGH 또는 LOW]
  • digitalRead(핀번호) : 설정된 핀에 입력되는 디지털 신호를 읽음.
    [핀번호 - 신호를 입력받을 디지털핀 번호를 입력함.]
  • delay(시간) : 다음 명령어까지 입력 시간만큼 대기하기 위한 함수
    [시간 - 밀리초 단위의 시간을 입력, 1000=1초]
  • pulseIn(핀번호, 신호) : 설정 신호를 다시 입력받을 때까지 걸리는 시간을 측정
    [핀번호 - 함수를 적용할 핀 설정][신호 - HIGH 또는 LOW]
    반환 값 - 설정 신호가 입력될 때까지의 시간을 반환. 신호가 없을 경우 0을 반환.
    > 초음파 센서 거리 측정 식
    거리 = ( pulseIn(echo, HIGH) * 340) / 2
    340 : 속도
    2 로 나눈 이유 : 왕복거리의 시간을 대입하였기 때문에, 나누기 2함.
    > 

시리얼 통신(=직렬 통신) 관련 코드

  • Serial.begin(통신속도) : 시리얼 통신의 시작을 알리며, 통신속도를 설정함.
    [통신속도 - 300~115200, 보통 9600으로 설정함.]
  • Serial.end() : 시리얼 통신을 끝내기 위한 함수, 사용하지 않아도 됨.
  • Serial.println(값) : 시리얼 통신의 데이터를 시리얼 모니터에 출력 후 줄바꿈 함.
    [값 - 출력할 값을 입력함.]
  • Serial.available() - 시리얼 통신으로 수신된 읽지 않은 상태의 데이터의 수를 반환함.
    [반환 값 - 수신된 읽지 않은 상태의 데이터 수를 반환함. 없을 경우 0을 반환]
  • Serial.read() - 수신 데이터 중 하나의 데이터를 반환함. (저장된 순서대로)
    [반환 값 - 읽지 않은 상태의 데이터 중 가장 먼저 저장된 데이터를 반환함.]

아날로그 신호 입출력 관련 코드

  • analogRead(핀번호) - 설정핀에 입력되는 아날로그 신호를 읽기 위한 함수
    [핀번호 - 아날로그 신호를 입력받을 핀을 설정함.][반환 값 - 입력받은 신호를 0~1023 값으로 반환함.]
  • analogWrite(핀번호, 값) - 설정핀에 아날로그 값의 신호를 출력하기 위한 함수
    [핀번호 - 아날로그 신호를 출력할 핀을 설정함.][값 - 출력할 값 (0~255)을 설정함.]

소리 출력 관련 코드

  • tone(핀번호, 주파수) & tone(핀번호, 주파수, 시간) 주파수 신호를 출력하여 소리를 설정하기 위한 함수
    [핀번호 - 주파수를 출력할 PWM 핀번호를 입력함.][주파수 - 31~65535 범위의 주파수(Hz)를 설정함.]
    [시간 - 얼마 동안 주파수를 출력할지 설정함. 밀리초 단위 (1000 - 1초)]

LCD 디스플레이 관련 코드

  • LiquidCrystal lcd (핀1, 핀2, 핀3, 핀4, 핀5, 핀6) : LCD 사용 선언 및 연결핀을 설정
    [핀1 ~ 핀6 - LCD와 연결(통신)할 핀을 설정함.]
  • lcd.begin (가로,세로) : LCD 사용의 시작을 알리고, 사용할 LCD의 크기를 설정함.
    [가로 - LCD의 가로 크기를 설정 (예: 16x2 LCD라면 16)
    [세로 - LCD의 세로 크기를 설정. (예: 20x4 LCD라면 4)
  • lcd.print (문자열) : LCD에 출력할 문자를 설정하는 함수
    [문자열 - LCD화면에 출력할 문자를 설정.]
  • lcd.setCursor(가로, 세로) : LCD에 출력될 문자 출력 위치를 설정하기 위한 함수
    [가로 - 가로 좌표를 설정, 16x2 LCD라면 0~15][세로 - 세로 좌표를 설정. 16x2 LCD라면 0~1]
  • lcd.clear() - LCD에 출력된 문자를 모두 지움.

모터 관련 코드

  • Servo x : x라는 서보를 선언함. (여기서는 Servo myservo;)
  • myservo.attach(핀번호) : myservo의 신호선을 연결할 핀을 설정하기 위한 함수임.(myservo는 임시로 지은 변수명.) [핀번호 - 서보모터의 신호선을 연결할 핀(PWM핀)을 설정함.]
  • myservo.write(값) : myservo의 회전 위치를 설정하기 위한 함수
    [값 - 원하는 각도를 설정. (SG90은 0~180도)](myservo는 임시로 지은 변수명.)
  • myservo.detach() : myservo의 작동을 중지.(myservo는 임시로 지은 변수명.)

스텝모터 관련 코드

  • Stepper step1(모터 스텝 수, 핀1, 핀2, 핀3, 핀4) step1라는 스텝모터를 선언하며 설정하기 위한 함수
    [모터 스텝 수 - 사용할 스텝 모터의 스텝 수를 설정.][핀1~핀4 - 스텝 모터의 데이터선을 연결할 핀을 설정.]
  • step1.setpSpeed(속도) : step1 스텝 모터의 속도를 설정하기 위한 함수
    [속도 - 분당 회전수(RPM)를 입력하는데, 너무 빠를 경우 작동하지 않으니 주의!!)]
  • step1.step(값) : step1 스텝 모터의 회전을 제어하기 위한 함수
    [값 - 움직일 스텝 수를 입력함. 마이너스(-)를 입력할 경우 반대로 회전함.]

1개의 댓글