[2주차/스터디] 아두이노 제어하기1(with Python3)

장다희·2023년 2월 15일

Arduino

목록 보기
2/7

week2
2023.01.20
17:40-20:40


🔥 목표

-'아두이노와 피지컬 컴퓨팅 with 파이썬' Chapter 6, 8~10 공부

(김현빈 조장님의 강의 후 아두이노 실습)

💡 학습 내용

Chapter 06. 푸쉬 버튼 제어하기

푸쉬 버튼을 눌렀을 때 LED에 불이 들어오고 뗐을 때 불이 꺼지게 되는 회로를 구성하였다.

푸쉬 버튼 : 전기 회로를 연결하거나 끊을 수 있는 물리적 장치, 버튼을 눌렀을 때 회로가 연결되고 누르지 않았을 때 회로가 끊김. 이 구조를 통해 전기를 공급하거나 하지 않게 하는 스위치 기능을 함

플로팅 현상 : 스위치가 연결되지 않은 상태에서 전류가 흐르는지 안 흐르는지 알 수 없는 상태가 된 것

풀다운 저항 : 플로팅 현상을 해결하기 위한 방법으로 스위치가 열린 상태에서는 어디에도 전류가 흐르지 않고 입력핀에 0V 전압을 걸고 스위치가 닫히면 GND와 연결되어 GND에 연결된 저항으로 인해 전류가 모두 입력핀으로 흐르게 하여 5V 전압을 거는 방법

풀업 저항 : 플로팅 현상을 해결하기 위한 방법으로 스위치가 열린 상태일 때는 입력핀으로 전류가 흐르게 하여 5V 전압을 걸고 스위치가 닫히면 GND와 연결해 모든 전류가 GND 쪽으로 흐르게 하여 입력핀에 0V의 전압을 거는 방법

Arduino("9600", port="COM6") : 통신 속도를 9600으로 포트를 COM6로 설정하는 코드

pinMode(ledPin, “OUTPUT”) : 미리 설정한 변수 ledPin의 값에 해당하는 핀을 출력핀으로 설정

pinMode(buttonPin, “INPUT”) : 미리 설정한 변수 buttonPin의 값에 해당하는 핀을 입력핀으로 설정

digitalRead(buttonPin) : buttonPin에서 측정되는 값을 읽어오는 코드

digitalWrite(ledPin, “HIGH”) : 미리 설정한 변수 ledPin의 값에 해당하는 핀을 HIGH로 출력하는 코드

if문을 통해 푸쉬 버튼을 눌러 13번 핀에서 값이 1이 되면 LED에 불을 켜고 Push!!를 출력하고 else를 통해 푸쉬 버튼을 누르지 않으면 13번 핀에서 값이 0이 되며 LED의 불을 끄는 코드를 작성했다.

Chapter 08. LED를 제어하는 또 다른 방법

PWM 기능과 아날로그 출력 코드를 이용해 LED의 밝기를 조절하였다.

LED : 아두이노 보드에서 전류가 흐르지 않는 상태인 0부터 가장 밝은 255까지 총 256단계의 밝기 단계를 사용하여 LED를 점점 밝게 점점 어둡게 조절할 수 있다.

PWM : Pulse Width Modulation의 약자로 주기 폭 변조를 의미 한다. 각 주기별로 가장 높은 전압 구간의 비율을 조절하여 아날로그처럼 여러 개의 신호로 만들어 주는 출력 방법이다.

analogWrite(ledPin, brightness) : PWM 기능을 지원하는 핀(ledPin에 저장된 핀 번호)에 brightness에 저장한 값을 출력하는 코드

while 반복문과 brightness 변수를 통해 LED 최고 단계 255보다 작을 때는 brightness 값에 1씩 더해가며 LED의 밝기를 점점 올린다. 그리고 255보다 커지게 되면 brightness의 값에 1씩 빼가며 LED가 점점 어두워지게 한다.

Chapter 09. 조도 센서 제어하기

조도 센서를 통해 센서 주변이 어두워지면 LED에 불이 들어오고 밝아지면 LED에 불이 꺼지는 회로를 구성하였다.

조도 센서(Photoresistor) : 빛, 광, CdS 센서 등으로 불리는 센서로, 주변의 빛의 양을 감지하는 센서이다. 일반적인 조도 센서는 핀 다리가 2개이며 극성이 따로 없다. 일종의 저항으로 볼 수 있다.

analogRead(cdsPin) : cdsPin에 저장된 값에 해당하는 아날로그 핀에서 측정된 값을 읽어오는 코드

if문을 통해 조도 센서에 측정되는 값이 일정 수치보다 작아지면 즉 센서 주변이 어두워지면 LED에 불이 켜지고 else를 통해 일정 수치보다 조도 센서에 측정되는 값이 클 때는 LED에 불이 꺼지게 되는 코드를 작성했다.

Chapter 10. 가변 저항 제어하기

가변 저항을 통해 LED의 밝기를 조절하는 회로를 구성하였다.

가변 저항 : 가변 저항은 반고정저항, 포텐셔미터 등으로 불리며 저항 값을 조절할 수 있는 부품이다. 0부터 1023까지 값을 가질 수 있다.

while문을 통해 반복해서 가변 저항의 값을 측정하면서 변수 brightness를 설정해 가변 저항의 값을 4로 나눈 값을 저장한다. 이 brightness 값은 0~255까지의 값을 가지게 되어 LED의 밝기 단계를 거의 모두 조절할 수 있게 된다. 이를 통해 가변 저항의 값을 변경해 가며 LED의 밝기를 변경하는 코드를 작성했다.

💥문제와 해결 과정

Ch9-조건값 설정 오류

조도센서의 값과 관련된 조건을 책에 있는 것처럼 if cdsValue < 500로 작성했더니 조도센서 주변의 밝기를 조절해도 LED가 계속 켜져있기만 했습니다. '조건값의 설정이 잘못되어있나?'하는 의문점을 가지고 조도센서의 값을 먼저 출력해보았습니다. 저희의 스터디 환경에서 조도센서의 값은 0과60 사이에서 변하고 있었습니다. 이에 if cdsValue < 30으로 코드를 수정하고 다시 시도해보았더니 올바르게 작동하였습니다.

Ch10-공부하는 책의 회로 그림과 코드의 불일치-PWM

회로는 13번 핀에 연결되도록 되어있었고, 코드는 11번 핀으로(ledPin=11) 되어있었습니다.

이를 해결하기 위해 먼저 코드를 13으로(ledPin=13) 바꾸었습니다. 가변저항을 돌리면 LED의 밝기가 연속적으로 변화해야하는데, 꺼졌다가 켜지기만을 반복했습니다. 이에 회로와 코드를 11번 핀으로 수정하여(ledPin=11) 다시 시도해보았더니, 올바르게 작동하였습니다. 그 이유는 다음과 같습니다.

LED의 밝기를 조절하려면 PWM을 이용해야 합니다. PWM-펄스 폭 변조-기능을 이용하면 디지털 핀을 마치 아날로그 핀처럼 사용할 수 있게 되기 때문입니다. 아두이노 우노에서 PWM으로 사용 가능한 Pin은 ~표시를 해두었습니다. 그러므로 ~표시가 없는 13번 핀이 아닌, 11번 핀을 이용해야 합니다.

(*아날로그: 어떤 양 또는 데이터를 ‘연속적으로’ 변화하는 물리량으로 표현하는 것 / 연속적으로 변화하는 형태로 전류를 전달

*디지털: 1과 0이라는 숫자를 통해 정보를 전달하는 것 / 전류가 흐르는 상태(1)와 흐르지 않는 상태(0)의 2가지를 조합하여 전달)


0개의 댓글