아두이노 관련 초급 정보

    

## 저항 필요 이유


저항을 사용하는 주된 이유는 회로에서 전류를 제한하고, 다양한 전자 부품을 보호하기 위함입니다. 버튼과 같은 입력 장치에 저항을 사용하는 구체적인 상황은 다음과 같습니다:


1. **풀업 또는 풀다운 저항**: 버튼을 사용할 때 풀업 또는 풀다운 저항을 사용하는 것이 일반적입니다. 이는 버튼이 눌리지 않았을 때 입력 핀의 상태를 안정적으로 유지하기 위함입니다.

   

   - **풀업 저항**: 버튼이 눌리지 않았을 때 입력 핀을 높은 전압(보통 VCC)으로 유지합니다. 버튼이 눌리면 회로가 닫히고 입력 핀이 접지로 떨어집니다.

   - **풀다운 저항**: 반대로, 버튼이 눌리지 않았을 때 입력 핀을 접지로 유지합니다. 버튼이 눌리면 회로가 닫히고 입력 핀이 높은 전압으로 올라갑니다.


2. **노이즈 방지**: 저항 없이 버튼을 연결하면, 버튼이 눌리지 않았을 때의 입력 핀 상태가 불안정해져서 노이즈로 인한 가짜 신호가 발생할 수 있습니다. 이는 버튼을 누르지 않았는데 누른 것처럼 인식되는 현상을 초래할 수 있습니다.


3. **회로 보호**: 저항은 또한 회로를 보호하는 역할을 합니다. 예를 들어, 과도한 전류가 부품을 통과하는 것을 방지하여 부품이 손상되는 것을 막습니다.


회로가 작동하는 것처럼 보이더라도, 저항을 사용하지 않으면 장기적으로 불안정성이나 부품 손상의 위험이 있습니다. 따라서 안정적인 작동을 위해 적절한 저항의 사용이 권장됩니다.

풀업(pull-up)과 풀다운(pull-down) 저항은 전자 회로에서 버튼이나 스위치 같은 입력 장치의 상태를 명확하게 정의하기 위해 사용됩니다. 각각은 다음과 같은 역할을 합니다:


1. **풀업 저항(Pull-up Resistor)**:

   - 버튼이나 스위치가 눌리지 않았을 때, 입력 핀을 높은 전압 상태(보통 VCC, 즉 전원 공급 전압)로 유지합니다.

   - 버튼을 누르면, 회로가 닫히고 입력 핀이 접지(GND)로 연결되어, 핀의 상태가 낮은 전압 상태로 변합니다.

   - 이를 통해 버튼이 눌리지 않았을 때 핀 상태가 'HIGH'로 유지되고, 눌렸을 때 'LOW'로 바뀌게 됩니다.


2. **풀다운 저항(Pull-down Resistor)**:

   - 버튼이나 스위치가 눌리지 않았을 때, 입력 핀을 낮은 전압 상태(보통 접지 GND)로 유지합니다.

   - 버튼을 누르면, 회로가 닫히고 입력 핀이 높은 전압(VCC)으로 연결되어, 핀의 상태가 높은 전압 상태로 변합니다.

   - 이를 통해 버튼이 눌리지 않았을 때 핀 상태가 'LOW'로 유지되고, 눌렸을 때 'HIGH'로 바뀌게 됩니다.


이런 방식으로, 풀업 또는 풀다운 저항은 버튼의 상태가 명확하게 정의되도록 하여, 버튼이 눌리지 않았을 때의 불확실한 상태(부동 상태)를 방지합니다. 이는 노이즈로 인한 잘못된 신호를 줄여주며, 회로가 더 안정적으로 작동하도록 도와줍니다.


아두이노 프로그래밍 환경은 C/C++ 기반으로, 아두이노 IDE에서 사용하는 스케치(Sketch)는 두 가지 주요 함수로 구성되어 있습니다: `setup()`과 `loop()`. 이 구조는 아두이노 프로그래밍의 기본 틀을 제공하며, 사용자가 쉽게 프로그램을 작성할 수 있도록 돕습니다.


1. **`setup()` 함수**:

   - 이 함수는 아두이노 보드가 새로 시작될 때 한 번만 실행됩니다.

   - 초기화 코드를 이곳에 넣습니다. 예를 들어, 핀 모드 설정, 라이브러리 초기화, 시리얼 통신 시작 등의 작업을 여기에서 수행합니다.

   - `setup()`은 프로그램이 시작될 때 필요한 설정을 수행하는데 사용되며, 이 함수가 완료된 후에는 `loop()` 함수로 진입합니다.


2. **`loop()` 함수**:

   - `setup()` 함수가 실행된 후, `loop()` 함수는 아두이노 보드가 꺼질 때까지 무한히 반복해서 실행됩니다.

   - 주된 프로그램 코드를 이곳에 넣으며, 이는 프로그램의 주요 동작을 담당합니다. 예를 들어, 센서 데이터 읽기, 모터 제어, LED 깜빡이기 등을 반복적으로 수행합니다.

   - `loop()` 함수는 프로그램의 핵심 로직을 반복 실행하며, 무한 루프 내에서 동작합니다.


이러한 구조는 아두이노 프로그래밍을 단순하고 명확하게 만들어 주기 때문에, 프로그래머가 마이크로컨트롤러 프로그래밍의 복잡성을 걱정하지 않고도 아이디어를 신속하게 프로토타이핑하고 구현할 수 있도록 도와줍니다.


Mac에서 아두이노 보드를 연결할 때 나타나는 시리얼 포트는 "/dev/cu.usbmodem" 또는 "/dev/cu.usbserial" 일 수 있습니다. 어떤 것을 사용할지 결정하기 위해 다음 단계를 따르세요:


1. 아두이노 보드를 Mac에 USB 케이블로 연결합니다.

2. 아두이노 IDE를 열고 "도구" 메뉴를 클릭한 다음 "포트"를 선택합니다.

3. 이전에 연결되지 않았을 때 목록에 없던 포트를 찾습니다. 그것이 아두이노 보드에 해당하는 포트입니다.

4. 보통 아두이노 Uno 또는 Mega 2560 같은 보드는 "/dev/cu.usbmodem"으로 나타납니다.

5. 아두이노 Nano, Pro Mini, 또는 클론 같은 일부 다른 보드는 "/dev/cu.usbserial"을 사용할 수 있습니다.


이 목록에서 보드에 해당하는 포트를 선택하면 됩니다. 만약 두 가지 유형의 포트가 모두 나타나면, 가장 최근에 나타난 포트가 아두이노에 연결된 포트일 가능성이 높습니다. 때때로 다른 USB 장치들 때문에 혼동이 올 수 있으므로, 다른 장치들을 일시적으로 분리하고 아두이노만 연결하여 올바른 포트를 찾는 것이 도움이 될 수 있습니다.


예제 블링크 실행

```

// the setup function runs once when you press reset or power the board

void setup() {

  // initialize digital pin LED_BUILTIN as an output.

  pinMode(LED_BUILTIN, OUTPUT);

}


// the loop function runs over and over again forever

void loop() {

  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)

  delay(1000);                       // wait for a second

  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW

  delay(1000);                       // wait for a second

}

```


이 코드는 아두이노 보드에 내장된 LED를 사용하여 LED를 깜빡이는 가장 기본적인 예제입니다. `LED_BUILTIN`은 대부분의 아두이노 보드에서 내장 LED를 가리키는 매크로입니다. 이 LED는 일반적으로 아두이노 보드의 13번 핀에 연결되어 있습니다.


코드가 실행되면 다음과 같은 동작을 관찰할 수 있어야 합니다:


1. **LED가 켜짐**: `digitalWrite(LED_BUILTIN, HIGH);` 명령이 실행될 때 내장 LED가 빛납니다. 'HIGH'는 해당 핀에 전압을 인가하여 LED를 켠다는 의미입니다.


2. **1초 대기**: `delay(1000);` 명령이 실행되며 프로그램이 1000밀리초(1초) 동안 멈춥니다. 이 동안 LED는 켜진 상태로 유지됩니다.


3. **LED가 꺼짐**: `digitalWrite(LED_BUILTIN, LOW);` 명령이 실행될 때 내장 LED가 꺼집니다. 'LOW'는 해당 핀의 전압을 0V로 만들어 LED를 끈다는 의미입니다.


4. **다시 1초 대기**: 다음 `delay(1000);` 명령이 실행되며 프로그램이 다시 1초 동안 멈춥니다. 이 동안 LED는 꺼진 상태로 유지됩니다.


이 패턴은 `loop()` 함수 안에 있기 때문에 무한히 반복되며, LED는 1초 간격으로 깜빡이게 됩니다. 보드의 전원이 켜져 있고 코드가 올바르게 업로드되었다면, 아두이노 보드 상에 있는 작은 LED가 깜빡이는 것을 볼 수 있습니다.


만약 LED가 깜빡이지 않는다면, 다음을 확인해보세요:


- 아두이노 보드가 올바르게 컴퓨터에 연결되어 있는지 확인합니다.

- 올바른 보드와 포트가 아두이노 IDE에 설정되어 있는지 확인합니다.

- 코드가 아두이노 보드에 성공적으로 업로드되었는지 확인합니다.

- 다른 핀 번호를 사용하는 클론 아두이노 보드가 아닌지 확인합니다.


이러한 모든 사항이 올바르다면, 내장 LED가 깜빡이는 것을 볼 수 있습니다.


## 아두이노 보드와 OLED 디스플레이(SSD1306 기반)를 연결

아두이노 보드와 OLED 디스플레이(SSD1306 기반)를 연결하는 방법은 다음과 같습니다. 대부분의 SSD1306 OLED 디스플레이는 I2C 통신 프로토콜을 사용하므로, I2C 핀을 사용하여 연결합니다:


1. **OLED 디스플레이 핀**: 일반적으로 OLED 디스플레이에는 다음과 같은 핀이 있습니다:

   - VCC (때로는 VDD라고도 함): 전원 공급(+)

   - GND: 접지(-)

   - SCL: 클록 신호를 위한 핀 (I2C 시리얼 클록)

   - SDA: 데이터 신호를 위한 핀 (I2C 시리얼 데이터)


2. **아두이노와 OLED 연결**:

   - **VCC**를 아두이노의 5V 또는 3.3V 핀에 연결합니다. 사용하는 OLED 모듈의 전원 요구 사항에 따라 달라집니다.

   - **GND**를 아두이노의 GND 핀에 연결합니다.

   - **SCL**를 아두이노의 SCL 핀에 연결합니다. 아두이노 Uno의 경우 A5, 아두이노 Mega는 21, 아두이노 Leonardo는 3 핀이 SCL에 해당합니다.

   - **SDA**를 아두이노의 SDA 핀에 연결합니다. 아두이노 Uno의 경우 A4, 아두이노 Mega는 20, 아두이노 Leonardo는 2 핀이 SDA에 해당합니다.


3. **주의 사항**:

   - 전원 핀 연결 시, OLED 디스플레이의 전압 요구 사항을 확인하세요. 일부 디스플레이는 5V에, 다른 디스플레이는 3.3V에 최적화되어 있습니다.

   - I2C 핀 연결 시, 아두이노 보드의 모델에 따라 해당 SDA와 SCL 핀이 다를 수 있으므로, 사용하는 아두이노 보드의 핀아웃을 확인해야 합니다.


이러한 연결을 완료하면, 아두이노 보드를 통해 OLED 디스플레이로 데이터를 전송하고 제어할 수 있습니다.








댓글

이 블로그의 인기 게시물

js 스트링에서 요소 갯수 세기

STUDY

javascript cheatsheet