找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 18053|回复: 51
打印 上一主题 下一主题
收起左侧

stm32摄像头颜色识别+舵机控制ov7670

  [复制链接]
跳转到指定楼层
楼主
ID:226507 发表于 2017-8-10 12:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32f103,正点原子的mini板。配合ov7670,能够进行颜色识别+舵机控制。圈出颜色范围

代码下载:
颜色识别+舵机控制.7z (251.09 KB, 下载次数: 777)


主程序:
  1. #include "sys.h"
  2. #include "usart.h"               
  3. #include "delay.h"        
  4. #include "led.h"
  5. #include "usmart.h"
  6. #include "lcd.h"
  7. #include "ov7670.h"
  8. #include "exti.h"
  9. #include "timer.h"
  10. #include "EasyTrace.h"
  11. #include "PWM.h"

  12. //ALIENTEK Mini STM32开发板扩展实验9
  13. //摄像头实验
  14. extern u8 ov_sta;        //在exit.c里面定义
  15. extern u8 ov_frame;        //在timer.c里面定义
  16. u16 r,y;
  17. //更新LCD显示
  18. void camera_refresh(void)
  19. {
  20.         RESULT Resu;
  21.         TARGET_CONDI Condition={215,240,20,240,30,160,30,30,320,240};        //API参数  hls的阈值,识别时用的
  22.         
  23.         u32 j;
  24.          u16 color;         
  25.         if(ov_sta==2)
  26.         {
  27.                 LCD_Scan_Dir(U2D_L2R);                //从上到下,从左到右
  28.                 LCD_SetCursor(0x00,0x0000);        //设置光标位置
  29.                 LCD_WriteRAM_Prepare();     //开始写入GRAM        
  30.                  OV7670_CS=0;         
  31.                  OV7670_RRST=0;                                //开始复位读指针
  32.                 OV7670_RCK=0;
  33.                 OV7670_RCK=1;
  34.                 OV7670_RCK=0;
  35.                 OV7670_RRST=1;                                //复位读指针结束
  36.                 OV7670_RCK=1;  
  37.                 for(j=0;j<76800;j++)
  38.                 {
  39.                         GPIOB->CRL=0X88888888;                  
  40.                         OV7670_RCK=0;
  41.                         color=OV7670_DATA;                //读数据
  42.                         OV7670_RCK=1;         
  43.                         color<<=8;                                          
  44.                          OV7670_RCK=0;
  45.                         color|=OV7670_DATA;                //读数据                  
  46.                         OV7670_RCK=1;
  47.                         GPIOB->CRL=0X33333333;                                                         
  48.                         //
  49.                         //加算法,例灰阶转换,二值化之类的
  50.                   //
  51.                         LCD_WR_DATA(color);         
  52.                 }

  53.      if(Trace(&Condition,&Resu) )                      //API
  54.                         {
  55.                                 
  56.                                 
  57.                                 LCD_Fill(Resu.x-Resu.w/2,Resu.y-Resu.h/2,Resu.x+Resu.w/2,Resu.y-Resu.h/2+1,0xf800);//u16 x,u16 y,u16 width,u16 hight,u16 Color
  58.                                 LCD_Fill(Resu.x-Resu.w/2,Resu.y-Resu.h/2,Resu.x-Resu.w/2+1,Resu.y+Resu.h/2,0xf800);
  59.                                 LCD_Fill(Resu.x-Resu.w/2,Resu.y+Resu.h/2,Resu.x+Resu.w/2,Resu.y+Resu.h/2+1,0xf800);
  60.                                 LCD_Fill(Resu.x+Resu.w/2,Resu.y-Resu.h/2,Resu.x+Resu.w/2+1,Resu.y+Resu.h/2,0xf800);
  61.                                 LCD_Fill(Resu.x-2,Resu.y-2,Resu.x+2,Resu.y+2,0xf800);
  62.                         
  63.                                   LED1=!LED1;
  64.                                   r=Resu.x;
  65.                                   y=Resu.y;
  66.                         }
  67.                         
  68.                         
  69.                
  70.                
  71.                  OV7670_CS=1;                                                         
  72.                 OV7670_RCK=0;
  73.                 OV7670_RCK=1;
  74.                 EXTI->PR=1<<15;                     //清除LINE8上的中断标志位
  75.                 ov_sta=0;                                        //开始下一次采集
  76.                  ov_frame++;
  77.                 LCD_Scan_Dir(DFT_SCAN_DIR);        //恢复默认扫描方向                                                     
  78.         }
  79. }         
  80. int main(void)
  81. {
  82.         u16 led0pwmval;
  83.         static int t=0;         
  84.         u8 i;        
  85.         delay_init();                     //延时函数初始化
  86.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
  87.         uart_init(9600);
  88.         OV7670_Init();        
  89.         LED_Init();                                  //初始化与LED连接的硬件接口
  90.         LCD_Init();                 //初始化LCD
  91.   TIM2_PWM_Init(199,7199);                      //PWM定时器设置
  92.         if(lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X5510||lcddev.id==0X1963) //强制设置屏幕分辨率为320*240.以支持3.5寸大屏
  93.         {
  94.                 lcddev.width=240;
  95.                 lcddev.height=320;
  96.         }
  97.         usmart_dev.init(72);        //初始化USMART        
  98.         
  99.          POINT_COLOR=RED;//设置字体为红色
  100.         LCD_ShowString(60,50,200,200,16,"Mini STM32");        
  101.         LCD_ShowString(60,70,200,200,16,"OV7670 TEST");        
  102.         LCD_ShowString(60,90,200,200,16,"ATOM@ALIENTEK");
  103.         LCD_ShowString(60,110,200,200,16,"2014/3/27");           
  104.         LCD_ShowString(60,130,200,200,16,"Use USMART To Set!");         
  105.           LCD_ShowString(60,150,200,200,16,"OV7670 Init...");         
  106.         while(OV7670_Init())//初始化OV7670
  107.         {
  108.                   LCD_ShowString(60,150,200,200,16,"OV7670 Error!!");
  109.                   delay_ms(200);
  110.             LCD_Fill(60,150,239,166,WHITE);
  111.             delay_ms(200);
  112.         }
  113.          LCD_ShowString(60,150,200,200,16,"OV7670 Init OK");
  114.         delay_ms(1500);                              
  115.         TIM3_Int_Init(10000,7199);                        //TIM3,10Khz计数频率,1秒钟中断                                                                          
  116.         EXTI15_Init();                                                //使能定时器捕获
  117.         OV7670_Window_Set(10,174,240,320);        //设置窗口         
  118.           OV7670_CS=0;


  119.          
  120.         
  121.          while(1)
  122.         {        
  123.                  camera_refresh();        //更新显示         
  124.                  
  125.                         printf("Resu:%d-%d\r\n",r,y);
  126.                         if(y>120)
  127.                                 t++;
  128.                 if(t==0)
  129.                         led0pwmval=188;
  130.                 else if(t==1)
  131.                         led0pwmval=190;
  132.                 else if(t==2)
  133.                         led0pwmval=194;
  134.                 else
  135.                         led0pwmval=194;
  136.                   
  137.                         
  138.                     printf("Result:%d\r\n",t);
  139.                           delay_ms(10);
  140.                           delay_ms(10);
  141.                     
  142.                      TIM_SetCompare3(TIM2,led0pwmval);        
  143.                            printf("Re:%d\r\n",led0pwmval);
  144.                
  145.                 if(i!=ov_frame)                //DS0闪烁.
  146.                 {
  147.                         i=ov_frame;
  148.                         LED0=!LED0;
  149.                         
  150.                  }
  151.         }           
  152. }

复制代码




评分

参与人数 1黑币 +5 收起 理由
路梓孜 + 5 刚好有个需要用7670做颜色识别实验,正好参.

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏27 分享淘帖 顶8 踩
回复

使用道具 举报

沙发
ID:226705 发表于 2017-8-10 19:45 | 只看该作者
感谢分享
回复

使用道具 举报

板凳
ID:226705 发表于 2017-8-10 20:30 | 只看该作者
请问下这是什么型号的开发板啊,是stm32f407的吗
回复

使用道具 举报

地板
ID:226705 发表于 2017-8-10 21:33 | 只看该作者
你好能加我下qq向你请教下东西吗,关于摄像头小球定位的,290407985,很感谢
回复

使用道具 举报

5#
ID:108109 发表于 2017-8-12 09:31 | 只看该作者
可以用吗?
回复

使用道具 举报

6#
ID:227752 发表于 2017-8-16 15:58 | 只看该作者
高手,技术nc
回复

使用道具 举报

7#
ID:227752 发表于 2017-8-16 15:59 | 只看该作者
高手,技术nc
回复

使用道具 举报

8#
ID:240128 发表于 2017-10-19 18:59 | 只看该作者
我看看你的文件正好我缺颜色识别
回复

使用道具 举报

9#
ID:244736 发表于 2017-11-1 07:12 | 只看该作者
顶一下
回复

使用道具 举报

10#
ID:246070 发表于 2017-11-4 19:48 | 只看该作者
顶。。。。。。。。。。
回复

使用道具 举报

11#
ID:246070 发表于 2017-11-5 11:32 | 只看该作者
作者能否讲解一下
回复

使用道具 举报

12#
ID:263355 发表于 2017-12-19 16:41 | 只看该作者
不能下啊
回复

使用道具 举报

13#
ID:260390 发表于 2017-12-21 10:11 | 只看该作者
不错,下来看看,谢谢楼主
回复

使用道具 举报

14#
ID:264196 发表于 2017-12-27 19:11 | 只看该作者
找了好久,用来学习,谢谢!
回复

使用道具 举报

15#
ID:236898 发表于 2018-3-15 12:50 | 只看该作者
您好,我想请教一下您,Trace(&Condition,&Resu) 这个函数是在哪里读取到了我的图像数据呢
回复

使用道具 举报

16#
ID:291267 发表于 2018-3-25 16:06 | 只看该作者
回答的什么呀,看不了
回复

使用道具 举报

17#
ID:297945 发表于 2018-3-27 19:48 | 只看该作者
作者好,我想用stm32设计一款关于摄像头识别亮灯,小车舵机配合到亮灯旁边,可以实现吗?
回复

使用道具 举报

18#
ID:172280 发表于 2018-5-24 12:29 | 只看该作者
谢谢楼主分享!!!!
回复

使用道具 举报

19#
ID:336427 发表于 2018-5-25 17:38 | 只看该作者
你好这个程序程序用103VET6能跑吗
回复

使用道具 举报

20#
ID:353347 发表于 2018-6-21 13:47 | 只看该作者
用不了,有错误。
回复

使用道具 举报

21#
ID:361916 发表于 2018-7-1 10:21 | 只看该作者
f1系类用来控制摄像头内存够用吗
回复

使用道具 举报

22#
ID:366660 发表于 2018-7-7 09:47 来自手机 | 只看该作者
这个图像显示是灰度吗?
回复

使用道具 举报

23#
ID:381742 发表于 2018-8-1 16:01 | 只看该作者
赞。。。。。。。。。。。。。。。。

回复

使用道具 举报

24#
ID:380389 发表于 2018-8-1 22:32 来自手机 | 只看该作者
收藏一下,学习
回复

使用道具 举报

25#
ID:228731 发表于 2018-8-8 14:06 | 只看该作者
厉害 谢谢楼主 辛苦了
回复

使用道具 举报

26#
ID:408914 发表于 2018-10-13 11:41 | 只看该作者
大家不要下
回复

使用道具 举报

27#
ID:161033 发表于 2018-12-19 14:04 | 只看该作者
先感谢。。。
回复

使用道具 举报

28#
ID:395676 发表于 2018-12-20 10:32 | 只看该作者
谢谢楼主分享啦
回复

使用道具 举报

29#
ID:469634 发表于 2019-4-5 22:54 | 只看该作者
感谢楼主的程序,但是有后面pwm输出程序的话,识别容易卡主,不用的话建议去掉
回复

使用道具 举报

30#
ID:469634 发表于 2019-4-5 23:01 | 只看该作者
感谢楼主的程序,就是有时识别时,容易卡主
回复

使用道具 举报

31#
ID:506294 发表于 2019-4-7 15:52 | 只看该作者
这个颜色识别可以识别光源颜色吗
就比如红绿灯的颜色能识别吗
回复

使用道具 举报

32#
ID:508945 发表于 2019-4-13 11:03 | 只看该作者
这个下载以后怎么用啊
回复

使用道具 举报

33#
ID:498701 发表于 2019-4-13 17:27 来自手机 | 只看该作者
这个真不错,下载看看。
回复

使用道具 举报

34#
ID:410445 发表于 2019-7-28 19:02 | 只看该作者
很好用
回复

使用道具 举报

35#
ID:591840 发表于 2019-7-29 10:33 | 只看该作者
请问我用的是103 zet6  有哪些需要改的地方
回复

使用道具 举报

36#
ID:405372 发表于 2019-8-1 19:49 | 只看该作者
刚好用上,感谢楼主
回复

使用道具 举报

37#
ID:521067 发表于 2019-8-1 21:10 | 只看该作者
请问有仿真图吗
回复

使用道具 举报

38#
ID:587606 发表于 2019-8-2 13:43 | 只看该作者
请问,如果是ov7620 要改哪些地方呢?
回复

使用道具 举报

39#
ID:405372 发表于 2019-8-2 15:11 | 只看该作者
这个怎么移植到精英版啊
回复

使用道具 举报

40#
ID:523334 发表于 2019-8-7 18:28 | 只看该作者
正好写出来不对,看看参考一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表