반응형

【 전자기초#3 브레드 보드! 처음 사용 설명서! ( Bread Board )

 일명 빵판이라 하며,  전자부품을 연결하여 회로구성을 도와주는 보드이다.

특징 :인두기로 작업해야 하는 번거로운 납땜 과정 없이 부품간 연결을 유지시켜 주며회로를 재구성하기도 매우쉬운 장점이 있다

 아두이노회로 처럼 반드시 실험을 거처야 하는 과정에 꼭 필요한 소재이다.

 

주로 사용되는 브레드 보드 종류는 : 400, 830핀 보드이며, 좀더 복잡한 회로를 연결해볼 수 있는 2390홀의 대형 보드도 있습니다.  

서로 연결시키고자 하는 부품의 리드선을 이렇게 같은 5칸 라인에 꽂아 둡니다.

가로줄 위에서만 꽂아도 되고, 두 번째 LED처럼 가운데를 가로 질러 연결하여도 됩니다.

 

-브레드 보드위의 부품들을 연결하기 위한 와이어는 다양한 형태가 존재합니다.

-단선뭉치를 와이어 스트리퍼를 이용하여 원하는 길이로 절단하면 보다 더 깔끔한 배선이 가능합니다.

 

 

브레드보드에 간단히 깜빡이 회로를 구성해보았습니다.

 

브레드보드만 있으면, 조금 더 전문적인 회로도 이렇게 납땜작업 없이 구현 가능합니다.

 

[ 브레드 보드 기초 영상강의 ]

https://youtu.be/sxQQLMK_Ah4

 

반응형
반응형

【 전자기초#2 옴의 법칙! 왕기초 설명 ( Ohm's Law )

 전자 분야 입문자 분들을 위해, 옴의 법칙을 쉽고 자세하게 설명드리는 영상을 제작하였습니다.
집중해서 몇 번 반복시청하시면 개념 잡히는데 도움이 되실듯 합니다.  ^^;

 

아래 사진이 바로 옴의 법칙을 정립한,

Georg Simon Ohm 이라는 사람입니다.

Gerg Simon Ohm

[ 옴의 법칙 설명 영상 설명 ]

https://youtu.be/mRKi2Ir8xaI

 

옴의 법칙을 다루는 중요한 이유는 전압과 전류와 저항과의 관계를 이해하는 것이 중요하기 때문입니다.

코딩도 물론 중요하지만, 아두이노를 다루고자 할때, 전자 부품과 회로에 대한 이해도 매우 중요합니다.

 

- 전기라는 것은 마이너스(-) 전자 알갱이가 플러스(+) 전자 영역을 향해 이동하는 과정에서 발생하며, 흔히 전기(전류)의 흐름을 +플러스 에서 (-)마이너스로 흐른다고 정의하고 있지만, 실제로는 (-)전자가 마이너스에서 (+)로 즉 반대방향으로 이동 하고 있습니다. 

 

- 옴의 법칙은 전류(I)와 전압(V)과 저항(R)과의 상관 관계를 수학적으로 정의한 법칙을 말합니다. 

- 전류와 전압과 저항이라는 것을  I, V, R 의 '기호'로서 함축적으로 표시하고 있으며, 각 요소별 물리적인 양을 나타기 위해 표시하고 있는 A(암페어), V(볼트), Ω (옴) 들을 '단위'라고 합니다.  단위는 표시 할때는 'A'라고 하지만 읽을 때는 발견자의 이름을 딴 '암페어'라고 읽어야 합니다. 전압과 저항도 마찬가지 입니다.   무게를 나타낼 때 100g 라고 표시하지만, 읽을 때는 '100 그램' 이라고 읽는 것과 같은 이치입니다.

 

옴의 법칙 Ohm's Law

- 옴의 법칙의 핵심은 저항(R)이 일정할 때, 전류(I)와 전압(V)은 서로 비례관계에 있으며, 전압이 일정할 때, 전류와 저항은 반비례관계가 되고, 전류가 일정할 때 전압과 저항은 비례관계가 되는 것입니다.

 

[ 아래는 옴의 법칙을 설명함에 있어 LED와 저항을 사용하는데 참고 하기 위한 LED동작 스펙입니다. ]

 

- 위 이미지와 같은 회로를 구성하여 옴의 법칙을 이용한 이론적인 계산값과  아래 이미지처럼 실제 측정한 값이 유사함을 알 수 있습니다.  약간의 오차가 있는 것은, 건전지 자체의 실제 출력이 정확한 9V가 아니며, 건전지 및 LED의 내부저항 값은 비록 작지만 계산에서 제외 되었으며, 계측기 자체의 미세한 오차 등이 결합되어 차이가 나는 것으로 이해하시면 됩니다 .

 

9V 전지에 100옴 저항과 LED 직렬 연결한 회로의 전류를 측정

 

- 전압이 (9V) 일정한 상태에서,  100옴의 저항 대신 1KΩ의 저항을 달아,  저항 값을 10배로 키우게 되면, 흐르는 전류도 정확히 10배로 감소하여, 저항과 전류가 반비례 관계임을 확인 할 수 있습니다. 

 

- 또한 저항 값을 줄일 수록 LED가 밝아지며, 저항 값을 키울 수록 LED가 어두워지게 되는데, 저항 값을 너무 줄이게 되면(위 회로에서 100옴 이하) 과전류로 인해 LED가 타버리게 되고,  저항값을 너무 키우게 되면, LED의 불빛이 들어오지 않게 됩니다.   따라서 LED를 동작시킬 수 있는 적정전류(20mA)와 허용 최대전류(50mA) 범위 내에서 전류가 공급되도록 저항값을 조절 하면 됩니다.   일반적으로 200옴~500옴 사이의 값을 사용하며, 아래 처럼 통상 330옴 혹은 220옴을 많이 사용하고 있습니다. 

 

 

- 그런데, 만약 위 이미지 처럼 공급 전압(9V)에 비해 너무 작은 저항(47옴)을 연결하게 되면, 흐르게 되는 전류가 115mA로서, 허용 한계치를 넘은 LED의 손상이 예상되며, 저항 또한 발생되는 과 소비전력으로 인해 파괴가 될 것입니다. 

위 이미지에 소비 전력을 구하는 공식을 P=IV = I x I x R 을 참고 해보면 0.622W의 전력값이 나오는데,  일반적으로 사용하는 저항의 규격인 1/4W (0.25W)를 훨씬 초과하기 때문에 저항도 타거나 하여 문제가 발생하게 됩니다. 

- 따라서 옴의 법칙을 이용하여 적절한 용량값을 계산하여 사용한다면, 안정적인 회로 구성을 할 수 있게 됩니다.

 

같은 저항값이라도 견딜수 있는 전력이 다르다(1/8W, 1/4W, 1/2W, 1W, 2W, 3W 등등)

 

감사합니다~

반응형
반응형

【 전자기초#1 전압 & 전류 저항 이란? 

 전압의 개념과 전류, 저항에 대해 설명합니다.

 

 

전자 기초 설명 : 전압 & 전류 & 저항 

https://youtu.be/banAM20VLG8

 

(카카오로 보기)

 

반응형
반응형

【 아두이노Proj#8 사륜구동 4WD 블루투스 RC카 만들기~! (with 모터쉴드)

 지난시간, 블루투스모듈을 이용한 통신을 학습하였다. 또한 미니카도 만들어 제어해보았는데, 이제 이 것들을 종합해서 업그레이드 해보도록 하자! 

 바퀴 4개를 이용하여 4륜 구동으로 만들고 아두이노 프로미니로 소형 리모컨을 만들어 무선제어를 한다면, 교육적이고 멋진 아두이노 장난감을 만들어 낼 수 있다.  여기에 Adafruit 사의 모터쉴드를 이용하면, 별다른 선연결도 없이 간단히 4개의 DC모터를 제어할 수 있다.

Let's get it~!

 

▶ 선수 학습 :

    1. [아두이노 모듈#16] 아두이노... 블루투스통신 (블루투스 설정법 참조) ☜ (클릭)

    2. [아두이노 모듈#18] 아두이노... 블루투스통신 (블루투스 제어법 참조) ☜ (클릭)

    3. [아두이노 모듈#22] Adafruit의 4채널 모터쉴드(모터쉴드 사용법 참조) ☜ (클릭)
    4. [아두이노 ProMini#2] 초소형 블루투스 리모컨 만들기(리모트 컨트롤러 참조) ☜ (클릭)

 

▶ 실습 목표 :  

 1. [ Adafruit 모터 쉴드의 사용법을 익힐 수 있고 4개의 DC모터 제어를 할 수 있다.] 

 2. [ 조이스틱의 컨트롤 기능을 익힐 수 있다.  ]

 3. [ 블루투스 모듈의 셋업과 페어링(연결) 및 사용법을 익힐 수 있다. ]

 4. [ 아두이노 두 대 상호간 통신을 통해 제어하는 방법을 익힐 수 있다 ]

 

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

[1.  사륜 구동 본체 연결도]

[2. 블루투스 리모컨 연결도]

- 1. 우노 리모컨

우노(나노)보드 조이스틱 조정기 연결도

- 2. 프로미니 리모컨

프로미니 보드 조이스틱 조정기 연결도

※ 블루투스 페어링(자동 연결)을 위해서는, 선수학습 1번을 통해 블루투스 설정법을 확인하여, 본체에 있는 블루투스 모듈은 슬레이브로(Slave)로 설정하고, 조이스틱 조정기의 블루투스는 마스터(Master) 설정 작업이 필요하다.  
(물론 마스터와 슬레이브가 반대로 바뀌어도 상관이 없다)

  - 선수학습을 참고하면 좀더 상세하게 조이스틱 컨트롤로(조정기) 회로를 조립할 수 있다.

  - 우노회로나, 프로미니 회로 모두 같은 코드를 사용하니 상황에 따라 적합한 것을 선택할 수 있다.

 

▶ 실습 절차  :  

1.   부품을 준비하여 위와 같은 회로를 각각 구성한다. 

   -  사륜카의 베이스 판은 아크릴 판 혹은 MDF 등 주변에서 쉽게 구할 수 있는 것으로 사용해도 무방하다.

   -  여기서는 3D 프린팅으로 출력한 것을 베이스로 사용하였다.

   -  모터와 베이스를 연결하는 적합한 나사가 없을 경우, 두꺼운 양면테잎 혹은 글루스틱으로 부착하여도 무방.

   -  3.7V 베터리 2개를 직렬연결 해주면, 충분한 전류가 공급되어 힘있고 빠르게 구동된다.

2.   아래 코드를 작성하고 각각의 프로그램을 로딩 후 실행시킨다.

 

 

▶ 프로그램 코드 및 설명  : 

 

【 코드1-본체 

#include  <AFMotor.h>            // Adafruit 모터 쉴드 라이브러리 사용
#include  <SoftwareSerial.h>    //블루투스 통신을 위한 기본 헤더 선언
                                 
SoftwareSerial BTSerial(2, 3);  // 블루투스 모듈과 통신을 위한 아두이노 연결핀(TX = 2 , RX = 3)
//모터의 전후좌우 방향을 컨트롤하는 PIN번호를 상수로 선언
AF_DCMotor MOTOR1(1);     // 모터쉴드 M1 지정
AF_DCMotor MOTOR2(2);     // 모터쉴드 M2 지정
AF_DCMotor MOTOR3(3);     // 모터쉴드 M3 지정
AF_DCMotor MOTOR4(4);     // 모터쉴드 M4 지정
#define ActionTime 3000
/*  for (i=0; i <255; i++) {
    motor.setSpeed(i);
    delay(20);
  }
*/
void Stop_Release() {
  MOTOR1.run(RELEASE);
  MOTOR2.run(RELEASE);
  MOTOR3.run(RELEASE);
  MOTOR4.run(RELEASE);
  delay(20);
}

void Go_Forward() {
  MOTOR1.run(FORWARD);
  MOTOR2.run(FORWARD);
  MOTOR3.run(FORWARD);
  MOTOR4.run(FORWARD);
  delay(20);
}

void Go_Backward() {
  MOTOR1.run(BACKWARD);
  MOTOR2.run(BACKWARD);
  MOTOR3.run(BACKWARD);
  MOTOR4.run(BACKWARD);
  delay(20);
}

void Go_Left() {
  MOTOR1.run(FORWARD);
  MOTOR2.run(BACKWARD);
  MOTOR3.run(BACKWARD);
  MOTOR4.run(FORWARD);
  delay(20);
}

void Go_Right() {
  MOTOR1.run(BACKWARD);
  MOTOR2.run(FORWARD);
  MOTOR3.run(FORWARD);
  MOTOR4.run(BACKWARD);
  delay(20);
}

void setup() {
  BTSerial.begin(9600); //블루투스와 통신하기 위한 속도설정(모듈의속도 확인필요)
  Serial.begin(9600);   // 시리얼(모니터) 통신 속도를 설정
  MOTOR1.setSpeed(250);
  MOTOR2.setSpeed(250);
  MOTOR3.setSpeed(250);
  MOTOR4.setSpeed(250);
}

void loop() {
/* 기본 동작  
  Go_Forward();
  Stop_Release();
  Go_Left();
  Stop_Release();
  Go_Right();
  Stop_Release();
  Go_Backward();
  Stop_Release();
*/
  if (BTSerial.available()) {   // 블루투스로 신호가 있을 경우 실행되는 루틴
    char cmd = (char) BTSerial.read();   // 블루투스로 읽은 값을 char타입 변수에 저장
    Serial.println(cmd);  //cmd변수에 저장된 내용을 사용자가 `시리얼모니터`로 확인
    
    if ( cmd == 'f') {          //블루투스에서 'f'값이 들어오면 전진
      Go_Forward();
    } else if (cmd == 'l') {     //블루투스에서 'l'값이 들어오면 좌회전
        Go_Left();
    } else if (cmd == 'r') {     //블루투스에서 'r'값이 들어오면 우회전
        Go_Right();
    } else if (cmd ==  'b') {    //블루투스에서 'b'값이 들어오면 후진
        Go_Backward();
    } else if (cmd == 's') {    //블루투스에서 's'값이 들어오면 멈춤
        Stop_Release();
    }
  }
}

 

【 코드2-조이스틱 조정기 

/*  블루투스 조이스틱 조정기 만들기        */
#include  <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3);  // BTSerial(Rx, Tx)
int BTstates=0;       // 블루투스 신호 상태 저장용 변수
const int X_AXIS =0; //마우스 X 축 (A0)
const int Y_AXIS =1; //마우스 Y 축 (A1) 
int xVal=0;
int yVal=0;

void setup() {
  BTSerial.begin(9600);  
  Serial.begin(9600);
}

void loop() {  
  xVal=map(analogRead(X_AXIS),0,1023,100,0); //x축값 읽어 저장 
  yVal=map(analogRead(Y_AXIS),0,1023,300,200); //Y축값 읽어 저장
  
  // 모터 전진 //
  if (xVal >= 60 && yVal >= 225 && yVal <=275)  { 
    BTSerial.write('f');
    Serial.println('f');
  }
  
  // 모터 후진 //
  else if (xVal <= 40 && yVal >= 225 && yVal <=275)  { 
    BTSerial.write('b');
    Serial.println('b');
  }
  
  // 모터 좌회전 //
  else if (yVal <= 240 && xVal >= 25 && xVal <= 75)  { 
    BTSerial.write('l');
    Serial.println('l');
  }

  // 모터 우회전 //
  else if (yVal >= 260 && xVal >= 25 && xVal <= 75)  { 
    BTSerial.write('r');
    Serial.println('r');
  }

 else { 
    BTSerial.write('s');
    Serial.print('s');
  }
  delay(100); 
}

 

▶ 코드 다운로드 :

 (위 두 가지 코드 압축파일로 다운로드)

(PROJ03) 4WD_CAR.zip
0.00MB

 

위 코드에 사용된  AFMotor.h 라이브러리 첨부 :

Adafruit-Motor-Shield.zip
0.01MB

(만약 위 라이브러리를 다운 받아 추가 할 경우, 압축을 풀지말고, 아두이노 라이브러리 포함하기 메뉴에서 .zip 라이브러리 추가... 메뉴를 이용해서 추가해주세요. )

 

 

▶ 회로 제작/동작 영상 :

(YouTube : 1080P 고화질로 보기)

https://youtu.be/0tEaw29_dJc

 

(카카오로 보기)

 

 

프로젝트 제작에 사용된 3D 프린팅용 파일 :

1. Car 베이스
( 1. 아래는 본 영상에 사용된 Car-베이스 오리지널 출력 파일 입니다.
오리지널 파일은 고정용 나사 구멍이 뚫려 있습니다.)

아래 파일 출력 예상 이미지

 

ORIGINAL_chasis01.STL
0.27MB



( 2. 아래는 직경이 다소 큰 바퀴를 사용할 경우 가운데 부분이 걸릴 수 있어 바퀴 나뉘는 부분을 좀더 좁게 , 그리고 두께를 4t 정도 되도록한 파일 입니다.  그리고 직접 드릴로 나사의 고정 위치를 잡도록 나사구멍이 없는 파일입니다. 
- 다만, 수정한 파일은 직접 출력해서 테스트해 보지 않았기에, 먼저 오리지널 파일을 사용해 보시고 필요할 경우 아래 파일을 출력해 보시기 바랍니다.)

아래 파일 출력 예상 이미지
Rasino_4WheelCar_base_01.stl
1.48MB

2. 모터 고정용 브라켓
(본 게시글에 사용된 모터를 Car 베이스에 고정하기 위한 브라켓 입니다. )
아래 출력용 모터 서포터는 좌측용과 우측용 2가지이며,  각각 2개씩 총 4개를 출력하면 됩니다.

아래 파일 출력 예상 이미지
soporte_motor1.STL
0.04MB
soporte_motor2.STL
0.04MB


3. 모터 고정용 전용 브라켓(M3 나사) 별도 구매용
( 위 2번의 브라켓은 출력용이다 보니 아무래도 RC-Car를 
운행 할 수록 Car 베이스에 단단히 고정되지 않고 흔들거릴 수 있습니다.  때문에,   본 게시글에 사용된 모터 전용 M3나사 브라켓을 별도로 구매해서 고정시키셔도 좋을 것 같습니다.)

브라켓 구매 링크 :  smartstore.naver.com/domekit/products/2988750683  (2개 1셋 이기 때문에 구매하실때는 2개구매 혹은 여유 있게 구매)

 

반응형
반응형

【 아두이노모듈#23 Adafruit 사의 4채널 아두이노 모터쉴드 - 스텝모터 사용하기! #1  

 Adafruit 사의 모터쉴드는 L293D 모터드라이버를 2개를 H-bridge 구성한 4채널 모터드라이브 쉴드 보드이다. 

여기서 쉴드보드란, 아두이노 우노, 메가, 레오나르도 등에 적층하여 사용할 수 있는 확장형 보드라는 의미이다.  따라서 다른 형태의 모터드라이버 보드와는 달리 거추장스러운 선연결이 많이 줄어 들게 되는 장점이 있다.  또한, 서보모터(2개), DC 모터(4개) 혹은 스텝모터(2개)를 함께 연결하여 동시 구동이 가능한 확장성을 지닌 보드이다.  지난 시간 서보모터 연결에 이어, 이번엔 스텝모터 두 개를 연결해보도록 하자.  우선, 보편적으로 많이 사용하는 28BYJ-48 모터를 사용해볼 것이다.  그리고, 28BYJ-48 모터는 ULN2003 이라는 전용 드라이버가 있어서 이를 이용해서 모터쉴드에 연결해도 되고 사용도 간편하지만, Adafruit모터쉴드 자체가 드라이버 역할을 함으로 ULN2003 드라이버 없이 사용해볼 것이다. 

 Let's get it~!

 

▶ 선수학습 :

    1. [아두이노 기초#35] 스텝모터제어하기(28BYJ-48모터 기초) ☜ (클릭)

    2. [아두이노 모듈#22] Adafruit4채널아두이노 모터쉴드   ☜ (클릭)

 

▶ 아두이노 L293D 모터 드라이버 쉴드 스펙

▶ 스텝모터(2개) 제어하기

 

 (사전준비 )

 아래처럼 라이브러리 관리에서 Adafruit 사의 모터 드라이버를 다운받아 라이브러리에 추가 한다.(구글, 깃허브 등에서 다운로드도 가능)

 라이브러리 직접 다운로드 :

Adafruit-Motor-Shield.zip
0.01MB

 

▶ 회로연결 :

 아래와 같이 스텝모터 두 개를 연결한다.

위 이미지는 하단에 아두이노 보드가 2단으로 결합 된 모습임을 참고하라.

 ※ 주의 사항 :

 1. 모터 쉴드를 사용할 때의 전원 공급 방법은 a. 보드에 직접 전원을 연결 (이때, 쉴드의 'PWRJMP' 점퍼가 연결되어 있어야함).   b.  외부전원으로 공급 (이때, 쉴드의 'PWRJMP' 점퍼가 연결되어 있어야함).   c. 보드 전원과 외부전원 동시 공급 (이때, 쉴드의 'PWRJMP' 점퍼는 제거 해야함).

 2. 보드 전원(USB 케이블전원) 만으로는 위 두개의 스텝모터 구동이 안 되거나 부분적으로 동작이 안 될 수 있다.

 이럴 때는, 외부전원(별도의) 을 입력해주면 동작에 문제가 없으나, 사용하는 스텝모터의 정격용량(현재 5v)을 많이 초과 하는 경우 장시간 사용시 스텝모터가 과열되어 손상이 갈 수 있으니, 테스트를 통해 적정 전원을 공급해주어야 한다.

 3. 케이블 연결 순서에 주의 할 것.( 순서가 잘 못되면, 동작이 안 되거나, 반대방향으로 회전한다)

 

【 28BYJ28 스텝모터 부연 설명 

유니폴라 방식의 모터로서(1,3,4,2번으로 전류가 들어가며 5번(Red) 공통단자로 전류가 흘러나오는 연결 구조이다,  15  , 35, 45, 25  )

 색깔을 주의 깊게 보면서,  A → B → C → D의 순서대로 켜지도록 전류를 흘려주면 CW(시계방향),   

 D → C → B → A의 순서대로 흘려주면 CCW(반시계 방향) 으로 모터가 회전하게 된다. 

 

▶ 코딩 :

/* 스텝모터(28BYJ-48) 2대 구동하기                                   */   
/* 라이브러리 메니저 창에서 Ardafruit 검색후 AFMotor.h 설치 */
#include <AFMotor.h> 
// 1스텝당 회전각 5.625˚ * 64스텝 = 360˚
AF_Stepper motor1(64 , 1);  //1회전당 필요 스텝수(64), 연결 모터채널(모터1) 
AF_Stepper motor2(64 , 2);  //1회전당 필요 스텝수(64), 연결 모터채널(모터2) 

void setup() {
  Serial.begin(9600);           
  Serial.println("Stepper test!");
  motor1.setSpeed(200);  // 200 rpm  : 범위(0~255)
  motor2.setSpeed(200);   
}

void loop() {
  Serial.println("Single coil steps"); //SINGLE : 1개의 코일만 동작
  // ( stepsdirectionstyle)
  motor1.step(2048FORWARDSINGLE); // 2048 : 1회전에 필요한 스텝수
  motor2.step(2048, FORWARD, SINGLE);    
  // motorX.release():회전멈추고 전류를 차단함 
  delay(2000);  
  motor1.step(2048, BACKWARD, SINGLE); 
  motor2.step(2048, BACKWARD, SINGLE); 
  delay(2000);
  Serial.println("Double coil steps");
  motor1.step(2048, FORWARD, DOUBLE);  //DOUBLE : 2개의 코일 동작(토크상승)
  motor2.step(2048, FORWARD, DOUBLE);
  delay(2000);
  Serial.println("Interleave coil steps");
  motor1.step(2048, BACKWARD, INTERLEAVE); // INTERLEAVE: 1,2개 코일 번갈아 동작
  motor2.step(2048, BACKWARD, INTERLEAVE); // 약간의 부드러운 구동과,약간의 속도감소
  delay(2000);
  Serial.println("Micrsostep steps");
  motor1.step(2048, FORWARD, MICROSTEP); //MICROSTEP:부드러운회전(단,토크와 속도감소)
  motor2.step(2048, FORWARD, MICROSTEP); 
}

 

【코드 다운로드】

28BYJ-48_2motor.zip
0.00MB

▶ 동작 영상 :

(유튜브 고화질로 보기-옵션:1080P영상)

 https://youtu.be/93dd7Gjszwo

 

(카카오로 보기)

 

반응형
반응형

【 아두이노모듈#22 Adafruit 사의 4채널 아두이노 모터쉴드 - 서보모터 사용하기!  

 Adafruit 사의 모터쉴드는 L293D 모터드라이버를 2개를 H-bridge 구성한 4채널 모터드라이브 쉴드 보드이다. 

여기서 쉴드보드란, 아두이노 우노, 메가, 레오나르도 등에 적층하여 사용할 수 있는 확장형 보드라는 의미이다.  따라서 다른 형태의 모터드라이버 보드와는 달리 거추장스러운 선연결이 많이 줄어 들게 되는 장점이 있다.  또한, 서보모터(2개), DC 모터(4개) 혹은 스텝모터(2개)를 함께 연결하여 동시 구동이 가능한 확장성을 지닌 보드이다.  이번 시간부터 서보모터 부터 실습하여 DC모터 4개를 구동할 수 있는 RC Car 구동에 활용해 볼 예정이다. 

 Let's get it~!

▶ 아두이노 L293D 모터 드라이버 쉴드 스펙

아두이노 우노, 레오나르도, 메가, 듀에 보드 위에 결합 가능한 핀구조이다.

[ 주요 스펙-특징 ]

- 모터 채널당 최대 600mA 출력을 내보낼 수 있다. (합산 전류 최대치는 1.2A-보호회로 내장) 

- 5V Servo 모터 2개를 연결 사용가능하다 (High resolution)

- 동시에 4개의 DC 모터 또는 2개의 Stepper 모터 또는 2개의 Servo 모터 구동이 가능하다.

- DC 모터 구동시 양방향 구동과 8bit의 속도제어가 가능하다 (speed : 0~255)

- 4.5V~36V DC 모터 제어가 가능하다.

- 아두이노 보드와 연결된 리셋 단자가 있다.

- 모터구동을 원활하게 하기 위하여 위부 전원 입력단자가 별도로 있다.

각종 모터를 연결한 모습

 

▶ 서보모터(2개) 제어하기

 

▶ 사전준비 :

 아래처럼 라이브러리 관리에서 Adafruit 사의 모터 드라이버를 다운받아 라이브러리에 추가 한다.(구글, 깃허브 등에서 다운로드도 가능)

 라이브러리 직접 다운로드 :

Adafruit-Motor-Shield.zip
0.01MB

 

▶ 회로연결 :

 아래와 같이 서보모터 두 개를 연결한다.

 ※ 외부전원 +, GND 구분을 잘하여 연결하고, 가급적 6~7V 이상의 전원을 공급해준다. (AA x 4개도 가능)

    위 이미지는 하단에 아두이노 보드가 결합 된 모습임을 참고하라.

 

▶ 코딩 :

 

/* 모터쉴드에 서보모터 2대 연결 실습 코드              */

#include     // Adafruit의 L293D모터쉴드 라이브러리
#include       // 서보모터 라이브러리
Servo servo1;    // 서보모터 1 정의
Servo servo2;    // 서보모터 2 정의

void setup() {
  Serial.begin(9600);    
  servo1.attach(9); // 서보모터 1 연결 (9번핀-고정)
  servo2.attach(10); // 서보모터 2 연결 (10번핀-고정)
}
void loop() {
  servo1.write(0);    // 서보모터1을 0도의 위치로 이동
  delay(1000);        // 1초 시간 지연
  servo1.write(180);  // 서보모터1을 180도의 위치로 이동
  delay(1000);        // 1초 시간 지연
     
  servo2.write(0);    // 서보모터2를 0도의 위치로 이동
  delay(1000);        // 1초 시간 지연
  servo2.write(180);  // 서보모터2를 180도의 위치로 이동
  delay(1000);        // 1초 시간 지연
}

 

【코드 다운로드】

01_2Servo-motor_shield.zip
0.00MB

▶ 동작 영상 :

반응형
반응형

【 아두이노모듈#21 nRF24L01  조이스틱으로 서보모터 2대 제어하기!  

 지난시간 nRF24L01 모듈을 이용하여 조이스틱(Joystick)으로 서보모터 1대를 제어해보았다. 이번엔 조이스틱의 상하 뿐아니라 좌우움직임을 함께 이용하여 서보모터 2대를 제어해볼 것이다.  여기서 중요한 것은 코딩영역이다. 한가지 데이터를 수신하여 모터 한 대를 제어하는 것은 어렵지 않았다. 하지만, 2가지의 제어값인, 조이스틱의 상하 값과 좌우 값을 수신단에서 분리처리해야 두개의 모터를 각각 제어 할 수 있을 텐데,  이 문제를 해결하는 것이 중요하다.   해결책은 C언어의 구조체 형식을 이용하면 아주 간단히 해결되니, 아래 내용을 자세히 살펴보면 쉽게 이해할 수 있을 것이다.

 Let's get it~!

 

▶ 선수학습 :

    1. [아두이노 모듈#14] 조이스틱 Joystick 사용하기 #1 ☜ (클릭)

    2. [아두이노 모듈#19] 2.4G RF 무선통신 하기! (nRF24L01 기본사용법)  ☜ (클릭)

    3. [아두이노 모듈#20] 조이스틱으로 서보모터제어하기(조이스틱&서보사용법)  ☜ (클릭)

 

(모듈 기본 정보-상세내용은 위 선수학습 참조)

 

▶ 실습 회로 도면 :

(1. 조이스틱-송신기회로)

(2. 조이스틱-수신기회로)

서보모터 2대 제어부분(nRF24L01)

[ 특이(주의) 사항]

- 아래 실제조립 회로에서는 nRF24L01 어뎁터 소켓을 연결하여 사용하였다. 별다른 큰 차이는 없으며 3.3V 전원을 사용하지 않고 동일하게 5V전원으로 연결시키기 위한 차이 일뿐으로, 소켓을 사용하지 않아도 무방하다.

- "1. 조이스틱송신기"회로의 전원은 9V 베터리를 사용하여도 관계 없으나, "2. 서보모터-수신기"회로쪽은 서보모터 구동에 충분한 전류공급이 필요함으로, AA건전지 x 4개(총합 6V)  혹은 18650 x 2개(총합 7.4V) 를 연결하여야 동작이 원활할 것이다. (참고로, 아두이노 Vin 단자의 입력 전압은 최소6V, 권장7V이상이다.  또한 9V 사각 건전지는 전압은 높으나 출력 전류가 낮기 때문에 모터구동 회로 전원으로는 적합하지 않다.-동작이 잘 되지 않는다.)  

1. AA battery  x 4 개 (총 6V)

2. 18650 battery x 2 개 (총 7.4V)

(18650 베터리는 AA소켓에 들어가지 않으니 별도의 18650소켓이 필요하며, 18650도 충전보호회로가 들어 있는 것과 들어 있지 않은 18650 베터리가 따로 존재한다. 따라서 충전보호회로가 들어 있는 베터리를 사용한다면, 소켓도 거기에 맞는 좀더 큰 소켓이 필요하다.   본 영상에서는 충전보호회로가 들어 있지 않은 베터리와 소켓을 사용하였으며, 충전은 따로 18650 전용충전기로 충전하면 별문제 없다.)

 

▶ 실습목표  :  

    1. nRF24L01 모듈 사용법을 익힐 수 있다.

    2. nRF24L01 모듈을 이용한 RF 무선 통신 모듈에 대해 익힐 수 있다.

    3. 조이스틱을 이용하여 서보모터 2대를 회전(제어) 할 수 있다. 

    4. 구조체(코딩)의 기본 개념을 이해하고 데이터를 분리 처리할 수 있다.

 

▶ : 코딩

코딩에 앞서, 'nRF24' 관련 라이브러리 파일이 필요하다. 이를 깃허브를 통해 다운 받거나 아래 첨부파일로 다운받아서, 아두이노에서 추가해주어야 한다. 

( 스케치IDE : 스케치 》 라이브러리 포함하기 》 .ZIP 라이브러리 추가 》 다운받은 라이브러리 선택.  끝 ) 

RF24-master.zip
0.36MB

깃 허브 직접 다운로드 :  https://github.com/nRF24/RF24

 

《송신기 코드》 아래 코드를 송신용 아두이노에 업로드 시킨다.

#include  <SPI.H>
#include  <nRF24L01.h>
#include  <RF24.h>
RF24 radio(7, 8);           // SPI통신을 위한 (CE, CSN) 핀 선언  
const byte address[6] = "00001"; // 송신기와 수신기를 동일한 값으로 주소 설정함(5자리)
int x_key = A0;                                               
int y_key = A1;                                               
int x_pos;
int y_pos;
struct Data {    // 구조체 영역(조이스틱의 상하값joyX와 좌우값joyY 구조화)
  byte joyX;
  byte joyY;
};
Data data;  // 구조체 선언

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.setAutoAck(false);//수신단의Ack신호를 받을때까지 계속송신하는기능OFF(전력소모줄임)
  radio.openWritingPipe(address);  // 데이터를 보낼 수신 주소를 설정
  radio.setPALevel(RF24_PA_LOW); // 송신거리에 따른, 전원공급 파워레벨 설정 
//(최소)RF24_PA_MIN→RF24_PA_LOWRF24_PA_HIGHRF24_PA_MAX (최대)설정가능 
//송신이 약하다고 판단될 경우 nRF24모듈의 GND와 3.3V 단자에 전해콘덴서(10uF이상:+를3.3V연결)사용권장 
  radio.stopListening();    // 모듈을 송신기로 설정
}

void loop() {
  data.joyX = map(analogRead(x_key),0,1023,0,179);  
  data.joyY = map(analogRead(y_key),0,1023,0,179);
  Serial.println(data.joyX);
  Serial.println(data.joyY);
  radio.write(&data, sizeof(Data));
  delay(100);
}

 

《수신기 코드》 아래 코드를 수신용 아두이노에 업로드 시킨다.

#include  <SPI.H>
#include  <nRF24L01.h>
#include  <RF24.h>
#include  <Servo.h>
Servo servo1,servo2;
RF24 radio(7, 8);  // SPI통신을 위한 (CE, CSN) 핀 선언 
const byte address[6] = "00001"; // 송신기와 수신기를 동일한 값으로 주소 설정함(5자리)
int servo1_pin = 6;       // 서보모터 1, 연결 핀
int servo2_pin = 5;       // 서보모터 2, 연결 핀
struct Data {        // 구조체 영역(조이스틱의 상하값joyX와 좌우값joyY 구조화)
  byte joyX;
  byte joyY;
};
Data data;    

void setup() {
  Serial.begin(9600); 
  radio.begin(); 
  radio.setAutoAck(false);
  servo1.attach (servo1_pin);
  servo2.attach (servo2_pin); 
  radio.openReadingPipe(0, address);   
  radio.setPALevel(RF24_PA_LOW);
  radio.startListening();               // 모듈을 수신기로 설정함
}

void loop() {
  while (radio.available()) {
    radio.read(&data, sizeof(Data));    
      servo1.write (data.joyX);         // 구조체 변수 데이터 구분하여 출력
      servo2.write (data.joyY); 
      Serial.println(data.joyX);         // 시리얼 모니터로 확인   
      Serial.println(data.joyY);
      delay(50);
  }  
}

 

▶ 코드 다운로드 : 

03 nRF24Joy2Servo.zip
0.00MB

 

▶ 회로 동작(설명) 영상 :

(YouTube : 1080P 고화질로 보기)

https://youtu.be/XwUVahAWue4

 

(카카오로 보기)

 

 

※ 18650과 같은 리튭배터리는 직접적인 합선(쇼트)이나  회로내에서의 합선 등에 의해 불꽃과 소폭발의 가능성이 있는 제품이므로 다루실 때 충분한 주의와 사전지식이 필요하니 주의하시기 바랍니다.

반응형
반응형

 

※ 18650과 같은 리튭배터리는 직접적인 합선(쇼트)이나  회로내에서의 합선 등에 의해 불꽃과 소폭발의 가능성이 있는 제품이므로 다루실 때 충분한 주의와 사전지식이 필요하니 주의하시기 바랍니다.

 

【 아두이노모듈#20 nRF24L01  조이스틱으로 서보모터 무선 제어하기! 

지난시간 nRF24L01 모듈을 이용하여 두 대의 아두이노 보드간의 통신 실습을 진행하였다.  간단한 문자를 송신하고 수신측에서는 시리얼모니터를 통해 문자가 잘수신되는지 확인하는 기본적인 실험이었다. 이번엔 "조이스틱을 이용해서 앞뒤로 움직이면 서보모터가 0도~180도 회전하도록 구현해보자.  매우 흥미로울 것이다. 

 Let's get it~!

 

▶ 선수학습 :

    1. [아두이노 모듈#14] 조이스틱 Joystick 사용하기 #1 ☜ (클릭)

    2. [아두이노 모듈#19] 2.4G RF 무선통신 하기! (nRF24L01 기본사용법)  ☜ (클릭)

 

▶ 실습 회로 도면 :

(1. 조이스틱-송신기회로)

(조이스틱-송신쪽 연결도면)

 

(2. 조이스틱-수신기회로)

(서보모터-수신쪽 연결도면)

[ 특이(주의) 사항]

- 아래 실제조립 회로에서는 nRF24L01 어뎁터 소켓을 연결하여 사용하였다. 별다른 큰 차이는 없으며 3.3V 전원을 사용하지 않고 동일하게 5V전원으로 연결시키기 위한 차이 일뿐으로, 소켓을 사용하지 않아도 무방하다.

- "1. 조이스틱송신기"회로의 전원은 9V 베터리를 사용하여도 관계 없으나, "2. 서보모터-수신기"회로쪽은 서보모터 구동에 충분한 전류공급이 필요함으로, AA건전지 x 4개(총합 6V)  혹은 18650 x 2개(총합 7.4V) 를 연결하여야 동작이 원활할 것이다. (참고로, 아두이노 Vin 단자의 입력 전압은 최소6V, 권장7V이상이다.  또한 9V 사각 건전지는 전압은 높으나 출력 전류가 낮기 때문에 모터구동 회로 전원으로는 적합하지 않다.-동작이 잘 되지 않는다.)  

1. AA battery  x 4 개 (총 6V)

2. 18650 battery x 2 개 (총 7.4V)

(18650 베터리는 AA소켓에 들어가지 않으니 별도의 18650소켓이 필요하며, 18650도 충전보호회로가 들어 있는 것과 들어 있지 않은 18650 베터리가 따로 존재한다. 따라서 충전보호회로가 들어 있는 베터리를 사용한다면, 소켓도 거기에 맞는 좀더 큰 소켓이 필요하다.   본 영상에서는 충전보호회로가 들어 있지 않은 베터리와 소켓을 사용하였으며, 충전은 따로 18650 전용충전기로 충전하면 별문제 없다.)

 

▶ 실습목표  :  

    1. nRF24L01 모듈 사용법을 익힐 수 있다.

    2. nRF24L01 모듈을 이용한 RF 무선 통신 모듈에 대해 익힐 수 있다.

    3. 조이스틱을 이용하여 서보모터를 회전(제어) 할 수 있다. 

 

▶  :코딩

코딩에 앞서, 'nRF24' 관련 라이브러리 파일이 필요하다. 이를 깃허브를 통해 다운 받거나 아래 첨부파일로 다운받아서, 아두이노에서 추가해주어야 한다. 

( 스케치IDE : 스케치 》 라이브러리 포함하기 》 .ZIP 라이브러리 추가 》 다운받은 라이브러리 선택.  끝 ) 

RF24-master.zip
0.36MB

깃 허브 직접 다운로드 :  https://github.com/nRF24/RF24

 

《송신기 코드》 아래 코드를 송신용 아두이노에 업로드 시킨다.

#include  <SPI.H>
#include  <nRF24L01.h>
#include  <RF24.h>
RF24 radio(7, 8);    // SPI통신을 위한 (CE, CSN) 핀 선언  
const byte address[6] = "00001";  // 송신기와 수신기를 동일한 값으로 주소 설정함(5자리) 

int x_key = A0;                                               
int y_key = A1;                                               
int x_pos;
int y_pos;

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.setAutoAck(false); //수신단의 Ack신호를 받을 때까지 계속 송신하는 기능OFF(전력소모줄임)
  radio.openWritingPipe(address);  // 데이터를 보낼 수신 주소를 설정 
  radio.setPALevel(RF24_PA_MIN); // 송신거리에 따른, 전원공급 파워레벨 설정 
//(최소)RF24_PA_MIN → RF24_PA_LOW  RF24_PA_HIGH  RF24_PA_MAX (최대)설정가능 
//송신이 약하다고 판단될 경우 nRF24모듈의 GND와 3.3V 단자에 전해콘덴서(10uF이상:+를3.3V연결)사용권장 
  radio.stopListening();      // 모듈을 송신기로 설정 
}

void loop() {
  x_pos = analogRead (x_key) ;   // 조이스틱의 상하 움직입값 저장
  y_pos = analogRead (y_key) ;   // 조이스틱의 좌우 움직임값 저장 
  radio.write(&x_pos, sizeof(x_pos));  // 조이스틱의 값을 RF모듈을 통해 데이터 길이만큼 전송 
  Serial.println(x_pos);
  Serial.println(y_pos);
  delay(100);

 

 

 

《수신기 코드》 아래 코드를 수신용 아두이노에 업로드 시킨다.

#include  <SPI.H>
#include  <nRF24L01.h>
#include  <RF24.h>

#include  <Servo.h>
Servo servo;
RF24 radio(7, 8);     // SPI통신을 위한 (CE, CSN) 핀 선언  
const byte address[6] = "00001";  // 송신기와 수신기를 동일한 값으로 주소 설정함(5자리) 
int servo_pin = 6;   // 서보모터가 연결된 핀 설정

void setup() {
  Serial.begin(9600); 
  radio.begin(); 
  servo.attach (servo_pin ) ; 
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN); // 송신거리에 따른, 전원공급 파워레벨 설정 
//(최소)RF24_PA_MIN → RF24_PA_LOW  RF24_PA_HIGH  RF24_PA_MAX (최대)설정가능 
//송신이 약하다고 판단될 경우 nRF24모듈의 GND와 3.3V 단자에 전해콘덴서(10uF이상:+를3.3V연결)사용권장 
  radio.startListening();   // 모듈을 수신기로 설정함
}

 

void loop() {
  if (radio.available()) {   
    int x_pos ;
    radio.read(&x_pos, sizeof(x_pos));  // 조이스틱의 값을 RF모듈을 통해 데이터 길이만큼 읽음 
    Serial.println(x_pos);
    x_pos = map(x_pos, 0, 1023, 0, 179); // 수신 데이터 값을 서보모터가 움직일 수 있는 값으로 맵핑(180도)
    if (x_pos>400 && x_pos<600)  {      // 오류가 날 수 있는 값에 대한 처리 
    }
    else{
      servo.write (x_pos) ;
    }
  }
}

▶ 코드 다운로드 : 

02 nRF24_Joy_Servo.zip
0.00MB

 

▶ 회로 동작(설명) 영상 :

(YouTube : 1080P 고화질로 보기)

https://youtu.be/dCoZAOlSVRM

(카카오로 보기)

 

 

반응형
반응형

【 아두이노모듈#19 nRF24L01 :  2.4G RF 무선통신 하기! ( Arduino 통신 ) 

 nRF24L01 모듈을 이용하여 RF 무선 통신을 해보자.  블루투스통신의 경우 통신거리가 10m 내외로 짧지만, nRF24 모듈은 2.4GHz 대 주파수를 사용한 통신으로 보통 100m 까지도 통신이 가능하다. 안테나가 달린 모듈을 사용할 경우 800까지도 가능하다. 


(기본 모듈의 경우 통신거리 스펙 : 250kbps의 속도로 ~250m까지,  실제 : 100m 정도,
 외장 안테나 달린 모듈 스펙 :  250kbps의 속도로 ~1.1km까지,  실제 : 800m 정도)   

 오늘은 기본적인 연결방법과 간단한 데이터(문자)를 송수신 하는 것을 다루고, 차후에는 무선 RC기기를 컨트롤 해보려고 한다. 

 Let's get it~!

 

▶ nRF24L01 에 대해 :

 nRF24L01모듈은 기본적으로 2.4GHz 대역을 사용하는 RF(Radio Frequency)통신 모듈이다. 

이 모듈의 장점은 Bluetooth, ZigBee, NFC 모듈에 비해 가격이 매우 저렴하고 통신 가능 거리가 긴 것이 장점이다. 

 단점은, RF통신의 특성상 중간에 벽과같은 장애물이 있을 경우 수신율이 많이 떨어질 수 있다.

Image from. howtomechatronics.com

- NRF24L01 모듈은 기본적으로 다대 다 통신이 가능하며, 1MHz 간격으로 125개의 주파수 채널을 운영할 수 있고, 1대 다 통신도 가능하다.   선택적 통신을 위해 5자리의 Address(주소)를 사용한다. 

 

기본적으로 위 모듈의 VCC 단자에는 1.9V~3.6V 입력만 가능하다, 따라서 아두이노 우노에 직접연결하고자 할 경우 반드시 3.3V 출력단자에 연결해야하니 주의가 필요하다.  만약 5V단자에 연결할 경우 nRF24L01 모듈의 손상을 피할 수 없다. 

 그런데, 아래 이미지의 nRF24L01 어뎁터 소켓을 사용하면,  3.3V 레귤레이터가 내장 되어 있어 아두이노의 5V 전원단자에 연결 할 수 있다. 

 소켓을 사용하면 좋은 다른 이유는, 복제(클론) 아두이노 보드나 다른 메이커의 아두이노 보드들 중 3.3V 출력에 사용되는 레귤레이터를 용량이 작은 것으로 사용하고 있는 것들이 더러 있어서 nRF24L01 모듈을 소켓없이 3.3V 단자에 연결하여 사용할 경우 동작이 잘 안 되는 경우가 더러 있기 때문인데, 소켓을 사용하여 5V 단자에 연결하면 이런 경우를 예방할 수 있다. 

이유는 메이커 업체들이 5V 단자를 주로 사용하게 되는 아두이노 보드에서 3.3V단자는 잘 사용하지 않기 때문에 비용절감을 위해 좀더 저용량?의 저렴한 3.3V 레귤레이터를 사용하려 하기 때문일 것이다. 

 그런데, 당장 소켓을 구할 수 없을 때는 어떻게 할 것인가? 그럴때는 아래 소켓의 설명처럼, nRF24L01 모듈의 +,- 단자 사이에 10uF 이상의 전해콘덴서를 납땜하여 전원보강을 해주면 이런 문제는 해결 될 것이다. 

nRF24L01 Adapter Socket
nRF24L01을 어뎁터 소켓에 장착한 모마

또한 송수신율을 높여주기 위해 필요한 경우 아래와 같은 커패시터(전해콘덴서-약 10uF이상) 를 VCC-GND단자 사이에 연결해주면 도움이 될 수 있다. 커패시터는 전기를 모아서 내보낼 수 있는 충방전 기능이 있어 출력을 보완해주어 전원을 안정시켜줄 수 있으며, 노이즈를 제거를 위해 바이패스용으로 세라믹 콘덴서를 함께 달 수도 있다.

위 모듈은 일반적으로 탁트인 공간에서 100m 정도 송수신이 가능하다.  그런데 그 이상의 통신거리가 필요하다면, 아래와 같은 안테나가 달린 모듈을 사용하면, 이론상 800m까지도 가능하다.

 

근본적으로 원거리 통신이 필요하다면, 아래 《nRF20L01 PA-LNA 외장 안테나 모듈》을 사용하면 된다.

 

▶ 실습 회로 도면 :

(송신기 아두이노 회로와 수신기 아두이노 회로를 동일하게 구성한다)

▶ 실습목표  :  

    1. nRF24L01 모듈 사용법을 익힐 수 있다.

    2. nRF24L01 모듈을 이용한 RF 무선 통신 모듈에 대해 익힐 수 있다.

    3. 아두이노 시리얼 모니터를 통해 간단한 문자를 송수신 할 수 있다 

 

▶ 코딩 :

코딩에 앞서, 'nRF24' 관련 라이브러리 파일이 필요하다. 
이를 깃허브를 통해 다운 받거나 아래 첨부파일로 다운받아서, 아두이노에서 추가해주어야 한다.

( 스케치IDE : 스케치 》 라이브러리 포함하기 》 .ZIP 라이브러리 추가 》 다운받은 라이브러리 선택.  끝 ) 

RF24-master.zip
0.36MB

깃 허브 직접 다운로드 :  https://github.com/nRF24/RF24

 

《송신기 코드》 아래 코드를 송신용 아두이노에 업로드 시킨다.

 

#include  <SPI.h>
#include  <nRF24L01.h>
#include  <RF24.h>
RF24 radio(7, 8); // SPI통신을 위한 (CE, CSN) 핀 선언
const byte address[6] = "00001"; // 송신기와 수신기를 동일한 값으로 주소 설정함(5자리)
void setup() {
  radio.begin();
  radio.openWritingPipe(address); // 데이터를 보낼 수신 주소를 설정
  radio.setPALevel(RF24_PA_MIN); // 송신거리에 따른, 전원공급 파워레벨 설정
//(최소) RF24_PA_MIN → RF24_PA_LOW  RF24_PA_HIGH  RF24_PA_MAX (최대) 설정가능
//송신이 약하다고 판단될 경우 nRF24모듈의 GND와 3.3V 단자에 전해콘덴서(10uF이상:+를3.3V연결)사용권장

  radio.stopListening();  // 모듈을 송신기로 설정
}
void loop() {
  const char text[] = "(From) nRF24 Tx : Hello World!"; // 송신할 문자
  radio.write(&text, sizeof(text));   // 위 문자를 문자 길이 만큼 송출함
  delay(1000);
}

 

《수신기 코드》 아래 코드를 수신용 아두이노에 업로드 시킨다.

#include  <SPI.h>
#include  <nRF24L01.h>
#include  <RF24.h>
RF24 radio(7, 8);     // SPI통신을 위한 (CE, CSN) 핀 선언
const byte address[6] = "00001"; // 송신기와 수신기가 동일한 값으로 주소 설정함(5자리)
void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);  // 데이터를 받을 송신기 주소를 설정
  radio.setPALevel(RF24_PA_MIN);   // 송신거리에 따른, 전원공급 파워레벨 설정
//(최소) RF24_PA_MIN → RF24_PA_LOW  RF24_PA_HIGH  RF24_PA_MAX (최대) 설정가능 
//송신이 약하다고 판단될 경우 nRF24모듈의 GND와 3.3V 단자에 전해콘덴서(10uF이상:+를3.3V연결)사용권장 
  radio.startListening();   // 모듈을 수신기(상태)로 설정
}
void loop() {
  if (radio.available()) {
    char text[32] = "";   // 데이터를 수신 받을 변수 설정
    radio.read(&text, sizeof(text));  // 수신되는 데이터 길이만큼 읽어 저장
    Serial.println(text);
  }
}

▶ 코드 다운로드 : 

nRF24 송신-수신 코드.zip
0.00MB

 

▶ 회로 동작(설명) 영상 :

(YouTube : 1080P 고화질로 보기)

https://youtu.be/5Q_yJY5bj4w

 

(카카오로 보기)

 

반응형
반응형

【 아두이노ProMini#2 초소형 블루투스 리모컨 만들기! for RC CAR ( Arduino Pro Mini) 

 지난시간, 블루투스 조이스틱으로 제어되는 소형 미니카를 만들어 보았다. 하지만 무언가 아쉽다. 아두이노 우노로 리모컨을 만들다 보니 크기가 거의 미니카와 차이 없을 정도로 크게 느껴졌다. 그래서 이번엔 아두이노 프로미니를 이용해서 한 손에 쏙들어가서 컨트롤 할 수 있도록 작게 만들어보려한다. 앞선 실습을 진행했다면 무난하게 만들 수 있을 것이다.  
(필요한 경우, 선수학습 부분을 참고하면 문제 없을 것이다)

 Let's get it~!

 

▶ 선수학습 :

    1. [아두이노 모듈#14] 조이스틱 Joystick 사용하기 #1 ☜ (클릭)

    2. [아두이노 모듈#6] 조이스틱 미니카 만들기 (유선 미니카 기본 참조)  ☜ (클릭)

    3. [아두이노 Proj#6]  선없는 무선 미니카 만들기 (무선 미니카 참조) ☜ (클릭)

    4. [아두이노 모듈#16] 아두이노... 블루투스통신 (블루투스 설정법 참조) ☜ (클릭)

    5. [아두이노 모듈#18] 아두이노... 블루투스통신 (블루투스 제어법 참조) ☜ (클릭)

    6. [아두이노 Promini#1] 아두이노 프로미니 사용하기(프로미니 사용법 참조) ☜ (클릭)

 

▶ 실습 회로 도면 :

▶ 실습목표  :  

    1. 프로미니 보드에 대해 이해하고 기본 사용법을 익힐 수 있다.

    2. 프로미니의 UART 통신을 위한 FTDI사의 FT232RL 모듈 사용법을 익힐 수 있다.

    3. 소형베터리 사용하며 작은 프로토타입의 작품을 만들어 볼 수 있다. 

 


▶ 코딩 :

 

/*  블루투스 조이스틱 조정기 만들기        */
#include  <SofrwareSerial.h>
SoftwareSerial BTSerial(2, 3);    // BTSerial(Rx, Tx)
int BTstates=0;       // 블루투스 신호 상태 저장용 변수
const int X_AXIS =0;    //마우스 X 축 (A0)
const int Y_AXIS =1;    //마우스 Y 축 (A1) 
int xVal=0;
int yVal=0;

void setup() {
  BTSerial.begin(9600);  
  Serial.begin(9600);
}

void loop() {  
  xVal=map(analogRead(X_AXIS),0,1023,100,0); //x축값 읽어 저장 
  yVal=map(analogRead(Y_AXIS),0,1023,300,200); //Y축값 읽어 저장
  
  // 모터 전진 //
  if (xVal >= 60 && yVal >= 225 && yVal <=275)  { 
    BTSerial.write('f');
    Serial.println('f');
  }
  
  // 모터 후진 //
  else if (xVal <= 40 && yVal >= 225 && yVal <=275)  { 
    BTSerial.write('b');
    Serial.println('b');
  }
  
  // 모터 좌회전 //
  else if (yVal <= 240 && xVal >= 25 && xVal <= 75)  { 
    BTSerial.write('l');
    Serial.println('l');
  }

  // 모터 우회전 //
  else if (yVal >= 260 && xVal >= 25 && xVal <= 75)  { 
    BTSerial.write('r');
    Serial.println('r');
  }

 else { 
    BTSerial.write('s');
    Serial.print('s');
  }
  delay(100); 
}

 

 

▶ 코드 다운로드 :

04_Blue_Joystick.zip
0.00MB

▶ 회로 동작 영상 :

(YouTube : 1080P 고화질로 보기)

https://youtu.be/XG2exuDnex8

 

<카카오로 보기>

 

 

 

반응형