반응형

【 레오나르도활용#5 조이스틱 마우스 만들기! (Leonardo

 아두이노 레오나르도(Leonardo)에 조이스틱을 이용하여 PC 마우스를 만들어 보자~!

아두이노.cc 에서 제공되는 마우스관련 함수를 이용하면 어렵지 않게 간단히 구현 할 수 있다. 

Let's get it~!

▶ 선수 학습 :

    1. [레오나르도 활용#1] 레오나르도 보드 사용법(보드 스팩& 설치-연결 참조)  ☜ (클릭)

    2. [레오나르도 활용#3] 어두워지면 PC화면 잠그기 (레오나르도 보드& 단축키사용 참조)  ☜ (클릭)

    3. [레오나르도 활용#3] 어두워지면 PC강제 종료시키기(셧다운 명령 & 윈도우 단축키사용 참조)  ☜ (클릭)

      

▶ 실습 목표 :  
 1. [ 키보드 키 값 제어 함수에 대해 이해할 수 있다. ]
 2. [ 레오나르도 보드를 이용해 PC를 제어(종료)할 수 있다. ]
 

 3. [ 레오나르도 보드와 Joystick 모듈을 이용해 PC 마우스를 만들어 볼 수 있다. ] 

 

▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)

 

▶ 프로그램 코드 및 설명 1 : 

/* 아두이노 조이스틱 마우스 만들기  */

#include  <Mouse.h>
const int LEFT_BT=4;     //마우스 좌버튼
const int MIDDLE_BT=3; //마우스 가운데 버튼
const int RIGHT_BT=2;   //마우스 우버튼
const int X_AXIS =0;     //마우스 X 축 (A0)
const int Y_AXIS =1;     //마우스 Y 축 (A1)

  
void setup ( ) {  

  Mouse.begin();    // 마우스 컨트롤 관련 함수 선언   
  pinMode(LEFT_BT, INPUT);
  pinMode(MIDDLE_BT, INPUT);
  pinMode(RIGHT_BT, INPUT);  

}

 

void loop ( )  {

  int xVal=readJoystick(X_AXIS);   //x축값 읽어 저장 
  int yVal=readJoystick(Y_AXIS);   //Y축값 읽어 저장

  Mouse.move(-xVal, yVal, 0);      //해당 좌표로 마우스 이동
  // '-' 부호를 통해 상하좌우 위치 반대로 조정 가능                              
  readButton(LEFT_BT, MOUSE_LEFT);   //좌측 버튼
  readButton(MIDDLE_BT, MOUSE_MIDDLE); //가운데 휠 버튼
  readButton(RIGHT_BT, MOUSE_RIGHT);     //우측 버튼
  delay(5);  
}

 

int readJoystick(int axis)  {
  int val=analogRead(axis);
  val=map(val, 0, 1023, -4, 4);  //입력값 맵핑(미세조정 :-3,-3 ~ -10, 10) 
  if(val <=2 && val >= -2)   // 미세한 이동 값은 반영 되지 않도록 함 
    return 0;                       
  else
    return val;                     //맵핑된 값 전달 
}

// 버튼 누름 판별하여 마우스 클릭 처리 (함수)
void readButton(int pin, char mouseCommand)  {
  // 버튼을 눌렀을 때, 
  if(digitalRead(pin)==HIGH)  {
    if(!Mouse.isPressed(mouseCommand)) {  //클릭상태가 아니라면,    
      Mouse.press(mouseCommand);          // 클릭 처리
    }
  }
  else {                // 이미 클릭 되어 있던 상태라면  
    if(Mouse.isPressed(mouseCommand)) {
      Mouse.release(mouseCommand);   //릴리즈(누르지 않음)처리
    }
  }
}

 

※ Arduino 제공 레퍼런스 참조 (마우스 관련 함수 등)

https://www.arduino.cc/reference/en/language/functions/usb/mouse/

Functions

Mouse.begin()
Mouse.click()
Mouse.end()
Mouse.move()
Mouse.press()
Mouse.release()
Mouse.isPressed()

 

▶ 아두이노 파일다운 :
(다운받아서 압축을 풀어 사용하세요)

03_MouseControl.zip
0.00MB

▶ 영상강좌 :  

(유튜브로 보기)

https://youtu.be/jBXkvg5PBpg

 

(전체화면 보기로 보세요)

 

 

반응형
반응형

【 레오나르도활용#4어두워 지면 PC 종료 시키기! (Leonardo

 아두이노 레오나르도(Leonardo)를 이용하여 주변이 어두워지면, PC를 자동으로 종료 시켜 보도록 하자. 원리는, 레오나르도 보드는 키보드(마우스)와 같은 장치로 인식되며, <Keyboard.h> 함수를 활용하여, 키보드 키값을 PC로 입력할 수 있다.  이에 따라 '윈도우 종료 단축키를 활용하거나, shutdown.exe 명령과 조합하면 PC를 쉽게 종료시킬 수 있다.  

본 내용에서는 윈도우 운영체제를 기준으로 하지만, 내용을 잘 참고하면, 다른 OS의 PC도 종료 가능 할 것이다. 

Let's get it~!

 

▶ 선수 학습 :

    1. [아두이노 기초#3] 포토레지스터(CDS)제어 (cds 광센서 참조)  ☜ (클릭)

    2. [레오나르도 활용#1] 레오나르도 보드 사용법(보드 스팩& 설치-연결 참조)  ☜ (클릭)

    3. [레오나르도 활용#3] 어두워지면 PC화면 잠그기 (레오나르도 보드& 단축키사용 참조)  ☜ (클릭)

      

▶ 실습 목표 :  
 1. [ 레오나르도 보드에 광센서(cds)를 연결하여 제어할 수 있다. 
 2. [ 키보드 키 값 제어 함수에 대해 이해할 수 있다. ]
 3. [ 레오나르도 보드를 이용해 PC를 제어(종료)할 수 있다. ]
 

 

▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)

 

▶ 프로그램 코드 및 설명 1 : 

/* 어두워지면 자동 PC 종료 시전하기 */

/* 어두울 때 자동 PC 종료 시키기 */    
#include <Keyboard.h>   
const int CDS = 0; //cds 센서를 A0 포트에 연결 
const int PC_Off = 10;  
void setup ( ) {  
  Keyboard.begin(); //키보드 컨트롤 관련 함수 선언   
  Serial.begin(9600);
}
void loop ( )  {
  int Brightness = analogRead(CDS);  //조도값을 읽음 
  Serial.println(Brightness); 
  // PC_Off 값 이하가 되면 종료 배치파일(단축키) 실행 
  if(Brightness < PC_Off) {  
    Keyboard.press(KEY_LEFT_CTRL);   // '왼쪽 윈도우 키'
    Keyboard.press('x');  //소문자'x', ASCII값 (120)도 가능 
    delay(200);      // 일정시간 값이 입력 되도록 시간지연 
    Keyboard.releaseAll( );  // 키를 계속 누르지 있지 않도록 함
   delay(200);
    Keyboard.press('u');  // ‘u’ 단축키 누르기|
   delay(200);
   Keyboard.releaseAll( );
   delay(200);
    Keyboard.press('u');  // ‘u’ 단축키 한번 더 누르기|
   delay(200);
   Keyboard.releaseAll( );   delay(200);    }   
}   // ※ 단, 윈도가 업데이트 필요한 상태이면 업데이트를 완료해야 적용 됨

※ ASCII 코드 값 참고

※ Arduino 제공 레퍼런스 참조 (키보드 관련 함수 등)

https://www.arduino.cc/reference/en/language/functions/usb/keyboard/

Functions

Keyboard.begin()
Keyboard.end()
Keyboard.press()
Keyboard.print()
Keyboard.println()
Keyboard.release()
Keyboard.releaseAll()
Keyboard.write()

 

▶ 아두이노 파일다운 :
(다운받아서 압축을 풀어 사용하세요)

02_PCOff.zip
0.00MB

 

▶ 단축키 실행 바로가기 파일 만들기 ( shutdown.exe )

(바로가기 파일 만들기에 관한 내용은 영상에서도 자세히 설명되어 있음)


 ① 바탕화면에서, 마우스 우큭릭 → 새로만들기 → 바로가기 클릭

 

 ② 항목 위치 입력 란에,  다음을 입력 : ' shutdown.exe -s -f -t 60 '

 → 띄어 쓰기 주의!  옵션 : -s (윈도우 종료) ,   -f (실행중프로그램도 강제종료)

-t 60 (60초 후 종료,  1시간 후 종료는 3600, 즉시 종료는 0 입력)

 

③ 바로가기 이름 제목에 PC종료(아무 이름 입력 가능) 

 

④ 바로 가기 키 부분에 마우스 커서를 클릭 해놓고 Ctrl +Alt 키를 누르면서 'x' 키를 누르면 자동으로 단축키가 입력됨

 

⑤ 바로가기 단축키는 Shift 도 가능하고, x 아닌 다른 문자 등의 조합, 2키 조합, 모두 가능, 단 윈도우 응용프로그램 등에서 사용하는 단축키와 겹칠 수 있기에 사용하지 않는 단축키로 지정하면 되고, 'x' 와 같은 알파벳은 소문자를 입력해도 자동으로 대문자로 입력이 된다.   하지만 아두이노 프로그램에서는 반드시 소문자로 입력해야 함.

⑥ 만들어진 "PC 종료" 바로가기 아이콘

이제 'Ctrl+Alt+x' 키를 실행해도, 또는 이 파일을 직접실행 더블 클릭 실행하여도 PC가 종료 될 것이며, 
아두이노와 CDS 센서를 이용하여 어두워지면 자동으로 PC를 종료시켜볼 수 있다. 

 

★ 바로가기( shutdown.exe ) 파일 활용의 장점 :

 바로가기 파일 없이, 윈도우 단축키 만으로도 종료가 가능하나, 운영체제 별로 단축키가 다르기 때문에 불편하고, shutdown.exe 바로가기를 만들면 단축키를 원하는대로 지정 고정 시킬 수 있어서 좋다.  

 

▶ 영상강좌 :  

(유튜브로 보기)

https://youtu.be/ngFxsdT-qB4

 

 

(전체화면 보기로 보세요)

 

반응형
반응형

【 레오나르도활용#3어두워 지면 PC화면 잠그기 (Leonardo

 아두이노 레오나르도(Leonardo)를 이용하여 밝기에 따라 PC화면을 잠금 모드로 전환 시켜보자 !

원리는, 레오나르도 보드는 키보드(마우스)와 같은 장치로 인식되며, <Keyboard.h> 함수를 활용하여, 키보드 키값을 PC로 입력할 수 있다.  이에 따라 '윈도우 화면 잠금' 단축키 ( '윈도우키' + 'L') 를 입력시켜 화면 잠금을 제어할 수 있는데, 광도전셀(cds) 소자를 이용해 어두울 때 화면 잠금이 되도록 구현 할 수 있다. 

  Let's get it~!

▶ 선수 학습 :
      1. [레오나르도 활용#1] 레오나르도 보드 사용법(보드 스팩& 설치-연결 참조)  ☜ (클릭)
      2. [아두이노 기초#3] 포토레지스터(CDS)제어 (cds 광센서 참조)  ☜ (클릭)

      

▶ 실습 목표 :  
 1. [ 레오나르도 보드에 광센서(cds)를 연결하여 제어할 수 있다.
 2. [ 키보드 키 값 제어 함수에 대해 이해할 수 있다. ]
 3. [ 레오나르도 보드를 이용해 PC를 제어할 수 있다. ]
 

 

▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)

▶ 프로그램 코드 및 설명 1 : 
/* 어두울 때 자동 PC 잠금모드 시키기 */

#include <Keyboard.h>   
const int CDS = 0; //cds 센서를 A0 포트에 연결
const int PC_Hold = 30;  
void setup ( ) {  
  Keyboard.begin(); //키보드 컨트롤 관련 함수 선언  
  Serial.begin(9600);
}

void loop ( )  {
  int Brightness = analogRead(CDS);  //조도값을 읽음
  Serial.println(Brightness);
  // PC_Hold 값 이하가 되면 잠금모드 키 실행
  if(Brightness < PC_Hold) { 
    Keyboard.press(KEY_LEFT_GUI);   // '왼쪽 윈도우 키'
    Keyboard.press('l');  //소문자'l', ASCII값 (108)도 가능
    delay(100);      // 일정시간 값이 입력 되도록 시간지연 
    Keyboard.releaseAll();  // 키를 계속 누르지 있지 않도록 함
  }
}

 

※ ASCII 코드 값 참고

※ Arduino 제공 레퍼런스 참조 (키보드 관련 함수 등)

https://www.arduino.cc/reference/en/language/functions/usb/keyboard/

Functions

Keyboard.begin()
Keyboard.end()
Keyboard.press()
Keyboard.print()
Keyboard.println()
Keyboard.release()
Keyboard.releaseAll()
Keyboard.write()

 

▶ 아두이노 파일다운 :
(다운받아서 압축을 풀어 사용하세요)

01_PCLockScreen.zip
0.00MB

▶ 영상강좌 :  
(아래는 유튜브로 시청하기)

https://youtu.be/CrjuJH4Bx3M

 

(전체화면 보기로 보세요)

 

반응형
반응형

【 레오나르도활용#2】 온도밝기 값 PC로 수집하기 팁 #2(Leonardo

 아두이노 레오나르도(Leonardo)가 있으면 온도 센서와 광센서(CDS)등의 데이터를 실시간으로 PC로 수집할 수 있다. 이렇게 수집된 데이터는 엑셀로 차트를 만들어 볼 수 있고, 프로세싱(Processing) IDE를 통해 비주얼 하게 그래픽 처리해서 볼 수 있다.  그리고 파이썬으로 데이터를 정리하고 다듬어 준다면 활용할 수 있는 영역은 매우 많다.  한 번 해보면 어렵지 않으니 재미있게 즐겨보자~!    Let's go~!

▶ 선수 학습 :
      1. [레오나르도 활용#1] 레오나르도 보드 사용법(보드 스펙& 설치-연결 참조)  ☜ (클릭)
      2. [아두이노 센서#3] TMP36 온도 센서 (온도센서 참조)  ☜ (클릭)
      3. [아두이노 기초#3] 포토레지스터(CDS) 제어 (cds 광센서 참조)  ☜ (클릭)

▶ 실습 목표 :  
 1. [ 레오나르도 보드에 온도센서(Tmp36)와 광센서(cds) 회로를 연결하고 동작시킬 수 있다.
 2. [ 온도센서와 광센서로 부터의 데이터 값을 PC메모장을 통해 전송시킬 수 있다.]
 3. [ 전송된 데이터를 엑셀 등을 이용해서 활용해 본다 ]
 

▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)



▶ 프로그램 코드 및 설명 1 : 
/* Leonardo 보드로 온도 & 밝기 데이터 수집하기 */

#include <Keyboard.h>   
const int TEMP = 0;    // A0 포트
const int CDS = 1;    // A1 포트 
const int LED = 12;
const int BUTTON = 11;
boolean lastBtn = LOW;
boolean currentBtn = LOW;
boolean running = false;
int counter = 1;

void setup ( ) {  
  pinMode(LED, OUTPUT);
  Keyboard.begin();
}

void loop ( )  {
  currentBtn = debounce (lastBtn);
  if (lastBtn == LOW && currentBtn == HIGH) //버튼 누름
  {
     running = !running;   // 상태 값 반대로 변경
   }
  lastBtn = currentBtn; // 버튼 상태값 업뎃
  if (running) // 데이터 기록 중
  {
     digitalWrite(LED, HIGH);
     // millis() 함수는 데이터를 ms 단위로 반환해 줌, 백그라운드 동작
     // delay() 함수를 사용할 수 없을 때 사용
   if (millis()%1000 == 0) // 1초마다 if문을 실행
   {
      int temperature = analogRead(TEMP);
      int  brightness = analogRead(CDS);
      float mVoltage = temperature*5000.0/1024.0; //섭씨온도 값 변환
      float TempDotC = (mVoltage - 500) / 10.0;   //섭씨온도값 변환
      Keyboard.print(counter);  // 데이터 앞줄마다 번호 매김
      Keyboard.print(",");
      Keyboard.print(TempDotC);  // 온도 데이터
      Keyboard.print(",");
      Keyboard.print(brightness);   // 밝기 데이터
      Keyboard.print("\n");
      counter++;
    }    
  }
  else
  {
    digitalWrite(LED, LOW);
  }
}

//버튼의 체터링 현상 방지를 위한 서브 함수 생성
boolean debounce (boolean last)
{
  boolean current = digitalRead (BUTTON);
  if(last != current)
  {
    delay(5);
    current = digitalRead(BUTTON);
  }
  return current;    
}

▶ 아두이노 파일다운 :
(다운로드하여서 압축을 풀어 사용하세요)

Leo_2_TMP36_CDS_LED_LIGHT.zip
0.00MB


▶ 영상강좌 :  
(전체 화면 보기로 보세요)

(아래는 유튜브로 시청하기)
https://youtu.be/ViP64mGwv-I

 

 

반응형
반응형

【 레오나르도활용#1】 아두이노 레오나르도 보드 사용법 #1(Leonardo

▶ 아두이노 Leonardo보드는 아두이노 우노(Uno) 계열의 보드로서, 특징은 PC와 연동하여 활용하기 좋은 보드이다. 기본적인 기능이나 스펙은 우노 보드와 유사하다.  하지만, 우노 보드와 달리 PC와 연결하면 마우스, 키보드와 같은 가상 직렬 포트로 인식되어  PC 제어가 쉬운 특징이 있다.  우노에서의 USB 시리얼 통신(FTDI) 담당 칩인 Mega16u2를 제거하고 그 대신, USB 처리 기능이 있는 프로세서 칩인 ATmega32U4를 사용하였다. 

※ Leonardo는 PC 연결 시, 가상 직렬포트(CDC)로 인식되어, 키보드나 마우스와 같은 HID(Human Interface Device) 장치로 작동 가능한 특징이 있어 키보드 또는 마우스 클래스를 이용하여, PC를 제어하는 용도의 프로젝트에 강점이 있다.

우선, 먼저 레오나르도(Leonardo)에 대해 자세히 알아보고 연결해보도록(드라이버 설치) 하겠다 

아두이노 레오나르도

▶ 레오나르도 사양 :     

Leonardo 상세 사양

▶ 레오나르도 연결(드라이버 설치) :    

 레오나르도를 처음 연결하게 되면 장치가 인식되지 않는데, 
윈도 시작메뉴시작 메뉴로 가서,  제어판 》 장치 관리자 》 기타 장치  쪽을 살펴봐야 한다.

 아래처럼 주의 표시나, 알 수 없는 장치 표시가 뜨게 된다.

그럼 이제 마우스 우클릭하여 드라이버 설치를 진행해보자.

 그럼 아래처럼 드라이브 업데이트 방법에 대한 선택 창이 뜨는데, 
검색으로 찾지 말고, 컴퓨터에서 드라이버 소프트웨어 검색을 눌러준다.

그다음, '찾아보기(R)' 버튼을 눌러,  드라이버의 위치를 아두이노가 설치되어 있는 폴더 아래에 보면 drivers라는 폴더가 있는데, 그 폴더로 선택해준다. (아두이노가 설치된 위치는 다를 수 있음)
 그런데, 이렇게 지정하여도 드라이버 설치가 제대로 안 되는 경우가 있는데, 아두이노 IDE를 너무 오래전 버전을 사용하게 되면 그럴 수 있다.  따라서, 아두이노 사이트에서 아두이노IDE를 최신 버전으로 업데이트해보면 잘 될 것이다. 

 

그러면 드디어 아래처럼, 'Arduino Leonardo(COMxx)' 라며 선명하게 잡히는 것을 볼 수 있을 것이다.


▶ 
레오나르도 특징 :

 아두이노 우노 보드에서는,  보드와 PC 사이 통신(USB to Serial)을 담당해주는 보조 칩인 "mega 16u2"가 따로 존재한다.
하지만, 아두이노 레오나르도 보드에서는 메인칩을 'ATmega32 U4'로 바꾸면서 그 기능까지 담당하게 하였다. 
덕분에 레오나르도 보드의 가격이 우노보다 저렴해진 장점이 있다.  하지만, PC와 연결된 상태에서 리셋 버튼을 누르게 되면 PC와 연결이 끊겼다가 다시 연결되는데, 이 과정에서 장치 목록이 리프레쉬되고 시리얼 통신 중인 연결(데이터)이 끊기게 된다.  별도의 칩이 있어 리셋 버튼에 영향을 받지 않는 우노와 다른 점이다.   
 그래서 
스케치(IDE) 코드를 업로드하거나, 통신을 할 때 영향을 줄 수 있으니 레오나르도 보드를 사용할 때는 약간의 주의가 필요하다.  예를 들면,  레오나르도 보드에서는 PC에서 직렬(Serial) 포트를 열어도 스케치를 다시 시작하지 않는다. 즉, 보드에 의해 PC로 이미 전송된 시리얼 데이터는 (예, Setup { } 문의 내용들) 처음 순간 금방 전송되어 버리고 나면, 다시 확인할 수 없다.  이후 루프(loop { }  ) 안에 있는 내용만 시리얼 창을 통해 확인 가능하게 된다.

 하지만, 큰 장점도 있다. 하나의 메인 CPU로 스케치를 실행하고 USB 연결도 담당하니, 컴퓨터와의 유연성이 증가하게 되고, 펌웨어를 통해서 USB의 다양한 기능을 사용할 수 있어서 강력한 제어가 가능해진다. 

 그리고, 레오나르도 보드의 ATmega32U4 칩에는 D0(RX)핀, D1(TX)핀에서 사용할 수 있는 USB를 통한 UART TTL(5V) 시리얼 통신 기능을 지원한다.  이 것은 PC로 하여금 레오나르도 보드를 USB(2.0) (가상) 장치로 인식할 수 있게 해 준다. 
이는 아두이노(레오나르도) 보드를 이용해서 마우스나 키보드와 같은 기능을 구현할 수 있음을 뜻한다. 

 또한, 물리적인 시리얼 포트와 가상 COM 포트가 분리되어 있기 때문에, RX, TX단자에 블루투스와 같은 통신 모듈을 연결하여 사용하더라도, 스케치에 데이터를 업로드할 때 장치를 분리하지 않고도 업로드가 가능하다. (우노에서는, 블루투스가 연결되어 동작(통신)되고 있는 상태에서는 스케치를 통해서 업로드가 되지 않기 때문에 PC↔우노↔블루투스 형태의 통신을 위해 우노와 블루투스는 일반 포트를 이용한 소프트웨어 시리얼 통신을 이용하게 된다)

또 하나의 장점으로 위 테이블 표에서도 알 수 있듯이, 레오나르도 보드는 소프트웨어적으로 아두이노 보다 더 많은 총, 20 개의 Digital 입출력 핀과,  12개의 Analog 입력 핀을 설정하여 사용할 수 있다.  (물리적인, 핀 수는 우노와 동일하다)

레오나르도 보드의 뒷면을 살펴보라

위 이미지들은 사용할 수 있는 포트를 명기해 놓은 이미지이며, 보기에 편한 이미지를 사용하면 된다. 

많이 복잡해 보여도 실제 코딩에서는 관련 헤더 파일의 함수와 클래스를 이용하면 쉽게 다룰 수 있다.

그럼, 다음 회차부터는 본격적으로 레오나르도 보드를 사용해 재미나는 회로를 만들어 보려고 한다. 

 

반응형