V Xây dựng một robot di động có trang bị camera toàn phương, cảm biến siêu âm, được điều khiển bởi vi điều khiển và máy vi tính. Robot có khả năng tự động di chuyển tránh vật cản dựa vào bản đồ siêu âm và bản đồ ảnh số.
Chương trình vi điều khiển Basic Stamp Bs2e tính khoảng cách tới vật cản trên cơ sở thu nhận tín hiệu phản xạ từ 8 cảm biến siêu âm rồi truyền nổi tiếp tới máy tính thông qua cổng COM với tốc độ 9600 baund, 8 bít dữ liệu, không có bít kiểm tra chằn lẻ.
kcachl VAR Word kcach2 VAR Word kcach3 VAR Word kcach4 VAR Word kcach5 VAR Word kcachó VAR Word kcach7 VAR Word kcachs VAR Word MAIN: 'Sonar 1 nhayl: tiepl: 'Sonar 2 PULSIN 4,l,kcach2 tiep2: 'Sonar 3
Vũ Tuấn Anh-Đại học Công Nghệ Luận văn tốt nghiệptiep3: tiep3: 'Sonar 4 ticp4: 'Sonar 5 ticp5: 'Sonar 6 PULSIN 9,l,kcach6 kcach6=kcach6/29 IE kcach6>256 THEN nhayó GOTO tiepó nhayó: nhay7: kcach7=0 ticp7: - 50
ticp8:
DEBUG CR,DEC kcachl," ",DEC kcach2," ",DEC kcach3,' kcach7," ",DEC kcach8
Truyen 8 byte, toc do baund 9600, moi byte co 8 bit du lieu Thong co bit kiem tra chan le
SEROUT 0,16468, [01]
SEROUT 0,16468, [01]
',DEC kcach4," ",DEC kcach5," ",DEC kcachó," ",DEC
Chương trình thu nhận và hiến thị khoảng cách, vẽ bản đồ siêu âm trên cơ sở số liệu
// ScrialDlg.cpp : implcmcntation filc
II
#include "stdaữ.h"
#include "Serial.h"
#include "SerialDlg.h"
Vũ Tuấn Anh-Đại học Công Nghệ Luận văn tốt nghiệp
// Dialog Data
// {{AFX_DAT A(C AboutDlg) cnurn { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated Virtual íunction overrides
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
//{{AFX_DATA_INIT(CAboutDlg)
//}} AFX_D AT A_IN IT
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
CSerialDlg::CSerialDlg(CWnd* pParent /*=NULL*/) : CDialog(CSerialDlg::IDD, pParent)
// DDX/DDV support
m_ed7 = 0; m_ed8 = 0; m_cd9 = 0; m_cd2 = 0; m_ed3 = 0; //}} AFX_DATA_INIT
// Note that LoadTcon does not require a subsequent Destroyĩcon in Win32 mhlcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
void CSerialDlg::DoDataExchange(CDataExchange* pDX)
CDialog: :DoDataExchange(pDX);
// {{AFX_DAT AMAP(CSerialDlg)
DDX_Control(pDX, IDC Stop, m cStop);
DDX_Control(pDX, IDC GetDistance, m cGet);
Vũ Tuấn Anh-Đại học Công Nghệ Luận văn tốt nghiệp
BOOL CSerialDlg::OnInitDialog()
inti,j;
CDialog::OnInitDialog();
// Add "About..." menu item to System menu.
// IDM_AB()UTBOX must be in the System command range.
ASSERT((IDM_AB()UTBOX & 0xFFF0) = IDM ABOUTBOX);
ASSERT(IDM ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE); if(pSysMenu != NULL) { CString strAboutMcnu; if(!(port 1 .OpcnPort("com6"))) { - 54
{
MessageBox("Cannot Coníígure Communication Port","Error",MB_OK+MB_ICONERROR); port 1 .CloscPortO;
}
else
{
i !(port 1. SetCommun icationTi meouts(0,100,0,0,0)))
{
MessageBox("Cannot Contlgure Communication Timeouts","Error",MB_OK+MB_ICONERROR); portl.ClosePort(); } else void CSerialDlg::OnPaint() {
Vũ Tuấn Anh-Đại học Công Nghệ Luận văn tốt nghiệp
{
CPaintDC dc(this); // device context for painting
ScndMcssagc(WMJCONERASEBKGND, (WPARAM) dc.GctSafcHdc(), 0);
// Draw the icon
dc.DrawIcon(x, y, m hlcon);
}
// The System calls this to obtain the cursor to display whilc the User drags // the minimized window.
void CSerialDlg::OnOK()
// TODO: Add cxtra validation hcrc if(!(port 1. WritcBytc('s')))
{
MessageBox("Cannot Write to Port","Error",MB_OK+MB_ICONERROR);
void CSerialDlg::()nTimer(UINT nlDEvent)
// TODO: Add your mcssagc handlcr codc hcrc and/or call dcfault //BYTE data[8];
int i;
port.ReadByte(data[0]); while (data[0]!=01)
{
port. ReadByte( data [0]);
} while (data[0]==01) { port.RcadBytc(data[0]); } //port. ReadByte(data2);
Vũ Tuấn Anh-Đại học Công Nghệ Luận văn tốt nghiệp
MessageBox("Cannot Coníìgure Communication Port","Error",MB_OK+MB_ĨCONERROR); port.ClosePort(); } clsc { if(!(port.SetCommunicationTimeouts( 0,100,0,0,0))) {
MessageBox("Cannot Contìgure Communication Timeouts","Error",MB_OK+MB_ICONERROR); } } void CSerialDlg::OnStop() void CSerialDlg::OnSt() { - 58-
{
MessageBox("Cannot Write to Port","Error",MB_OK+MB_ICONERROR);
}
void CSerialDlg::OnTl()
// TODO: Add your control notiíĩcation handler code here if( !(port 1. WriteByte(T)))
{
void CScrialDlg::OnFw()
void CSerialDlg::UpdateImage(BYTE *sonar)
Vũ Tuấn Anh-Đại học Công Nghệ Luận văn tốt nghiệp// int I,J,I0,I1,J0,J1; // int I,J,I0,I1,J0,J1; tloat k = 0.29;// 0.577; íloat COS=0.707; float tg30 = 0.577; // sonar[0] =100; // sonar[4] =100; // for(i=0;i<8;i++) // sonar[i] = 100;//(sonar[i]/4); /* for( i 1 = -4;i 1 <=4;i 1 ++)
for(j 1 =-2;j 1 <=2;j 1 ++) { i = i1+64; j=j 1+64; image[i][j] = 1; }*/ //sonar 0 if(sonar[0]>=6)
for(il= -(sonar[l]+2);il<= -sonar[l];il++)
}
{
for(jl= sonar[2];j 1<= sonar[2]+2;j 1++)
for(il= int(-(abs(jl))*k); il<= int((abs(jl))*k); il++)
if(sonar[3]>=6) i2 = (il+jl)*cos; i = i2 + 64; imagc[i]fj] = 1; if(sonar[4]>=6) { j =jl +64;
Vũ Tuấn Anh-Đại học Công Nghệ Luận văn tốt nghiệpif(sonar[5]>=6) if(sonar[5]>=6) { j2 = (jl-il)*cos; i = i2 + 64; J = j 2 + if(sonar[6]>=6) i = il +64; J = j l +64; if(sonar[7]>=6)
for(j 1= -sonar[6]-2;j 1<= -sonar[6];j 1++)
i = i2 + 64; j = j2 + 64;