이 프로젝트에서는 8051 마이크로 컨트롤러 와 블루투스 모듈을 사용하여 안드로이드 폰으로 제어되는 로봇 을 만들 것 입니다. 로봇은 DC 모터를 사용하여 설계되었으며 DC 모터의 방향은 Android 애플리케이션에서 수신 한 명령에 의해 제어됩니다. 로봇의 상태가 Android 앱으로 다시 전송됩니다. 이 프로젝트는 HC-05 Bluetooth 모듈과 8051 마이크로 컨트롤러의 인터페이스에도 도움이 될 것입니다. 우리는 이미 Bluetooth 모듈을 사용하여 8051로 가전 제품을 제어했습니다.
필요한 구성 요소:
- 8051 마이크로 컨트롤러 (AT89S52)
- HC-05 블루투스 모듈
- L293D 모터 드라이버
- 로봇 섀시
- DC 모터 (2)
- 바퀴 (2)
- 캐스터 휠
- 점퍼 와이어
- 블루투스 단말기 안드로이드 앱
회로도:
8051 마이크로 컨트롤러:
8051 마이크로 컨트롤러는 128 바이트의 온칩 RAM, 4K 바이트의 온칩 ROM, 2 개의 타이머, 1 개의 직렬 포트 및 4 개의 8 비트 포트가있는 8 비트 마이크로 컨트롤러입니다. 8052 마이크로 컨트롤러는 8051 마이크로 컨트롤러의 확장입니다. 이 프로젝트에서는 AT89S52 마이크로 컨트롤러를 사용하고 있습니다. 아래 표는 8051 가족 구성원의 비교를 보여줍니다.
특색 |
8051 |
8052 |
ROM (바이트) |
4K |
8K |
RAM (바이트) |
128 |
256 |
타이머 |
2 |
삼 |
I / O 핀 |
32 |
32 |
직렬 포트 |
1 |
1 |
인터럽트 소스 |
6 |
8 |
HC-05 블루투스 모듈:
HC-05는 직렬 블루투스 모듈입니다. AT 명령을 사용하여 구성 할 수 있습니다. 세 가지 구성 (마스터, 슬레이브, 루프백)에서 작동 할 수 있습니다. 우리 프로젝트에서 우리는 그것을 노예로 사용할 것입니다. HC-05 모듈의 특징은 다음과 같습니다.
- 일반적인 -80dBm 감도.
- 기본 전송 속도: 9600bps, 8 데이터 비트, 1 정지 비트, 패리티 없음.
- 자동 페어링 PIN 코드: "1234"기본 PIN 코드
- 6 개의 핀이 있습니다.
- Vcc 및 Gnd 핀은 HC-05에 전원을 공급하는 데 사용됩니다.
- Tx 및 Rx 핀은 마이크로 컨트롤러와 통신하는 데 사용됩니다.
- HC-05 모듈 활성화를위한 핀을 활성화합니다. 낮 으면 모듈이 비활성화됩니다.
- 상태 핀은 상태 표시기 역할을합니다. 다른 Bluetooth 장치와 페어링 / 연결되지 않은 경우 LED가 계속 깜박입니다. 다른 Bluetooth 장치와 연결 / 페어링되면 LED가 2 초 동안 계속해서 깜박입니다.
L293D 모터 드라이버 IC:
L293D는 듀얼 H- 브리지 모터 드라이버 IC입니다. 이것은 전류 증폭기 역할을하며 L293D의 출력은 DC 모터를 구동합니다. 두 개의 내장 H 브리지 회로가 포함되어 있습니다. 공통 작동 모드에서는 두 개의 DC 모터를 양방향으로 동시에 구동 할 수 있습니다. 아래 표는 L293D IC의 핀 설명을 보여줍니다. 다음은 L293D 모터 드라이버를 사용하는 몇 가지 프로젝트입니다.
핀 설명
핀 번호 |
이름 |
함수 |
1 |
1,2 활성화 |
모터 1의 활성화 핀 |
2 |
입력 1 |
모터 1의 입력 1 |
삼 |
출력 1 |
모터 1의 출력 1 |
4 |
Gnd |
접지 (0V) |
5 |
Gnd |
접지 (0V) |
6 |
출력 2 |
모터 1의 출력 2 |
7 |
입력 2 |
모터 1의 입력 2 |
8 |
Vcc 2 |
모터 공급 전압 (5V) |
9 |
3,4 활성화 |
모터 1의 활성화 핀 |
10 |
입력 3 |
모터 2의 입력 1 |
11 |
출력 4 |
모터 2의 출력 1 |
12 |
Gnd |
접지 (0V) |
13 |
Gnd |
접지 (0V) |
14 |
출력 4 |
모터 2의 출력 2 |
15 |
입력 4 |
모터 2의 입력 2 |
16 |
Vcc 1 |
공급 전압 (5V) |
안드로이드 폰 제어 로봇의 작동:
이 스마트 폰 제어 로봇 에서 안드로이드 앱 사용자는 HC-05 모듈을 통해 8051 마이크로 컨트롤러로 데이터를 전송합니다. 수신 된 데이터는 8051 마이크로 컨트롤러에서 비교되고 그에 따라 결정이 내려집니다. 아래 표는 수신 된 문자에 따른 모터의 방향과 로봇의 상태를 보여줍니다.
받은 캐릭터 |
모터 1 |
모터 2 |
로봇 상태 |
에프 |
앞으로 |
앞으로 |
앞으로 이동 |
비 |
뒤로 |
뒤로 |
뒤로 이동 |
아르 자형 |
앞으로 |
뒤로 |
오른쪽으로 이동 |
엘 |
뒤로 |
앞으로 |
왼쪽으로 이동 |
에스 |
떨어져서 |
떨어져서 |
중지됨 |
블루투스 단말기 응용 프로그램은 우리가 블루투스 터미널을 에뮬레이션 할 수 있습니다. 이 앱은 양방향 통신을 지원하며이 앱은 대부분의 장치와 호환됩니다.
아래 단계는이 앱을 설치하고 사용하는 방법을 보여줍니다.
1. 안드로이드 폰에 블루투스 단말기 앱을 다운로드하여 설치합니다. 앱은 아래 링크에서 다운로드 할 수 있습니다.
play.google.com/store/apps/details?id=ptah.apps.bluetoothterminal
2. 앱을 설치 한 후 앱을 열고 블루투스를 켭니다.
3. 장치를 선택하고 연결 옵션을 클릭합니다. 성공적으로 연결되면 HC-05 모듈로 데이터 전송을 시작할 수 있습니다.
아래의 코드 설명을 확인하여 필요한 모터를 회전시키기 위해 8051 마이크로 컨트롤러가 문자를 송수신하는 방법을 확인하십시오.
코드 설명:
이 프로젝트 의 전체 C 프로그램 및 데모 비디오 는이 프로젝트의 끝에 제공됩니다. 코드는 의미있는 작은 청크로 분할되어 아래에 설명되어 있습니다.
들어 L293D 8051 개 마이크로 컨트롤러와 인터페이스, 우리는 L293D 8051 마이크로 컨트롤러에 연결되는 핀을 정의해야합니다. 모터 1의 In1 핀은 P2.0에 연결되고, 모터 1의 In2 핀은 P2.1에 연결되고, 모터 2의 In1 핀은 P2.2에 연결되고, 모터 2의 In2 핀은 P2.3에 연결됩니다.
sbit m1f = P2 ^ 0; // motor1의 in1 핀 sbit m1b = P2 ^ 1; // motor1의 in2 핀 sbit m2f = P2 ^ 2; // motor2의 in1 핀 sbit m2b = P2 ^ 3; // motor2의 in2 핀
다음으로 프로그램에서 사용되는 몇 가지 기능 을 정의 해야합니다. 지연 기능은 지정된 시간 지연을 생성하는 데 사용됩니다. Txdata 기능은 직렬 포트를 통해 데이터를 전송하는 데 사용됩니다. Rxdata 기능은 직렬 포트에서 데이터를 수신하는 데 사용됩니다.
무효 지연 (unsigned int); // 지연 생성 기능 char rxdata (void); // 8051의 직렬 포트를 통해 문자를 수신하는 기능 void txdata (unsigned char); // 8051의 직렬 포트를 통해 문자를 보내는 기능
코드의이 부분에서는 직렬 통신을 위해 8051 마이크로 컨트롤러 를 구성 할 것 입니다. TMOD 레지스터는 타이머 1, 모드 2 (자동 다시로드)에 대해 0x20으로로드됩니다. SCON 레지스터는 8 데이터 비트, 1 정지 비트 및 수신 활성화에 대해 0x50으로로드됩니다. TH1 레지스터는 초당 9600 비트의 전송 속도에 대해 0xfd로로드됩니다. TR1 = 1은 타이머를 시작하는 데 사용됩니다.
TMOD = 0x20; SCON = 0x50; TH1 = 0xfd; TR1 = 1; 코드의이 부분에서 rxdata 함수 의 반환 된 문자는 추가 사용을 위해 변수 's'에 저장됩니다.
s = rxdata (); // hc-05 블루투스 모듈에서 직렬 데이터 수신
코드의이 부분에서는 수신 된 문자를 다른 방향에 대해 미리 할당 된 문자와 비교해야합니다. 수신 된 문자가 'f'이면 로봇은 앞으로 이동해야합니다. 이는 m1f, m2f 핀을 하이로, m1b, m2b 핀을 로우로 설정하여 수행됩니다. 이 작업이 완료되면 다음으로 로봇의 상태를 안드로이드 앱으로 보내야합니다. 이것은 txdata 함수 의 도움으로 수행 됩니다. 받은 다른 문자에 대해 동일한 프로세스가 반복되고 그에 따라 결정이 내려집니다. 표 1은 로봇의 이동 방향에 따른 m1f, m1b, m2f, m2b 값을 보여줍니다.
if (s == 'f') // 두 모터를 정방향으로 이동 {m1f = 1; 지연 (1); m1b = 0; 지연 (1); m2f = 1; 지연 (1); m2b = 0; 지연 (1); for (i = 0; msg1! = '\ 0'; i ++) // 블루투스를 통해 로봇의 상태를 안드로이드 앱으로 전송 {txdata (msg1); }}
m1f |
m1b |
m2f |
m2b |
모터 1 회전 |
모터 2 회전 |
로봇 상태 |
1 |
0 |
1 |
0 |
앞으로 |
앞으로 |
앞으로 나아가 다 |
0 |
1 |
0 |
1 |
역전 |
역전 |
뒤로 이동 |
1 |
0 |
0 |
1 |
앞으로 |
역전 |
오른쪽으로 이동 |
0 |
1 |
1 |
0 |
역전 |
앞으로 |
왼쪽으로 이동 |
0 |
0 |
0 |
0 |
중지 |
중지 |
중지 |
이것은 8051 마이크로 컨트롤러를 사용하여 4 개의 모터를 제어 함으로써 어떤 방향 으로든 로봇 카를 회전시킬 수 있다는 것 입니다. 이 로봇은 안드로이드 폰이 없다면 8051과 함께 DTMF를 사용하여 제어 할 수도 있습니다.
또한 여기에서 모든 로봇 프로젝트를 확인하십시오.