로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
아듀이노 공개소스
작성자 avrtools™        
작성일 2008/09/10
Link#1 arduino (Down:347)
ㆍ추천: 0  ㆍ조회: 4741   
  아듀이노 4선식 터치패널
참조 : http://kousaku-kousaku.blogspot.com/search/label/arduino
제목 : Arduino 4 Wire Touch Panel (4선식 접촉판)

목적 
아듀이노의 아날로그 입력을 사용하여, 저항식 터치패널을 읽는다.
터치패널은 pda에서 많이 사용하며, 두께는 0.84mm 이며 유리나 투명필름으로 만든 제품이다. 
저항식은 응답이 빠르고, 견고하며, 정확하다, 그러나 상판이 손상되면 측정값이 틀어지는 문제가 있다,
 
 
방법
저항식 터치패널은 X축과 Y축의 만나는 지점까지의 저항을 검출한다.
아듀이노 기판의 아날로그 입력은 A0, A1, A2, A3을 사용한다. 
 
 

설명 
4선식 터치패널을 아듀이노 기판에 접속하여 조작을 실험해 보겟습니다.
터치패널은, 4선식이나 5선식이 비교적 간단한 구조로 되어 있습니다.
사용된 터치패널은 접촉하는 지점의 위치를 검출가능합니다.
 

 
아직까지, 복수의 점을 동시에 검출하는 멀티터치는 없습니다.
기본적으로는,  X축에 2선, Y축에 2선이 있고, 모두 4선이 있습니다.
검출순서는 X축을 읽고나서, Y축을 읽는 방식으로 각각 읽습니다.
 
상판과 하판이 마주보는 안쪽에 투명 저항선이 각각 인쇄되어 있습니다. 
한축만 생각하면 좌측은 0 V고, 우측은 5 V를 공급하고 있고,
손끝으로 접촉하는 위치의 전압이 상대전극으로 연결됩니다.
 
X좌표의 좌측에 0V 부근이며, 중심은 약 2.5V 정도입니다.
X좌표를 읽을 때, 사용하지 않는 Y축의 1선을 사용합니다.
이렇게 X축을 읽으면, 검출대상을 Y축으로 가로지르는 결과가 나옵니다.
 
역자 주
즉 X축을 측정할 때, 전류를 X축에 흘리고, 전류가 흐르지 않는 Y축의 한선에서
접촉한 부분의 전압을 읽으면 Vy / (Vx1 - Vx2) = Vx로 위치가 나옵니다.
바꾸어 말하면, 전류를 흘리진 않는 축의 1선을 검출선으로 사용합니다.

또한, 측정하지 않는 상대전극의 전압을 모두 측정하여 (Vy1 + Vy2) /2 =Vx로 하면 중심위치가 나옵니다. 
이렇게 처리하면 손끝같은 넓은 면적으로 눌러도, 측정값이 잘 나오게 됩니다.

아듀이노 기판의 연결
아듀이노 기판의 연결은 아날로그 입력 0~3을 사용합니다.
X축은 0번, 1번핀을, Y축은 2번, 3번핀을 사용합니다.
 
일반 터치 패널은 필름기판과 필름 커넥터로 되어 있습니다.
아듀이노 기판의 저속은 FPC 커넥터를 써서 접속해야 합니다.
카본필름에 탄소 패턴 전극이므로 납땜이 안됩니다.

X축을 측정중에는 좌측의 Y축 단자를 측정합니다.
Y축을 측정중에는 죄측의 X축 단자를 측정합니다.
터치패널에 접촉이 일어나면, 좌측의 X단자에는 0V를 접속하기 때문에,
풀다운 저항 (포트핀에서 접지시키는 저항)을 접속해야 합니다.
 
회로도
 
 
처리방법
X축의 좌표를 읽을 때는, 아날로그 입력 0과 1을 디지털 출력 D14와 D15로 전환합니다.
X축 단자인 D14번을 LOW로, D15번을  HIGH로 출력합니다. (X축에 전압을 공급)

Y축의 아날로그 입력 A2 핀을 anlaogRead(2)로 읽으면, X축의 접촉 위치가 됩니다.
이때 아날로그 입력 A2 핀의 디지털출력 기능인 D16은, 예비로 입력으로 방향을 설정해 줍니다.
아날로그 A3번 핀도, 같은 방법으로 D17핀을 디지털 입력으로 바꾸어 줍니다. 

Y축을 읽을 때는 A2 핀과 A3 핀의 디지털 포트의 기능인 D16과 D17을 출력으로 바꿉니다.
마찬가지로 D14와 D15는 예비로 디지털 입력으로 전환합니다.
아날로그 A0와 터치의 결과로 연결된  Y축의 죄표를 X축 핀으로 analog()로 읽습니다.

이렇게 X추과 Y축을 한번씻 실행하고, 좌표를 계산합니다.
 
소스설명
// 디지털 출력 핀의 정의 D14~D17은 아날로그 입력포트 A0~A3 이다.
#define xLow  14
#define xHigh 15
#define yLow  16
#define yHigh 17

void setup()   // 기판의 초기화(준비) 
{
  Serial.begin(9600);  // UART를 9600으로 설정하고 수신을 기다린다.
}

void loop()              // 무한반복 주함수, X축 Y축을 읽어서 직렬포트로 송신한다. 
{
  pinMode(xLow,OUTPUT);  // X축을 디지털 출력으로 바꾼다
  pinMode(xHigh,OUTPUT);
  digitalWrite(xLow,LOW);     // X축 단자를 LOW, HIGH로 구동한다
  digitalWrite(xHigh,HIGH);
  digitalWrite(yLow,LOW);     // y축 단자를 LOW로 출력한다
  digitalWrite(yHigh,LOW);
  pinMode(yLow,INPUT);     // y축을 디지털 입력으로 바꾼다.
  pinMode(yHigh,INPUT);
  delay(10);

  int x=analogRead(2);          // yLow 핀을 읽는다 
  pinMode(yLow,OUTPUT);  // y축을 디지털 출력으로 바꾼다
  pinMode(yHigh,OUTPUT);
  digitalWrite(yLow,LOW);
  digitalWrite(yHigh,HIGH);
  digitalWrite(xLow,LOW);    // 사용하지 않는 x단자를 low로 출력한다
  digitalWrite(xHigh,LOW);
  pinMode(leftPin,INPUT);   // x축을 디지털 입력으로 바꾼다
  pinMode(rightPin,INPUT);
  delay(10);

  int y=analogRead(0);    // xLow 핀을 읽는다
  if(Serial.available()>0)  // 문자열 통신
 {
    Serial.print(x,DEC);   // X 좌표
    Serial.print(",");         // 콤마 (자료를 구분하는 문자)
    Serial.println(y,DEC); // Y 좌표
    Serial.read();             // 버퍼에서 신호를 읽는다
  }
}

이번에 실험한 터치패널은 12.1 인치며, 접촉저항은 우측 = 70, 상단 = 81, 하단은 822로,  
검출값이 읽혀 집니다. 패널에 저촉하지 않으면 풀다운 저항 때문에 0으로 읽혀 집니다.
 
PC측 프로세싱
X와 Y를 10 번 이상 터치하는 것을 감지해서 판정합니다
좌표값을 프로세싱으로 직렬통신하고,  프로세싱 화면에 좌표값을 그린다.

프로세싱은 터치패널을 손끝으로 접촉하면, 좌표값을 문자열로 송신하고,
손끝이 움직이는대로 원을 그린다. 접촉이 없으면 원의 색상을 바꾼다.
PC에서 s를 송신하면, 아듀이노 기판은 직렬포트로 통신을 시작한다.

import processing.serial.*;    // 직렬통신 라이브러리를 읽어온다
Serial port;                           // 직렬통신용 포트의 변수를 정의한다.

int x,y;                                // 좌표값 저장용 변수
float xPos,yPos;                   // 변환값 저장용 변수

void setup()
{
  size(800,600);                     // 화면 크기를 설정 
  smooth();
  port = new Serial(this,"/dev/tty.usbserial-A4001Kjl",9600);  // 통신포트의 설정
  port.bufferUntil(10);              // LF 코드가 들어오면, serialEvent()를 작동한다
  background(0);
  stroke(255);
}

void draw()
{
  background(0);                     //  배경색을 검정색으로
  if(x>10 && y>10)                   // 접촉이 있으면,
  {
     fill(255);                             // 남은 색을 백색으로
    xPos=map(x,70,781,0,width);     // 읽은 값을 좌표로 변환
    yPos=map(y,81,822,0,height);
  }
  else  fill(0);                           // 접촉이 없으면, 남은 색을 검정색으로 모두 칠한다
  }
  ellipse(xPos,yPos,20,20);       // 접촉 좌표에 원을 그린다
}

void serialEvent(Serial p)           // 직렬통신
{
  String stringData=port.readStringUntil(10);   // 문자열에 LF가 들어오면 문자열을 처리
  if(stringData!=null)                    // 문자열이 0 이 아니면?
  {
    stringData=trim(stringData);      // 수신 문자열에서 LF를 제거
    int data[]=int(split(stringData,','));    // 저장용 배열변수를 정의, 콤마로 X와 Y를 구분한다. 
    if(data.length==2)                      // 데이터 길이가 2개이면?
   {
      x=data[0];                               // 처음 데이터를 X에 저장  
      y=data[1];                               // 두번째 데이터는 y에 저장
      port.write(65);                          // 데이터를 송신  
    }
  } 
}

void keyPressed()      // S 키를 누르면 송신을 시작
{
  if(key=='s') port.write(65);   // 데이터열 머릿글자 s를 송신
}

아듀이노에서 보낸 XY 좌표값은 map()에 넣어, 프로세싱 화면에 대응하는 XY좌표를 만든다.
이번에 읽혀진 최소값은 70, 81을 화면의 위(0,0)에 표시, 최대값은 781, 822는 화면의 최대값(800,600)에 대응한다.
 
일반적인 터치패널은 모니터와 일체형으로, 터치패널을 투명한, 평면 입력장치로 이용하는 것을 생각해 보았습니다.
터치패널은 비교적 복잡하지 않으므로, 중고 부품에서 분리해서 쓰는 방법도 있습니다.

이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA

AVRTOOLS™
   
윗글 아듀이노 8x5 초소형 전광판
아래글 아듀이노 2색 8x8 LED
    N         제목    글쓴이 작성일 조회 추천
61 비접점식 QTouch 방식 근접검출 스위치 leeky 2016/01/21 (목) 861 0
60 Arduino 고속 오실로스코프 #3 avrtools™ 2012/03/29 (목) 17940 0
59 아날로그 8ch 데이터 로거 avrtools™ 2012/03/29 (목) 2932 0
58 Arduino DMX512 송신기 제작 avrtools™ 2012/03/15 (목) 3068 0
57 nRF24L01 무선모듈의 사용방법 avrtools™ 2012/03/07 (수) 6123 0
56 초음파 거리 측정기의 제작 avrtools™ 2011/09/18 (일) 5038 0
55 3축 가속도 센서 ADXL335 avrtools™ 2011/09/09 (금) 3574 0
54 Arduino Uno USBserial 펌웨어의 변경 avrtools™ 2011/08/27 (토) 3130 0
53 Arduino MIDI의 소개 avrtools™ 2011/08/19 (금) 3532 0
52 Arduino 고속 Oscillo Scope #2 avrtools™ 2011/08/12 (금) 3154 0
51 Arduino Uno 및 USB2serial Uno의 소개 [2] avrtools™ 2011/07/30 (토) 3423 0
50 Arduino IDE에서 AVRISP-mkII 사용방법 avrtools™ 2010/10/22 (금) 8101 0
49 아듀이노 초음파 거리측정 및 응용 avrtools™ 2010/03/14 (일) 4239 0
48 M328-USB의 비밀 온도센서 avrtools™ 2010/01/02 (토) 3655 0
47 M168-mini로 만드는 USBasp avrtools™ 2009/10/10 (토) 5512 0
46 OBDuino ISO9141 소스의 설명 avrtools™ 2009/10/08 (목) 4302 0
45 아듀이노 0017 업그레이드 avrtools™ 2009/08/18 (화) 3811 0
44 Arduino 0015 업그레이드 avrtools™ 2009/06/01 (월) 3500 0
43 CC2500 Zigbee RF Modem #1 [4] avrtools™ 2008/11/20 (목) 6779 0
42 아듀이노 소프트웨어 Ver 0012 avrtools™ 2008/09/23 (화) 4090 0
41 Arduino 소프트웨어 설치방법 avrtools™ 2008/08/31 (일) 5707 0
40 아듀이노 PC 카메라 제작 avrtools™ 2008/10/28 (화) 7347 0
39 아듀이노 AVR-ISP V2의 제작 [6] avrtools™ 2008/10/22 (수) 8444 0
38 아듀이노 J1850-PWM 스캐너 avrtools™ 2008/10/15 (수) 4619 0
37 아듀이노 MPGduino의 제작 avrtools™ 2008/10/11 (토) 5048 0
36 아듀이노 OBD-II PID 처리함수 avrtools™ 2008/10/12 (일) 5718 0
35 아듀이노 OBD-II PID 송수신 함수 avrtools™ 2008/10/09 (목) 9792 0
34 아듀이노 ODB-II 스캐너 제작 [9] avrtools™ 2008/10/04 (토) 17579 0
33 아듀이노 AC전원 THD 측정 [2] avrtools™ 2008/09/30 (화) 6898 0
32 아듀이노 소프트방식 16Bit ADC avrtools™ 2008/09/23 (화) 5654 0
31 아듀이노 초음파 모듈의 제작. avrtools™ 2008/09/22 (월) 4971 0
30 아듀이노 Wii 프로세싱 avrtools™ 2008/09/20 (토) 4225 0
29 아듀이노 초음파 거리측정 avrtools™ 2008/09/20 (토) 6165 0
28 아듀이노 8x5 초소형 전광판 avrtools™ 2008/09/11 (목) 4758 0
27 아듀이노 4선식 터치패널 avrtools™ 2008/09/10 (수) 4741 0
26 아듀이노 2색 8x8 LED avrtools™ 2008/09/10 (수) 5020 0
25 아듀이노 24x6 LED 전광판 avrtools™ 2008/09/10 (수) 5559 0
24 아듀이노 8x8 LED 프로세싱 avrtools™ 2008/09/10 (수) 4178 0
23 아듀이노 32x16 RGB 전광판 avrtools™ 2008/09/06 (토) 13768 0
22 아듀이노 맥박검출기 avrtools™ 2008/09/03 (수) 9654 0
21 아듀이노 적외선 거리센서 avrtools™ 2008/09/01 (월) 6058 0
20 아듀이노 DMX 수신장치 [7] avrtools™ 2008/08/31 (일) 6917 0
19 아듀이노 AVR-ISP 만들기 avrtools™ 2008/08/30 (토) 4225 0
18 아듀이노 POV #3 avrtools™ 2008/08/30 (토) 3545 0
17 아듀이노 POV #2 avrtools™ 2008/08/30 (토) 3311 0
16 AVR 병렬포트 굽기장치 avrtools™ 2008/08/30 (토) 5334 0
15 아듀이노 DMX 송신기 avrtools™ 2008/08/28 (목) 5229 0
14 아듀이노 부트로더의 개조 [1] avrtools™ 2008/08/28 (목) 5879 0
13 아듀이노 병렬포트 굽기장치 avrtools™ 2008/08/26 (화) 4286 0
12 아듀이노 POV #1 avrtools™ 2008/08/26 (화) 3561 0
11 아듀이노 MIDI 드럼 leeky 2008/08/24 (일) 4880 0
10 아듀이노 SD/MMC 카드 avrtools™ 2008/08/24 (일) 9886 0
9 아듀이노 MIDI 플륫 avrtools™ 2008/08/24 (일) 3712 0
8 아듀이노 RGB LED avrtools™ 2008/08/23 (토) 5136 0
7 아듀이노 USB 오실로스코프 [2] leeky 2008/08/21 (목) 6551 0
6 가속도계 ADXL202 응용소스 avrtools™ 2008/08/20 (수) 5006 0
5 아듀이노 가속도센서 avrtools™ 2008/08/18 (월) 5016 0
4 아듀이노 RC서보 제어 avrtools™ 2008/08/17 (일) 5342 0
3 아듀이노 910-ISP 만들기 avrtools™ 2008/08/16 (토) 4860 0
2 아듀이노 온도센서, XBee 송수신 avrtools™ 2008/08/15 (금) 7703 0
1 아듀이노 기본명령 avrtools™ 2008/08/07 (목) 6813 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0