first commit
This commit is contained in:
commit
a5a0434432
1126 changed files with 439481 additions and 0 deletions
491
Projects/Candy-Counting-Robot-Costume/robot.py
Normal file
491
Projects/Candy-Counting-Robot-Costume/robot.py
Normal file
|
|
@ -0,0 +1,491 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# Raspberry Pi Robot Costume
|
||||
'''
|
||||
In this project, we're making a Raspberry Pi Robot Costume. The costume will count candy placed in a bin, and speak out loud to the giver.
|
||||
Well use the GrovePi, with an Ultrasonic Sensor, an LED Bar graph, 4 Chainable LED's, and the RGB LCD Display. We'll also use a small
|
||||
portable speaker to give the robot a voice.
|
||||
|
||||
Each time a piece of candy is placed in the robot, it says "Thank you for the candy" and reads aloud the count of candy.
|
||||
'''
|
||||
#
|
||||
|
||||
import os
|
||||
import random
|
||||
import time
|
||||
import grovepi
|
||||
import sys
|
||||
import random
|
||||
from subprocess import call
|
||||
from grove_rgb_lcd import *
|
||||
|
||||
candy_count = 10
|
||||
bar_level = 0
|
||||
|
||||
led1 = 14
|
||||
led2 = 15
|
||||
led3 = 16
|
||||
|
||||
grovepi.pinMode(led1,"OUTPUT")
|
||||
grovepi.pinMode(led2,"OUTPUT")
|
||||
grovepi.pinMode(led3,"OUTPUT")
|
||||
|
||||
# Connect the Grove LED Bar to digital port D5
|
||||
# DI,DCKI,VCC,GND
|
||||
ledbar = 5
|
||||
|
||||
grovepi.pinMode(ledbar,"OUTPUT")
|
||||
time.sleep(1)
|
||||
i = 0
|
||||
|
||||
# Connect the Grove Ultrasonic Ranger to digital port D4
|
||||
# SIG,NC,VCC,GND
|
||||
ultrasonic_ranger = 4
|
||||
|
||||
# Connect first LED in Chainable RGB LED chain to digital port D7
|
||||
# In: CI,DI,VCC,GND
|
||||
# Out: CO,DO,VCC,GND
|
||||
ledpin = 7 # RGB LED's are on D7
|
||||
# First LED input socket connected to GrovePi, output socket connected to second LED input and so on
|
||||
numleds = 4 #If you only plug 1 LED, change to 1
|
||||
grovepi.pinMode(ledpin,"OUTPUT")
|
||||
time.sleep(1)
|
||||
|
||||
# Connect the Grove 4 Digit Display to digital port D2
|
||||
# CLK,DIO,VCC,GND
|
||||
display = 2
|
||||
grovepi.pinMode(display,"OUTPUT")
|
||||
|
||||
# test colors used in grovepi.chainableRgbLed_test()
|
||||
testColorBlack = 0 # 0b000 #000000
|
||||
testColorBlue = 1 # 0b001 #0000FF
|
||||
testColorGreen = 2 # 0b010 #00FF00
|
||||
testColorCyan = 3 # 0b011 #00FFFF
|
||||
testColorRed = 4 # 0b100 #FF0000
|
||||
testColorMagenta = 5 # 0b101 #FF00FF
|
||||
testColorYellow = 6 # 0b110 #FFFF00
|
||||
testColorWhite = 7 # 0b111 #FFFFFF
|
||||
|
||||
# patterns used in grovepi.chainableRgbLed_pattern()
|
||||
thisLedOnly = 0
|
||||
allLedsExceptThis = 1
|
||||
thisLedAndInwards = 2
|
||||
thisLedAndOutwards = 3
|
||||
|
||||
def initalize_chained_led():
|
||||
print("Test 1) Initialise")
|
||||
|
||||
# init chain of leds
|
||||
grovepi.chainableRgbLed_init(ledpin, numleds)
|
||||
time.sleep(.5)
|
||||
|
||||
grovepi.chainableRgbLed_test(ledpin, numleds, random.randint(0,7))
|
||||
time.sleep(.5)
|
||||
|
||||
|
||||
def chained_led():
|
||||
try:
|
||||
|
||||
# set led 1 to green
|
||||
grovepi.chainableRgbLed_pattern(pin, thisLedOnly, 0)
|
||||
time.sleep(.5)
|
||||
|
||||
# change color to red
|
||||
grovepi.storeColor(255,0,0)
|
||||
time.sleep(.5)
|
||||
|
||||
# reset (all off)
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
|
||||
time.sleep(.5)
|
||||
|
||||
print ("Test 2b) Test Patterns - blue")
|
||||
|
||||
# test pattern 1 blue
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlue)
|
||||
time.sleep(1)
|
||||
|
||||
print ("Test 2c) Test Patterns - green")
|
||||
|
||||
# test pattern 2 green
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorGreen)
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
print ("Test 2d) Test Patterns - cyan")
|
||||
|
||||
# test pattern 3 cyan
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorCyan)
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
print ("Test 2e) Test Patterns - red")
|
||||
|
||||
# test pattern 4 red
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorRed)
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
print ("Test 2f) Test Patterns - magenta")
|
||||
|
||||
# test pattern 5 magenta
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorMagenta)
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
print ("Test 2g) Test Patterns - yellow")
|
||||
|
||||
# test pattern 6 yellow
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorYellow)
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
print ("Test 2h) Test Patterns - white")
|
||||
|
||||
# test pattern 7 white
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorWhite)
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
# pause so you can see what happened
|
||||
time.sleep(2)
|
||||
|
||||
# reset (all off)
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
|
||||
time.sleep(.5)
|
||||
|
||||
|
||||
print ("Test 3a) Set using pattern - this led only")
|
||||
|
||||
# change color to red
|
||||
grovepi.storeColor(255,0,0)
|
||||
time.sleep(.5)
|
||||
|
||||
# set led 3 to red
|
||||
grovepi.chainableRgbLed_pattern(pin, thisLedOnly, 2)
|
||||
time.sleep(.5)
|
||||
|
||||
# pause so you can see what happened
|
||||
time.sleep(2)
|
||||
|
||||
# reset (all off)
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
|
||||
time.sleep(.5)
|
||||
|
||||
|
||||
print ("Test 3b) Set using pattern - all leds except this")
|
||||
|
||||
# change color to blue
|
||||
grovepi.storeColor(0,0,255)
|
||||
time.sleep(.5)
|
||||
|
||||
# set all leds except for 3 to blue
|
||||
grovepi.chainableRgbLed_pattern(pin, allLedsExceptThis, 3)
|
||||
time.sleep(.5)
|
||||
|
||||
# pause so you can see what happened
|
||||
time.sleep(2)
|
||||
|
||||
# reset (all off)
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
|
||||
time.sleep(.5)
|
||||
|
||||
|
||||
print ("Test 3c) Set using pattern - this led and inwards")
|
||||
|
||||
# change color to green
|
||||
grovepi.storeColor(0,255,0)
|
||||
time.sleep(.5)
|
||||
|
||||
# set leds 1-3 to green
|
||||
grovepi.chainableRgbLed_pattern(pin, thisLedAndInwards, 2)
|
||||
time.sleep(.5)
|
||||
|
||||
# pause so you can see what happened
|
||||
time.sleep(2)
|
||||
|
||||
# reset (all off)
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
|
||||
time.sleep(.5)
|
||||
|
||||
|
||||
print ("Test 3d) Set using pattern - this led and outwards")
|
||||
|
||||
# change color to green
|
||||
grovepi.storeColor(0,255,0)
|
||||
time.sleep(.5)
|
||||
|
||||
# set leds 7-10 to green
|
||||
grovepi.chainableRgbLed_pattern(pin, thisLedAndOutwards, 6)
|
||||
time.sleep(.5)
|
||||
|
||||
# pause so you can see what happened
|
||||
time.sleep(2)
|
||||
|
||||
# reset (all off)
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
|
||||
time.sleep(.5)
|
||||
|
||||
|
||||
print ("Test 4a) Set using modulo - all leds")
|
||||
|
||||
# change color to black (fully off)
|
||||
grovepi.storeColor(0,0,0)
|
||||
time.sleep(.5)
|
||||
|
||||
# set all leds black
|
||||
# offset 0 means start at first led
|
||||
# divisor 1 means every led
|
||||
grovepi.chainableRgbLed_modulo(pin, 0, 1)
|
||||
time.sleep(.5)
|
||||
|
||||
# change color to white (fully on)
|
||||
grovepi.storeColor(255,255,255)
|
||||
time.sleep(.5)
|
||||
|
||||
# set all leds white
|
||||
grovepi.chainableRgbLed_modulo(pin, 0, 1)
|
||||
time.sleep(.5)
|
||||
|
||||
# pause so you can see what happened
|
||||
time.sleep(2)
|
||||
|
||||
# reset (all off)
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
|
||||
time.sleep(.5)
|
||||
|
||||
|
||||
print ("Test 4b) Set using modulo - every 2")
|
||||
|
||||
# change color to red
|
||||
grovepi.storeColor(255,0,0)
|
||||
time.sleep(.5)
|
||||
|
||||
# set every 2nd led to red
|
||||
grovepi.chainableRgbLed_modulo(pin, 0, 2)
|
||||
time.sleep(.5)
|
||||
|
||||
# pause so you can see what happened
|
||||
time.sleep(2)
|
||||
|
||||
|
||||
print ("Test 4c) Set using modulo - every 2, offset 1")
|
||||
|
||||
# change color to green
|
||||
grovepi.storeColor(0,255,0)
|
||||
time.sleep(.5)
|
||||
|
||||
# set every 2nd led to green, offset 1
|
||||
grovepi.chainableRgbLed_modulo(pin, 1, 2)
|
||||
time.sleep(.5)
|
||||
|
||||
# pause so you can see what happened
|
||||
time.sleep(2)
|
||||
|
||||
# reset (all off)
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
|
||||
time.sleep(.5)
|
||||
|
||||
|
||||
print ("Test 4d) Set using modulo - every 3, offset 0")
|
||||
|
||||
# change color to red
|
||||
grovepi.storeColor(255,0,0)
|
||||
time.sleep(.5)
|
||||
|
||||
# set every 3nd led to red
|
||||
grovepi.chainableRgbLed_modulo(pin, 0, 3)
|
||||
time.sleep(.5)
|
||||
|
||||
# change color to green
|
||||
grovepi.storeColor(0,255,0)
|
||||
time.sleep(.5)
|
||||
|
||||
# set every 3nd led to green, offset 1
|
||||
grovepi.chainableRgbLed_modulo(pin, 1, 3)
|
||||
time.sleep(.5)
|
||||
|
||||
# change color to blue
|
||||
grovepi.storeColor(0,0,255)
|
||||
time.sleep(.5)
|
||||
|
||||
# set every 3nd led to blue, offset 2
|
||||
grovepi.chainableRgbLed_modulo(pin, 2, 3)
|
||||
time.sleep(.5)
|
||||
|
||||
# pause so you can see what happened
|
||||
time.sleep(2)
|
||||
|
||||
# reset (all off)
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
|
||||
time.sleep(.5)
|
||||
|
||||
|
||||
print ("Test 4e) Set using modulo - every 3, offset 1")
|
||||
|
||||
# change color to yellow
|
||||
grovepi.storeColor(255,255,0)
|
||||
time.sleep(.5)
|
||||
|
||||
# set every 4nd led to yellow
|
||||
grovepi.chainableRgbLed_modulo(pin, 1, 3)
|
||||
time.sleep(.5)
|
||||
|
||||
# pause so you can see what happened
|
||||
time.sleep(2)
|
||||
|
||||
|
||||
print ("Test 4f) Set using modulo - every 3, offset 2")
|
||||
|
||||
# change color to magenta
|
||||
grovepi.storeColor(255,0,255)
|
||||
time.sleep(.5)
|
||||
|
||||
# set every 4nd led to magenta
|
||||
grovepi.chainableRgbLed_modulo(pin, 2, 3)
|
||||
time.sleep(.5)
|
||||
|
||||
# pause so you can see what happened
|
||||
time.sleep(2)
|
||||
|
||||
# reset (all off)
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
|
||||
time.sleep(.5)
|
||||
|
||||
|
||||
print ("Test 5a) Set level 6")
|
||||
|
||||
# change color to green
|
||||
grovepi.storeColor(0,255,0)
|
||||
time.sleep(.5)
|
||||
|
||||
# set leds 1-6 to green
|
||||
grovepi.write_i2c_block(0x04,[95,pin,6,0])
|
||||
time.sleep(.5)
|
||||
|
||||
# pause so you can see what happened
|
||||
time.sleep(2)
|
||||
|
||||
# reset (all off)
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
|
||||
time.sleep(.5)
|
||||
|
||||
|
||||
print ("Test 5b) Set level 7 - reverse")
|
||||
|
||||
# change color to red
|
||||
grovepi.storeColor(255,0,0)
|
||||
time.sleep(.5)
|
||||
|
||||
# set leds 4-10 to red
|
||||
grovepi.write_i2c_block(0x04,[95,pin,7,1])
|
||||
time.sleep(.5)
|
||||
|
||||
|
||||
except KeyboardInterrupt:
|
||||
# reset (all off)
|
||||
grovepi.chainableRgbLed_test(pin, numleds, testColorBlack)
|
||||
except IOError:
|
||||
print ("Error")
|
||||
|
||||
|
||||
def led_random():
|
||||
#print "Change LED Color"
|
||||
# test pattern 1 blue
|
||||
try:
|
||||
grovepi.chainableRgbLed_test(ledpin, numleds, random.randint(0,7))
|
||||
# time.sleep(1)
|
||||
except:
|
||||
print "led_random failure"
|
||||
|
||||
|
||||
def lcd_rgb(text):
|
||||
c = random.randint(0,255)
|
||||
setRGB(c,255-c,0)
|
||||
setText(text)
|
||||
|
||||
def lcd_rgb_blue_blank():
|
||||
setRGB(0,0,255)
|
||||
|
||||
#Calls the Espeak TTS Engine to read aloud a sentence
|
||||
def sound(spk):
|
||||
# -ven+m7: Male voice
|
||||
# -s180: set reading to 180 Words per minute
|
||||
# -k20: Emphasis on Capital letters
|
||||
cmd_beg=" espeak -ven+m7 -a 200 -s180 -k20 --stdout '"
|
||||
cmd_end="' | aplay"
|
||||
print cmd_beg+spk+cmd_end
|
||||
call ([cmd_beg+spk+cmd_end], shell=True)
|
||||
|
||||
|
||||
def LEDBarGraph(level):
|
||||
|
||||
grovepi.ledBar_setLevel(ledbar,level)
|
||||
time.sleep(0.1)
|
||||
|
||||
def random_bar():
|
||||
global bar_level
|
||||
# print "Random bar! " + str(bar_level)
|
||||
try:
|
||||
ran_bar_sign = random.randint(0,1)
|
||||
if ran_bar_sign > 0:
|
||||
bar_level = bar_level + 1
|
||||
else:
|
||||
bar_level = bar_level - 1
|
||||
if bar_level < 0:
|
||||
bar_level = 0
|
||||
if bar_level > 10:
|
||||
bar_level = 10
|
||||
LEDBarGraph(bar_level)
|
||||
except:
|
||||
print "Random Bar Failure"
|
||||
|
||||
def random_led():
|
||||
try:
|
||||
grovepi.digitalWrite(led1,random.randint(0,1))
|
||||
grovepi.digitalWrite(led2,random.randint(0,1))
|
||||
grovepi.digitalWrite(led3,random.randint(0,1))
|
||||
except:
|
||||
print "LED Failure!"
|
||||
|
||||
def candy_detection():
|
||||
global candy_count
|
||||
dist = 100
|
||||
try:
|
||||
while dist > 8:
|
||||
# Read distance value from Ultrasonic
|
||||
# print(grovepi.ultrasonicRead(ultrasonic_ranger))
|
||||
dist = grovepi.ultrasonicRead(ultrasonic_ranger)
|
||||
random_bar()
|
||||
led_random()
|
||||
print("Distance Detected: " + str(dist))
|
||||
candy_count = candy_count + 1
|
||||
thanks = "Thank you for the candy! " + "I now have " + str(candy_count) + " pieces of candy!"
|
||||
lcd_rgb(str(thanks))
|
||||
led_random()
|
||||
sound(thanks)
|
||||
except TypeError:
|
||||
print ("Ultrasonic Error! Error!")
|
||||
except IOError:
|
||||
print ("Ultrasonic Error! Error!")
|
||||
|
||||
|
||||
|
||||
initalize_chained_led() #Starts LED's sets to green.
|
||||
grovepi.ledBar_init(ledbar, 0)
|
||||
time.sleep(.5)
|
||||
|
||||
while True:
|
||||
led_random()
|
||||
random_bar()
|
||||
|
||||
try:
|
||||
led_random()
|
||||
candy_detection()
|
||||
except:
|
||||
print "Error."
|
||||
lcd_rgb_blue_blank()
|
||||
random_bar()
|
||||
random_led()
|
||||
led_random()
|
||||
|
||||
led_random()
|
||||
Loading…
Add table
Add a link
Reference in a new issue