资讯详情

树莓派高分贝报警器和键盘

前言:本学期选择了嵌入式课程,打算以后走web我觉得这门课对我来说主要用的是学习操作系统,看了某个内部的视频课,学完了UnixC部分让我受益匪浅,但看到裸板的开发和驱动程序让我停下来,以后继续学习需要很多时间和精力。在这里我妥协了(不要在专业方向花太多时间),但是为了不把这门课弄坏或者进入嵌入式门,我买了一个覆盆子派,写了一些有趣的小项目。

写代码之前

1. 连接树莓派:一开始选择ssh连接,后来学会了串口连接(硬件层面的连接)和嵌入式搭点边,但是ssh真的很香。在开发过程中,我还是选择了ssh连接

2. GPIO嘴和高低电平:我是计算机专业,不是电子专业。我只知道这些。反正是树莓派提供的。GPIO口,可以input或者output用于外接其他设备的高电平和低电平代码类似于驱动程序来处理一些逻辑(听老师说驱动程序需要带什么操作系统,我的覆盆子派不是纯裸板,不能从专业专业嵌入式编程)

3. 环境:树莓派4b 一堆杜邦线 笔记本电脑网线路由器 路由器网线路由器 无源蜂鸣器,有源蜂鸣器,面包板, LED小灯珠,声敏光敏传感器4*4小键盘

项目1:高分贝报警器

input:声敏传感器 output:无源蜂鸣器

简介:简单IO

import RPi.GPIO as GPIO import time import signal  INPUT = 12 OUTPUT = 25  def sound(i, o, t):     GPIO.setwarnings(False)     GPIO.setmode(GPIO.BCM)     GPIO.setup(o, GPIO.OUT)     GPIO.setup(i, GPIO.IN)          def handler(signum, frame):         GPIO.output(o, GPIO.LOW)         exit(0)     signal.signal(signal.SIGINT, handler)          while 1:         if GPIO.input(i) != 0:             GPIO.output(o, GPIO.HIGH)             time.sleep(t)         else:             GPIO.output(o, GPIO.LOW) sound(INPUT, OUTPUT, 0.1) 

项目2:简陋钢琴

input:4*4键盘 output:有源蜂鸣器

简介:这个是期中写的项目,期末现在写博客懒得改细节了 ,music类是根据12平均律输出音符,具体部分看乐理书去,keyboarg_music类是调用了music类根据键盘输入输出音符(这里最好键盘封装一个类,music封装一个,调用写一个程序好一点,不过我懒的改了),使用手册如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

1-12为C到B 13降一个8度,14升一个8度,15回到中间的8度,16输出小星星(你可以自己改代码写曲子)

# Music.py
import RPi.GPIO as GPIO
import time
class Music:
    # c1_ is c1#
    c1  = 33
    c1_ = 35
    d1  = 37
    d1_ = 39
    e1  = 41
    f1  = 44
    f1_ = 46
    g1  = 49
    g1_ = 52
    a1  = 55
    a1_ = 58
    b1  = 62
    
    c2  = 65
    c2_ = 69
    d2  = 73
    d2_ = 78
    e2  = 82
    f2  = 87
    f2_ = 93
    g2  = 98
    g2_ = 104
    a2  = 110
    a2_ = 117
    b2  = 123

    c3  = 131
    c3_ = 139
    d3  = 147
    d3_ = 156
    e3  = 165
    f3  = 175
    f3_ = 185
    g3  = 196
    g3_ = 208
    a3  = 220
    a3_ = 233
    b3  = 247

    c4  = 262
    c4_ = 277
    d4  = 294
    d4_ = 311
    e4  = 330
    f4  = 349
    f4_ = 370
    g4  = 392
    g4_ = 415
    a4  = 440
    a4_ = 466
    b4  = 494

    c5  = 523
    c5_ = 554
    d5  = 587
    d5_ = 622
    e5  = 659
    f5  = 698
    f5_ = 740
    g5  = 784
    g5_ = 831
    a5  = 880
    a5_ = 932
    b5  = 988

    c6  = 1047
    c6_ = 1109
    d6  = 1175
    d6_ = 1245
    e6  = 1319
    f6  = 1397
    f6_ = 1460
    g6  = 1568
    g6_ = 1661
    a6  = 1760
    a6_ = 1865
    b6  = 1976

    c7  = 2093
    c7_ = 2217
    d7  = 2349
    d7_ = 2489
    e7  = 2537
    f7  = 2794
    f7_ = 2960
    g7  = 3136
    g7_ = 3322
    a7  = 3520
    a7_ = 3729
    b7  = 3951

    def __init__(self):
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(12, GPIO.OUT)
        GPIO.output(12, GPIO.HIGH)
    
    def outOne(self, note, t):
        buzz = GPIO.PWM(12, note)
        buzz.start(50)
        time.sleep(t)
        buzz.stop()
    
    def get_mode_list(self):
        ret = [
            [[self.c1,   self.c1_,    self.d1,     self.d1_],
             [self.e1,   self.f1,     self.f1_,    self.g1],
             [self.g1_,  self.a1,     self.a1_,    self.b1],],

            [[self.c2,   self.c2_,    self.d2,     self.d2_],
             [self.e2,   self.f2,     self.f2_,    self.g2],
             [self.g2_,  self.a2,     self.a2_,    self.b2],],

            [[self.c3,   self.c3_,    self.d3,     self.d3_],
             [self.e3,   self.f3,     self.f3_,    self.g3],
             [self.g3_,  self.a3,     self.a3_,    self.b3],],

            [[self.c4,   self.c4_,    self.d4,     self.d4_],
             [self.e4,   self.f4,     self.f4_,    self.g4],
             [self.g4_,  self.a4,     self.a4_,    self.b4],],

            [[self.c5,   self.c5_,    self.d5,     self.d5_],
             [self.e5,   self.f5,     self.f5_,    self.g5],
             [self.g5_,  self.a5,     self.a5_,    self.b5],],

            [[self.c6,   self.c6_,    self.d6,     self.d6_],
             [self.e6,   self.f6,     self.f6_,    self.g6],
             [self.g6_,  self.a6,     self.a6_,    self.b6],],

            [[self.c7,   self.c7_,    self.d7,     self.d7_],
             [self.e7,   self.f7,     self.f7_,    self.g7],
             [self.g7_,  self.a7,     self.a7_,    self.b7],],
            ] 
        return ret

    def out_star(self):
        buzz = GPIO.PWM(12, 440)

        star = [self.c4, self.c4, self.g4, self.g4, self.a4, self.a4, self.g4]

        for i in star:
            buzz.ChangeFrequency(i)
            buzz.start(50)
            time.sleep(0.4)
            buzz.stop()
            time.sleep(0.1)

if __name__ == "__main__":
    pass
# keyboard_music.py
import RPi.GPIO as GPIO
import time
import Music
import signal
class keybroad:
    rows = [17, 27, 22, 16]
    columns = [5, 6, 13, 26]
    keybroad_map = [
        ["1","2","3","4"],
        ["5","6","7","8"],
        ["9","10","11","12"],
        ["A","B","C","D"]]
    m = Music.Music()
    mode_list = m.get_mode_list()  # 7s 8
    curMode = 3
    def __init__(self):
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BCM)
        for row in self.rows:
            GPIO.setup(row, GPIO.OUT)
        for col in self.columns:
            GPIO.setup(col, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

    def deal(self, x, y):
        t = 0.2
        if x < 3:
            self.m.outOne(self.mode_list[self.curMode][x][y], t)
        elif y == 0:
            if self.curMode > 0:
                self.curMode -= 1
        elif y == 1:
            if self.curMode < 6:
                self.curMode += 1
        elif y == 2:
            self.curMode = 3
        elif y == 3:
            self.m.out_star()
        else:
            print(x, y)
    
    def start(self):
        while 1:
            for i in range(len(self.keybroad_map)):
                GPIO.output(self.rows[i], GPIO.HIGH)
                for j in range(len(self.columns)):
                    if (GPIO.input(self.columns[j]) == 1):
                        self.deal(i, j)
                        time.sleep(0.3)
                GPIO.output(self.rows[i], GPIO.LOW)

    def check(self, code):
        ret = 0
        for i in range(len(self.keybroad_map)):
            GPIO.output(self.rows[i], GPIO.HIGH)
            for j in range(len(self.columns)):
                if (GPIO.input(self.columns[j]) == 1 and code == self.keybroad_map[i][j]):
                    ret = 1
            GPIO.output(self.rows[i], GPIO.LOW)
            return ret

def handler(signum, frame):
    exit(0)


if __name__ == "__main__":
    signal.signal(signal.SIGINT, handler)
    k = keybroad()
    k.start()



标签: f6光敏传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台