본문 바로가기

애플리케이션 개발/HRC(Home Remote Control)

(26)
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. 창문 옮기기 예기치 못한 상황이 발생했다. 리니어 액추에이터를 이용해 창문을 여닫으려고 했는데, 창문이 안쪽과 바깥쪽, 이중으로 되어 있어, 하나의 리니어 액추에이터로 두 개의 창문을 움직이기가 쉽지 않다는 것이다. 그래서 집 안 창문을 약간 이동시켜 리니어 액추에이터를 놓을 공간을 확보한 뒤, 두 개의 창문을 동시에 움직이려고 한다. 아래 그림을 보면, 기존에 창문 배치는 왼쪽과 같고, 이러한 창문 배치를 오른쪽과 같이 움직일 것이다. 내 인생 처음으로 새시에서 창문을 빼 보았다.. 근데 무게도 장난이 아니었지만, 단순하게 보였던 새시 하나도 꽤 복잡한 구조로 이루어져 있어 옮기는데 애를 먹었다. 아래 사진과 같이 원래 창문의 배치는 지그재그로 되어 있었다. 이랬던 창문 배치를 아래 사진과 같이 안쪽 창문을 뺀 뒤..
5-0. 하드웨어 파트 개발 계획 이제 앞에서 구현했던 통신들을 실제 단말기를 통해 동작시켜야 한다. (집은 점퍼선이나 부품들로 난장판이 되어가고 있다.. 쉽지 않은 시간이 될 것으로 예상이 된다..) 회로 설계를 한 뒤 납땜까지 진행을 하고 펌웨어를 수정해야 할지, 점퍼선으로 대충 끼워 놓고 펌웨어를 수정하나 뒤 마지막에 납땜을 할지를 많이 고민했다. 현재 부품들의 기능 테스트를 위해 대충 점퍼로 연결해 놓고, 여차저차 하려고 했는데, 이 방법이 더 복잡한 것 같다. 그래서, 부품에 대한 기능 테스트 정도만 하고 사용할 부품들의 배치나, 핀 할당 등을 하려고 한다. 부품 테스트할 것은 다음과 같다. 1. 리니어 액추에이터 세트(리니어 액추에이터, 모터 드라이버, 리미트 스위치) 창문을 여닫기 위해 사용한다. 리니어 액추에이터는 스텝 모..
4-1. Node MCU를 통해 Web Scraping해서 정보 가져오기 Node MCU를 통해 Web page의 HTML문을 받아오는 것은 지난 포스팅을 참고하면 될 것이다. (taeminator1.tistory.com/15?category=924221) 이제 받아온 HTML문에서 원하는 정보를 가져와 보자. Examples의 BasicHTTPClient에서 약간의 수정이 필요하다. 먼저, setup()에서 Node MCU에 내장되어 있는 LED Indicator pin을 출력 핀으로 할당해 주고, 초기 값을 0으로 세팅하였다. (0일 때, LED가 켜진다) 그다음, loop()를 수정해야 한다. Wep page를 기준으로 통신을 하기 때문에, Web page에 있는 check box의 상태를 담을 수 있는 buttonState를 boolean 배열로 선언하여 초기값은 fa..
2-2. iOS에서 Web Scraping해서 정보 가져오기 나의 목표는 iOS Application에서 HTML 문서를 읽어와 버튼의 상태를 읽고 그 상태를 iOS Application의 버튼에 띄워주는 것이다. 구체적으로 정리를 해보면, 다음과 같다. 1. Application이 시작할 때, HTML 문서 읽기 2. HTML 문서의 버튼 상태 저장하기 3. iOS Application의 컨트롤에 상태 나타내기 먼저 Application이 시작할 때, HTML 문서를 읽어주기 위하여 AppDelegate.swift파일에 클래스 변수로 url과 buttonState를 추가하고, application 함수를 수정해 주었다. url은 반복적으로 사용되므로 ConentView 클래스에 있던 것은 제거를 하고 AppDelegate 클래스에서 한 번만 선언하기로 했다.(t..