티스토리 뷰

아두이노에 아날로그 센서 데이터를 수신하면 여러 변수에 따라 값이 달라지는 것을 발견 했습니다. 또한 시리얼 통신으로 데이터 받을 때 통신속도 동기화 차이로 발생하는 오류도 발견했습니다.

아래는 현재 구성중인 그림입니다. 테스트에는 가변저항 하나 사용했는데 여러 센서와 공개된 공공자료를 이용하려고 구성하였습니다. DB 테이블은 미리 만들어 놓고 무작위로 데이터 생성해서 입력했습니다. 아직 시험중인 것이 있어서 테스트에 사용한 소스코드 설명은 나중에 써야겠습니다.

고려사항1. 아두이노 전원

아두이노에 5v, 9v 입력에 따라 값이 달라집니다. 높은 전압이면 더 큰 수치가 발생합니다. 그리고 노이즈가 의외로 많습니다. 따라서 노이즈 감소, 전원 안정회로를 꼭 구성해줘야 합니다. 디지털 핀 연결은 상관없지만 아날로그 핀에서는 차이가 아주 큽니다.

고려사항2. 통신 속도

COM 포트의 baud 설정 하는 것 말고 송신, 수신 프로그램에서 간격을 일치 시켜줘야 합니다. 통신 속도가 다르면 버퍼에 쓰레기 값이 누적되어 정확한 값을 얻을 수 없습니다.

고려사항3. 예외 처리

아두이노와 파이썬 프로그램에서 예외처리 정말 꼼꼼하게 해줘야 합니다. 위 구성만으로도 com port, serial, DB 3군데 예외처리가 필요한데 이것이 안되어 있으면 오류 발생할때 한참 찾아다녀야 합니다.

고려사항4. 목적을 분명히

데이터 획득, 분석, 모니터링 어느 것을 할 지 정하고 다른 기능 과감하게 버려야 합니다. 아두이노로 부터 직접 수신받은 값을 실시간 그래프 처리해보았데, 획득 단계에서 실시간으로 그래프 UI구성하는 것이 마이크로 프로세서 사용하는 용도에 맞나 의구심이 많이 듭니다.

분석과 모니터링은 DB의 데이터로 하는 것이 여러가지로 안정적이고 프로그램도 단순해집니다.

고려사항5. 프로그램 도구는 편한대로 여러가지로

파이썬 하나로 데이터 수신, 분석, 모니터링 하려했는데 모니터링은 visual 계열에 비해 약합니다. com port의 데이터보다 DB의 데이터로 모니터링 하는 것이 아주 안정적이네요.

나중에 규모를 더 키워 데이터 받아 저장하는 서버와 분석 & 모니터링하는 클라이언트 분리하면 어자피 프로그램 분리해야하니 처음부터 나눠 코드 작성하는 것도 좋다 생각합니다.

개인적으로 Visual Studio 라이브러리 체계를 안 좋아 해서 사용안하는데 프로젝트 관리용으로는 아주 좋습니다. 동시에 서로 다른 언어로 제작하는 프로젝트도 하나의 환경에서 관리되고 실행도 가능합니다.

예를 들어, 아두이노, 파이썬, 웹을 하나의 솔루션이나 프로젝트로 묶어 파일 숫자가 늘어았을 때 헤깔림을 많이 줄여줍니다.

기타 후기

파이썬 : 쉬운 부분은 아주 간단하게 코드가 작성됩니다. 조금만 복잡해진 알고리점 구현하려면 차라리 C++이 낫습니다. 그리고 아나콘다가 아주 편합니다. 가상환경, 버전관리, 라이브러리 관리 UI 프로그램이 있습니다.

SQLite : 처음 써본 DBMS인데 아주좋습니다. 이름답게 아주 작고, 가볍고, 성능도 잘 나옵니다. 약 10년 기간의 다수의 센서 데이터 값을 저장한 가상의 DB를 만들어서 시험했는데 상용 DB와 비교해서 부족한 부분을 못느꼈습니다. DB에 타임스탬프를 넣을 때 타임존 꼭 설정해줘야 합니다.

GitHub : 프로그램 버전관리를 지원해주는 사이트 입니다. 복잡한걸 왜 쓰나 했는데 시험삼아 적용해 보았다가 날아간 코드 살리는데 큰 도움 받았습니다.

아두이노와 센서 : 센서는 좋은 것을 써야겠습니다. 업자들이 파는 센서 불량이 너무 많네요.

1 ··· 3 4 5 6 7 8 9 10 11 ··· 18