전기 및 디지털 회로실험실험 M2 아날로그 및 디지털 기초 회로 응용결과보고서담당교수 : 교수님학과 : 전기공학과학번 :이름 :실험 명실험 M2 아날로그 및 디지털 기초 회로 응용개요기존에 수행했던 아날로그 및 디지털 기초 회로의 동작을 아두이노를 이용해 되풀이 해보고, 패키지 소자들을 이용해 하드웨어 수작업으로 구현했던 과거 회로와 비교하여 어떤 부분이 어떻게 프로그램으로 대체 가능한지 학습한다.실험순서에 따른 실험결과키르히호프의 전압법칙 및 결합법칙“직류회로에서의 측정 실험”의 [그림 2] 회로를 브레드보드에 구성하고, V1 전원의 양극에는 아두이노 보드 파워의 5V를, 음극에는 GND를 연결한다.회로에서 이미 전위 값을 알고있는 5V와 GND 노드를 제외한 나머지 전압 노드 세 곳을 보드의 아날로그 입력 네 핀에 연결한다.회로 결선도모든 저항 값들은 미리 측정한 후 기록해두고, 각 저항에 흐르는 전류 값을 옴의 법칙을 이용해 구해 시리얼 모니터 화면에 모든 노드의 전위 값과 모든 저항에 흐르는 전류 값을 계속해서 보여주는 프로그램을 작성한다.저항 측정측정한 저항 값R1R2R3R4R5작성한 프로그램컴파일 및 업로드한 후, 스위치를 눌렀다 떼며 그 결과를 확인한다.회로 결선도실험 결과디지털 Input (Read) 결과분석이번 실험은 스위치를 누르면 상태가 시리얼 모니터에 연속으로 출력되도록 프로그램을 작성하고 실행한 다음 결과를 확인하는 실험입니다.실험 (1)은 회로를 결선하는 것인데, 특징으로는 0과 1을 입력받는 회로이기 때문에 그림 11 오른쪽에 보면 플로팅 현상이 일어나지 않도록 연결해준 것이 있습니다. 이때 실수한 부분이 있었는데, 책에 있는 그림을 기준으로 회로를 결선했을 때 5V와 GND에 연결해야 하는 핀을 각각 3.3V와 5V에 연결해서 실행이 되지 않았습니다. 단순 실수이므로 빠르게 해결하고 마저 실험을 진행해 완료했습니다.실험 (2)는 스위치가 눌렸을 때의 상태를 표시하는 프로그램을 작성하는 것입니다. 처음에 Serial.begin으로 보선언합니다. 만약 2번 핀을 HIGH면 시리얼 모니터에 ON을 표시하고, 그렇지 않을 경우 (여기서 else를 쓰더라도 입력받는 값이 HIGH와 LOW밖에 입력값이 없기에 상관없음) 스위치의 움직임에 따라 ON과 OFF를 각각 잘 출력하도록 작성했습니다.실험 (3)을 보면 아두이노의 시리얼 모니터에서 스위치의 움직임에 따라 ON과 OFF가 출력되는 것을 볼 수 있으므로 실험을 성공적으로 마쳤습니다.디지털 Output (Write)[그림 1]의 회로를 다시 구성한다. (아마 그림 1이 아닌 그림 11로 추정회로회로 결선도스위치가 눌렸을 때, 보드 위에 장착된 LED (디지털 13 출력과 연결)가 켜지도록 프로그램을 작성한다.작성한 프로그램컴파일 및 업로드한 후, 스위치를 눌렀다 떼며 그 결과를 확인한다.실험 결과디지털 Output (Write) 결과분석이번 실험은 스위치를 눌렀을 때 보드에 내장된 LED가 켜지고, 누르지 않았을 때 내장된 LED가 꺼지도록 프로그램을 작성하고 결과를 확인하는 실험입니다.실험 (4)는 이전 회로를 그대로 사용하는 결선 실험이었으므로 성공적으로 완료했습니다.실험 (5)는 스위치가 눌렸을 때, 보드 위에 장착된 LED가 켜지도록 프로그램을 작성해야 했는데 이 과정에서 실수가 있었습니다. 원래는 if문 하나에서 ledpin이 꺼져있는 상태에서 켜지도록 하는 것을 계획했으나 HIGH와 LOW를 반대로 기입하는 바람에 실험 설계 목표와 정반대로 움직이는 코드를 작성했습니다. 비록 디지털 Output을 알아보는 실험이라 조교님께서 넘어가주셨지만 실수임은 명백하므로 다음부턴 시뮬레이션 프로그램에서 잘 작동하는지 확인하는 작업도 고려해봐야 겠다고 생각했습니다.실험 (6)의 결과 확인 과정에서 스위치를 누르지 않으면 켜져있고 스위치를 누르면 LED가 꺼지는 설계 목표와 반대로 움직이는 회로가 만들어졌으므로 실험을 성공적으로 완료하지는 못했습니다.아날로그 Input (Read)다음과 같은 회로를 구성한다.회로회로 결선도포텐셔미터에 의해 조절된 전압 조절해가며 그 결과를 확인한다.실험 결과아날로그 Input (Read) 결과분석이번 실험은 아날로그 입력에 대한 실험입니다. 가변 저항은 5V 기준 0~1023까지의 저항값을 가지며 이를 시리얼 모니터에 연속적으로 표시하는 프로그램을 작성해 가변 저항을 조정해가며 아날로그 입력에 대해 확인하는 실험입니다.실험 (7)은 회로를 구성하는 실험이나, 결선한 회로도를 찍는 것을 깜빡해 첨부할 사진이 없습니다. 어쩔 수 없이 Hyperlink "https://www.tinkercad.com/things/at6I7BvlwX7-brave-wluff/editel?tenant=circuits" https://www.tinkercad.com/things/at6I7BvlwX7-brave-wluff/editel?tenant=circuits에서 결선한 사진을 대신 사용했습니다.실험 (8)은 포텐셔미터에 의해 조절된 전압 값이 시리얼 모니터에 연속으로 출력되도록 프로그램을 작성하는 것입니다. 시리얼 모니터에 출력해야 하므로 보드레이트 9600 선언과 A0과 가변 저항을 연결했으므로 A0에서의 analogRead를 사용하고 Serial.println을 사용해 한 줄 씩 출력하도록 프로그램을 작성합니다.실험 (9)는 컴파일 및 업로드한 코드로 출력값을 확인하는 것입니다. 이 과정에서 출력값이 0부터 658에서 멈춰서는 문제가 있었습니다. 이 문제는 5V가 아닌 3.3V 핀에서 연결해서 전압값이 제한되어 생긴 오류였으며 단순 오류였으므로 해결했습니다. 시리얼 모니터에서 출력값을 받을 때 숫자가 0부터 1023까지 변화하는 것을 볼 수 있기 때문에 실험을 성공적으로 마쳤습니다.아날로그 Output (PWM Write)다음과 같은 회로를 구성한다.회로회로 결선도LED가 처음에는 가장 밝은 밝기로 켜진 후, 매 1초마다 점점 어두워졌다가, 다시 점점 밝아지는 것을 반복하도록 프로그램을 작성한다.작성한 프로그램컴파일 및 업로드한 후 그 결과를 확인하고, 9번 핀을 오실로스코프 프로브로 찍어 그 M Write) 결과분석이번 실험은 아날로그 출력에 대한 알아보기 위해 아날로그 입력에서 쓰이는 코드에 대해 알아보고, 아날로그 출력에서의 파형을 오실로스코프로 확인하는 실험입니다.실험 (10)은 회로 결선 과정이며 간만에 실수없이 잘 결선했습니다.실험 (11)은 처음에 가장 밝은 밝기로 켜진 후 매 1초마다 점점 어두웠다가, 다시 점점 밝아지는 코드를 짜야 했습니다. 이 과정에서 문제가 많았는데, 처음에 작성했던 코드가 오류가 생겼는데 어디에 오류가 생겼는지 알지 못해서 난항이 있었습니다.처음에 작성했던 코드이 코드에서의 문제는 우선 analogwrite를 사용하기 위해서 9번 핀을 int 형의 자료형으로 선언해주어야 합니다. 그리고 1초당 밝기를 제어하기 위해 255를 5로 나눠 51씩 증감하는 방향으로 코드를 작성했습니다. 하지만 이를 제대로 대립하기 위해서는 I – 51이 아닌 I -= 51과 I += 51로 작성해주어야 계산된 값으로 이어질 수 있습니다. 이를 해결한 코드는 다음과 같습니다.코드 작성에 문제가 있었으나 도움을 받아 잘 완료했습니다.실험 (12)는 코드에 대한 출력값을 확인하고 오실로스코프 프로브로 밝기가 변화학고 있는 파형을 관찰하는 실험입니다. 우선 코드에 대한 출력으로 밝기가 밝아졌다 어두워져야 하며, 촬영한 것 중 가장 밝은 사진과 가장 어두운 사진으로 확인해보면 밝기가 변화했음을 확인할 수 있습니다. 그 다음 오실로스코프로 파형을 확인하기 위해 프로브로 찍어보면 파형이 연속적이고 주기가 변화하는 것을 통해 아날로그 신호이며 출력이 변화하고 있음을 볼 수 있습니다.실험 고찰PWM아두이노는 아날로그 값 출력이 가능하기에 아날로그 출력 신호값을 조절할 수 있습니다. 이를 통해 모터의 회전 속도나, 저희가 했던 실험처럼 LED의 밝기 또한 조절할 수 있습니다. 이 아두이노가 아날로그 값을 출력하기 위해서는 아두이노가 입력받은 값을 디지털신호로 변환한 뒤, 이를 PWM 방식으로 출력해야 합니다. PWM 출력이란 전압 신호의 전압 파형을 로 나눌 수 있습니다.각각의 주기에 대해 HIGH인 상태가 있고, LOW인 상태가 있습니다. 여기서 첫번째 주기에서는 1인 상태가 약 40%이고 0인 상태가 60% 정도이기에 아날로그 값은 이 비율로 크기를 조정하며, 이는 analogWrite() 함수로 나타내줄 수 있습니다. 아두이노가 PWM 방식으로 아날로그 값을 출력할 때, 그 값은 0부터 255까지 총 256까지 값을 출력할 수 있습니다.위의 그림에서 아두이노가 입력받은 신호가 5V의 전압값일 때, 이 신호가 디지털화되며 이는 PWM 출력 방식에 의해 출력값이 변합니다. 이를 Duty Cycle이라고 하는데, 1인 출력이 차지하는 값에 따라서 0~255까지의 값이 정해지는 것입니다. 예를 들어 값 중 1인 값이 반 정도인 50% Duty Cycle이면 analogWrite(127)을 출력하고, 100% Duty Cycle이면 analogWrite(255)를 출력합니다. 이렇게 PWM방식으로 아두이노는 아날로그 값을 출력해낼 수 있습니다.PWM 출력 방식은 디지털출력이지만 값을 아날로그화 시켜 출력하는 방식입니다. 이를 위해 디지털 입출력핀 부분에 PWM 출력이 가능한 단자들인 3, 5, 6, 9, 10, 11 단자들이 있어 여기에 핀을 꽂아주어야 합니다. 이 핀과 analogWrite 함수를 사용해서 PWM 파형이 출력될 핀의 번호와 0~255의 출력할 파형의 세기를 사용해 PWM 출력을 가능하게 할 수 있습니다. Hyperlink "https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=roboholic84&logNo=220333343346" https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=roboholic84&logNo=220333343346 Hyperlink "https://docs.arduino.cc/learn/microcontrollers/analog-ouput