0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于單片機(jī)的兒童防丟失系統(tǒng)設(shè)計(jì)

精通單片機(jī)與嵌入式 ? 來(lái)源:精通單片機(jī)與嵌入式 ? 2023-12-04 09:06 ? 次閱讀

功能

(1)通過(guò)LCD12864顯示GPS模塊的經(jīng)緯度數(shù)據(jù);

(2)可設(shè)定當(dāng)前的定位位置,自動(dòng)計(jì)算與設(shè)定位置的距離,當(dāng)檢測(cè)到位置超過(guò)設(shè)定位置200M時(shí),通過(guò)GPRS模塊發(fā)送報(bào)警信息;

(3)報(bào)警時(shí)通過(guò)通過(guò)蜂鳴器發(fā)出警報(bào);

(4)根據(jù)位置自動(dòng)計(jì)算定位的距離,當(dāng)找到兒童時(shí),成人可主動(dòng)關(guān)閉警報(bào)器;

(5)可實(shí)現(xiàn)“一一鍵報(bào)警”功能,當(dāng)按下按鍵時(shí),主動(dòng)發(fā)送當(dāng)前的位置給設(shè)定的手機(jī)號(hào);

(6)當(dāng)找到兒童時(shí),可手動(dòng)取消報(bào)警。

系統(tǒng)框圖

fbae1714-9234-11ee-939d-92fbcf53809c.png

原理圖

fc991804-9234-11ee-939d-92fbcf53809c.png

程序源代碼

#include  "project.h"
unsigned char ucMode = 0;
unsigned char xdata Longitude[13] = "E:";  //保存經(jīng)度數(shù)據(jù)
unsigned char xdata Latitude[13] = "N:";//保存緯度數(shù)據(jù)
bit PosSuc = 0;  //定位成功的標(biāo)志,為1時(shí)表示定位成功,為0表示定位不成功
double fLongitude = 0.0;   //保存浮點(diǎn)型數(shù)據(jù),經(jīng)度
double fLatitude = 0.0;    //保存浮點(diǎn)型數(shù)據(jù), 緯度


double fLongitudeLoa = 0.0; //當(dāng)前所在地的經(jīng)度
double fLatitudeLoa = 0.0;    //當(dāng)前所在地的緯度


    double Dis = 0.0;  
#define PI                      3.1415926
#define EARTH_RADIUS            6378.004        //地球近似半徑
 
// 求弧度
double radian(double d)
{
    return d * PI / 180.0;   //角度1? = π / 180
}
 
//計(jì)算距離
double get_distance(double lat1, double lng1, double lat2, double lng2)
{
    xdata double radLat1 = radian(lat1);
    xdata double radLat2 = radian(lat2);
    xdata double a = radLat1 - radLat2;
    xdata double b = radian(lng1) - radian(lng2);
     
    xdata double dst = 2 * asin((sqrt(pow(sin(a / 2), 2) + cos(radLat1) * cos(radLat2) * pow(sin(b / 2), 2) )));
     
    dst = dst * EARTH_RADIUS;
    //dst= round(dst * 10000) / 10000;
    return dst;
}






/*********************************************************************************************************
** 函數(shù)名稱:      ProcRxBuf
** 函數(shù)描述:      處理GPS接收的數(shù)據(jù)
** 輸入參數(shù):      NONE
** 輸出參數(shù):      NONE
** 返回值:        NONE
*********************************************************************************************************/
void ProcRxBuf(void)
{
    if(RxFlag == 1)  //數(shù)據(jù)接收完畢
    {
        
        EA = 0;
        RxFlag = 0;
        
        if(RxBuf[17] == 'A')
        {      
            ucMode = 1;
            if(PosSuc == 0)   //初次定位成功
            {
                
                fLongitudeLoa = fLongitude; //當(dāng)前所在地的經(jīng)度
                fLatitudeLoa = fLatitude;    //當(dāng)前所在地的緯度
                fLongitudeLoa = fLongitude; //當(dāng)前所在地的經(jīng)度
                fLatitudeLoa = fLatitude;    //當(dāng)前所在地的緯度   
                PosSuc = 1;
            }
            LCD_Location(1,0);
            LCD_Display("  GPS 定位成功  ");
            PosSuc = 1;  //定位成功標(biāo)志置1
            Latitude[0] = 'N';
            Latitude[1] = ':';
            fLatitude = (double)atof(&RxBuf[21]) / (double)60.0 + (RxBuf[19] - 0x30)*10 + (RxBuf[20]- 0x30);
            Latitude[12] = 0;
            Latitude[2] =  (unsigned long)fLatitude %100 / 10 + 0x30;
            Latitude[3] =  (unsigned long)fLatitude % 10+ 0x30;
            Latitude[4] =  '.';
            Latitude[5] =  (unsigned long)(fLatitude * 10) % 10+ 0x30;
            Latitude[6] =  (unsigned long)(fLatitude * 100) % 10+ 0x30;
            Latitude[7] =  (unsigned long)(fLatitude * 1000) % 10+ 0x30;
            Latitude[8] =  (unsigned long)(fLatitude * 10000) % 10+ 0x30;
            Latitude[9] =  (unsigned long)(fLatitude * 100000) % 10+ 0x30;
            Latitude[10] =  (unsigned long)(fLatitude * 1000000) % 10+ 0x30;
            Latitude[11] =  (unsigned long)(fLatitude * 10000000) % 10+ 0x30;
            Latitude[12] = 0;          


            Longitude[0] = 'E';
            Longitude[1] = ':';   
            fLongitude = (double)atof(&RxBuf[34]) / (double)60.0 + (RxBuf[31] - 0x30)*100 + (RxBuf[32]- 0x30) * 10 + (RxBuf[33]- 0x30);
            Longitude[2] =  (unsigned long)fLongitude / 100 + 0x30;
            Longitude[3] =  (unsigned long)fLongitude %100 / 10 + 0x30;
            Longitude[4] =  (unsigned long)fLongitude % 10+ 0x30;
            Longitude[5] =  '.';
            Longitude[6] =  (unsigned long)(fLongitude * 10) % 10+ 0x30;
            Longitude[7] =  (unsigned long)(fLongitude * 100) % 10+ 0x30;
            Longitude[8] =  (unsigned long)(fLongitude * 1000) % 10+ 0x30;
            Longitude[9] =  (unsigned long)(fLongitude * 10000) % 10+ 0x30;
            Longitude[10] =  (unsigned long)(fLongitude * 100000) % 10+ 0x30;
            Longitude[11] =  (unsigned long)(fLongitude * 1000000) % 10+ 0x30;
            Longitude[12] = 0;    
        }
        else
        {
            PosSuc = 0;   //定位成功標(biāo)志清零
        }
        
        memset(RxBuf,0,80);
        RxWP = 0;
        EA = 1;
    }
}


bit Key1Up = 1;  //按鍵松開標(biāo)志,為1時(shí)表示按鍵已經(jīng)松開,為0時(shí),表示按鍵未松開
sbit KEY1 = P3^4;  //按鍵,按下按鍵時(shí)發(fā)送定位信息到手機(jī)
sbit KEY2 = P3^5;  //按鍵,按下按鍵時(shí)存儲(chǔ)正確的定位信息


/*********************************************************************************************************
** 函數(shù)名稱:      SendHelp
** 函數(shù)描述:      發(fā)送求救信息
** 輸入?yún)?shù):      NONE
** 輸出參數(shù):      NONE
** 返回值:        NONE
*********************************************************************************************************/
void SendHelp(double Dis)
{
    unsigned char i = 0;
    xdata unsigned char ucTemp[45] = {0};


    for(i = 0; i < 13;i++)
    {
        ucTemp[i] = Latitude[i];
    }
    for(i = 0; i < 13; i++)
    {
        ucTemp[i+12] = Longitude[i];
    }
    strcat(ucTemp,"distance=");
    ucTemp[33] = ((unsigned long)Dis % 100 /  10 + 0x30);
    ucTemp[34] = ((unsigned long)Dis %10 + 0x30);
    ucTemp[35] = ('.');
    ucTemp[36] = ((unsigned long)(Dis * 10) %  10 + 0x30);
    ucTemp[37] = ((unsigned long)(Dis * 100) %  10 + 0x30);
    ucTemp[38] = ((unsigned long)(Dis * 1000) %  10 + 0x30);
    ucTemp[39] = 'k';
    ucTemp[40] = 'm';
    SendSMS(ucTemp,41);  //發(fā)送手機(jī)短信 
    DelayMs(1000);
    UART1_ClearRxBuf();
}


/*********************************************************************************************************
** 函數(shù)名稱:      ProcKey
** 函數(shù)描述:      處理按鍵函數(shù),按鍵按下時(shí)發(fā)送定位信息到手機(jī)
** 輸入?yún)?shù):      NONE
** 輸出參數(shù):      NONE
** 返回值:        NONE
*********************************************************************************************************/
void ProcKey1(void)
{    


    if( (Key1Up == 1) && (KEY1 == 0))  //按鍵處于松開狀態(tài)時(shí),按鍵按下,定位完成才判斷按鍵
    {
        DelayMs(20);   //防抖動(dòng)延時(shí)
        if(KEY1 == 0)
        {       
            Key1Up = 0;            
            if(PosSuc == 1)
            {            
                SendHelp(Dis);
            }
            else if(PosSuc == 0)
            {
                LCD_Location(3,0);
                LCD_Display("請(qǐng)等定位成功    ");
                DelayMs(2000);
                LCD_Location(3,0);
                LCD_Display("                ");
            }
        }
    }    
    else if(KEY1 == 1)
    {
        Key1Up = 1;
    }
}

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6030

    文章

    44489

    瀏覽量

    631974
  • gps
    gps
    +關(guān)注

    關(guān)注

    22

    文章

    2880

    瀏覽量

    165925
  • GPRS
    +關(guān)注

    關(guān)注

    21

    文章

    983

    瀏覽量

    129300
  • 程序
    +關(guān)注

    關(guān)注

    116

    文章

    3756

    瀏覽量

    80751

原文標(biāo)題:【011】基于51單片機(jī)、GPS、GPRS的兒童防丟失系統(tǒng)(源代碼、原理圖、參考論文、演示視頻等)

文章出處:【微信號(hào):精通單片機(jī)與嵌入式,微信公眾號(hào):精通單片機(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于AT89C51單片機(jī)追尾系統(tǒng)

    基于AT89C51單片機(jī)追尾系統(tǒng)
    發(fā)表于 08-14 11:35

    基于單片機(jī)的智能小區(qū)安系統(tǒng)

    求基于單片機(jī)的智能小區(qū)安系統(tǒng) 論文及原理圖呀 有償也行
    發(fā)表于 04-16 23:01

    如何去實(shí)現(xiàn)一種基于單片機(jī)的智能安系統(tǒng)設(shè)計(jì)

    設(shè)計(jì)簡(jiǎn)介:本設(shè)計(jì)是基于單片機(jī)的智能安系統(tǒng),主要實(shí)現(xiàn)以下功能:可通過(guò)LCD1602安狀態(tài)和是否有人;可通過(guò)按鍵控制安狀態(tài);通過(guò)人體紅外監(jiān)
    發(fā)表于 02-18 06:44

    如何去實(shí)現(xiàn)一種基于單片機(jī)酒駕系統(tǒng)設(shè)計(jì)

    本設(shè)計(jì)是基于單片機(jī)酒駕系統(tǒng),主要實(shí)現(xiàn)以下功能:可通過(guò)LCD1602顯示車內(nèi)酒精濃度;可通過(guò)按鍵調(diào)整酒精濃度最大值;通過(guò)人體紅外檢測(cè)是否有人;通過(guò)MQ-3檢測(cè)酒精濃度。標(biāo)簽:51單片機(jī)
    發(fā)表于 02-18 07:51

    Silabs的Flash單片機(jī)丟失程序原因

    本內(nèi)容介紹了Silabs的Flash單片機(jī)丟失程序原因
    發(fā)表于 06-14 15:07 ?122次下載
    Silabs的Flash<b class='flag-5'>單片機(jī)</b><b class='flag-5'>丟失</b>程序原因

    基于STC12單片機(jī)的電梯系統(tǒng)設(shè)計(jì)

    介紹了基于STC12單片機(jī)的電梯系統(tǒng)設(shè)計(jì),以STC12C5A60S2-351單片機(jī)作為控制器,紅外測(cè)距傳感器和加速傳感器將測(cè)得數(shù)據(jù)發(fā)送到單片機(jī)
    發(fā)表于 12-19 16:57 ?2593次閱讀
    基于STC12<b class='flag-5'>單片機(jī)</b>的電梯<b class='flag-5'>防</b>墜<b class='flag-5'>系統(tǒng)</b>設(shè)計(jì)

    如何使用GPS和GSM進(jìn)行兒童走失的單片機(jī)定位系統(tǒng)設(shè)計(jì)

    鑒于傳統(tǒng)兒童走失系統(tǒng)使用的局限性 , 設(shè)計(jì)一種利用單片機(jī)控制 、 GPS 定 位 和 GSM 通 信 等 技術(shù)的兒童
    發(fā)表于 03-25 08:00 ?30次下載
    如何使用GPS和GSM進(jìn)行<b class='flag-5'>兒童</b><b class='flag-5'>防</b>走失的<b class='flag-5'>單片機(jī)</b>定位<b class='flag-5'>系統(tǒng)</b>設(shè)計(jì)

    基于單片機(jī)的智能安系統(tǒng)

    設(shè)計(jì)簡(jiǎn)介:本設(shè)計(jì)是基于單片機(jī)的智能安系統(tǒng),主要實(shí)現(xiàn)以下功能:可通過(guò)LCD1602安狀態(tài)和是否有人; 可通過(guò)按鍵控制安狀態(tài); 通過(guò)人體紅
    發(fā)表于 12-23 19:31 ?26次下載
    基于<b class='flag-5'>單片機(jī)</b>的智能安<b class='flag-5'>防</b><b class='flag-5'>系統(tǒng)</b>

    基于單片機(jī)酒駕系統(tǒng)

    本設(shè)計(jì)是基于單片機(jī)酒駕系統(tǒng),主要實(shí)現(xiàn)以下功能:可通過(guò)LCD1602顯示車內(nèi)酒精濃度; 可通過(guò)按鍵調(diào)整酒精濃度最大值; 通過(guò)人體紅外檢測(cè)是否有人; 通過(guò)MQ-3檢測(cè)酒精濃度。標(biāo)簽:51單片機(jī)
    發(fā)表于 12-23 19:32 ?3次下載
    基于<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>防</b>酒駕<b class='flag-5'>系統(tǒng)</b>

    基于51單片機(jī)酒駕檢測(cè)系統(tǒng)設(shè)計(jì)Proteus仿真

    基于51單片機(jī)酒駕檢測(cè)系統(tǒng)設(shè)計(jì)Proteus仿真
    發(fā)表于 12-30 09:33 ?27次下載

    基于STM32單片機(jī)丟失手環(huán)系統(tǒng)設(shè)計(jì)

    通過(guò)STM32單片機(jī)進(jìn)行主控,兩個(gè)NRF024L01進(jìn)行數(shù)據(jù)的發(fā)射和接收,發(fā)射端的位置信息首先會(huì)在顯示屏上進(jìn)行顯示,并且會(huì)通過(guò)無(wú)線模塊將位置信息傳輸?shù)浇邮斩说娘@示屏上進(jìn)行顯示。系統(tǒng)內(nèi)為了實(shí)現(xiàn)丟功能
    的頭像 發(fā)表于 08-08 15:14 ?1784次閱讀

    基于51單片機(jī)的汽車碰撞系統(tǒng)設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于51單片機(jī)的汽車碰撞系統(tǒng)設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-08 09:54 ?0次下載
    基于51<b class='flag-5'>單片機(jī)</b>的汽車<b class='flag-5'>防</b>碰撞<b class='flag-5'>系統(tǒng)</b>設(shè)計(jì)

    單片機(jī)與GSM的實(shí)用型安報(bào)警系統(tǒng)的設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《單片機(jī)與GSM的實(shí)用型安報(bào)警系統(tǒng)的設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-30 10:29 ?0次下載
    <b class='flag-5'>單片機(jī)</b>與GSM的實(shí)用型安<b class='flag-5'>防</b>報(bào)警<b class='flag-5'>系統(tǒng)</b>的設(shè)計(jì)

    基于單片機(jī)的汽車碰撞系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于單片機(jī)的汽車碰撞系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).rar》資料免費(fèi)下載
    發(fā)表于 01-02 10:04 ?1次下載

    基于單片機(jī)的汽車碰撞系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于單片機(jī)的汽車碰撞系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).rar》資料免費(fèi)下載
    發(fā)表于 01-12 10:48 ?23次下載