MicroProcessor_SBC/Arduino

Arduino With Tinkercad Circuit - 007_LED 1개 제어

LonleyEngineer 2021. 10. 29. 13:54
반응형

이번 포스트에서는 아두이노를 이용해서 1개의 LED를 켜고 끄는 예제를 틴커캐드(Tinkercad) 서킷으로 시뮬레이션 해보려고 합니다.

 

1.     회로 디자인 – Circuit Design

  • 우선 서킷에서 ‘새 회로 작성’을 눌러 새로운 회로판을 생성해주고 이름을 구분하기 좋게 변경합니다. 편의상 ‘1 LED Blinking example’ 로 지정했습니다.

 

 

  • 아두이노 프로젝트이기 때문에 아두이노를 하나 끌어다 놓습니다. 편의상 아두이노 UNO 보드를 사용합니다. 그리고는 브레드보드(Breadboard small) 1개 LED 1개를 끌어다 놓습니다. LED는 잘보이도록 녹색(Green)으로 하겠습니다.

 

 

 

  • 나중에 따로 이야기할 시간이 될지 모르겠어서 미리 기재해봅니다만 아두이노에 ‘Digital(PWM~)’ 이라고 기재되어 있는 부분의 핀은 디지털 핀으로 사용 가능합니다. ‘PWM~’의 의미는 핀번호 앞에 ‘~’ 표시가 있는 것은 PWM 출력으로 사용 가능하다는 뜻입니다.

 

 

 

 

  • 이제 부품들을 서로 연결해줄겁니다. 우선 브레드보드에 LED를 놓고 저항을 애노드(Anode) 쪽에 브레드 보드의 같은 라인에 위치하게 놓습니다.

 

 

 

 

  • 그리고 LED의 캐소드(Cathode) 핀과 아두이노의 GND핀을 클릭해가며 검은색 선으로 연결해줍니다. (이때 선 색깔 지정의 단축키는 선이 선택된 상태에서 ‘1’키를 눌러줍니다.)

 

 

 

  • 아두이노의 디지털핀(0~13번핀) 중에 하나를 선택해서 사용합니다. 편의상 8번 핀을 이용하겠습니다. 8번 핀과 저항의 다리를 연결해줍니다. 신호선은 녹색으로 합니다.(단축키 ‘5’ 입니다.)

 

 

2. 코딩(Coding)

  • 이제 회로 연결은 끝났습니다. 실제 동작을 위한 코드를 작성해야 합니다. 코드(Code) 버튼을 눌러주면 아두이노가 추가되어 있기 때문에 코딩이 가능한 창이 나옵니다. 코드는 블록+텍스트(Blocks + Text) 모드에서 작성합니다. 그래야 나중에 C언어로 코딩하는데도 도움이 되기 때문입니다.

 

  • 블록+텍스트를 선택하면 블록코딩 영역과 텍스트 코딩 영역이 나타납니다. 여기서 주의할 점은 블록만 선택했다가 텍스트로 가거나 텍스트만 선택했다가 블록으로 모드를 바꾸면 코딩했던 내용이 사라집니다.

 

 

  • 간단한 예제이므로 블록코딩을 해볼겁니다. 기존에 바로 보이던 블록코드는 끌어다가 휴지통 모양에 던져서 없애줍니다. 블록코드를 삭제하면 옆에 텍스트 코드에도 void setup(){}, void loop(){}만 남고 모두 사라질겁니다.

 

 

  • 일단 디지털 8번핀을 사용하기 때문에 블록의 출력(Output)에서 디지털핀 제어에 해당하는 블록을 높음(HIGH)로 설정해줍니다. ‘핀 8을(를) 높음 (으)로 설정’ 블록이 되겠네요. 그리고 블록을 오른쪽으로 끌어다 놓습니다.

 

 

 

  • 이렇게 하고 나면 블록을 하나 끌어다 놨을 분인데 텍스트 코드 부분에 2부분에 변화가 있습니다. Setup()함수 부분과 loop()함수 부분에 모두 변화가 있습니다. 지금이야 LED 1개만 켜고 끄면 되니까 블록코드가 가능해지지만 실제 난이도가 조금 높은 기능을 구현하려면 텍스트 코딩이 필수이기 때문에 쉬운 예제에서 텍스트 코드를 익혀줍니다.

  • Setup() 함수는 아두이노에 전원이 연결된 후 초기에 1번만 실행됩니다. 그래서 핀을 입력으로 사용할 것인지 출력으로 사용할 것인지, 또는 시리얼통신 환경변수를 설정한다거나 하는 부분에 대한 설정이 setup함수에 들어갑니다.

 

  • 그래서 setup 함수에 pinMode(8, OUTPUT)이 자동으로 생성된 이유가 8번 핀에 대한 값을 출력블럭에서 사용했기 때문입니다. loop 함수에 추가된 digitalWrite(8, HIGH);는 8번핀에 디지털 값 HIGH(높음, 1에 해당)를 설정한 것이며 delay(10)은 자동으로 붙었는데 delay(지연하고 싶은 밀리세컨드 값)의 의미로 다음 동작이 너무 빠르게 설정되는 것을 방지하기 위함이 아닌가 싶습니다.

 

 

  • 이번에는 1초 대기 후에 LED를 꺼볼 것이기 때문에 제어(control) 블록에서 ‘대기(wait) 1초’를 끌어다가 블록에 붙여줍니다.

 

  • 그러면 delay(10)이었던 부분이 delay(1000)으로 바뀌면서 1000밀리초=1초로 바뀌는 것을 볼 수 있습니다.

 

 

 

 

  • 8번 핀에 높음(HIGH)로 설정함으로써 높은 전압을 내보내서 LED를 켰으니 이젠 꺼야겠죠? 출력(output)블록에서 다시 . ‘핀 8을(를) 낮음 (으)로 설정’ 으로 해서 대기블록 뒤에 붙여줍니다.

 

 

  • 그렇게 하고 나면 텍스트 코드에도 변화가 생기는 것을 볼 수 있죠. dititalWrite(8, LOW);가 추가 되었습니다.

 

 

 

  • 이 상태로 그냥 두면 동작은 마지막 상태를 유지하면서 LED가 한번 켜졌다가 1초후에 꺼지고 있을 겁니다. 그래서 1초간 대기 후에 되돌이(loop)를 하며 LED가 켜졌다가 꺼졌다가 하기 위해 ‘대기 1초’를 추가해줍니다. 그러면 최종적으로 아래와 같은 모습과 코드가 되었을겁니다.

 

 

3. 시뮬레이션(Simulation)

  • 이제 대망의 시뮬레이션 시간입니다. 그상태로 두고 회로도 작업영역에 있는 ‘Fit to zoom’을 눌러 회로부분과 블록 부분을 모두 보이게 두고 시뮬레이션을 해봅니다.

 

 

  • 그러면 시뮬레이션이 진행되며 LED가 켜고 꺼지는 것을 볼 수 있습니다.

 

 

 

  • 하지만 여기서 궁금증이 하나 생깁니다. 왜 나는 반복을 시키지 않았는데 LED는 계속 켜졌다 꺼졌다 하는 것일까요? 그 이유는 바로 LED를 켜고 끄는 코드가 loop()함수 내부에 있기 때문입니다. Setup()함수는 초기 동작시 1번 실행되고 loop()함수는 함수의 처음부터 끝까지 계속 반복하도록 되어 있기 때문입니다.

 

 

※ 이렇게 간단한 예제를 통해 LED 1개를 켜고 끄는 아두이노 코드에 대한 시뮬레이션을 틴커캐드로 진행해보았습니다. 지금까지는 틴커캐드의 기본 기능 설명이 많이 필요해서 캡처와 함께 글을 썼는데 다음 포스트 부터는 코드와 시뮬레이션에 대한 내용이 주를 이룰 것 같으므로 동영상으로만 진행해보도록 하겠습니다.

 

저는 비전문가이기 때문에 정확하게 쓰려고 노력해도 오류가 있을 수 있습니다. 오류가 있다면 날선 비판 보다는 댓글로 지적해주시면 감사히 받아들이도록 하겠습니다.

반응형