GNU/Mood

by motters in Circuits > LEDs

1730 Views, 28 Favorites, 0 Comments

GNU/Mood

gnu-slash-mood.jpg

GNU/Mood is a mood ball hack where the colour LEDs are controlled by sentiment analysis of your GNU Social timeline. It reads the last few entries in your timeline and extracts three mood dimensions:

  • Egocentrism: Talk about yourself versus talk about others
  • Valence: An indicator of positive or negative affect. Happyness or sadness.
  • Gender: Feminine or masculine related words or names

These measures are then turned into LED illumination values to produce the colour of the ball, which changes slowly and almost imperceptibly.

GNU/Mood can also be "triggered" if it detects certain key words within the timeline. This causes it to pulsate slowly and soothingly, guiding the user into a more blissful state of mind. You can also set it to turn off and then back on again at certain times of day so as not to disturb your sleep.

What You'll Need

You will need the following things to build GNU/Mood:

  • 1 x Beaglebone Black (wireless or with a compatible wifi dongle)
  • 1 x Beaglebone Black case (Choose your favourite or 3D print one)
  • 1 x micro/mini USB cable (the type which usually comes with a Beaglebone Black)
  • 1 x 5V 2A power supply for the Beaglebone Black
  • 6 x Dupont Cables male to female Jumper GPIO Wire Ribbon
  • 1 x Ultrabright 3V red LED
  • 1 x Ultrabright 3V green LED
  • 1 x Ultrabright 3V blue LED
  • 1 x LED Mood Ball Lamp
  • 1 x microSD card (8GB or larger, class 10)
  • 1 x Small amount of bubble wrap packing plastic
  • 1 x Superglue

You will also need these tools:

  • Precision screwdrivers
  • Junior hacksaw
  • Pliers
  • Drill

Wiring Up the LEDs

gnu-slash-mood-wiring.png
headers.png

Connecting the LEDs to the Beaglebone Black is very simple and no resistors should be needed. You can either solder the LEDs to the dupont cables, or just inserting them into the female sockets is usually good enough.

The header and pin number are given below. See the reference diagram above to locate the right pins.

  • Red: header P8 pin 13
  • Green: header P9 pin 14
  • Blue: header P8 pin 19

Preparing the Mood Ball

mood-ball-disassemble.jpg
mood-ball-leds.jpg

Use a precision screwdriver to remove the batteries from the Mood ball.

With a junior hacksaw cut around the bottom of the mood ball to loosen the electronics section. Make sure not to scratch the surface of the rest of the ball. Once it's loose enough it can be carefully pulled out with pliers.

The existing electronics aren't needed, but you may wish to salvage the LEDs from it by de-soldering them. For an easy life, just use new LEDs if you have them available. They should be the ultra bright type and any physical size will do.

Installing the Software

The Beaglebone Black comes with an existing operating system installed, but the 4GB onboard flash storage may not be enough for the new software and so it's better to install the operating system onto a microSD card instead.
Download the latest Debian firmware image and copy it to the microSD card. The command will be something like:

    sudo dd if=[image filename] of=/dev/sdX
    sync

Where sdX is the microSD drive on your laptop/desktop. You can find out what this should be just by removing the microSD card then running:

    ls /dev/sd*

Then inserting the microSD card and running the same command again. Typically this will be *sdb*, *sdc*, *sdd*, etc. Once that has coppied insert the card into the Beaglebone Black and connect it to your laptop/desktop with the USB cable. If you're using an external wifi dongle then also plug that into the Beaglebone Black. After a few minutes you will then be able to ssh into the Beaglebone Black with:

    ssh debian@192.168.7.2

The initial temporary password is usually *temppwd*. Change it with the command:

    passwd

Then set up the wifi connection with:

    sudo connmanctl
    connmanctl> technologies
    connmanctl> tether wifi disable
    connmanctl> enable wifi
    connmanctl> scan wifi
    connmanctl> services
    connmanctl> agent on
    connmanctl> connect wifi_[somenumbers]
    connmanctl> quit

If the connect command worked then your Beaglebone is now ready for wireless operation. Disconnect the USB cable and plug in the external 5V power supply. After a few minutes once it has booted again you can ssh back into it with:

    ssh debian@beaglebone.local

Note that you will need to have avahi/mDNS configured on your system to be able to do this. Now run:

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get -y install build-essential git
    sudo apt-get -y install curl libcurl4-openssl-dev ntp
    git clone  https://github.com/bashrc/libbbb
    git clone  https://github.com/bashrc/libgnusocial
    git clone  https://github.com/bashrc/gnu-slash-mood
    cd libbbb
    make
    sudo make install
    cd ../libgnusocial
    make
    sudo make install
    cd ../gnu-slash-mood
    make
    sudo make install
    sudo cp daemons/gnu-slash-mood.service /etc/systemd/system
    sudo mkdir /var/lib/gnu-slash-mood
    sudo nano /var/lib/gnu-slash-mood/config.txt

Add the following, setting your details as needed. The off and on values are the hours of the day when GNU/Mood should turn off and then turn on again so as not to disturb sleep (0 is midnight).

    username = [myusername]
    password = [password]
    domain = [GNU Social domain]
    off = 0
    on = 7

Now enable the daemon:

    sudo systemctl enable gnu-slash-mood
    sudo systemctl start gnu-slash-mood

You can check that the daemon started correctly with:

    sudo systemctl status gnu-slash-mood -l

Once the software is running you should see that the LEDs initially flash and then transition to a stable colour.

Final Assembly

Mount the Beaglebone Black into its case. Usually it's fastened down with four screws.

Drill three (or as many as needed) holes into the top of the case so that the LEDs can poke through. One possible way to do it is with six small holes which then fit the LED terminals.

Scrumple up the bubble wrap and put it inside the mood ball. The bubbles will cause light from the LEDs to be diffracted in all directions, giving a more uniform colour and avoiding any isolated spots of colour.

Fit the top of the case to the bottom, then place the mood ball over the LEDs. Check that it illuminates as expected.

Glue the mood ball to the top of the case with some superglue.

GNU/Mood is now ready for moodyness.

Security Tips

Everyone is paranoid about the internet of hopelessly insecure things. To improve the security of GNU/Mood you can do the following:

    ssh debian@beaglebone.local
    sudo nano /etc/ssh/sshd_config

Set the following:

    PermitRootLogin no
    PermitEmptyPasswords no

And if you are using ~/.ssh/authorized_keys then set:

    PasswordAuthentication no

Save and reboot the Beaglebone.

Customising Trigger Words

You can customise the words which cause GNU/Mood to pulsate.
ssh debian@beaglebone.local sudo nano /var/lib/gnu-slash-mood/triggers.txt

An example triggers.txt file might look like:

    stallman
    systemd
    DRM
    #NSFW
    proprietary

Any changes you make to the trigger words should be picked up on the next update of the mood ball, which happens every few minutes. You don't need to restart the daemon.