Introduction: Boston Tribute

This is an interactive tribute to Boston. It lights up and plays iconic Boston songs when you move near it.

Supplies

1/8 and 1/4 inch birch wood

Laser Cutter

Wires

Adabluefruit CPB

Speaker

Proximity Sensor

LED Light strip

Hot Glue

Cardboard

Battery pack

Tape

Step 1:

establish an image to utilize in this project, and prepare it in Adobe illustrator.

Step 2:

Laser cut the design along with a corresponding stand. When designing the stand be sure to carefully choose the angle at which you would like it to stand.

Step 3:

Glue the LEDs into the back and solder wire from them into the CPB and add alligator clips for convenience.


Step 4:

Hot glue speaker to back and attach wiring

Step 5:

Align the proximity sensor to be positioned where you would like and hot glue it to that position.

Step 6:

upload this code to the CPB:

# import lines needed to play sound files


import board, digitalio, time, neopixel, random

from audiopwmio import PWMAudioOut as AudioOut

from audiocore import WaveFile


from adafruit_apds9960.apds9960 import APDS9960

i2c = board.I2C()

multi_sensor = APDS9960(i2c)

multi_sensor.enable_proximity = True


# Get a reading - 0 is far away, 255 is very close

reading = multi_sensor.proximity


# Speaker


speaker = digitalio.DigitalInOut(board.SPEAKER_ENABLE)

speaker.direction = digitalio.Direction.OUTPUT

speaker.value = True

audio = AudioOut(board.AUDIO)



path = "sounds/"

filename="untitled.wav"

# play_sound function - pass in the FULL NAME of file to play

def play_sound(filename, anim):

 with open(path + filename, "rb") as wave_file:

  wave = WaveFile(wave_file)

  audio.play(wave)

  while audio.playing:

   anim.animate()


# Button


# Use Pull.UP for external buttons wired to ground

# button = digitalio.DigitalInOut(board.A4) # Wired to pin GP15

# button.switch_to_input(pull=digitalio.Pull.UP)


from adafruit_led_animation.animation.blink import Blink

from adafruit_led_animation.animation.colorcycle import ColorCycle

from adafruit_led_animation.animation.chase import Chase

from adafruit_led_animation.animation.comet import Comet

from adafruit_led_animation.animation.pulse import Pulse

from adafruit_led_animation.animation.sparkle import Sparkle

from adafruit_led_animation.animation.sparklepulse import SparklePulse

from adafruit_led_animation.animation.rainbow import Rainbow

from adafruit_led_animation.animation.rainbowchase import RainbowChase

from adafruit_led_animation.sequence import AnimationSequence


from adafruit_led_animation.color import (

 AMBER, # (255, 100, 0)

 AQUA, # (50, 255, 255)

 BLACK, # OFF (0, 0, 0)

 BLUE, # (0, 0, 255)

 CYAN, # (0, 255, 255)

 GOLD, # (255, 222, 30)

 GREEN, # (0, 255, 0)

 JADE, # (0, 255, 40)

 MAGENTA, # (255, 0, 20)

 OLD_LACE, # (253, 245, 230)


 ORANGE, # (255, 40, 0)


 PINK, # (242, 90, 255)


 PURPLE, # (180, 0, 255)


 RED, # (255, 0, 0)


 TEAL, # (0, 255, 120)


 WHITE, # (255, 255, 255)


 YELLOW, # (255, 150, 0)


 RAINBOW, # a list of colors to cycle through


 # RAINBOW is RED, ORANGE, YELLOW, GREEN, BLUE, and PURPLE ((255, 0, 0), (255, 40, 0), (255, 150, 0), (0, 255, 0), (0, 0, 255), (180, 0, 255))


)




pixels_pin = board.NEOPIXEL


pixels_num_of_lights = 23


pixels = neopixel.NeoPixel(pixels_pin, pixels_num_of_lights, brightness=0.5)




strip_pin = board.A1


strip_num_of_lights = int(23)


strip = neopixel.NeoPixel(strip_pin, strip_num_of_lights, brightness=0.5, auto_write=True)




INDIGO = (63, 0, 255)

VIOLET = (127, 0, 255)

OFF = 0, 0, 0

pause = 0.3

mycolors = [


 RED,


 MAGENTA,


 ORANGE,


 YELLOW,


 GREEN,


 JADE,


 BLUE,


 INDIGO,


 VIOLET,


 PURPLE,


 OFF,


]


blink = Blink(pixels, speed=0.5, color=JADE)

blink_strip = Blink(strip, speed=0.5, color=AMBER)


colorcycle = ColorCycle(pixels, 0.1, colors=mycolors)

colorcycle_strip = ColorCycle(strip, 0.1, colors=mycolors)


chase = Chase(pixels, speed=0.1, color=WHITE, size=3, spacing=6)

chase_strip = Chase(strip, speed=0.1, color=WHITE, size=1, spacing=1)


comet = Comet(pixels, speed=0.05, color=RED, tail_length=10, bounce=True)

comet_strip = Comet(

 strip, speed=0.05, color=RED, tail_length=int(strip_num_of_lights / 4), bounce=True

)


pulse = Pulse(pixels, speed=0.05, color=AMBER, period=2)

pulse_strip = Pulse(strip, speed=0.05, color=BLUE, period=2)


sparkle = Sparkle(pixels, speed=0.05, color=PURPLE)

sparkle_strip = Sparkle(strip, speed=0.05, color=PURPLE)


sparkle_pulse = SparklePulse(pixels, speed=0.05, period=5, color=BLUE)

sparkle_pulse_strip = SparklePulse(strip, speed=0.05, period=5, color=BLUE)


rainbow = Rainbow(pixels, speed=0.05, period=2)

rainbow_strip = Rainbow(strip, speed=0.05, period=2)


rainbow_chase = RainbowChase(pixels, speed=0.01, size=5, spacing=0, step=8)

rainbow_chase_strip = RainbowChase(strip, speed=0.01, size=5, spacing=0, step=8)


animations = AnimationSequence(

 blink,

 colorcycle,

 chase,

 comet,

 pulse,

 sparkle,

 sparkle_pulse,

 rainbow,

 rainbow_chase,

 advance_interval=5,

 auto_clear=True,

)


animations_strip = AnimationSequence(

 blink_strip,

 colorcycle_strip,

 chase_strip,

 comet_strip,

 pulse_strip,

 sparkle_strip,

 sparkle_pulse_strip,

 rainbow_strip,

 rainbow_chase_strip,

 advance_interval=5,

 auto_clear=True,

)


sounds = ["for-boston.wav", "shipping.wav"]

animations_random_list = [rainbow_strip, chase_strip, sparkle_pulse_strip, pulse_strip, comet_strip]


while True:

  q = 7

  reading = multi_sensor.proximity

  strip.show()

  if reading > 10:

    print("Person detected!")

    q = random.randint(0,3)

    print(q)

  if q == 0:

    play_sound(random.choice(sounds), random.choice(animations_random_list))

    strip.fill(BLACK)

    strip.show()

  elif q == 1:

    play_sound(random.choice(sounds), random.choice(animations_random_list))

    strip.fill(BLACK)

    strip.show()

  elif q == 2:

    play_sound(random.choice(sounds), random.choice(animations_random_list))

    strip.fill(BLACK)

    strip.show()

  elif q == 3:

    play_sound(random.choice(sounds), random.choice(animations_random_list))

    strip.fill(BLACK)

    strip.show()

   #for i in range(0,20,1):


    # strip.show()


   # w = int(random.randint(0,255))


   # print(w)


   # e = int(random.randint(0,255))


   # print(e)


   # r = int(random.randint(0,255))


   # print(r)


   # strip[i] =((w,e,r))


   # time.sleep(0.05)

 #else:

  #strip.fill((0,0,0))

  #pixels.fill((0,0,0))

  # blink_strip.animate()

  # colorcycle.animate()

  # colorcycle_strip.animate()

  # chase.animate()

  # chase_strip.animate()

  # comet.animate()

  # comet_strip.animate()

  # pulse.animate()

  # pulse_strip.animate()

  # sparkle.animate()

  # sparkle_strip.animate()

  # sparkle_pulse.animate()

  # sparkle_pulse_strip.animate()

  # rainbow.animate()

  # rainbow_strip.animate()

  # rainbow_chase.animate()

  # rainbow_chase_strip.animate()

  # animations.animate()

Step 7: