久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8006|回復: 6
打印 上一主題 下一主題
收起左側

我的智能小車左側避障傳感器,一上電就有規律的閃爍(發光二極管),請問是什么原因?

[復制鏈接]
跳轉到指定樓層
樓主
我的智能小車左側避障傳感器,一上電就有規律的閃爍(發光二極管),請問是什么原因?

0.png (527.93 KB, 下載次數: 212)

0.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:202991 發表于 2017-5-20 22:19 | 只看該作者
這個是小車的原理圖

1.主板原理圖.pdf

105.15 KB, 下載次數: 7

2.傳感器底板.pdf

67.53 KB, 下載次數: 7

回復

使用道具 舉報

板凳
ID:202991 發表于 2017-5-20 22:24 | 只看該作者
  1. /**********************ZYWIFI0939C-WIFI機器人實驗板例程************************
  2. *  平臺:ZYWIFI0939C-WIFI機器人 + Keil U4 + STC89C52
  3. *  名稱:ZY-1智能小車參考程序
  4. *  公司:湖南智宇科教設備有限公司   
  5. *  編寫:智宇公司研發一部
  6. *  日期:2015-1-15
  7. *  交流:智能車QQ:261339276
  8. *  晶振:11.0592MHZ
  9. *  說明:免費開源,不提供源代碼分析
  10. *  硬件設置:要有自己動手能力,才能完成實驗
  11. *  使用說明:根據下面IO口自己用杜邦線連接各種模塊,可以自己修改各種模塊IO口
  12. *  視頻教程:本小車配套學習C語言詳細視頻教程,資料統一網盤下載
  13.    重點提示:本程序只做參考,不提供技術支持,請自己研究吸收。
  14.    
  15. ******************************************************************/  
  16.     #include<AT89x51.H>
  17.     #include <intrins.h>
  18.         #include<HJ-4WD_PWM.H>                  //包含HL-1藍牙智能小車驅動IO口定義等函數
  19.     #define Left_1_led        P3_7         //左循跡傳感器   
  20.         
  21.     #define Right_1_led       P3_6         //右循跡傳感器
  22.         
  23.     #define LeftIRBZ          P3_5         //左避障傳感器         
  24.         
  25.         #define RightIRBZ         P3_4         //右避障傳感器            

  26. sbit SB1=P2^3;                            //定義蜂鳴器端口
  27. sbit IRIN=P3^3;                                       //定義紅外接收端口

  28. unsigned char code  LedShowData[]={0x03,0x9F,0x25,0x0D,0x99,  //定義數碼管顯示數據
  29.                                    0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9
  30. unsigned char code  RecvData[]={0x19,0x46,0x15,0x43,0x44,0x40,0x0D,0x0E,0x00,0x0F};
  31. unsigned char IRCOM[7];

  32. #define ShowPort P0                                   //定義數碼管顯示端口
  33. unsigned char temp = 1;

  34. void Delay1ms(unsigned int i)
  35. {
  36. unsigned char j,k;
  37. do{
  38.   j = 10;
  39.   do{
  40.    k = 50;
  41.    do{
  42.     _nop_();
  43.    }while(--k);     
  44.   }while(--j);
  45. }while(--i);

  46. }

  47. void delay_nus(unsigned int i)  //延時:i>=12 ,i的最小延時單12 us
  48. {
  49.   i=i/10;
  50.   while(--i);
  51. }   
  52. void delay_nms(unsigned int n)  //延時n ms
  53. {
  54.   n=n+1;
  55.   while(--n)  
  56.   delay_nus(900);         //延時 1ms,同時進行補償
  57.   
  58. }  

  59. void delayms(unsigned char x)                         //0.14mS延時程序
  60. {
  61.   unsigned char i;                                    //定義臨時變量
  62.   while(x--)                                          //延時時間循環
  63.   {
  64.     for (i = 0; i<13; i++) {}                         //14mS延時
  65.   }
  66. }

  67. void Delay()                                          //定義延時子程序
  68. {
  69.   unsigned int DelayTime=30000;                       //定義延時時間變量
  70.   while(DelayTime--);                                 //開始進行延時循環
  71.   return;                                             //子程序返回
  72. }

  73. void ControlCar_yaokong(unsigned char ConType)    //定義電機控制子程序        (紅外遙控單獨設置一個 switch  case  語句  )
  74. {

  75.   stop();
  76. switch(ConType)                          //判斷用戶設定電機形式
  77. {
  78.   case 1:  //前進                         //判斷用戶是否選擇形式1
  79.   {
  80.     stop();                                                      //進入前進之前 先停止一段時間  防止電機反向電壓沖擊主板 導致系統復位
  81.         Delay1ms(150);
  82. //        LeftLed = 0 ;
  83.         run();
  84.     break;
  85.   }
  86.   case 2: //后退                          //判斷用戶是否選擇形式2
  87.   {
  88.     stop();                                                                      //進入后退之前 先停止一段時間  防止電機反向電壓沖擊主板 導致系統復位
  89.     Delay1ms(150);
  90.   //  LeftLed = 1 ;         
  91.         back();                                 //M2電機反轉
  92.     break;
  93.   }
  94.   case 3: //右轉                          //判斷用戶是否選擇形式3
  95.   {
  96.      stop();                                                                  //進入左轉之前 先停止一段時間  防止電機反向電壓沖擊主板 導致系統復位
  97.          Delay1ms(150);
  98.          rightrun();                                //M2電機正轉
  99.          break;
  100.   }
  101.   case 4: //左轉                          //判斷用戶是否選擇形式4
  102.   {
  103.      stop();                                                                  //進入右轉之前 先停止一段時間  防止電機反向電壓沖擊主板 導致系統復位
  104.          Delay1ms(150);
  105.      leftrun();                                  //M1電機正轉  //M2電機反轉
  106.           break;
  107.   }
  108.   case 8: //停止                          //判斷用戶是否選擇形式8
  109.   {
  110.     stop();
  111.         break;                                //退出當前選擇
  112.   }
  113. }
  114. }
  115. void Robot_Avoidance()                   //機器人避障子程序
  116. {
  117.             
  118.               if(LeftIRBZ==1&&RightIRBZ ==1)          //LeftIRBZ RightIRBZ

  119.                     {         
  120.                       run();
  121.               delay_nms (10);
  122.                            SB1=1;
  123.                           }
  124.                           else
  125.                          {                          
  126.                                       if(LeftIRBZ==1&&RightIRBZ ==0)            //右邊檢測到紅外信號
  127.                                   {
  128.                                           rightrun();                            //右轉
  129.                      delay_nms (1000);                                           //停止300MS   防止電機反相電壓沖擊  導致系統復位

  130.                              }
  131.                            
  132.                                            if(RightIRBZ ==1&&LeftIRBZ==0)                //左邊檢測到紅外信號
  133.                                   {         
  134.                                       
  135.                                           leftrun();                        //左轉
  136.                      delay_nms (1000);                                           //停止300MS   防止電機反相電壓沖擊  導致系統復位

  137.                                   }
  138.                                   if(RightIRBZ==0&&LeftIRBZ==0)                //兩邊傳感器同時檢測到紅外
  139.                                   {         
  140.                                      SB1=0;
  141.                                          stop();                     //停止
  142.                      delay_nms (1000);                        //停止300MS   防止電機反相電壓沖擊  導致系統復位
  143.                                          back();                         //調用電機后退函數
  144.                                          delay_nms (1000);                //后退50毫秒
  145.                                          rightrun();                     //調用電機右轉函數
  146.                                         delay_nms (1000);
  147.                                   }
  148.                         }
  149.         
  150.                         run();
  151.                   
  152. }
  153. //機器人循跡子程序
  154. void Robot_Traction()                     //機器人循跡子程序
  155. {
  156.   
  157.    //SB1=1;
  158.    if(Left_1_led  == 0 && Right_1_led == 0)    //三個紅外檢測到黑線,就前進         Left_1_led           Right_1_led
  159.    {
  160.       run();                     //左側沒有信號時,開始向右轉一定的角度
  161.       delay_nms (10);
  162.           SB1=0;
  163.    }
  164.    
  165.    else if(Left_1_led  == 0 && Right_1_led == 1)
  166.    {
  167.       rightrun();                       //右側檢測到黑線,開始向右轉一定的角度
  168.       delay_nms (10);
  169.    }

  170.    else if(Left_1_led  == 1 &&  Right_1_led == 0)
  171.    {
  172.       leftrun();                         //左側檢測到黑線,開始向左轉一定的角度
  173.          
  174.       delay_nms (10);
  175.    }
  176.    else if(Left_1_led  == 1 &&  Right_1_led == 1)
  177.    {
  178.       SB1=1;
  179.           stop();                         //左側檢測到黑線,開始向左轉一定的角度
  180.          
  181.       delay_nms (10);
  182.    }
  183.      
  184. }

  185. //----------紅外遙控-------------------------------------------------------------
  186. void IR_IN() interrupt 2 using 0                      //定義INT2外部中斷函數
  187. {
  188.   unsigned char j,k,N=0;                              //定義臨時接收變量
  189.   
  190.   EX1 = 0;                                            //關閉外部中斷,防止再有信號到達   
  191.   delayms(15);                                        //延時時間,進行紅外消抖
  192.   if (IRIN==1)                                        //判斷紅外信號是否消失
  193.   {  
  194.      EX1 =1;                                          //外部中斷開
  195.          return;                                          //返回
  196.   }
  197.                            
  198.   while (!IRIN)                                       //等IR變為高電平,跳過9ms的前導低電平信號。
  199.   {
  200.       delayms(1);                                     //延時等待
  201.   }

  202.   for (j=0;j<4;j++)                                   //采集紅外遙控器數據
  203.   {
  204.     for (k=0;k<8;k++)                                 //分次采集8位數據
  205.     {
  206.        while (IRIN)                                   //等 IR 變為低電平,跳過4.5ms的前導高電平信號。
  207.        {
  208.          delayms(1);                                  //延時等待
  209.        }
  210.       
  211.        while (!IRIN)                                  //等 IR 變為高電平
  212.        {
  213.          delayms(1);                                  //延時等待
  214.        }
  215.    
  216.        while (IRIN)                                   //計算IR高電平時長
  217.        {
  218.          delayms(1);                                  //延時等待
  219.          N++;                                         //計數器加加
  220.          if (N>=30)                                   //判斷計數器累加值
  221.              {
  222.            EX1=1;                                     //打開外部中斷功能
  223.                return;                                    //返回
  224.          }                  
  225.        }
  226.                                        
  227.       IRCOM[j]=IRCOM[j] >> 1;                         //進行數據位移操作并自動補零
  228.      
  229.       if (N>=8)                                       //判斷數據長度
  230.       {
  231.          IRCOM[j] = IRCOM[j] | 0x80;                  //數據最高位補1
  232.       }
  233.       N=0;                                            //清零位數計錄器
  234.     }
  235.   }
  236.    
  237.   if (IRCOM[2]!=~IRCOM[3])                            //判斷地址碼是否相同
  238.   {
  239.      EX1=1;                                           //打開外部中斷
  240.      return;                                          //返回
  241.   }

  242.   for(j=0;j<10;j++)                                   //循環進行鍵碼解析
  243.    {
  244.       if(IRCOM[2]==RecvData[j])                       //進行鍵位對應
  245.       {
  246.        // ControlCar(j);
  247.                 ControlCar_yaokong(j);                               //數碼管顯示相應數碼
  248.       }
  249.    }
  250.    EX1 = 1;                                           //外部中斷開
  251. }
  252. //-------------------------------------------------------------------------------------------------------
  253. void main()                               //主程序入口
  254. {
  255.   TMOD=0X01;
  256.         TL0 = 0x66;                //設置定時初值
  257.         TH0 = 0xFC;                //設置定時初值
  258.   TR0= 1;
  259.   ET0= 1;
  260.   EA = 1;                           //開總中斷
  261.   //EX1=1;                                               //同意開啟外部中斷1
  262.   IT1=1;                                               //設定外部中斷1為低邊緣觸發類型

  263. //void Timer0Init(void)                //1毫秒@11.0592MHz
  264. //{
  265. //        AUXR &= 0x7F;                //定時器時鐘12T模式
  266. //        TMOD &= 0xF0;                //設置定時器模式
  267. //        TMOD |= 0x01;                //設置定時器模式
  268. //        TL0 = 0x66;                //設置定時初值
  269. //        TH0 = 0xFC;                //設置定時初值
  270. //        TF0 = 0;                //清除TF0標志
  271. //        TR0 = 1;                //定時器0開始計時
  272. //}


  273.   while(1)                                //程序主循環
  274.   {
  275.           if(P3_2 == 0)
  276.           {
  277.            delay_nms(10);
  278.            if(P3_2 == 0)
  279.            {
  280.                   temp++;
  281.                   while(!P3_2);
  282.            }
  283.           }
  284.           if(temp > 3)
  285.           {
  286.           temp = 1;
  287.           }

  288.           switch(temp)
  289.           {
  290.                    case 1:        ShowPort = LedShowData[1];Robot_Traction();EX1 = 0;break;
  291.                 case 2: ShowPort = LedShowData[2];Robot_Avoidance();EX1 = 0;break;
  292.                 case 3: ShowPort = LedShowData[3];SB1 = 1; EX1 = 1;break;
  293.           }

  294.          
  295.   }
  296. }
復制代碼
回復

使用道具 舉報

地板
ID:202991 發表于 2017-5-20 22:24 | 只看該作者

#ifndef _LED_H_
#define _LED_H_


    //定義小車驅動模塊輸入IO口
        sbit IN1=P1^2;
        sbit IN2=P1^3;
        sbit IN3=P1^4;
        sbit IN4=P1^5;
        sbit EN1=P1^6;
        sbit EN2=P1^7;
       

        /***蜂鳴器接線定義*****/
    sbit BUZZ=P2^3;

    //#define Left_1_led        P3_3         // 左傳感器      
        //#define Right_1_led       P3_2         //右傳感器   
            
        #define Left_moto_pwm          P1_6         //PWM信號端
        #define Right_moto_pwm          P1_7          //PWM信號端


    #define Left_moto_go      {P1_2=1,P1_3=0;}  //左電機向前走
        #define Left_moto_back    {P1_2=0,P1_3=1;}         //左邊電機向后轉
        #define Left_moto_Stop    {P1_2=0,P1_3=0;}         //左邊電機停轉                     
        #define Right_moto_go     {P1_4=1,P1_5=0;}        //右邊電機向前走
        #define Right_moto_back   {P1_4=0,P1_5=1;}        //右邊電機向后走
        #define Right_moto_Stop   {P1_4=0,P1_5=0;}              //右邊電機停轉   

        unsigned char pwm_val_left  =0;//變量定義
        unsigned char push_val_left =0;// 左電機占空比N/20
        unsigned char pwm_val_right =0;
        unsigned char push_val_right=0;// 右電機占空比N/20
        bit Right_moto_stop=1;
        bit Left_moto_stop =1;
        unsigned  int  time3=0;
   
/************************************************************************/       
//延時函數       
   void delay(unsigned int k)
{   
     unsigned int x,y;
         for(x=0;x<k;x++)
           for(y=0;y<2000;y++);
}
/************************************************************************/
//前速前進
     void  run(void)
{
     push_val_left=6;         //速度調節變量 0-20。。。0最小,20最大
         push_val_right=6;
         Left_moto_go ;   //左電機往前走
         Right_moto_go ;  //右電機往前走
}
//前速后退
     void  back(void)//后退
{
     push_val_left=13;         //速度調節變量 0-20。。。0最小,20最大
         push_val_right=13;
         Left_moto_back ;   //左電機往前走
         Right_moto_back ;  //右電機往前走
}


//左轉
     void  leftrun(void)
{         
     push_val_left=6;
         push_val_right=14;
         Right_moto_go ;  //右電機往前走
     Left_moto_back   ;  //左電機后走
}

//右轉
     void  rightrun(void)
{
         push_val_left=14;
         push_val_right=6;
     Left_moto_go  ;   //左電機往前走
         Right_moto_back    ;  //右電機往后走       
}
//停止
     void  stop(void)
{
         P1_2 = 0;
         P1_3 = 0;
         P1_4 = 0;
         P1_5 = 0;
                
}

/************************************************************************/
/*                    PWM調制電機轉速                                   */
/************************************************************************/
/*                    左電機調速                                        */
/*調節push_val_left的值改變電機轉速,占空比            */
                void pwm_out_left_moto(void)
{  
   if(Left_moto_stop)
   {
    if(pwm_val_left<=push_val_left)
               {
                     Left_moto_pwm=1;

                   }
        else
               {
                 Left_moto_pwm=0;

                   }
        if(pwm_val_left>=20)
               pwm_val_left=0;
   }
   else   
          {
           Left_moto_pwm=0;

                  }
}
/******************************************************************/
/*                    右電機調速                                  */  
   void pwm_out_right_moto(void)
{
  if(Right_moto_stop)
   {
    if(pwm_val_right<=push_val_right)
              {
               Right_moto_pwm=1;

                   }
        else
              {
                   Right_moto_pwm=0;

                  }
        if(pwm_val_right>=20)
               pwm_val_right=0;
   }
   else   
          {
           Right_moto_pwm=0;

              }
}
      
/***************************************************/
///*TIMER0中斷服務子函數產生PWM信號*/
        void timer0()interrupt 1   using 2
{
        TL0 = 0x66;                //設置定時初值
        TH0 = 0xFC;                //設置定時初值
         time3++;
         pwm_val_left++;
         pwm_val_right++;
         pwm_out_left_moto();
         pwm_out_right_moto();
}       

/*********************************************************************/       

#endif
回復

使用道具 舉報

5#
ID:202991 發表于 2017-5-20 22:27 | 只看該作者
有大神能幫助解決嗎?????
回復

使用道具 舉報

6#
ID:170693 發表于 2017-5-21 13:11 | 只看該作者
是圖中的D3閃嗎?。 調整W1電位器改變左避障靈敏度。也可試一試有障礙時,V3收到V1的反射光,LM393的1腳電位低D3亮,用易拉罐皮卷一個6MM的小管套在V3上,不讓它接受到光線這時LM393的1腳電位高D3不亮。
回復

使用道具 舉報

7#
ID:202991 發表于 2017-5-21 21:32 | 只看該作者
zhangsm 發表于 2017-5-21 13:11
是圖中的D3閃嗎?。 調整W1電位器改變左避障靈敏度。也可試一試有障礙時,V3收到V1的反射光,LM393的1腳電 ...

謝謝回復,這里邊有3個模式,模式1為尋跡,模式2為避障,模式3為遙控,我估計是程序之間有干擾,我只想用模式2,我把模式1和3都屏蔽掉了,只用模式2,D3閃爍頻次減輕了很多,小車可以正常運行。

另外,我不想調低避障的靈敏度,這樣小車老是撞墻后才傳感器才反應。

謝謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人在线网址 | 久久99精品久久 | 请别相信他免费喜剧电影在线观看 | 一区在线视频 | 又黄又色 | 欧美一级片在线观看 | 久久精彩视频 | 国产精品久久av | 青青久在线视频 | 国产高清精品网站 | 草草草影院 | 日韩高清国产一区在线 | 日韩av在线播 | 中文字幕一区二区三区不卡 | 国产成人精品一区二区三区网站观看 | 999视频| 亚洲导航深夜福利涩涩屋 | 成年网站在线观看 | 国产在线观 | 奇米超碰在线 | 国产一级特黄aaa大片评分 | 精品久草 | 嫩草视频入口 | 亚洲女人天堂网 | 欧美视频免费在线 | 一级毛片色一级 | 精品99爱视频在线观看 | www.毛片 | 在线观看国产精品一区二区 | 男女污网站 | 日韩精品成人在线 | 色呦呦在线| 北条麻妃国产九九九精品小说 | 日本不卡一区二区三区在线观看 | 久久国产亚洲 | 国产不卡一 | av中文在线播放 | www.久| 国产福利网站 | 有码在线 | 国产 欧美 日韩 一区 |