A globe that changes colors based on your sentiment.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cad
old
res
.gitignore
README.md
fcserver.conf
index.js
ledcanvas.js
opc.js
package.json
rgb.js
voiceengine.js

README.md

sentimental

This is an LED globe with mic and speaker output built by Caleb and Robert Jamison.

3D Printing

Part Count Material Print Time
sentimental_mounts.stl x25 10g 2 hours
sentimental_nucleus.stl x1 30g 6 hours
sentimental_base.stl x1 20g 2 hours
sentimental_case.stl x1 100g 15 hours
Total 160g 25 hours

Printing notes:

  • Printed on my Ultimaker 2 printer using white Polymaker Polymax PLA.
  • No supports are required.
  • Printed with 50% infill and brim to avoid warping.
  • The case has a very large surface area touching the build plate. Take appropriate measures (glue stick, painters tape, etc.)so that you can get it off. You might also want to use a brim to avoid warping depending on your material.
  • The case is optional if you have another Pi case and don't mind the wires.
  • If you're careful, you can get everything to friction fit, but it depends on the tolerance of your printer and the specific parts you're using. Before printing, you should check measurements for:
    • barrel jack port (6mm)
    • armature wire holes (3.5mm w/ 0.1mm tolerance)
    • LED mounting holes (2mm holes, 8mm apart)
    • globe bottom diameter (98.5mm)
  • If anything measures out differently, then use OpenSCAD to adjust the models.

Assembly

If you're printing as you assemble, start with the mounts.

  1. Create a continuous strand with the RGB LEDs, soldering 3" of wire between each of the LEDs. Solder a long 12" at the end to connect to power and the fade candy.
  2. Attach a mount to each RGB LED and attach it to the nucleus with a ~2" (depending on the size of your globe) piece of armature wire.
    • You want the LED to sit about 1/2" from the edge of the globe, to give room for the colors to blend without blurring completely into each other.
  3. Attach the armatures with LEDs to the nucleus part. As you wind the LEDs around the nucleus, put the first LED in the top. Then wind down, being sure to start each row in the same column.
    • We ended up gluing the LEDs to the mounts and the mounts to the armature with a bit of CA glue.
    • Do not glue the stems into the nucleus. Consider re-printing the nucleus to get a tighter fit if needed. The entire assembly will be too small for the opening of the globe and later you'll be assembling inside the globe.

At this point, we recommend doing a dry run of all the electronics.

  1. Wiring. We used breadboard wire throughout to make things easy to connect/disconnect and scavenge in the future. You'll be connecting a lot of stuff to power and ground, so:
    1. Wire the ground side of the 5.5mm surface mount panel jack to 4 female cable ends:
      1. Pi.
      2. FadeCandy.
      3. LED strand.
      4. Electret mic - GND
      5. USB Audio in.
    2. Wire the +5V side of the barrel jack to 4 female cable ends:
      1. Pi
      2. LED strand.
      3. Electret mic - Vdd.
      4. Electret mic - Gain.
  2. LED strand:
    • Connect the data wire to the Fadecandy.
    • Connect the ground wire to the barrel jack.
    • Connect the +5V wire to the barrel jack.
  3. Pi:
    • Connect pin 4 (+5V) to the barrel jack.
    • Connect pin 6 (GND) to the barrel jack.
  4. Connect the Fadecandy to the Pi with USB.
  5. Plug the USB Sound Card into the Pi.
  6. Electret mic:
    • Connect GND to the barrel jack.
    • Conenct Vdd and Gain to +5V on the barrel jack.
    • Make a 3.5mm audio jack patch cable:
      • Splice the Left and Right connectors of the 3.5mm male adaptor (our mic is mono...). Connect this to the positive end of a 1-100uF capacitor (to protect the sound card from any voltage bias) and the negative end of the capacitor to Out on the electret mic.
      • Splice a wire to the ground of the male adaptor which we can connect directly to the common going to the barrel jack.
    • Connect the patch cable to the mic port of the USB Sound Card.
  7. Create a patch cable to the exterior audio jack by connecting the Left, Right and Ground of a male 3.5mm audio jack to the female panel mount audio jack. Plug the male end into the USB Sound Card.
  8. Setup software (below) and test using a pair of headphones.
  9. Once you're confident everything is working, start putting the parts together in the case wiring them in as you go, from bottom to top:
    1. Put in the barrel jack surface mount.
    2. Put in the audio jack surface mount.
    3. Put in the Pi, screwing it in with 2.5mm screws.
    4. Put in the Fadecandy, snapping it into the mount.
    5. Connect the Fadecandy (with the left-angle extension cable if needed).
    6. Connect the USB mic (with the left-angle extension cable if needed).
    7. Put the Electret mic into the slot at the top of the case above the Pi. The slot is intentionaly tight so that it friction fits, but you might still need a dab of non-conductive CA glue.

Installing the Software

  1. Update the Pi

    sudo apt-get update
    sudo apt-get upgrade
  2. Install Required Packages

    sudo apt-get install sox libsox-fmt-all
    sudo apt-get install libmagic-dev libatlas-base-dev
  3. Install NVM

    wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | bash
    export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
    [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
  4. Install Node

    nvm install node
  5. Configure Sound

    1. Figure out your sound card's ID:

      arecord -l
    2. Note the card number and create an asound.rc file in the user home path:

      vi ~/asound.rc

      With the content below, replacing card 1 with the correct ID for your USB sound card.:

      pcm.!default {
          type hw
          card 1
      }
      
      ctl.!defult {
          type hw
          card 1
      }
      
    3. Hook up your mic and some speakers or a headphone. Test out the mic using:

      arecord -d 10 /tmp/out.wav

      It should start recording and you'll need to press control-c to stop. Listen to the file you created:

      aplay /tmp/out.wav

      If you run into any issues, it's most likely that your USB sound card isn't set properly as the default.

  6. Install the Sentimental project:

    cd /home/pi
    git clone git@github.com:rejamison/sentimental.git
    cd sentimental
    npm install
  7. Configure FadeCandy server to run on startup:

    cd /home/pi
    git clone https://github.com/scanlime/fadecandy

    Add the following to /etc/rc.local, which will start the server using the config inside the sentimental project:

    /home/pi/fadecandy/bin/fcserver-rpi /home/pi/sentimental/fcserver.conf > /var/log/fcserver.log 2>&1 &

    Reboot the Pi:

    sudo reboot

    Once it's back, check that fcserver is running by visiting http://sentimental.local:7890/ from another machine on your network. You should see a webpage showing your configuration and gives you a few options to show test patterns.

  8. Install AWS CLI and configure account keys.

    TBD

  9. Deploy the Lex Bot.

    TBD

  10. Run the Project

    cd /home/pi/sentimental
    node index.js

    The LEDs should light up, and you should be able to use voice commands like:

    "Snowboy, switch to Rotating Rainbow."
    

Bill of Materials

Basic Tools & Materials
Soldering Iron and Solder
Wire Strippers
Lots of Wire
CA Glue
Heat-Shrink Wire Wrap and Heat Gun (Optional)
1-100uF Capacitor
2.5mm screws
Matte Clear-Coat (Optional)
Item Count Unit Price Total Link Notes
Raspberry Pi 3 1 $35 $35 Adafruit We actually used a Pi 2, but using a 3 will save having to get a separate wifi adapter and give a little more processing horsepower as the Pi2 is about at capacity.
FadeCandy 1 $25 $25 Adafruit
Electret Mic w/ Amp 1 $7 $7 Adafruit
USB Sound Card 1 $7 $7 Amazon We tried one of these but found it had a lot of noise.
RGB LEDs 25 $2 $50 Adafruit We used these because we had them on-hand, but you might try something like these which are $0.18 / LED: Amazon
6-Inch Micro USB Cable 1 $3 $3 Amazon
Left-Angle Male-to-Female USB 2 $4 $8 Amazon The large USB sound card and the chunky cable for the FadeCandy required us to get these to get everything to fit nicely into the case.
5V 2.5A Power Supply 1 $9 $9 Amazon 2.5A is important, vs. the more common 2A adapters, as you need the extra amperage to run the LEDs.
5.5mm Panel Mount Female Barrel Jack 1 $2 $2 Amazon We had to buy a 10-pack.
2.5mm Panel Mount Female Audio Jack 1 $2 $2 Amazon We had to buy a 10-pack.
2.5mm Male Audio Jack 2 $1 $2 Amazon We had to buy a 10-pack.
10-Gauge Armature Wire 1 $10 $10 Amazon
8" Frosted White Globe 1 $9 $9 Amazon
Total $169

If we were to do again, we'd probably switch the LEDs for something cheaper, such cutting up a cheap addressable RGB LED strip.

Build Notes

  • You could easily turn this into an Alexa, Mycroft, Google or other digital assistant.

Acknowledgements

Thanks to the following projects that made this one possible: