-
Notifications
You must be signed in to change notification settings - Fork 0
Raspberry Pi LED practice (with Thonny IDE)
김선영 edited this page Oct 2, 2024
·
27 revisions
목차
- 전압: 전기를 공급하기 위해 사용되는 전기적 차이 [단위: 볼트(V)]
- 전류: 흐르는 전기의 양을 나타내고 전압에 의해 유도됨 [단위: 암페어(A)]
- 전압은 전류와 저항을 곱한 값이다. (전류가 증가하면 전압도 증가함)
- 전류는 저항과 반비례한다. (저항이 증가하면 전류가 감소함)
- 저항은 전압과 비례한다. (저항이 증가하면 전압도 증가함)
- 아날로그 신호: 연속적인 값으로 표현되는 신호, 실제 환경에서 얻은 데이터를 처리
- 디지털 신호: 이산적인 값으로 표현되는 신호로 0과 1로 구성된 bit형태로 정보 전달, 컴퓨터 휴대폰 데이터를 처리하는데 사용
- 직류(Direct Current): 전압의 크기와 방향이 일정하게 유지되는 전류의 형태. 건전지 배터리에 해당. 라즈베리파이에서 사용하는 전류 또는 직류
- 교류(Alternating Current): 시간에 따라 전압의 크기와 방향이 주기적으로 변하는 전류의 형태. 가정에서 사용하는 전기가 교류이고 단상 220V 60Hz이다.
- 왜 AC(교류)를 사용하는가?
- 전력 손실 문제: 낮은 전압으로 전력을 전송하면 전선에서 손실이 큽니다. 이를 줄이기 위해 높은 전압으로 전송.
- 교류의 장점: 변압기를 사용해 전압을 쉽게 조절 가능. 송전할 때는 전압을 높이고, 가정에선 낮은 전압으로 변환하여 안전하게 사용.
- 왜 DC(직류)는 가정에서 많이 쓰이는가?
- 전자기기 사용: 컴퓨터, 스마트폰, TV 등의 전자기기는 직류로 작동. 가정에 들어오는 AC 전원을 DC로 변환하여 사용함.
- 왜 AC로 나누어서 쓰는가?
- 전력 전송 효율성: AC로 높은 전압을 이용해 전력을 멀리 전송한 후, 가정 내에서 낮은 전압으로 변환해 사용.
- 변환 용이성: AC는 변압기를 통해 전압을 쉽게 조정할 수 있음.
결론적으로, AC는 전력 전송에서 효율적이며, DC는 가정 내 전자기기에 적합한 전원을 제공합니다.
Raspberry Pi는 다양한 통신 프로토콜을 지원하여 외부 장치와의 데이터 교환을 가능하게 합니다.
- 특징: 마스터-슬레이브 방식의 양방향 통신
- 핀: SDA (데이터), SCL (클럭)
- 속도: 기본 100kHz, 최대 3.4MHz
- 활용: 온도 센서, RTC, LCD 디스플레이 등
- 특징: 마스터-슬레이브 방식의 동기식 통신
- 핀: MOSI, MISO, SCK, CS
- 속도: MHz 단위의 빠른 데이터 전송
- 활용: 고해상도 디스플레이, SD 카드, DAC 등
- 특징: 비동기식 직렬 통신
- 핀: TX (전송), RX (수신)
- 활용: 시리얼 콘솔, GPS 모듈, 블루투스 모듈
| 프로토콜 | 속도 | 복잡성 | 필요 핀 수 |
|---|---|---|---|
| SPI | 빠름 | 높음 | 4+ |
| I2C | 중간 | 중간 | 2 |
| UART | 느림 | 낮음 | 2 |
- 고속 데이터 전송을 위한 직렬 통신 인터페이스
- Raspberry Pi 4 및 그 이상의 모델에서 PCIe 레인 제공
- Raspberry Pi Compute Module 4 (CM4)에서 PCIe 2.0 x1 레인 사용 가능 (최대 5Gbps)
- 라즈베리파이에서 택트(Tact) 스위치를 연결할 때 저항을 사용하지 않고 연결한다면 스위치를 누를때와 누르지 않을때 차이가 없게된다.
- 이유 : 플로팅 현상때문인데, 떠 있는 상태로 신호가 0(LOW)과 1(HIGH)사이에 애매한 위치에 떠 있기 때문에 발생함.
GPIO는 Raspberry Pi의 핵심 기능으로, 다양한 전자 장치와의 상호작용을 가능하게 합니다.
- 입력: 스위치 등 외부 장치로부터 신호 수신
- 출력: LED 같은 장치 제어
- PWM: 서보 모터와 같은 장치의 속도 및 위치 제어
- Python의 RPi.GPIO 라이브러리 사용
- C/C++, Scratch, Node.js 등 다양한 언어로 제어 가능
- 입력: 스위치 등 외부 장치로부터 신호 수신
- 출력: LED 같은 장치 제어
- PWM: 서보 모터와 같은 장치의 속도 및 위치 제어
- Python의 RPi.GPIO 라이브러리 사용
- C/C++, Scratch, Node.js 등 다양한 언어로 제어 가능
(OS에서 파이썬 에디터 사용을 알아보려면 클릭하세요!)
라즈베리파이5는 최신 os를 설치하면 자체적으로 파이썬이 설치되어있음!
Thonny IDE 편집기
좌측 상단 메뉴에 개발탭 살펴보면 Thonny 편집기는 자체적으로 설치되어 있음.
Nano 편집기
sudo nano [파일이름].py
Nano 편집기 사용방법은 위 명령어로 파일 생성 후, 편집기에 내용을 추가하면 됩니다.
| 라즈베리파이 | LED |
|---|---|
| GPIO 12 | VCC |
| GND | GND |
- 풀업 저항(Pull-up) : 저항을 전원쪽에 붙여줘서, 플로팅 현상을 해결하는 방법
- 스위치가 off로 열려있을 때 전류의 방향은 전원에서 IO핀으로 진행함.
- IO핀의 값은 HIGH(1)
- 스위치가 on 닫혀있을 때 전류의 방향은 SWITCH 그라운드로 진행함.
- IO핀의 값은 LOW(0)
- 참고: 라즈베리파이는 외부에 풀업 저항을 달지 않고 자체적으로 내부 풀업 저항을 소프트웨어로 사용할 수도 있음.
- GPIO 16번, 21번은 OUTPUT으로 사용 GPIO 20번은 INPUT으로 사용함.
- GPIO16번은 풀업으로 사용함.
- pullup.on()을 통해 1상태를 유지. 항상 업 된 상태를 유지함.
- 스위치 입력이 없을땐 GPIO20번으로 1 신호가 들어감.
- 스위치를 누르게 되면 GPIO 20번으로 0이 들어감. GPIO 21번으로 1을 내보내서 LED를 ON 시킴.
- 플로팅 현상을 풀업 GPIO로 잡을 수 있음
| 라즈베리파이 | LED |
|---|---|
| GPIO 16 (PULL DOWN) | SWITCH 1 |
| GPIO 20 (IN) | SWITCH 1 |
| GPIO 11 (OUT) | LED VCC |
| GND | SWITCH 2 |
| GND | LED GND |
- 풀다운 저항(Pull-down) : 풀업 저항과 반대로 저항을 그라운드쪽에 붙여서 플로팅 현상을 해결하는 방법
- 스위치가 off로 열려있을 때 전류의 방향은 IO핀에서 그라운드으로 진행함.
- INPUT핀의 값은 LOW(0)
- 스위치가 on 닫혀있을 때 전류의 방향은 전원에서 IO핀으로 진행함.
- INPUT핀의 값은 HIGH(1)
- GPIO 포트를 이용한 방법으로, Tact 스위치로 입력받고 led를 on off 하는 예제. GPIO는 플로팅 현상을 차단하기 위해 사용됨.
- 택트 스위치는 누르기 전에는 세로줄로 각각 연결되어 있다가 스위치를 누르고 있을 때는 4개의 핀이 모두 연결됨.
| 라즈베리파이 | LED |
|---|---|
| GPIO 16 (PULL DOWN) | SWITCH 1 |
| GPIO 20 (IN) | SWITCH 1 |
| 5V | SWITCH 2 |
| GPIO 21 (OUT) | LED + |
| GND | LED - |
- GPIO 16번, 21번은 OUTPUT으로 사용하고 GPIO 20번은 INPUT으로 사용함.
- GPIO 16번은 풀다운으로 사용함.
- pulldown.off()을 통해 항상 0상태를 유지함. 항상 다운된 상태를 유지함
- 스위치 입력이 없을땐 GPIO 20번으로 0신호가 들어감 = 아무리 플로팅 해도 0이 들어옴.
- 스위치를 누르게 되면 GPIO 20번으로 1이 들어감 = GPIO 21번으로 1을 내보내 LED를 ON시킴
- 플로팅 현상을 풀다운 GPIO를 잡게 된다!
- 실습 부품들을 정리하고 Fritzing으로 연결 구조를 그리면서 스마트디바이스 수업때 정리했던 지식이 생각나서 복습이 되서 좋았다.
- 풀업 풀다운 개념을 알게 되었는데, 책 설명을 읽고 실습코드 분석을 작성 하면서 스위치 그라운드, 전원, io핀의 전류 흐름에 따라 input값이 LOW(0) HIGH(1)신호가 들어감을 알게됨!
- 좀 더 공부할것들이 많아서 제공받은 ppt를 통해서 보고서 수정을 지속해볼 계획이다.