본문 바로가기

애플리케이션 개발

(30)
5-4. 아두이노 코딩 4 마지막으로 전체 코드를 첨부하고 아두이노 코딩은 마무리 지으려고 한다. 앞에서 설명하지 않은 부분들에 대해서는 아두이노 카테고리를 참고하면 좋을 것 같다. (직관적인 부분 또한 설명에서 제외했다) #include #include #include #include #include #include #include ESP8266WiFiMulti WiFiMulti; const char wifiID[20] = "*************"; const char wifiPW[20] = "*************"; const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution(+: return, -: go) cons..
5-4. 아두이노 코딩 3 이번 시간에는 Actuator 구동 관련된 코드 부분을 살펴보자. 웹페이지에서 button이 on상태로 바뀌면, Actuator가 동작하게 된다. 이 Actuator는 Limit Switch를 만날 때까지 한 방향으로 가다가, Limit Switch를 누르게 되면, 다시 돌아와야 한다. 해당 동작은 while문을 이용해 구현하였다. bool toggle = false; // from web page bool buttonState = false; // to store state of past toggle // 0: end of the actuator, 1: next to the motor bool switchState[2] = {false, false}; void setup() { Serial.begin(..
5-4. 아두이노 코딩 2 이번 시간에는 웹페이지에서 button 상태를 확인하고, 이에 따라 동작하는 코드를 살펴보자. 지난 시간에도 말했듯이, 웹페이지에서 읽은 button 상태만 가지고는 제대로 된 동작을 구현할 수가 없다. 이를 해결하기 위해, 웹페이지에 현재 button의 값은 toggle이라는 변수에, 이전 button의 값은 buttonState라는 변수에 저장하여, 두 변수의 상태가 다를 때, 동작하도록 구현하였다. bool toggle = false; // from web page bool buttonState = false; // to store state of past toggle void setup() { Serial.begin(115200); } void loop() { if (buttonState == t..
5-4. 아두이노 코딩 1(Flowchart) 이번 포스팅부터 아두이노 코딩에 대해 살펴보자. 먼저 아래 그림과 같은 순서로 코딩을 진행하려고 한다. 웹페이지에서 버튼의 상태를 계속해서 읽어 들어야 하기 때문에, 순차적으로 버튼의 상태를 확인한다. 특징 몇 가지를 살펴보자. 먼저 Wi-Fi가 연결되지 않을 시에는 다음 loop에서 다시 Wi-Fi 연결을 시도하게 했다. (왼쪽 Flowchart 참고) 웹페이지에서 계속해서 button의 상태에 따른 동작 여부를 확인해야 하기 때문에, 순차적으로 button 상태에 따른 동작을 구현했다. 해당 Flowchart를 구현하기 위해 고려할 점이 몇 가지 있다. 웹페이지에서 읽어 들인 button의 상태 값이 방금 조작된 것인지, 아니면 원래부터 해당 상태였는지를 구분할 필요가 있다. 구분하지 않으면 Web ..
5-3. 회로 설계 및 부품 실장 이제 회로 설계하고, 아두이노 코딩하면 얼추 기능은 구현할 수 있게 될 것이다. 회로 설계 관련해서는 이미 아두이노 카테고리에서 얼추 다뤘기 때문에, 빠르게 할 수 있었다. 다만 설계한 회로를 실장 하는 것이 시간이 오래 걸렸다. 회로는 다음과 같다. 가장 좌측에 DC-DC Converter를 배치해 12V를 5V로 바꾸어 주어 5V가 필요한 IC에 전원을 공급했다. 그리고 IR 송수신 부분은 동시에 이루어질 일이 없어서 GPIO 핀을 아끼기 위해 하나로 통합했다. 나머지는 이전 포스팅을 참고하면 될 것 같다. - NodeMCU를 이용한 적외선 센서 조작(송/수신): taeminator1.tistory.com/19?category=924221 - NodeMCU를 이용한 Limit Switch 제어: ta..
5-2. 기구 제작 2 이전 포스팅(5-2. 기구 제작 2, taeminator1.tistory.com/23)에 이어 남은 기구를 제작해 보자. 모터 드라이버를 배치할 공간을 만들어야 하는데, 모터 드라이버에 대한 공간과 함께 Stepper Motor의 공간도 고려해야 해서 아래 왼쪽 사진과 같이 조금은 복잡하게 기구물이 나왔다. 모터와 모터 드라이버의 발열 때문에 일단은 개방적으로 제작하였다. 그리고 만들다가 본드칠을 잘못해서 떼어내느냐고 조금은 지저분해졌다. 해당 기구물에 모터와 이전 포스팅에서 만든 리미트 스위치를 위한 기구를 결합하면 아래 오른쪽 사진과 같이 된다. 모터가 움직이지 않게 홈을 주었고, 커넥터 위치를 위해 구멍도 뚫었다. 이제 회로 설계 돌입니다!
5-2. 기구 제작 1 이전 포스팅에서 기구 제작을 3D 모델링을 통해 할까 고민했었지만, 아무래도 오래 걸리고 유연한 작업이 되지 않을 것 같아 포맥스를 이용해 손으로 직접 만들기로 했다. 그리고 아트웍까지는 너무 복잡해질 것 같아, 회로도 납땜을 통해 구현하는 것으로 결정했다. 기구는 다음과 같은 것들이 필요하다. 어댑터 수납을 위한 케이스 NodeMCU와 적외선 센서 등(메인 회로)을 위한 공간 리미트 스위치를 위한 기구 모터와 드라이버를 배치할 공간 이번 포스팅에서는 1번, 2번, 3번에 대해 살펴보자. 어댑터 수납 케이스랑 메인 회로는 층을 나눠 한 기구부에 넣으려고 한다. 어댑터는 케이스의 1층에 위치하게 하고, 어댑터를 통한 전압을 2층 메인 회로에 전달하는 식이다. 최대한 단순하고 깔끔하게 만드려고 노력했다. 아..
5-1. 창문 옮기기 예기치 못한 상황이 발생했다. 리니어 액추에이터를 이용해 창문을 여닫으려고 했는데, 창문이 안쪽과 바깥쪽, 이중으로 되어 있어, 하나의 리니어 액추에이터로 두 개의 창문을 움직이기가 쉽지 않다는 것이다. 그래서 집 안 창문을 약간 이동시켜 리니어 액추에이터를 놓을 공간을 확보한 뒤, 두 개의 창문을 동시에 움직이려고 한다. 아래 그림을 보면, 기존에 창문 배치는 왼쪽과 같고, 이러한 창문 배치를 오른쪽과 같이 움직일 것이다. 내 인생 처음으로 새시에서 창문을 빼 보았다.. 근데 무게도 장난이 아니었지만, 단순하게 보였던 새시 하나도 꽤 복잡한 구조로 이루어져 있어 옮기는데 애를 먹었다. 아래 사진과 같이 원래 창문의 배치는 지그재그로 되어 있었다. 이랬던 창문 배치를 아래 사진과 같이 안쪽 창문을 뺀 뒤..