마블덱스 압력센서로 센싱하고 카멜레온 DIY LED 와 매틀랩으로 시각화하기
페이지 정보
작성자 메카 작성일16-09-18 14:22 조회4,045회 댓글0건관련링크
본문
추석 연휴는 잘 보내셨나요? 긴 연휴였지만, 태풍이 올라오는 탓에 전국에 폭우와 바람이 불고 있습니다.
마지막 휴일, 비도 소강상태고 커피한잔에 음악을 하나 틀어봅니다.
이 때, 마블덱스 제품이 눈에 들어오네요.
지금까지는 다음과 같은 모양의 압력센서가 해외에서 수입되어 웨어러블 디바이스 및 의수를 포함한 다양한 프로젝트에 많이 사용되었습니다.
(메카솔루션에서도 판매하고 있는 제품으로 쉽게 휘어지는 특성이 장점이며, 작고 가볍습니다.)
수입 제품과 마블덱스의 압력센서는 서로 장단점이 있겠지만, 마블덱스 제품의 장점으로는
1. 사용해보니 영구 변형율이 생각보다 작은 것 같습니다. 표족한 제품이나 강한 스트레스를 가하면 흠집이라든지 덴트가 발생해서 보정을 다시해야하는 수입 제품에 비해, 마블덱스의 제품은 보다 견고하게 만들어진 느낌이 듭니다.
2. 의수를 제작하시거나 커스터마이징이 필요한 경우, 기술력을 가지고 있는 마블덱스에 요청하면 작은 MOQ (최소 주문 수량)에 합리적인 견적을 받을 수 있을 것이라 생각됩니다. 메카솔루션을 언급해주시면 잘 해주실지도...
자, 그럼 마블덱스의 다양한 압력센서 중 하나를 선정해서 간단한 테스팅을 해보도록 하겠습니다.
메카솔루션 사이트 (mechasolution.com)에서 마블덱스로 검색하시면 6가지의 압력센서가 있습니다. 다른 사이트와 달리, 2K 저항도 포함해서 배송해드리고 있으니, 아마 사용하실 때 깜빡하고 저항을 다시 주문하는 번거로움을 덜 수 있습니다.
제가 사용한 제품은 압력센서 중, RA18P-DIY라는 제품으로 쉽게 휘어지지 않는 제품입니다.
오렌지색 테두리가 있는 두개의 제품은 휘어지는 제품으로 발바닥의 압력을 측정하거나 스마트 쿠션, 스카트 시트 등에 사용할 수 있을 것 같습니다.
먼저, 아두이노와 연결하는 방법입니다.
상품 상세 설명 및 아두이노 예제에는 2.2K옴 저항을 사용하였지만, 2K옴 저항을 사용해도 무방합니다. 실제로 저항은 1%, 5% 등의 오차가 있으며, 풀업 목적으로 사용하기 때문에 2.2K 저항을 사용하여도 보다 정확한 사용을 위해서는 캘리브레이션 (보정)을 해야합니다.
캘리브레이션을 하기 위해서는 정확히 알고 있는 무게추를 압력센서에 올려놓고, 아두이노로부터 얻은 값을 매칭하면서 보정할 수 있습니다.
입력받은 압력을 제이씨넷의 카멜레온 DIY LED를 사용하여 표현할 수 있으며, 매틀랩을 통한 그래프로 실시간 모니터링을 할 수 있습니다.
제이씨넷의 카멜레온 DIY LED는 WS2812B LED를 사용하여 다양한 형태의 디스플레이를 납땜없이 사용할 수 있는 장점이 있습니다. 하트 모양, 방향지시등 모양, 원형, 삼각형 등의 여러가지 형태와 적절한 커넥터를 사용하여 창의성이 돋보이는 프로젝트를 '쉽게' 구현할 수 있습니다.
아두이노와 카멜레온 DIY LED의 연결은 다음과 같이 할 수 있습니다.
뒷면에 보면 G, I, V와 G, O, V로 이루어진 커넥터가 있습니다. I가 있는 쪽은 입력(Input)을 의미하고 O는 출력(Output)을 이야기합니다. 다양한 색과 밝기를 조정하기 위해 각각의 LED에는 드라이버가 설치되어 있는데, 아두이노의 디지털핀을 I에 연결하고 G는 아두이노의 GND에 그리고 V는 아두이노의 5V에 연결합니다.
즉,
아두이노 | 카멜레온 DIY LED |
GND | G |
D6 | I |
5V | V |
브레드보드를 사용하여 연결을 하게 되면 다음과 같은 모양이 됩니다.
전선/브레드보드 점퍼와이어를 사용해서 아두이노, 카멜레온 DIY LED, 그리고 마블덱스 압력센서가 연결된 후에는 아두이노에 다음의 코드를 업로드합니다. 이 때, 네오픽셀 라이브러리를 다운로드 받아야하는데, 이는 다음의 링크에서 다운로드 받은 후에 아두이노 소프트웨어 IDE의 스케치-Include Library에서 추가하도록 합니다.
https://github.com/adafruit/Adafruit_NeoPixel
ARDUINO CODE
// NeoPixel Ring simple sketch (c) 2013 Shae Erisson // released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library
#include <Adafruit_NeoPixel.h> #ifdef __AVR__ #include <avr/power.h> #endif
int SensorPin = A0; //analog pin 0
// Which pin on the Arduino is connected to the NeoPixels? // On a Trinket or Gemma we suggest changing this to 1 #define PIN 6
// How many NeoPixels are attached to the Arduino? #define NUMPIXELS 12
// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals. // Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest // example for more information on possible values. Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 500; // delay for half a second
void setup() { // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket #if defined (__AVR_ATtiny85__) if (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // End of trinket special code Serial.begin(9600); pixels.begin(); // This initializes the NeoPixel library. }
void loop() {
int SensorReading = analogRead(SensorPin); int mfsr_r18 = map(SensorReading, 0, 1024, 0, 255); Serial.println(mfsr_r18); delay(100); // For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.
for(int i=0;i<NUMPIXELS;i++){
// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255 pixels.setPixelColor(i,mfsr_r18*255/150,0,(150-mfsr_r18)*255/150); pixels.show(); // This sends the updated pixel color to the hardware. } } |
아두이노 프로그램을 업로드된 상태에서 마블덱스 압력센서를 누르면 카멜레온 DIY LED의 하트모양이 파란색에서 빨간색으로 변하는 것을 확인할 수 있습니다.
이제, 매틀랩을 사용해서 압력을 둥근 기둥 (Cylinder) 모양으로 시각화해보도록 하겠습니다.
매틀랩은 공학도가 많이 사용하는 프로그램으로 수치해석, 시뮬레이션, 로보틱스 등등 광범위하게 사용되고 있습니다.
매틀랩에 대한 기초강좌가 필요하신 분은 댓글을 남겨주시면 다음 강좌에 반영하도록 하겠습니다.
다음의 코드를 저장한 후, F5 혹은 Run 버튼을 누르면 둥근 기둥 모양이 압력에 따라 커졌다 작아지는 것을 확인할 수 있습니다.
아두이노에서 시리얼포트를 통해서 압력에 따른 신호가 컴퓨터로 전송이 되고, 매틀랩에서 이 시리얼 데이터를 시각화한 것입니다.
while(1)이라는 무한루프가 있기 때문에 루프에서 벗어나기 위해서는 컨트롤+C (Ctrl+C)를 동시에 누르면 됩니다.
MATLAB CODE
clc close all close all hidden delete(instrfindall) % 현재 연결되어 있는 시리얼포트들을 다 지웁니다. s2 = serial('COM17'); % 아두이노에서 연결했던 시리얼포트 번호를 입력합니다. 제꺼는 29번이네요. fopen(s2); % 포트를 엽니다.
A = meshgrid(linspace(0, 2*pi, 50), linspace(0, 2*pi, 50)) ; X = 3.*cos(A); Y = 3.*sin(A);
while(1) a = str2num(fscanf(s2)); Z = meshgrid(linspace(0, a, 50), linspace(0, a, 50))'; surf(X, Y, Z) %axis equal xlim([-5,5]); ylim([-5,5]); zlim([0,255]); drawnow; % Plot을 계속 업데이트해줍니다. end fclosef(s2) delete(instrfindall) % |
댓글목록
등록된 댓글이 없습니다.