查看: 3050|回复: 0

GD32Semi-Automatic-Camera

[复制链接]
  • TA的每日心情
    开心
    2017-6-17 09:42
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2017-6-16 17:16:31 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 沙漠之风 于 2017-6-17 10:25 编辑

    GD32Semi-Automatic-Camera
    一、前言
             本作品主要是围绕OV7670+LCD来设计的,玩单片机已经玩很多年了,一直没有搞过摄像头,心里总感觉缺点什么。这几年机器人、机器视觉、图像处理相当的火,当然玩这些东西,不一定要用这种摄像头,使用USB摄像头就够了,如前些日子玩的树莓派就是直接用USB摄像头来搞的。可是作为嵌入开发的追随者,还是更喜欢这种摄像头,让人能感觉到是自己实实在在的控制着它。
           本作品非常的基础,但是基本需要的东西都覆盖了,分享出来给各位热爱摄像头,热爱机器视觉等嵌入式图像处理的伙伴们。如果你们想用来做项目,可以在我这个作品的基础上去提高其通信速度,将其中的软件IO模拟改成硬件通讯,速度定然能大大提高,做做简单的图像处理中的运动跟踪是完全没有问题的。

    二、系统框图

    9UO`(9J$RSNT)KD}}92OI.png
                                                                             图1.1半自动相机系统框图
    三、功能介绍
    IMG_20170616_105630.jpg
    图1.2 系统总体
           从上图中我们可以看到整个系统包括电机部分、显示部分、按键部分、摄像头+MCU ,其中两个舵机够成了云台,使得摄像头可以多方位多角度的拍摄。LCD带有触摸功能,其实我们的矩阵键盘可以不要,直接用这个触摸屏就能实现键盘的功能,只是觉得,按键也是一个仪器设备不可缺少的,将其添加到系统中大家可以选择性的使用。整个系统实现了如下功能:
    1、摄像头垂直+水平的移动
    2、摄像头输出视频帧的特性设置
    3、视频帧在LCD中显示
    IMG_20170616_165154.jpg
    图1.3 LCD视频帧显示
    4、视频帧在PC机的串口调试助手上显示
    }P6)3$%9]MGA]RMX2J(]A)8.png
    图1.4 PC端串口调试助手视频帧显示
    5、LCD中实现了画板功能

    IMG_20170616_165719.jpg
                                                                                               图1.5 LCD画板


    四、核心代码部分
          代码非常的基础,没有什么好说的,所有的协议都是IO口模拟的,好处是,没有引脚的限制,坏处就是速度慢。
    1. <font size="3"><font size="5"><font size="4">int main(void)
    2. {
    3. uint8_t lightmode=1,saturation=0,brightness=1,contrast=1;
    4. uint8_t effect=0;
    5. uint8_t running=0;
    6. uint8_t OVstart=0;
    7. systick_config();
    8. Led_gpio_config();
    9. BT_gpio_config();//配置引脚
    10. BT_exit_config();//配置中断,一定要先配置引脚再配置中断,顺序有问题将运行不正确
    11. BT4x4_gpio_config();
    12. gd_usart2_init();
    13. usart2_exit_config();
    14. SG_gpio_config();
    15. timer1_config();
    16. timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_1,SG01);
    17. timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_2,SG02);
    18. while(OV7670_Init())//初始化OV7670
    19. {
    20. printf("\r\n The OV7670 is Error!!! \r\n");
    21. Delay_ms(200);
    22. }
    23. printf("\r\n The OV7670 Init OK!!! \r\n");
    24. Delay_ms(1500);
    25. OV7670_Light_Mode(lightmode);//白平衡设置
    26. OV7670_Color_Saturation(saturation);//色度设置
    27. OV7670_Brightness(brightness);//亮度设置
    28. OV7670_Contrast(contrast);//对比度设置
    29. OV7670_Special_Effects(effect);//特效设置
    30. EXTI15_Init();
    31. OV7670_Window_Set(10,174,320,240); //设置窗口
    32. Timer4_config();//10Khz计数频率,1秒钟中断
    33. OV7670_Window_Set(10,174,320,240); //设置窗口
    34. OV7670_CSL;//使能AL422B
    35. TP_Init();
    36. Lcd_Init(); //初始化OLED
    37. spistar() ;//模拟SPI初始化
    38. LCD_Clear(WHITE); //清屏
    39. BACK_COLOR=BLACK;;POINT_COLOR=WHITE;
    40. showimage(); //显示40*40图片
    41. while (1){
    42. if(OVstart==1)
    43. {
    44. camera_refresh();//更新显示
    45. }
    46. /* check whether the button is pressed */
    47. if(RESET == gpio_input_bit_get(GPIOA,GPIO_PIN_0)){
    48. delay_1ms(1);
    49. /* check whether the button is pressed */
    50. if(RESET == gpio_input_bit_get(GPIOA,GPIO_PIN_0)){
    51. GPIO_TG(GPIOD) = GPIO_PIN_7;
    52. }
    53. }
    54. if(jiance()) //检测触摸和按键
    55. {
    56. showimage(); //显示40*40图片
    57. }
    58. if(ref){showimage();} //显示40*40图片

    59. keychar = Scan4x4key();
    60. if(keychar!=20)
    61. {
    62. if(keychar==1|keychar==2|keychar==3|keychar==10)
    63. {
    64. //第一件事情,相机随机特效
    65. printf("Do the first thing\t\n");
    66. KeyEvent=1;
    67. effect++;
    68. effect = effect%6+1;
    69. OV7670_Special_Effects(effect);//特效设置
    70. LCD_Fill(0,240,240,320,WHITE);
    71. showhanzi(15,265,10);
    72. showhanzi(55,265,11);
    73. showhanzi(95,265,12);
    74. showhanzi(135,265,13);
    75. showhanzi(175,265,14); }
    76. if(keychar==4|keychar==5|keychar==6|keychar==11)
    77. {
    78. //第二件事情,让舵机水平加垂直
    79. printf("Do the second thing\t\n");
    80. KeyEvent=2;
    81. running=1;
    82. OV7670_Special_Effects(0);//特效设置
    83. LCD_Fill(0,240,240,320,WHITE);
    84. showhanzi(15,265,10);
    85. showhanzi(55,265,11);
    86. showhanzi(95,265,12);
    87. showhanzi(135,265,13);
    88. showhanzi(175,265,14);
    89. }
    90. if(keychar==7|keychar==8|keychar==9|keychar==12)
    91. {
    92. //第三件事情,让视频上传到上位机
    93. printf("Do the third thing\t\n");
    94. KeyEvent=3;
    95. running=0;
    96. OV7670_Special_Effects(0);//特效设置
    97. LCD_Fill(0,240,240,320,WHITE);
    98. showhanzi(15,265,10);
    99. showhanzi(55,265,11);
    100. showhanzi(95,265,12);
    101. showhanzi(135,265,13);
    102. showhanzi(175,265,14);
    103. }
    104. if(keychar==15|keychar==14|keychar==0|keychar==13)
    105. {
    106. //第四件事情,舵机暂停拍照
    107. printf("Do the last thing\t\n");
    108. KeyEvent=4;
    109. running=0;
    110. OV7670_Special_Effects(0);//特效设置
    111. OVstart=1;
    112. LCD_Fill(0,240,240,320,WHITE);
    113. showhanzi(15,265,10);
    114. showhanzi(55,265,11);
    115. showhanzi(95,265,12);
    116. showhanzi(135,265,13);
    117. showhanzi(175,265,14);
    118. } }
    119. if(running==1)
    120. {
    121. delay_1ms(10); //由于舵机转动到具体位置是需要时间的,所以预留一个延迟来保证舵机运转所以需要的时间。
    122. timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_1,SG01);
    123. timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_2,SG02);
    124. if(SGdracti==0)
    125. {
    126. SG01 = SG01+2;
    127. SG02 = SG02+2;
    128. }else
    129. {
    130. SG01 = SG01-2;
    131. SG02 = SG02-2;
    132. }
    133. if(SG01>1350)
    134. {
    135. SGdracti = 1;
    136. }
    137. if(SG01<=650)
    138. {
    139. SGdracti = 0;
    140. }
    141. if(SG02>1350)
    142. {
    143. SGdracti = 1;
    144. }
    145. if(SG02<=650)
    146. {
    147. SGdracti = 0;
    148. } }}}
    149. </font></font></font>
    复制代码
    五、视频展示
    http://player.youku.com/player.php/sid/XMjgyODc1MTgwNA==/v.swf
    六、附件
            由于工程文件超过了10M,超出了这界面的要求,附上部分核心代码。
    核心代码: Semi-automatic-camera.rar (9.13 MB, 下载次数: 3, 售价: 2 与非币)
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-25 21:58 , Processed in 0.129545 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.