Arduino & Rasberry Pi - Sensors

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

Processing code for Arduino.

#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 code for Raspberry Pi.

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()