본문 바로가기
PLC 자동제어 학습/아두이노 보드 수업

아두이노 보드를 이용한 여러 과제해결과, 스텝모터를 제어하기 위한 연습

by 인터넷떠돌이 2018. 2. 13.
반응형

안녕하세요?


어떻게 하다보니 이 블로그에 정리하는 것이 늦어져서, 이제서야 아두이노를 가지고 했던 수업의 내용을 올립니다. 이번 시간에는 특별한 것은 없었고, 대신 지금까지 배웠는 것을 여러가지 응용하면서 과제를 풀었고, 마지막에는 다음 수업시간에 다루게 될 스텝모터의 제어를 위한 연습단계에 들어가게 되었습니다.



먼저 첫 과제입니다. 버튼 스위치 한개를 두고서, 초기값은 0으로 두고서, 버튼을 누를 때마다 1씩 증가하다가 0~9까지 나오게 하고, 연결된 FND에서는 해당하는 숫자가 표시되도록 하는 것입니다. 힌트로는 아두이노 우노 보드의 7~13번 핀이 각각 FND의 a~g에 해당이 된다고 하는 것입니다.



1차 시도는 실패였는 것이 채터링 현상이 발생하는 것이였습니다. 해결책은 위 그림처럼 따로 설정된 변수 = 입력된 핀의 값을 읽어서 하는 것이였습니다. 사소해 보이지만, 저 순서를 틀리는 것 만으로 채터링이 발생하기 쉬웠습니다.



일단 첫 번째 과제는 그런대로 큰 어려움 없이 끝내는 데 성공했습니다.



그리고 두번째 과제가 왔습니다. 블루투스를 이용해서 스마트폰과 아두이노 우노 보드를 연결한 다음, 폰에서 숫자를 입력하면 그 숫자가 아두이노 우노 보드에 연결되 FND에서 출력이 나오도록 하는 것입니다. 일단 위 1차 시도는 했는데 결과는 시원치 않았습니다.



그래서 하는 수 없이 아두이노 보드용 블루투스 모듈의 설정을 바꿀 수 있는 코드를 전송해서 먼저 블루투스 모듈에 대한 조작에 들어가야 했습니다.



다음으로는 예전에 다운로드 받은 적이 있었는 청파이 엠티의 앱을 이용해서 블루투스로 아두이노 우노 보드와 접속을 하도록 시도를 합니다.



그리고 나서 키 패드에 숫자를 입력하도록 합니다.



일련의 코드를 입력해서 작업을 했는데, 문제가 발생했ㅅ브니다. 문제가 무었이냐 하면, 블루투스로 전송이 되는 것은 문자이지 절대로 숫자가 아니라는 것입니다. 그래서 1이라고 치면, 이건 아스키 코드로 전송이 되지, 절대로 아두이노 보드가 숫자 1로 인식을 하지 않는 다는 것입니다. 그래서 이런 문제 때문에 하는 수 없이 장황한 if문을 써야만 했습니다.



그리고 여기서 중요한 것이 있는데, if문이 싫다고 해서 switch(변수){ case '변수': } 이런 식의 switch case 문법은 안된다는 것에 유의해야 합니다.




결국 어떻게 해서 스마트폰에서 입력되는 키를 통해서 FND에 원하는 숫자를 나오게 하는 데는 성공했습니다. 그런데 이렇게 하는 것 보다 좀 더 정교하면서 세련된 방법이 있다고 합니다.



먼저 새로운 변수를 하나 선언하도록 합니다.



여기서 중요한 것이 바로 오렌지색 박스안에 들어가 있는 코드의 내용입니다. 그래서 '입력받은 문자-'0' ' 이라는 것이 무슨 의미냐고 하면, 문자로 처리된 것은 사실은 컴퓨터 상에서 문자가 이니라, 아스키 코드라는 것입니다. 그리고 아스키 코드간에는 계산이 가능하기는 합니다.



즉, 문자 0 이라는 것은 아스키 코드로 0x30이라고 합니다. 그런데 문제 1부터 아스키 코드는 0x31이런 식으로 1씩 증가하는 경향을 보인다고 합니다. 그래서 만약 3이라는 문자가 들어 왔다고 하면 아스키 코드의 계산은 0x33 - 0x30 = 3 이런 식으로 값이 남는 것입니다. 이걸 이용해서 FND에 간단하게 숫자를 출력할 수 있는 것입니다.



이제 마지막 과제에 들어갔습니다. 원래는 스텝 모터를 제어하기 위한 코드인데, 정회전(blue Led)시에는 역회전(red Led)가 꺼지고, 반대의 경우에는 정회전의 LED가 꺼집니다. 그래서 아두이노 보드의 2번 핀에 연결된 버튼을 누르면 정회전을 의미하는 LED에 불이 들어오고, 1초 간격으로 5번 회전을 하는데, 이를 1~5까지 숫자가 증가하는 것으로 표시합니다.


역회전의 경우에는 역회전을 의미하는 LED에 불이 들어오고 1~3까지 숫자가 1초 간격으로 증가하는 것을 FND에 표시하며, 두개의 버튼을 동시에 누르면, 리셋이 되어서 모든 LED에 불이 꺼지는 것으로 합니다. 일단 위에 올려진 것처럼 코딩을 하는 데 까지는 성공하였습니다.



그렇게 해서 연습용 회로를 만드는 데는 성공했습니다. 일단 지난주 수요일의 수업은 널널한 편이기는 했지만, 문제는 스탭모터의 제어에 들어가게 되면 얼마나 어려운 상황이 벌어질지 벌써부터 걱정이 되기는 합니다. 하지만 지금까지 열심히 이 블로그에 정리한 글을 다시금 참조 하면서 계속 헤쳐나가기는 가능할 것으로 생각이 됩니다.



반응형