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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13735|回復: 13
打印 上一主題 下一主題
收起左側(cè)

機械臂(夾乒乓球)+藍牙控制小車制作 含單片機源程序

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:200362 發(fā)表于 2017-6-4 20:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
之前在51hei論壇上沒有找到這方面的有用的資料,但看其他帖子也給我了很大的啟發(fā),所以決定把源程序發(fā)出來。
這輛車作用是用機械臂來夾乒乓球,放在盒子中,然后從盒子里倒出來。

先上圖


單片機源程序如下:
  1. /************************************************
  2.   機械臂藍牙小車
  3.   用到定時器0工作方式1 16位定時計數(shù)(PWM),定時器1工作方式2 8位自動重裝
  4.   (波特率9600),串口工作方式1  
  5. *************************************************/
  6. #include<reg52.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. uint i,j,tmp;
  10. sbit right_go=P1^0;
  11. sbit right_back=P1^1;
  12. sbit left_go=P1^2;
  13. sbit left_back=P1^3;

  14. sbit right_go2=P1^4;
  15. sbit right_back2=P1^5;
  16. sbit left_go2=P1^6;
  17. sbit left_back2=P1^7;

  18. sbit ENA1=P2^0;
  19. sbit ENB1=P2^3;
  20. sbit ENA2=P2^0;
  21. sbit ENB2=P2^3;

  22. sbit pwm1 =P3^3;
  23. sbit pwm2 =P3^4;
  24. sbit pwm3 =P3^5;
  25. sbit pwm4 =P3^6;
  26. uchar count,num1;        //0.5ms次數(shù)標識
  27. uchar jd1,jd2,jd3,jd4;                   //角度標識
  28. void delay(uint z)//調(diào)節(jié)電機轉(zhuǎn)速
  29. {
  30.         uint x,y;
  31.         for(x=z;x>0;x--)
  32.                 for(y=110;y>0;y--);
  33. }

  34. void go()
  35. {
  36.         ENA1=1;
  37.         ENB1=1;
  38.         ENA2=1;
  39.         ENB2=1;
  40.         right_back=0;
  41.         left_go=1;
  42.         left_back=0;
  43.         right_go=1;

  44.         right_back2=0;
  45.         left_go2=1;
  46.         left_back2=0;
  47.         right_go2=1;
  48.                

  49. //        right_back=0;
  50. //        left_go=0;
  51. //        left_back=0;
  52. //        right_go=0;
  53. //        right_back2=0;
  54. //        left_go2=0;
  55. //        left_back2=0;
  56. //        right_go2=0;
  57.       


  58. }

  59. void back()
  60. {
  61.         ENA1=1;
  62.         ENB1=1;
  63.         ENA2=1;
  64.         ENB2=1;
  65.         right_back=1;
  66.         left_go=0;
  67.         left_back=1;
  68.         right_go=0;

  69.         right_back2=1;
  70.         left_go2=0;
  71.         left_back2=1;
  72.         right_go2=0;

  73.       
  74. //        right_back=0;
  75. //        left_go=0;
  76. //        left_back=0;
  77. //        right_go=0;
  78. //        right_back2=0;
  79. //        left_go2=0;
  80. //        left_back2=0;
  81. //        right_go2=0;
  82.       
  83. }

  84. void left()
  85. {
  86.         ENA1=1;
  87.         ENB1=1;
  88.         ENA2=1;
  89.         ENB2=1;
  90.         right_go=1;
  91.         right_back=0;
  92.         left_go=0;
  93.         left_back=1;

  94.         right_go2=1;
  95.         right_back2=0;
  96.         left_go2=1;
  97.         left_back2=0;


  98. //        right_go=0;
  99. //        right_back=0;
  100. //        left_go=0;
  101. //        left_back=0;

  102. //        right_go2=0;
  103. //        right_back2=0;
  104. //        left_go2=0;
  105. //        left_back2=0;
  106.       

  107. }

  108. void right()
  109. {
  110.         ENA1=1;
  111.         ENB1=1;
  112.         ENA2=1;
  113.         ENB2=1;
  114.     right_back=1;
  115.         left_go=1;
  116.         left_back=0;
  117.         right_go=0;

  118.         right_back2=0;
  119.         left_go2=1;
  120.         left_back2=0;
  121.         right_go2=1;


  122. //        right_back=0;
  123. //        left_go=0;
  124. //        left_back=0;
  125. //        right_go=0;

  126. //        right_back2=0;
  127. //        left_go2=0;
  128. //        left_back2=0;
  129. //        right_go2=0;

  130. }

  131. void stop()
  132. {
  133.         right_back=0;
  134.         left_go=0;
  135.         left_back=0;
  136.         right_go=0;

  137.         right_back2=0;
  138.         left_go2=0;
  139.         left_back2=0;
  140.         right_go2=0;
  141. }
  142. /*void duoji1_up()
  143. {
  144.         jd1++;                 
  145.     num=0;              //按鍵按下 則20ms周期從新開始
  146.     if(jd1==6)
  147.       jd1=5;               //已經(jīng)是180度,則保持      
  148. }
  149. void duoji1_dwon()
  150. {
  151.         jd1--;                 
  152.     num=0;
  153.     if(jd1==0)
  154.       jd1=1;               //已經(jīng)是0度,則保持
  155. }
  156. void duoji2_up()
  157. {
  158.         jd2++;                 
  159.     num=0;              //按鍵按下 則20ms周期從新開始
  160.     if(jd2==6)
  161.       jd2=5;               //已經(jīng)是180度,則保持      
  162. }  
  163. void duoji2_dwon()
  164. {
  165.         jd2--;                 
  166.     num=0;
  167.     if(jd2==0)
  168.      jd2=1;               //已經(jīng)是0度,則保持
  169. }         */

  170. void init()
  171. {
  172.         TMOD= 0x21;
  173.     TH1 = 0xfd;
  174.     TL1 = 0xfd;
  175.         TH0= 0xff;         //0.5ms
  176.         TL0=0x8c;            //0.25ms         //0.125ms
  177.         ET0=1;               
  178.         TR0=1;
  179.     TR1= 1;      
  180.     REN= 1;
  181.     SM0= 0;
  182.     SM1= 1;   
  183.     ES= 1;         //串口中斷允許位
  184.     EA=1;
  185.         right_back=0;
  186.         left_go=0;
  187.         left_back=0;
  188.         right_go=0;

  189.         right_back2=0;
  190.         left_go2=0;
  191.         left_back2=0;
  192.         right_go2=0;
  193. //        jd1=1;
  194. //   jd2=1;         
  195. //        num=0;
  196. }

  197. void main()
  198. {
  199.         jd1=14;
  200.         jd2=6;
  201.         jd3=5;
  202.         jd4=6;
  203.         count=0;
  204.         init();
  205.         while(1)
  206.         {
  207.                 switch(tmp)
  208.                 {
  209.                
  210.                 case 0x01: go(); break;
  211.                         case 0x02: back(); break;
  212.                         case 0x03: left(); break;
  213.                         case 0x04: right(); break;
  214.                         case 0x00: stop(); break;                  
  215.                         case 0x05:                                                    //爪子
  216.                                 jd1++;
  217.                                 count=0;
  218.                                 tmp=0;
  219.                                 if(jd1==15)
  220.                                 jd2=3;                       
  221.                                 if(jd1==18)
  222.                                     {
  223.                                         jd1=17;
  224.                                         delay(200);
  225.                                         jd2=15;
  226.                                        
  227.                                         }break;
  228.                         case 0x06:        
  229.                                 tmp=0;
  230.                                 jd1--;
  231.                                 count=0;
  232.                                 if(jd1==0)
  233.                                         jd1=1; break;
  234. //                                case 0x07:                                    //支架
  235. //                                jd2++;
  236. //                                count=0;
  237. //                                tmp=0;
  238. //                                if(jd2==6)
  239. //                                        jd2=5; break;
  240. //                        case 0x08:        
  241. //                                tmp=0;
  242. //                                jd2--;
  243. //                                count=0;
  244. //                                if(jd2==0)
  245. //                                        jd2=1; break;
  246.                         case 0x09:                                    //門
  247.                                 jd3++;
  248.                                 count=0;
  249.                                 tmp=0;
  250.                                 if(jd3==21)
  251.                                         jd3=20; break;
  252.                         case 0x10:        
  253.                                 tmp=0;
  254.                                 jd3--;
  255.                                 count=0;
  256.                                 if(jd3==0)
  257.                                         jd3=1; break;      
  258.                         default:break;

  259.                 }


  260.         }
  261. }
  262. void time0() interrupt 1
  263. {
  264.         TH0  = 0xff;            
  265.         TL0  = 0x8c;

  266.     if(count<jd1)              //判斷0.5ms次數(shù)是否小于角度標識
  267.       pwm1=1;                                //確實小于,PWM輸出高電平                                      
  268.     else
  269.         pwm1=0;                                  //大于則輸出低電平
  270.         if(count<jd2)
  271.                 pwm2=1;
  272.         else
  273.                 pwm2=0;
  274.         if(count<jd3)
  275.                 pwm3=1;
  276.         else
  277.                 pwm3=0;      
  278.         if(count<jd4)
  279.                 pwm4=1;
  280.         else
  281.                 pwm4=0;                                       
  282.         count=(count+1);                 //0.5ms次數(shù)加1      
  283.     count=count%160;     //次數(shù)始終保持為40 即保持周期為20ms
  284.                
  285.       
  286. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

全部資料下載地址:
程序.rar (1.56 KB, 下載次數(shù): 181)



評分

參與人數(shù) 2黑幣 +105 收起 理由
小刀hait + 5 很給力!
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:200362 發(fā)表于 2017-6-4 21:07 | 只看該作者
雖然做出來了,但還是有些問題想問一下大神們。
1:用4200mah的航模電池驅(qū)動兩塊LM298,然后再通過降壓模塊降到5V給單片機供電,并且驅(qū)動舵機,為什么接航模電池那兩根線會非常發(fā)燙,變軟(很嚇人!!!)?
   最后只能用雙電源解決。
2:原先是打算控制4個舵機,夾子一個,關節(jié)一個,整只 手臂轉(zhuǎn)動一個,然后從盒子里倒球一個(門舵機)。但是最后的門 舵機總會被控制前面三個舵機的指令干擾,無法運行,最后只能把控制轉(zhuǎn)動的舵機去掉。我想問的是為什么控制3個舵機可以,4個就不行了(也加了濾波電容)?

這里   count=(count+1);                 //0.5ms次數(shù)加1      
         count=count%160;     //次數(shù)始終保持為40 即保持周期為20ms
          注釋錯了 該是0.25ms次數(shù)加1        
回復

使用道具 舉報

板凳
ID:192765 發(fā)表于 2017-6-17 15:33 | 只看該作者
咋沒人回樓主呢 我也好想知道為什么
回復

使用道具 舉報

地板
ID:187365 發(fā)表于 2017-6-18 15:42 | 只看該作者
看起來很棒
回復

使用道具 舉報

5#
ID:106371 發(fā)表于 2017-10-28 16:20 | 只看該作者
終于解決藍牙控制舵機問題了,不過為啥兩個舵機控制有沖突
回復

使用道具 舉報

6#
ID:241881 發(fā)表于 2017-11-19 20:44 | 只看該作者
LM298輸出電流驅(qū)動舵機是不分正負的,降壓模塊是分正負的,反向時會短路通過大電流
回復

使用道具 舉報

7#
ID:560831 發(fā)表于 2019-6-12 14:12 | 只看該作者
很給力!
回復

使用道具 舉報

8#
ID:437102 發(fā)表于 2019-9-17 19:24 | 只看該作者
試試 看好不好用
回復

使用道具 舉報

9#
ID:368810 發(fā)表于 2021-8-7 17:40 | 只看該作者
是收集一定空間內(nèi)所有的乒乓球還是收集一個就倒出來啊?
回復

使用道具 舉報

10#
ID:977393 發(fā)表于 2021-11-3 17:11 | 只看該作者
機器識別是用到那個了
回復

使用道具 舉報

11#
ID:582255 發(fā)表于 2022-10-13 09:11 | 只看該作者
乒乓球需要識別嗎?還是直接去抓
回復

使用道具 舉報

12#
ID:582255 發(fā)表于 2022-10-13 09:11 | 只看該作者
乒乓球咋識別的 啊
回復

使用道具 舉報

13#
ID:208271 發(fā)表于 2024-1-23 22:05 | 只看該作者
ereerr 發(fā)表于 2017-6-4 21:07
雖然做出來了,但還是有些問題想問一下大神們。
1:用4200mah的航模電池驅(qū)動兩塊LM298,然后再通過降壓模 ...

是不是電池有問題,這麼大電流還沒有輸出保護
回復

使用道具 舉報

14#
ID:155719 發(fā)表于 2024-2-1 08:40 | 只看該作者
這個木頭外殼很有感覺啊
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩中文字幕第一页 | 色偷偷噜噜噜亚洲男人 | 天天久久 | 男女羞羞免费视频 | 亚洲一区二区三区四区在线观看 | 久久久久久一区 | 欧美在线国产精品 | 一区二区三区国产好的精 | av黄色免费| 欧美日韩综合一区 | 国产福利91精品 | 欧美国产日韩一区二区三区 | 亚洲一区二区三区四区五区中文 | 亚洲综合首页 | 人人人干 | 网站黄色在线 | 欧美不卡 | 久久精品一级 | 亚洲综合色 | 91精品国产91久久久久久吃药 | 欧美精品第一区 | 午夜免费网站 | 免费观看的黄色网址 | 毛片视频网址 | 天天做日日做 | 亚洲精品一区中文字幕乱码 | 欧美福利| 久久夜色精品国产 | 国产精品久久精品 | 欧美激情精品久久久久久 | 成人免费视频一区 | 激情在线视频网站 | 国产日韩精品在线 | 亚洲国产成人精品女人 | 日本高清视频在线播放 | 日本 欧美 国产 | 国产一区二区中文字幕 | 69av网| 日韩不卡一区二区 | 午夜影院视频在线观看 | 91一区|