找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8055|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

我的智能小車左側(cè)避障傳感器,一上電就有規(guī)律的閃爍(發(fā)光二極管),請(qǐng)問(wèn)是什么原因?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
我的智能小車左側(cè)避障傳感器,一上電就有規(guī)律的閃爍(發(fā)光二極管),請(qǐng)問(wèn)是什么原因?

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

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

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

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

另外,我不想調(diào)低避障的靈敏度,這樣小車?yán)鲜亲矇蟛艂鞲衅鞑欧磻?yīng)。

謝謝
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

#ifndef _LED_H_
#define _LED_H_


    //定義小車驅(qū)動(dòng)模塊輸入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信號(hào)端
        #define Right_moto_pwm          P1_7          //PWM信號(hào)端


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

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


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

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

/************************************************************************/
/*                    PWM調(diào)制電機(jī)轉(zhuǎn)速                                   */
/************************************************************************/
/*                    左電機(jī)調(diào)速                                        */
/*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */
                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;

                  }
}
/******************************************************************/
/*                    右電機(jī)調(diào)速                                  */  
   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中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
        void timer0()interrupt 1   using 2
{
        TL0 = 0x66;                //設(shè)置定時(shí)初值
        TH0 = 0xFC;                //設(shè)置定時(shí)初值
         time3++;
         pwm_val_left++;
         pwm_val_right++;
         pwm_out_left_moto();
         pwm_out_right_moto();
}       

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

#endif
回復(fù)

使用道具 舉報(bào)

板凳
ID:202991 發(fā)表于 2017-5-20 22:24 | 只看該作者
  1. /**********************ZYWIFI0939C-WIFI機(jī)器人實(shí)驗(yàn)板例程************************
  2. *  平臺(tái):ZYWIFI0939C-WIFI機(jī)器人 + Keil U4 + STC89C52
  3. *  名稱:ZY-1智能小車參考程序
  4. *  公司:湖南智宇科教設(shè)備有限公司   
  5. *  編寫(xiě):智宇公司研發(fā)一部
  6. *  日期:2015-1-15
  7. *  交流:智能車QQ:261339276
  8. *  晶振:11.0592MHZ
  9. *  說(shuō)明:免費(fèi)開(kāi)源,不提供源代碼分析
  10. *  硬件設(shè)置:要有自己動(dòng)手能力,才能完成實(shí)驗(yàn)
  11. *  使用說(shuō)明:根據(jù)下面IO口自己用杜邦線連接各種模塊,可以自己修改各種模塊IO口
  12. *  視頻教程:本小車配套學(xué)習(xí)C語(yǔ)言詳細(xì)視頻教程,資料統(tǒng)一網(wǎng)盤(pán)下載
  13.    重點(diǎn)提示:本程序只做參考,不提供技術(shù)支持,請(qǐng)自己研究吸收。
  14.    
  15. ******************************************************************/  
  16.     #include<AT89x51.H>
  17.     #include <intrins.h>
  18.         #include<HJ-4WD_PWM.H>                  //包含HL-1藍(lán)牙智能小車驅(qū)動(dòng)IO口定義等函數(shù)
  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,  //定義數(shù)碼管顯示數(shù)據(jù)
  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                                   //定義數(shù)碼管顯示端口
  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)  //延時(shí):i>=12 ,i的最小延時(shí)單12 us
  48. {
  49.   i=i/10;
  50.   while(--i);
  51. }   
  52. void delay_nms(unsigned int n)  //延時(shí)n ms
  53. {
  54.   n=n+1;
  55.   while(--n)  
  56.   delay_nus(900);         //延時(shí) 1ms,同時(shí)進(jìn)行補(bǔ)償
  57.   
  58. }  

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

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

  73. void ControlCar_yaokong(unsigned char ConType)    //定義電機(jī)控制子程序        (紅外遙控單獨(dú)設(shè)置一個(gè) switch  case  語(yǔ)句  )
  74. {

  75.   stop();
  76. switch(ConType)                          //判斷用戶設(shè)定電機(jī)形式
  77. {
  78.   case 1:  //前進(jìn)                         //判斷用戶是否選擇形式1
  79.   {
  80.     stop();                                                      //進(jìn)入前進(jìn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
  81.         Delay1ms(150);
  82. //        LeftLed = 0 ;
  83.         run();
  84.     break;
  85.   }
  86.   case 2: //后退                          //判斷用戶是否選擇形式2
  87.   {
  88.     stop();                                                                      //進(jìn)入后退之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
  89.     Delay1ms(150);
  90.   //  LeftLed = 1 ;         
  91.         back();                                 //M2電機(jī)反轉(zhuǎn)
  92.     break;
  93.   }
  94.   case 3: //右轉(zhuǎn)                          //判斷用戶是否選擇形式3
  95.   {
  96.      stop();                                                                  //進(jìn)入左轉(zhuǎn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
  97.          Delay1ms(150);
  98.          rightrun();                                //M2電機(jī)正轉(zhuǎn)
  99.          break;
  100.   }
  101.   case 4: //左轉(zhuǎn)                          //判斷用戶是否選擇形式4
  102.   {
  103.      stop();                                                                  //進(jìn)入右轉(zhuǎn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
  104.          Delay1ms(150);
  105.      leftrun();                                  //M1電機(jī)正轉(zhuǎn)  //M2電機(jī)反轉(zhuǎn)
  106.           break;
  107.   }
  108.   case 8: //停止                          //判斷用戶是否選擇形式8
  109.   {
  110.     stop();
  111.         break;                                //退出當(dāng)前選擇
  112.   }
  113. }
  114. }
  115. void Robot_Avoidance()                   //機(jī)器人避障子程序
  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)            //右邊檢測(cè)到紅外信號(hào)
  127.                                   {
  128.                                           rightrun();                            //右轉(zhuǎn)
  129.                      delay_nms (1000);                                           //停止300MS   防止電機(jī)反相電壓沖擊  導(dǎo)致系統(tǒng)復(fù)位

  130.                              }
  131.                            
  132.                                            if(RightIRBZ ==1&&LeftIRBZ==0)                //左邊檢測(cè)到紅外信號(hào)
  133.                                   {         
  134.                                       
  135.                                           leftrun();                        //左轉(zhuǎn)
  136.                      delay_nms (1000);                                           //停止300MS   防止電機(jī)反相電壓沖擊  導(dǎo)致系統(tǒng)復(fù)位

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

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

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

  202.   for (j=0;j<4;j++)                                   //采集紅外遙控器數(shù)據(jù)
  203.   {
  204.     for (k=0;k<8;k++)                                 //分次采集8位數(shù)據(jù)
  205.     {
  206.        while (IRIN)                                   //等 IR 變?yōu)榈碗娖剑^(guò)4.5ms的前導(dǎo)高電平信號(hào)。
  207.        {
  208.          delayms(1);                                  //延時(shí)等待
  209.        }
  210.       
  211.        while (!IRIN)                                  //等 IR 變?yōu)楦唠娖?br />
  212.        {
  213.          delayms(1);                                  //延時(shí)等待
  214.        }
  215.    
  216.        while (IRIN)                                   //計(jì)算IR高電平時(shí)長(zhǎng)
  217.        {
  218.          delayms(1);                                  //延時(shí)等待
  219.          N++;                                         //計(jì)數(shù)器加加
  220.          if (N>=30)                                   //判斷計(jì)數(shù)器累加值
  221.              {
  222.            EX1=1;                                     //打開(kāi)外部中斷功能
  223.                return;                                    //返回
  224.          }                  
  225.        }
  226.                                        
  227.       IRCOM[j]=IRCOM[j] >> 1;                         //進(jìn)行數(shù)據(jù)位移操作并自動(dòng)補(bǔ)零
  228.      
  229.       if (N>=8)                                       //判斷數(shù)據(jù)長(zhǎng)度
  230.       {
  231.          IRCOM[j] = IRCOM[j] | 0x80;                  //數(shù)據(jù)最高位補(bǔ)1
  232.       }
  233.       N=0;                                            //清零位數(shù)計(jì)錄器
  234.     }
  235.   }
  236.    
  237.   if (IRCOM[2]!=~IRCOM[3])                            //判斷地址碼是否相同
  238.   {
  239.      EX1=1;                                           //打開(kāi)外部中斷
  240.      return;                                          //返回
  241.   }

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

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


  273.   while(1)                                //程序主循環(huán)
  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. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

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

1.主板原理圖.pdf

105.15 KB, 下載次數(shù): 7

2.傳感器底板.pdf

67.53 KB, 下載次數(shù): 7

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表