用树莓派玩传感器

接线

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;  //求出距离


  • 1
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LEO-max

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值