树莓派综合项目3:AI视觉机械臂小车(一)蜂鸣器

一、介绍

  树莓派综合项目2:智能小车(六)黑线循迹
  树莓派基础实验
  在树莓派项目2中,我学到了很多东西,主要是通过实践掌握了树莓派小车的无线电控制和自动化避障控制,虽然不是特别的高深和难懂,但是增强了我学习的动力和信心,万丈高楼平地起,2018年6月买的小车现在才学习吸收完,原因还是先学完基础实验内容后,才能学懂项目2,推及以后更难的内容,若没有项目2做铺垫,估计也学不来,更不用说自己创作了。

  目前我仍处于学习的初级阶段,正向学习的中级阶段迈进。项目2学习完后,下一步做什么呢?我有两个想法:
一是学物联网的自动化控制。我对农业很感兴趣,也喜欢养花种菜,想做智能温室的树莓派物联网,但是我家里没有院子,房间也小,做个mini的都困难;
二是AI视觉和机械臂。在各类树莓派创客书籍中发现,视觉识别是一个主要内容,是信息输入的重要方式,而机械臂是机器人输出、工作的重要方式,比如农业采摘机器人。

  于是我选择了继续做机器人,在网上慢慢选了一个月的时间,终于找到一款适合我现在的套件。


  做视觉处理对硬件的计算力有要求,为了让运行更流畅,我选择了树莓派4B 8G版本,整个套件花了我1777大洋,虽然有点心疼,但是投资学习是不会亏的。


如果不是4B8G的主板,价格会少很多的,同学们可以自己选择。或者看我的文章就可以了,欢迎大家关注我,点赞哦!我会把这套学习资料吃透后分享给大家,如果能再开发,做一个草莓采摘机器人就更棒了!


与项目2的小车做对比要大许多,操作升级、再开发的空间很大。


二、组件

三、实验原理

看过我项目2的同学,相信对小车控制这部分已经很熟悉了,但项目2中的python代码都是我自己写的,在这个套件中我们来学习下专业人士的代码是怎么写的。

这个课程的第一个实验就是蜂鸣器实验,作为开局实验是比较基础的,就是不知道后面的复杂实验里是否会用到蜂鸣器。


我的基础实验里做过有源蜂鸣器和无源蜂鸣器,它的基础原理大家可以点击参考:
树莓派基础实验9:蜂鸣器实验
本实验中使用的是无源蜂鸣器,和电磁扬声器一样,需要接在音频输出电路中才能周期性地振动发声。只要输出不同频率的PWM波,即可发出不同的音符,不同的音符组合起来就是一个曲子了。

树莓派功能转接板

在树莓派功能转接板上看到,蜂鸣器是直接焊接在板子上的,连接的板载模式第11针,不用像基础实验中一样去接线,但初学者最好看一下基础实验9,学习下基本接线方法。

四、实验步骤

  第1步: 蜂鸣器焊接在板子上,不用连接电路。这里说下树莓派4B8G是64位的操作系统,与4G、2G版本不能混用。

  第2步: 编写程序。原始代码为python2版本,为适应发展,我还是转换成了python3版本,并有中文注释,更详细讲解请参考树莓派基础实验9:蜂鸣器实验

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
import time

Buzzer = 11

CL = [0, 131, 147, 165, 175, 196, 211, 248]     # 低音C调音符对应的频率

CM = [0, 262, 294, 330, 350, 393, 441, 495]     # 中音C调音符对应的频率

CH = [0, 525, 589, 661, 700, 786, 882, 990]     # 高音C调音符对应的频率

song_1 = [  CM[3], CM[5], CM[6], CM[3], CM[2], CM[3], CM[5], CM[6], # 歌曲1的音符
            CH[1], CM[6], CM[5], CM[1], CM[3], CM[2], CM[2], CM[3], 
            CM[5], CM[2], CM[3], CM[3], CL[6], CL[6], CL[6], CM[1],
            CM[2], CM[3], CM[2], CL[7], CL[6], CM[1], CL[5] ]

beat_1 = [  1, 1, 3, 1, 1, 3, 1, 1,             # 歌曲1的节拍, 1 指 1/8 拍
            1, 1, 1, 1, 1, 1, 3, 1, 
            1, 3, 1, 1, 1, 1, 1, 1, 
            1, 2, 1, 1, 1, 1, 1, 1, 
            1, 1, 3 ]

song_2 = [  CM[1], CM[1], CM[1], CL[5], CM[3], CM[3], CM[3], CM[1], # 歌曲2的音符
            CM[1], CM[3], CM[5], CM[5], CM[4], CM[3], CM[2], CM[2], 
            CM[3], CM[4], CM[4], CM[3], CM[2], CM[3], CM[1], CM[1], 
            CM[3], CM[2], CL[5], CL[7], CM[2], CM[1]    ]

beat_2 = [  1, 1, 2, 2, 1, 1, 2, 2,             # 歌曲2的节拍, 1 指 1/8 拍
            1, 1, 2, 2, 1, 1, 3, 1, 
            1, 2, 2, 1, 1, 2, 2, 1, 
            1, 2, 2, 1, 1, 3 ]

def setup():
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)        # 根据物理位置对gpio进行编号
    GPIO.setup(Buzzer, GPIO.OUT)    # 设置引脚模式为输出
    global Buzz                     # 指定一个全局变量来替换GPIO.PWM
    Buzz = GPIO.PWM(Buzzer, 440)    # 440 是初始频率
    Buzz.start(50)                  # 启动蜂鸣器PWM50%的占空比

def loop():
    while True:
        print('\n    Playing song 1...')
        for i in range(1, len(song_1)):     # 播放歌曲1
            Buzz.ChangeFrequency(song_1[i]) # 沿着歌曲的音符改变频率
            time.sleep(beat_1[i] * 0.5)     # 一个节拍为0.5s的时长
        time.sleep(1)                       # 

        print('\n\n    Playing song 2...')
        for i in range(1, len(song_2)):     
            Buzz.ChangeFrequency(song_2[i]) 
            time.sleep(beat_2[i] * 0.5)     

def destory():
    Buzz.stop()                 # 停止PWM
    GPIO.output(Buzzer, 1)      # 将蜂鸣器引脚设置为输出高电平
    GPIO.cleanup()              # 释放资源

if __name__ == '__main__':      # 程序从这里开始
    setup()
    try:
        loop()
    except KeyboardInterrupt:   # 当输入'Ctrl+C'时, 函数destroy()会被执行
        destory()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容