Chris Mendez in For Developers, Hardware

Arduino & Rasberry Pi - Sensors

If you need to get Arduino and Rapsberry Pi working together, here's a little demo.

Processing

#define trigPin 13
#define echoPin 12
#define piPin 7

void setup()  
{
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(piPin, OUTPUT);
}

void loop()  
{
  int duration, distance;
  digitalWrite(trigPin, HIGH);
  delayMicroseconds( 1000 );
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  if( distance >= 200 || distance <= 0){
    Serial.println("Out of range");
  }else{
    Serial.print(distance);
    Serial.println(" cm");
    if( distance < 100 ){
      digitalWrite(piPin, HIGH);
      Serial.println("sending intruder alert");
    }
  }
  delay(500);
}

Python

import RPi.GPIO as GPIO  
import sys  
import wave  
import pyaudio  
import time

#Read
channel = 7  
#Read the audio file I want to play
CHUNK = 1024  
#Set up the board
GPIO.setmode(GPIO.BOARD)  
#Receive electrical signals from arduino
GPIO.setup(channel,GPIO.IN)  
#Play audio files once the signal comes int
p = pyaudio.PyAudio()  
#Received a signal from arduino
while True:  
  if GPIO.input(channel) == GPIO.HIGH:
    print("Intruder Alert")
    wf = wave.open("intruder.wav", "rb")
    stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getchannels(), rate=wf.getframerate(), output=True)
    #read in the stream
    data = wf.readframes(CHUNK)
    #while data is not empty
    while data !='':
      #play data
      stream.write(data)
      #read the next chunk
      data = wf.readframes(chunk)
    stream.stop_stream()
    stream.close()
  else:
    print("No intruder")
  #don't peg the CPU
  time.sleep(1)


#terminal the audio 
p.terminate()  
GPIO.cleanup()