總網頁瀏覽量

2014年4月25日 星期五

樹莓派超音波測距 = Raspberry + Ultrasonic HC-SR04 + MotoPiduino


一. 使用材料:
       1. Raspberry Pi
       2. MotoPiduino
       3. 超音波 HC-SR04
       4. S4A IO Board (option)

二. 接線:
      1. 把 HC-SR04 接到 MotoPiduino D10 及 D11 位置, (樹莓派 GPIO8(TRIGGER) 和 GPIO10(ECHO) 位置)
       或
      直接接到 S4A IO Board 的 D10 D11孔位

三. 接線方式如圖:
     
      



4. 編寫程式:
# -----------------------

# Import required Python libraries
# -----------------------
import time
import RPi.GPIO as GPIO

# -----------------------
# Define some functions
# -----------------------

def measure():
  # This function measures a distance

  GPIO.output(GPIO_TRIGGER, True)
  time.sleep(0.00001)
  GPIO.output(GPIO_TRIGGER, False)
  start = time.time()
  
  while GPIO.input(GPIO_ECHO)==0:
    start = time.time()

  while GPIO.input(GPIO_ECHO)==1:
    stop = time.time()

  elapsed = stop-start
  distance = (elapsed * 34300)/2

  return distance

def measure_average():
  # This function takes 3 measurements and
  # returns the average.

  distance1=measure()
  time.sleep(0.1)
  distance2=measure()
  time.sleep(0.1)
  distance3=measure()
  distance = distance1 + distance2 + distance3
  distance = distance / 3
  return distance

# -----------------------
# Main Script
# -----------------------

# Use BCM GPIO references
# instead of physical pin numbers
GPIO.setmode(GPIO.BCM)

# Define GPIO to use on Pi
GPIO_TRIGGER = 8
GPIO_ECHO    = 10

print "Ultrasonic Measurement"

# Set pins as output and input
GPIO.setup(GPIO_TRIGGER,GPIO.OUT)  # Trigger
GPIO.setup(GPIO_ECHO,GPIO.IN)      # Echo

# Set trigger to False (Low)
GPIO.output(GPIO_TRIGGER, False)

try:

  while True:

    distance = measure_average()
    print "Distance : %.1f" % distance
    time.sleep(1)

except KeyboardInterrupt:
  # User pressed CTRL-C
  # Reset GPIO settings
  GPIO.cleanup()


五. 相關資訊:
相關資訊: http://motoduino.com


2014年4月17日 星期四

樹莓派LCD顯示器 = Raspberry Pi + MotoPiduino + I2C LCD 16x2

這次來說明如何把I2C LCD1602接到 Raspberry 上顯示文字及IP address, I2C LCD好處只需要佔用2支IO腳位.

一. 使用材料:
       1. Raspberry Pi
       2. MotoPiduino
       3. I2C LCD1602
       4. S4A Sensor Board (option)

二. 接線:
      1. 把 LCD1602 接到 A4 (SDA) and A5 (SCL) 位置
       或
      直接接到 S4A IO Board 的 A4A5孔位

三. 接線方式如圖:
     





四. I2C LCD Library 軟體下載點:
1. 建立一個目錄及下載程式: https://github.com/paulbarber/raspi-gpio
2. 檢查LCD的 I2C 位置(需事先開啟I2C功能), 此例子為0x27, 如下圖:



     3. 修改 lcd_display.py 內的LCD ADDRESS 如下圖:

         


     4. 編寫LCD 測試程式 lcd_i2c_test.py 如下(請將該檔案建立在剛下載的Library目錄下)


       from lcd_display import lcd
       from subprocess import *

       my_lcd = lcd()

       cmd = "ip addr show wlan0 | grep inet | awk '{print $2}' | cut -d/ -f1"

       def run_cmd(cmd):
       p = Popen(cmd, shell=True, stdout=PIPE)
       output = p.communicate()[0]
       return output

       ipaddr = run_cmd(cmd)
       ipaddrstr = 'IP:' + ipaddr 
       my_lcd.display_string("Motoduino Lab", 1)
       my_lcd.display_string(ipaddrstr, 2)




五. 執行:
 $ sudo python lcd_i2c_test.py





相關資訊: http://motoduino.com

     

2014年4月16日 星期三

樹莓派溫度感測 = Raspberry Pi + MotoPiduino + LM35 + S4A IO Board

利用 MotoPiduino的 ADC(Analog to Digital) 和 I2C 功能特點來製作一個溫度感測裝置.

一. 使用材料:
       1. Raspberry Pi
       2. MotoPiduino
       3. LM35 temperature Sensor
       4. S4A Sensor Board (option)

二. 接線:
      1. LM35 接在 A0 (Analog 0位置)

三. 接線方式如圖:







四. I2C Library 軟體下載點:
1. 下載 ADS1015 (I2C) Library : https://github.com/m3m0ry/Adafruit-Raspberry-Pi-Python-Code
2. 編寫Python LM35 程式 motopiduino_lm35.py 如下(請該檔案建立在adafruit_ADS1x15目錄下)
 
#!/usr/bin/python
import time, signal, sys
from Adafruit_ADS1x15 import ADS1x15

def signal_handler(signal, frame):
        print 'You pressed Ctrl+C!'
        sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
#print 'Press Ctrl+C to exit'

ADS1015 = 0x00  # 12-bit ADC

# Select the gain
gain = 6144    # +/- 6.144V
#gain = 4096  # +/- 4.096V

# Select the sample rate
sps = 250  # 250 samples per second

# Initialise the ADC using the default mode (use default I2C address)
# Set this to ADS1015 depending on the ADC you are using!
adc = ADS1x15(ic=ADS1015)

while(True):
     # Read channel 0 in single-ended mode using the settings above
     volts = adc.readADCSingleEnded(0, gain, sps)
     # 10mv per degree
     lm35_c = ((volts/ 10.0)-1.5)
     # To read channel 3 in single-ended mode, +/- 1.024V, 860 sps use:
     # volts = adc.readADCSingleEnded(3, 1024, 860)

     print "%.6f" % (lm35_c)
     time.sleep(1);


五. 執行:
 $ sudo python motopiduino_lm35.py



Informatiom:  http://motoduino.com