Chi tiết đặt lệnh AT cho module HC05, xem chi tiết ở link sau: http://tambkstar.blogspot.com/2015/08/at-lenh-at-cho-hc05.html
Về cách thức điều khiển thiết bị bằng SmartPhone bằng các dòng vi điều khiển thì hoàn toàn như nhau. Sử dụng giao tiếp UART của vi điều khiển và module bluetooth HC05 (mặc định mật khẩu kết nối là 1234, tốc độ baud là 9600: thay đổi bằng đặt lệnh AT).
Với dòng MSP của hãng TI, đây là loại vi xử lý 8 bit, tích hợp sẵn trên kit, sử dụng IDE là energia (sử dụng hoàn toàn giống như arduino).
Code full, liên hệ : DoAnDienTu
Link video test: https://www.youtube.com/watch?v=GKC4KlrqGco
Thứ Sáu, 21 tháng 8, 2015
Thứ Sáu, 7 tháng 8, 2015
CONTROLLER PS2 AND HC05 WITH ATMEGA8 (ROBOCON 2015)
//Code phat
#include <avr/io.h>
#include <util/delay.h>
//Ham gui du lieu
uint8_t TransmitByte(uint8_t chr)
{
while((UCSRA&(1<<UDRE)) == 0); //thoai vong lap : thanh ghi UDR trong
UDR=chr;
}
main()
{
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
/* f=8Hz, toc do baud=57600*/
UBRRH=0x00;
UBRRL=0x08;
DDRC=0x00;
PORTC=0xFF;
while(1)
{
if((PINC & _BV(PC4))==0)
{
_delay_ms(10);
if((PINC & _BV(PC4))==0)
{
TransmitByte('1');
while((PINC & _BV(PC4))==0);
}
}
if((PINC & _BV(PC5))==0)
{
_delay_ms(10);
if((PINC & _BV(PC5))==0)
{
TransmitByte('2');
while((PINC & _BV(PC5))==0);
}
}
}
}
#include <avr/io.h>
#include <util/delay.h>
//Ham gui du lieu
uint8_t TransmitByte(uint8_t chr)
{
while((UCSRA&(1<<UDRE)) == 0); //thoai vong lap : thanh ghi UDR trong
UDR=chr;
}
main()
{
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
/* f=8Hz, toc do baud=57600*/
UBRRH=0x00;
UBRRL=0x08;
DDRC=0x00;
PORTC=0xFF;
while(1)
{
if((PINC & _BV(PC4))==0)
{
_delay_ms(10);
if((PINC & _BV(PC4))==0)
{
TransmitByte('1');
while((PINC & _BV(PC4))==0);
}
}
if((PINC & _BV(PC5))==0)
{
_delay_ms(10);
if((PINC & _BV(PC5))==0)
{
TransmitByte('2');
while((PINC & _BV(PC5))==0);
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
//Code thu
#include <avr/io.h>
#include <util/delay.h>
uint8_t ReceiveByte()
{
while((UCSRA&(1<<RXC)) == 0);
return UDR;
}
main()
{
uint8_t Ma_Lenh;
UCSRA=0x00;
UCSRB=0x18; //RXEN=TXEN=1
UCSRC=0x86; //URSEL=UCSZ1=UCSZ0=1
/* f=8MHz, toc do baud=9600 */
UBRRH=0x00;
UBRRL=0x08;
DDRC=0xFF;
while (1)
{
Ma_Lenh = ReceiveByte();
switch(Ma_Lenh)
{
case 'F': {PORTC|=(1<<PC4);}break;
case 'B': {PORTC&=~(1<<PC4);}break;
}
// Place your code here
}
}
//////////////////////////////////
Linktest TamBKSTAR
Thứ Tư, 5 tháng 8, 2015
Giao tiếp cảm biến MPU6050 với vi điều khiển
1
Giới
Thiệu.
-
Cảm biến MPU6050 là cảm biến góc, con quay hổi chuyển với 3 giá trị tọa
độ và 3 giá trị gia tốc.
- Ngoài ra MPU6050 còn có 1 đơn vị
tăng tốc phần cứng chuyên xử lý tín hiệu(Digital Motion Processor-DMP) do cảm
biến thu thập và thức hiện các tính toán cần thiết. Điều này giúp giảm bớt đáng
kể phần xử lý tính toán của vi điều khiển, cải thiện tốc độ xử lý và cho ra phản
hồi nhanh hơn. Đây chính là 1 điểm khác biệt đáng kể của MPU6050 so với các cảm
biến gia tốc và gyro khác.
Thông số kỹ thuật của module MPU6050:
Ø Điện áp hoạt động : 5V
Ø Giao tiếp I2C
Ø Độ phân giải góc +250 500 1000 2000 dps
Ø Độ phân giải gia tốc ±2 ±4 ±8 ±16g
Số thứ tự
|
Tên chân
|
Chức năng
|
1
|
VCC
|
Nối nguồn 5V
|
2
|
GND
|
Nối mass nguồn
5V
|
3
|
SCL
|
Chân xung nhịp
giao tiếp I2C (5V)
|
4
|
SDA
|
Chân data
giao tiếp I2C (5V)
|
5
|
XDA
|
Chân data
giao tiếp I2C (3.3V)
|
6
|
XCL
|
Chân xung nhịp
giao tiếp I2C (3.3V)
|
7
|
ADO
|
Kéo đã xuống
GND, địa chỉ SLAVE của MPU6050 là 0x68
|
8
|
INT
|
Sử dụng cho
ngắt ngoài
|
1 Phương Thức Giao Tiếp.
Ø Giao tiếp MPU6050 với
vi điều khiển: Giao tiếp I2C.
-Sử dụng 2 chân SCL và SDA, hỗ trợ hầu hết trên các vi điều
khiển.
-Trên module đã có sẵn trở
treo dương đối với chân SCL và SDA.
Code mẫu (với ATMEGA32)
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <math.h>
#include "lcd.h"
#include "mpu6050.h"
#define UART_BAUD_RATE 57600 //toc do baud, truyen uart len PC
#include "uart.h"
void convert (long *temp_data, unsigned char x, unsigned char y) //Lay 1 so sau dau phay
{
// unsigned char k;
move_LCD(y,x);
if((*temp_data)<0) //bit dau
{
*temp_data=-(*temp_data);
putChar_LCD('-');
}
else putChar_LCD('+');
// k=((*temp_data) % 100000000000)/10000000000+48;
putChar_LCD(((*temp_data) % 1000000000)/100000000+48); //Lay MSB chuyen doi sang so, in len LCD
putChar_LCD('.');
putChar_LCD((*temp_data%100000000)/10000000+48); //Lay bit cao thu 2, in len LCD
}
int main(void) {
#if MPU6050_GETATTITUDE == 1 || MPU6050_GETATTITUDE == 2 //lay toa do va gia toc
long *ptr = 0;
double qw = 1.0f;
double qx = 0.0f;
double qy = 0.0f;
double qz = 0.0f;
double roll = 0.0f;
double pitch = 0.0f;
double yaw = 0.0f;
#endif
uart_init(UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU)); //khoi tao uart
init_LCD();
clr_LCD();
print_LCD("Linhkien69.vn");
_delay_ms(1000);
clr_LCD();
//init interrupt
sei(); //su dung ngat neu dung chan INT (connect toi INT0), 1 ngat xay ra khi doc data
//init mpu6050
mpu6050_init(); //Khoi tao mpu
_delay_ms(50);
while(1) {
#if MPU6050_GETATTITUDE == 1 || MPU6050_GETATTITUDE == 2
mpu6050_getQuaternion(&qw, &qx, &qy, &qz); //Lay gia tri toa do
mpu6050_getRollPitchYaw(&roll, &pitch, &yaw); //Lay gia tri gia toc
_delay_ms(10);
_delay_ms(10);
/* Lay toa do va gia toc, in len LCD va truyen uart len PC */
// toa do
ptr = (long *)(&qw);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);
ptr = (long *)(&qx);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);
move_LCD(1,1);
print_LCD("A");
convert (ptr,3,1);
ptr = (long *)(&qy);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);
convert (ptr,8,1);
ptr = (long *)(&qz);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);
convert (ptr,13,1);
//gia toc
ptr = (long *)(&roll);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);
move_LCD(2,1);
print_LCD("G");
convert (ptr,3,2);
ptr = (long *)(&pitch);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);
convert (ptr,8,2);
ptr = (long *)(&yaw);
uart_putc(*ptr);
uart_putc(*ptr>>8);
uart_putc(*ptr>>16);
uart_putc(*ptr>>24);
convert (ptr,13,2);
uart_putc('\n');
// _delay_ms(30);
#endif
}
}
Chi tiết tại link: TamBKSTAR
Đặt lệnh AT cho HC05
Đặt lệnh AT
cho HC05:
Dùng PL2303:
-Cắm nguồn
5V, GND, TX,RX với dây đỏ là 5V, đen là GND, TX nối dây trắng, RX nối dây xanh
lá, KEY nối GND
-Cắm vào máy tính, nối KEY lên 3.3V (ở ngay trên HC05 có chân 3.3V)
-Cắm vào máy tính, nối KEY lên 3.3V (ở ngay trên HC05 có chân 3.3V)
-Mở phần mềm
dc download ở đây TamBKSTAR
-Chuyển sang tab serial rồi chọn cổng COM (vào manage máy tính để xem PL2303 ở cổng nào rồi chọn nhé), Baud là 38400, datasize là 8 bit, parity None, Handshake OFF, mode Free. Rồi ấn OPEN
-Bắt đầu đặt lệnh
MASTER:
-Chuyển sang tab serial rồi chọn cổng COM (vào manage máy tính để xem PL2303 ở cổng nào rồi chọn nhé), Baud là 38400, datasize là 8 bit, parity None, Handshake OFF, mode Free. Rồi ấn OPEN
-Bắt đầu đặt lệnh
MASTER:
-Gõ AT rồi ấn
SEND, hiện OK là dc, nếu hiên ERROR, ấn tiếp lần nữa
-Gõ AT+ORGL,
ấn SEND
-Gõ
AT+RMAAD, ấn SEND
-Gõ AT+NAME=
MASTER (có thể đổi tên khác, ko nhất thiết MASTER)
-Gõ
AT+UART=57600,0,0 (trong code mình để baud là 57600), ấn SEND
-Gõ
AT+PSWD=abcd (abcd là số nhé), ấn SEND
-Gõ AT+ROLE=1, ấn SEND
-Gõ AT+ROLE=1, ấn SEND
-Gõ AT+CMODE=1, ấn SEND (Kết nối vs mọi module kể cả khác địa chỉ, miễn cùng PSWD)
-Gõ AT+INIT,
ấn SEND để master bắt đầu tìm kiếm
-Gõ AT+INQ, ấn
SEND
SLAVE:
-AT, ấn SEND
-AT+NAME=SLAVE,
ấn SEND, đặt tên
-AT+UART=57600,0,0,
ấn SEND
-AT+PSWD=abcd,
ấn SEND, phải giống vs MASTER nếu muốn kết nối 2 cái
-AT+ROLE=0, ấn
SEND, chế độ SLAVE
//////////////////////////////////////////////
Cắm nguồn 5V
cho 2 module HC05, chưa cần kết nối VĐK, nếu đèn 2 module nháy cùng tần số,
nháy cách khoảng 1s là kết nối OK, giờ chỉ cần kết nối VĐK vs cùng tốc độ
baudrate là có thể truyền nhận bình thường.
Đăng ký:
Bài đăng (Atom)