아두이노는 자체적으로 멀티쓰래드를 지원하지 않습니다. 그러다 보니 쓰래드 작업을 하고 싶으면 방법이 없죠. 결론부터 이야기하자면 아두이노에서 다른 언어의 쓰래드와 같은 동작을 하는 구현은 불가능합니다. 지금부터 소개할 라이브러리도 시분할로 쓰래드처럼 보이도록 해둔 것이지 쓰래드라고 볼 수 없죠. 1. 'ArduinoThread' 프로젝트 깃허브에 'ivanseidel'라는 분께서 만든 프로젝트입니다. (참고 : github - ivanseidel / ArduinoThread ) 소스코드를 보면 우리가 생각하는 쓰래드처럼 동작하지 않을 것 같습니다. 구현된 방식이 아두이노의 'loop()'에서 쓰래드 컨트롤러를 지속해서 호출하면서 타이밍 맞을 때 쓰래드로 지정한 함수를 호출하는 방식입니다. 구조만 봐서는 ..
합성 컨트롤(Authoring a Composite Control)은 '유저 커스텀 컨트롤'과는 달리 DLL형태로 만들어wu 재사용이 쉽다는 장점이 있습니다. 예전엔 '유저 제작 컨트롤'같은 이름이였던거 같은데 기능이 바뀐 건지 처음 듣는 이름이네요. 개념상으로는 기존의 컨트롤들을 재조합하여 만들기 때문에 이런 이름을 붙인 것 같습니다. 간만에 그림하나 없는 MSDN의 샘플이 아무런 작업 없이 잘 돌아간 것 같네요 ㅋㅋㅋㅋ 그래서 MSDN의 샘플을 그대로 따라가도록 하겠습니다. (참고 : MSDN - 연습: Visual C#에서 합성 컨트롤 제작) 1. 프로젝트 생성 C# > Windows > Windows Forms 컨트롤 라이브러리 를 선택하고 이름을 'ctlClockLib'으로 한 다음 프로젝트를 ..
로드셀처럼 변화값이 작은 센서들은 컴퓨터로 읽기 위해서 전압을 증폭해야 합니다. (낮은 전압을 읽을 수 있는 보드라면 상관없지만 일반적인 범용보드들은 이정도로 낮은 값은 재대로 읽지 못합니다.) 아두이노에서 읽을 수 있는 전압값은 '참조 전압 /1024'이라고 입니다. 인터넷을 뒤져보면 1mV 정도까지는 읽는 듯 한데 직접 해보면 가변저항 이 값이 비교적 정확하게 들어오는 센서들이나 의미 있는 내용이고 값이 불안정하게 들어오는 센서들(로드 셀, 거리측정 센서) 같은 것들은 10mV정도부터 의미 있는 값으로 보는 게 맞는 듯 하네요. 어찌됐건 로드셀은 낮은 전압을 내보내기 때문에 증폭해야 아두이노에서 읽을 수 있습니다. 이 포스팅에서 사용된 증폭용 칩은 'AD620'입니다. (참고 : 디바이스 마트 - A..
'OpenCVSharp'의 설명페이지에는 별도의 작업 없이 'OpenCVSharp.dll'만 참조하면 mono에서도 'OpenCVSharp'를 사용 할수 있다고 나와 있습니다. (참고 : OpenCVSharp - Tutorial_UnixPlatforms) 'ml'와 'cvblob'는 컴파일을 다시 해서 사용하라고 나와있습니다. ('OpenCVSharp'의 소스를 받아보면 모노를 구분하여 작성된 코드들이 보입니다. 이것으로 보아 모노를 지원하는 것이 맞는것 같네요.) 그런데 테스트 프로그램을 만들어서 돌려보니 안됩니다-_-; Mono로 작성해보니 윈도우 스타일로 하면 안되겠다는 생각이 드네요-_-; 1. 준비하기 일단 우분투에 'OpenCV'를 설치 해야 합니다. 'OpenCV'의 버전은 'OpenCVSh..
요즘 'OpenCV'때문에 골치가 아프네요 ㅎㅎㅎㅎ 이유는 모르겠지만 'OpenGL'이나 'OpenCV' 같은 것들은 '우분투 소프트웨어 센터'에 올라가 있지 않습니다. (사용자가 맞는 버전을 찾아서 설치해야 되서 그런 걸지도 모르겠군요.) 그러니 'CMake'도 직접해야 합니다 ㅎㅎㅎ 1. 준비작업 우분투에 'OpenCV'을 설치하려면 빌드를 먼저 해야 합니다. 빌드를 하기 위해서 'CMake'와 'G++'이 설치되어 있어야 합니다. 둘다 '우분투 소프트웨어 센터'에서 받을수 있습니다. 2. OpenCV 받기 우린 우분투에서 사용할 것이니 리눅스 용으로 받습니다. OpenCV - DOWNLOADS 다운받은 파일은 압축파일이니 원하는 위치에 풀어 줍니다. 3. 씨메이크(CMake)하기 이제 'CMake'..
'cmake'를 날리는 순간 your cxx compiler cmake_cxx_compiler-notfound was not found ubuntu .... 이런 ㅡ,.ㅡ;; 검색해보니 컴파일러가 없어서 발생하는 오류라고 합니다. 헐? 우분투는 기본으로 g++이 설치가 안되있나봅니다;; 해결 방법 '우분투 소프트웨어 센터'에서 'G++'로 검색해서 설치 합니다. 이러면 해결됩니다. 아무리 일반사용자용을 표방한다지만 g++없으면 리눅스용 드라이버조차 쓸수 없는게 많을 텐데....헐헐
'OpenCV'를 사용하는 이유 중에 하나가 웹캠을 이용하기 위해서입니다. 다른 방법도 있습니다만 크로스플랫폼(Cross Platform)을 생각한다면 'OpenCV'를 빼고 가기 힘들죠 ㅎㅎ 'OpenCV'를 닷넷으로 랩핑한 'OpenCVSharp'을 이용하여 웹캠에서 이미지를 받아오겠습니다. 1. 프로젝트 생성 윈폼 프로젝트를 생성합니다. 이전 글을 참고하여 프로젝트에 DLL을 복사합니다. (참고 : [C#.Net, OpenCVSharp] 'opencvsharp'를 이용하여 C#에서 OpenCV 사용하기 - '2.설치하기' 참고) 1-1. 디자이너 폼에 픽처 박스 한 개와 타이머 하나를 추가합니다. pictureBox1 timer1 1-2. 코드 작성 코드는 이전 글과 비슷합니다. 단지 이미지를 불러..
웹캠의 영상처리를 위해 자료를 찾아보니 윈도우에서는 다이렉트쇼(DirectShow)를 이용하더군요. 그런데 모노프로젝트를 이용하여 멀티플랫폼을 구성할 예정이라 다이랙트X(Direct X)는 사용할수 없습니다. 그래서 검색해보니 오픈CV(Open CV)를 모노용으로 만들어 쓰라고 하는군요. 언제나 이런문제는 귀찬기 마련이죠 ㅎㅎㅎ 그리고 다행히 누군가 프로젝트를 진행하고 있습니다. Emgu CV - OpenCV in .NET (C#, VB, C++ and more) opencvsharp - OpenCV wrapper for .NET Framework 저는 'opencvsharp'를 사용하겠습니다. Emgu CV가 유명하고 좋다고는 하는데.... 'opencvsharp'는 한국커뮤니티가 잘되있고 닷넷에 익숙..
요번에 로드셀 하나 테스트 해보려고 별짓을 다하고 있네요-_-;;; 증폭용칩이 -(마이너스)전압을 필요로 해서 그냥 캐패시터만 가지고 만들려다가 전자는 까막눈이라 ㅡ.-;;; 그래서 -전압을 만들어주는 DC/DC컨버터인 ICL7660칩을 이용하여 -전압을 만들어 보겠습니다. ICL7660SCPAZ칩은 900원 정도 합니다. (참고 : 디바이스 마트 - ICL7660SCPAZ) 캐패시터는 10uF를 사용합니다. 캐패시터도 LED처럼 짧은쪽이 음극입니다.(극성이 있는 경우) (참고 : 디바이스 마트 - E/C 50V 10uF (85℃)-10EA) 1. 보드 구성 캐패시터는 10uF짜리 2개를 사용해야 합니다. 캐패시터가 극성이 있는경우 반대로 꼽으면 터진다는데.....5V에서도 터지는건가 ㅡ.-;;; 그러니..
스텝모터와 스텝모터 제어용칩을 여러가지 테스트하다보니 불편해서 컴퓨터없이 전원만 넣고 테스트할 필요성을 느꼈습니다. 1. 기획 테스트를 위한 기능은 2가지입니다. 속도 조절과 앞과 뒤로 움직이는 동작 입니다. 스텝모터는 스텝을 조절할 수 있지만 7세그먼트나 LCD없이 스텝을 조절하는 동작을 넣는건 사용상 데이터를 보여주기 힘들기 때문에 1회전을 기준으로 합니다. 속도조절의 경우 증가/감소 각각 스위치를 넣는 것도 좋지만 정밀하게 속도 조절을 할것이 아니기 때문에 누를때마다 속도가 증가하다가 최대치가 되면 다시 0이 되도록 하는 것이 인터페이스상 더 좋을것 같습니다. 정리하면 속도조절 : 스위치 1개를 이용하여 속도 증가. 속도를 표시하기위해 LED의 발기를 조절 한다. 앞/뒤 회전 : 속도조절값을 기준으..