树莓派外设开发之玩传感器

2023-11-04

参考:用树莓派玩传感器
作者:LEO-max
发布时间: 2021-02-24 16:30:46
网址:https://blog.csdn.net/zouchengzhi1021/article/details/114026649?spm=1001.2014.3001.5502

接线

VCC -> 1针脚
OUT -> 40针脚
GND -> 6针脚

红外避障传感器

C语言代码:

#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>

#define AVOID    29

int main(void)
{

    if (wiringPiSetup() == -1)
    {
        printf("setup wiringPi failed !");
        return 1;
    }

    pinMode(AVOID, INPUT);

    while (1)
    {
        if (digitalRead(AVOID) == 0)
        {
            printf("阻挡\n");
            delay(500);
        }
    }

    return 0;
}

Python代码:

import RPi.GPIO as GPIO
import os
import time

GPIO.setmode(GPIO.BCM) #使用BCM编码方式

GPIO_OUT = 21

GPIO.setup(GPIO_OUT,GPIO.IN)


while True:
    if GPIO.input(GPIO_OUT)==0: #当有障碍物时,传感器输出低电平,所以检测低电平
        print("There has a barrier")
        time.sleep(1)
       # exit(-1)
    #else:

    #print("OK")
    #time.usleep(1000)

GPIO.cleanup()

声音传感器

声音传感器需要调一下电阻来调节传感器对声音的灵敏度

C语言:

#include <stdio.h>
#include <wiringPi.h>

#define PCF       29

int main (void)
{
        int value;
        int count = 0;
        wiringPiSetup ();

        pinMode(PCF,INPUT);
        while(1) 
        {
                if (digitalRead(PCF) != 0)
                {
                        printf("Voice In!! \n");
                        delay(500);
                }
                else{
                        printf("ok\n");
                        delay(500);
                } 
        } 
        return 0;
}        

Python:

#!/usr/bin/python
# encoding:utf-8
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
pin_voice=21
GPIO.setup(pin_voice, GPIO.IN)
try:
    while True:
        status = GPIO.input(pin_voice)
        if status == True:
            print('检测到声音')
        else:
            print('正常')
        time.sleep(0.5)
except KeyboradInterrupt:
    GPIO.cleanup()

配合电灯程序来实现吹灭LED灯操作:

#include <stdio.h>
#include <wiringPi.h>

#define PCF       29
#define LED       9

int main (void)
{
        int value;
        int count = 0;
        wiringPiSetup ();
        // Setup pcf8591 on base pin 120, and address 0x48
        pinMode(PCF,INPUT);
        while(1) // loop forever
        {
                if (digitalRead(PCF) != 0)
                {
                        printf("Voice In!! \n");
                        digitalWrite(LED,LOW);  //低电平灭
                        return 0;
                }
                else{
                        printf("ok\n");
                        digitalWrite(8,HIGH);           //高电平亮
                        delay(500);
                }
        }
        return 0;
}

火焰传感器

Python代码:

#!/usr/bin/python
# encoding:utf-8
import RPi.GPIO as GPIO
import time

pin_fire=21
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin_fire, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
try:
    while True:
        status = GPIO.input(pin_fire)
        if status == True:
            print('检测到火')
        else:
            print('未检测到火')
        time.sleep(0.5)
except KeyboradInterrupt:
    GPIO.cleanup()        

C语言:

#include <stdio.h>
#include <wiringPi.h>

#define PCF     29

int main (void)
{
        wiringPiSetup ();
        // Setup pcf8591 on base pin 120, and address 0x48
        pinMode(PCF,INPUT);
        while(1) // loop forever
        {
                if (digitalRead(PCF) != 0)
                {
                        printf("检测到火\n");
                        delay(500);
                }
                else{
                        printf("无火\n");
                        delay(500);
                }
        }
        return 0;
}

烟雾传感器

#!/usr/bin/python
# encoding:utf-8
import RPi.GPIO as GPIO
import time

pin_fire=21
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin_fire, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
try:
    while True:
        status = GPIO.input(pin_fire)
        if status == True:
            print('没有检测到烟雾')
        else:
            print('检测到有烟雾')
        time.sleep(0.5)
except KeyboradInterrupt:
    GPIO.cleanup()

超声波测距传感器

#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>

#define Trig    29
#define Echo    28

void ultraInit(void)
{
        pinMode(Echo, INPUT);
        pinMode(Trig, OUTPUT);
}

float disMeasure(void)
{
        struct timeval tv1;
        struct timeval tv2;
        long time1, time2;
    float dis;

        digitalWrite(Trig, LOW);
        delayMicroseconds(2);

        digitalWrite(Trig, HIGH);
        delayMicroseconds(10);      //发出超声波脉冲
        digitalWrite(Trig, LOW);

        while(!(digitalRead(Echo) == 1));
        gettimeofday(&tv1, NULL);           //获取当前时间

        while(!(digitalRead(Echo) == 0));
        gettimeofday(&tv2, NULL);           //获取当前时间

        time1 = tv1.tv_sec * 1000000 + tv1.tv_usec;   //微秒级的时间
        time2  = tv2.tv_sec * 1000000 + tv2.tv_usec;

        dis = (float)(time2 - time1) / 1000000 * 34000 / 2;  //求出距离
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树莓派外设开发之玩传感器 的相关文章

随机推荐

  • RSA私钥及公钥生成

    1 生成密钥 cmd 进入jdk的bin目录下 输入如下命令 keytool genkey alias xxxx keyalg RSA keysize 1024 storetype pkcs12 keystore D xxxx p12 会出
  • xml文件的注释展示

    xml文件的注释格式 lt 被注释的内容 gt 注释不能嵌套定义 XML可以从HTML中分离数据 即能够在HTML文件之外将数据存储在XML文档中 这样可以使开发者集中精力使用HTML做好数据的显示和布局 并确保数据改动时不会导致HTML文
  • Latex中的(左边有大括号的)方程组解决方案汇总

    CODE begin equation begin cases eq1 eq2 end cases end equation 对于不需对齐的方程组这样写比较方便 需要对齐的时候间距太大了 有时候需要对齐 这时候我用 CODE begin e
  • 欢迎来到 C# 9.0(Welcome to C# 9.0)

    C 9 0 已于 2020年11月10日 正式发布了 请点击链接转至 C 9 0 正式发布了 C 9 0 on the record 阅读最新版内容 https mp weixin qq com s b7yd5FoR6jDrhx8K 310
  • php 返回header,PHP header返回http头类型大全 header( Content-T

    php 代码库 定义编码 header Content Type text html charset utf 8 Atom header Content type application atom xml CSS header Conten
  • qt5.5.1 linux 64下载,[更新]Qt Enterprise v5.5.1正式发布[附下载]

    原标题 更新 Qt Enterprise v5 5 1正式发布 附下载 Qt最早诞生于1991年 长期以来一直以 linux平台下 最著名的开发平台 身份 在全世界开发者中享有盛誉 Qt Enterprise是目前最先进 最完整的跨平台C
  • 这个Chrome 插件,让你的GPT无比丝滑!

    ChatGPT的官网最近几天报错越来越频繁了 相信大家都发现了 一旦你离开页面时间比较久 再度返回跟它进行对话 就会出现如下报错 虽然这个报错信息以前也出现过 但现在的频率确实过高 对于每天需要使用 ChatGPT 处理大量任务的用户来说
  • 我们压缩了一批深度学习进阶“传送门”给小白

    编译 ShanLIU Chloe 笪洁琼 Harry 作者 Seth Weidman 阅读这篇文章的必要性 无论是作为行业内的从业者还是一个组织 在开始深度学习应用之前 都需要掌握两件事 1 知其然 掌握一个基础概念 知道深度学习的最新发展
  • Vue路由跳转到新页面之后,返回旧页面保持状态不变

    新项目中遇到了登录时点击用户协议 进入协议页面让用户阅读 然后返回登录页面时发现原来填写的手机号验证码全都没有了 解决方案 使用keep alive 在vue app中添加keep alive标签
  • MyBatis快速入门(四) MyBatis和Spring集成

    导入依赖包 前面介绍了MyBatis的相关知识 现在来介绍一下如何和Spring进行集成 MyBatis和Spring的集成工作是由MyBatis团队完成的 所以我们首先要先引入MyBatis和Spring的集成依赖包 这里我用的是Grad
  • 【渗透测试】Apache Shiro系列漏洞

    目录 Shiro 550 CVE 2016 4437 1 漏洞原理 2 影响版本 3 漏洞利用 Shiro 721 1 漏洞原理 2 影响版本 3 漏洞利用 Shiro认证绕过漏洞 CVE 2020 1957 1 漏洞原理 2 影响版本 3
  • 前端js调用方法的几种方式

    最近在做前端项目 因为没上vue还是原生的jq方法 所以遇到各种各样的问题 在这记录下几种前端触发的方法 1 onclick 在标签内直接写 nclick qz this 即可 然后js中写方法 2 fxbsbutton click 第一个
  • 变量的作用域和变量提升

    京东面试题 面试官小姐姐给出了一道题 var a 100 function test console log a a 10 console log a console log this a var a test 问我这三个会打印出来的值是什
  • 大数乘法 V2

    给出2个大整数A B 计算A B的结果 Input 第1行 大数A 第2行 大数B A B的长度 lt 100000 A B gt 0 Output 输出A B 如果用正常的大数乘法来做 会发现时间复杂度是的 显然是会TLE的 为了避免这种
  • 爬虫scrapy框架进阶-CrawlSpider, Rule

    文章适合于所有的相关人士进行学习 各位看官看完了之后不要立刻转身呀 期待三连关注小小博主加收藏 小小博主回关快 会给你意想不到的惊喜呀 文章目录 scrapy中加入CrawlSpider 创建项目 提取器和规则RULE scrapy爬虫实战
  • Inno Setup使用方法备份

    http www 360doc com content 13 0327 03 4221543 274250221 shtml
  • Java 注解计算12生肖,java Data中获取年,根据生日日期获取生肖注解,根据输入时间获取生肖,自定义注解的方式获取生肖 根据年份时间获取十二生肖

    最近 开发中需要增加生肖 但是不想增加字段 于是通过注解的方式 实现生日与生肖的转换 话不多说 直接上代码 如下 实体类中的字段 添加自定义注解 ToChineseZodiacSerializer 生肖 根据生日计算生肖 JsonSeria
  • Feign:Decoder与ErrorDecoder

    Feign在spingcloud架构中 各微服务之间的调用工具 它整合了ribbon的负载均衡 采用声明调用 使服务之间的调用更加简单 FeignClient value product configuration FeignBaseCon
  • DecimalFormat格式化显示数字

    DecimalFormat 是 NumberFormat 的一个具体子类 用于格式化十进制数字 可以实现以最快的速度将数字格式化为你需要的样子 DecimalFormat 类主要靠 和 0 两种占位符号来指定数字长度 0 表示如果位数不足则
  • 树莓派外设开发之玩传感器

    参考 用树莓派玩传感器 作者 LEO max 发布时间 2021 02 24 16 30 46 网址 https blog csdn net zouchengzhi1021 article details 114026649 spm 100