How's the world feeling right now? This box tells you.
Powered by: an Arduino, a WiFly wireless module, an RGB LED, Twitter.com and a 9v battery.
I’m a news junkie. I want to know everything that is going on in the world as soon as it happens. I want to wake up and know immediately if something big has happened overnight.
However, I’m an extraordinarily busy man; I don’t have time to read news feeds; reading that headline that I already knew about or don’t care about is time that I’m never getting back!
No. What I need is some way to be constantly in touch with the world's events as they unfold, alerted when something big happens, and to be made aware of it all faster than awareness itself!
...A way to get a glimpse of the collective human consciousness as an extension of my own. Something that I don't have to continually check or poll, but instead, like a part of my body, it will tell me when it's feeling pain or generally in need of my attention ...leaving me time to get on with other things.
And so, I present: The World Mood in a Box!
The Arduino connects directly to any wireless network via the WiFly module, continually searches Twitter for tweets with emotional content, collates the tweets for each emotion, does some math, and then fades the color of the LED to reflect the current World Mood; Red for Anger, Yellow for Happy, Pink for Love, White for Fear, Green for Envy, Orange for Surprise, and Blue for Sadness.
If an unexpectedly high number of tweets of a particular emotion are found, then the LED will flash to alert us to the possibility of a world event that has caused this unusually strong emotional reaction.
For example, a world disaster and it may flash Blue or Red (sadness or anger), if the strong favourite loses a big football game it may fade to Orange (surprise), …and If it flashes White, the collective human mind is feeling extreme fear, and it's probably best to go hide in a cupboard and sit it out, waiting for sunnier skies and a return to Yellow or Pink. ...OK, I'm not that busy.
Remove these ads by
Signing UpStep 1: How it works
An Arduino connects directly (no computer required!) to any wireless network via the WiFly module, repeatedly searches Twitter for tweets with emotional content (aka sentiment extraction or tapping into the moodosphere), collates the tweets for each emotion, analyzes the data, and fades the color of an LED to reflect the current World Mood:
- Red for Anger
- Yellow for Happy
- Pink for Love
- White for Fear
- Green for Envy
- Orange for Surprise
- Blue for Sadness
- "wow"
- "can't believe"
- "unbelievable"
- "O_o"
Example signals:
- A world disaster and it may flash Blue or Red indicating it best to check a news site to see why everyone is so sad and/or angry.
- If the strong favourite loses a big football game, it may flash Orange to express the surprise at this unlikely event.
- If there is a heat wave in London it might turn Yellow to reflect how much happier people now are.
- If it flashes White, the collective human consciousness is feeling extreme fear and something terrifyingly bad is probably about to happen. Time to hide and/or panic.
- You could put it on your desk to get an early warning of something big happening somewhere in the world
- A literal 'mood light' at a party or a game whereby you guess what colour it will change to next and for what reason
- A world mood barometer perhaps next to your bed to decide if it is best to hit snooze until it's less angry outside
- A gauge of public sentiment to help you decide when to sell all your stocks and shares, and head to the hills.
- In a foyer or waiting area or other public space for people to look at and contemplate.
- Set it to connect to any wireless network and carry it around in the streets, stopping strangers to explain to them that you have managed to capture the world's mood and have it locked in this here box.














































Visit Our Store »
Go Pro Today »




This project has won the "I Made It" Challenge for today. For that you will receive a 3 month pro membership!
http://www.instructables.com/community/June-is-I-Made-It-Challenge-Month-Win-a-Pro-Mem/
First, make sure you buy an Arduino Duemilanove. Yes, there are newer devices out there. No, you do not want them. They are all supposed to use the same code, but this code is sensitive to the timing on the Duemilanove. Use another board and you'll be fighting issues all the way. After over a year of this, I just switched and I'm glad I did.
Second, the Twitter world moves much faster than it did. 30 tweets of the original terms go by in less than a second. Since everything is computed in tweets per minute, this obviously won't do. Everything registers off the scale.
You'll have to substitute this code in TwitterParser.cpp to compensate.
#ifdef DEBUG
m_printer->println("assuming tweet was from yesterday");
#endif // #ifdef DEBUG
}
long seconds = time1 - time2;
return seconds / 60;
}
with
#ifdef DEBUG
m_printer->println("assuming tweet was from yesterday");
#endif // #ifdef DEBUG
}
long seconds = time1 - time2;
return seconds;
}
I also had to modify my LED.cpp file to make sure colors showed up properly. In particular, I had to adjust the array values in the beginning to accurately show colors with my LED -- apparently my red isn't as bright as the blue and green and so full value on all three skews the colors. I added the following text to the WorldMood.cpe to make it easy to test light colors -- right after the device starts up, it triggers the light to the values specified. Value range goes from 0 to 255.
//a way to quickly test colors and connections
analogWrite(redPin, 255);
analogWrite(greenPin, 35);
analogWrite(bluePin, 0);
It goes immediately after this line:
LED led(Serial, redPin, greenPin, bluePin, fadeDelay);
I am still adjusting my search criteria and making minor adjustments, but this solves most of the "out of the box" issues I've seen people experience.
Long story short: I started working on this using the 1.01 Arduino IDE, an Arduino Uno and an LED "ball" which I found referenced here:
http://hackaday.com/2012/09/08/hacking-a-floating-rgb-led-decorative-ball/
I liked the look of that ball, and thought to myself "what can I do with it that is cool". I bought one, and then decided to see where I could take this instructable.
Like many of you, I ran into all sorts of errors when trying to load up the sketch and libraries to make it work.
After hacking away at it for about 8 hours over the last week, I've gotten it compiling and running on the new version of Arduino, with an Uno and not the Duemilanove. Once I get things a bit cleaner, and I document what changes I actually made,
I will post the full code somewhere and add it to this comment thread.
The quick overview:
1) Wired up my LED. I am using the LED array that came inside the ball. I also wired up a Sparkfun RGB LED Breakout to see if it would work across both. (https://www.sparkfun.com/products/10111). It does. I had to make the code change referenced in the comments and on this blog to make the colors match best with the Sparkfun LED kit. (http://www.stephenhobley.com/blog/2010/06/11/arduino-world-mood-light-using-twitter-and-wishield/)
2) In each of the libraries that were included, I had to update the code to replace: #include "WProgram.h" with #include
3) The timing and error handling are still pretty screwed up, and not where they should be. I am going to work on that next. The code will execute, and throw some errors, but in true arduino fashion, if you let it run, it will power through things and get to the next step.
4) Pay attention to the comments in "step 6", download the code: I HAD to do this. If you have a newer board then you may need to change this struct SPI_UART_cfg SPI_Uart_config = {0x50,0x00,0x03,0x10}; to this: struct SPI_UART_cfg SPI_Uart_config = {0x60,0x00,0x03,0x10};
5) Once I did those things, I got it to compile and pushed to the Arduino.
It would go out and attempt to make a request to twitter, but I'd get a 404 from twitter. This caused me to scratch my head for a day, contemplate rewriting the entire WIFLY library and then it hit me...
The http request had something wrong with it. In the worldmood sketch, you must look at the lines where you define the search request and make a small change, appending HTTP 1.0 to the end of each.
It WILL NOT WORK UNLESS YOU DO THIS.
These lines:
prog_char string_1[] PROGMEM = "GET /search.json?q=\"happiest\"+OR+\"so+happy\"+OR+\"so+excited\"+OR+\"i'm+happy\"+OR+\"woot\"+OR+\"w00t\"&rpp=30&result_type=recent";
Should become:
prog_char string_1[] PROGMEM = "GET /search.json?q=\"happiest\"+OR+\"so+happy\"+OR+\"so+excited\"+OR+\"i'm+happy\"+OR+\"woot\"+OR+\"w00t\"&rpp=30&result_type=recent HTTP/1.0";
I think that is about it, but I need to go back and look at everything to ensure that there weren't other items necessary.
The one item I haven't addressed yet is that when left as-is, the twitter search for "envy" still fails. I can't understand why, but I haven't taken much of a look at it yet.
To get past this, I changed the search string from the original to this:
prog_char string_4[] PROGMEM = "GET /search.json?q=\"i+wish+i\"+&rpp=60&result_type=recent HTTP/1.0";
I basically got rid of the search and just put in "I wish I" for the time being.
So, there you have it. If anyone wants to continue to improve, the army of "modern" Arduino hackers can start from this modified code that indeed works. (yay!)
https://www.dropbox.com/s/ewrbhqphya64dmc/World_Mood_Nowlab.zip
Enjoy, and please share comments as you make progress.
Dave
I compiled this code and getting me lot of errors..
plz help me!!!
How long are you experiencing the 9V battery last?
Thanks for this, it's going to get me working with acrylic, something I haven't done yet.
If I figure out how to make it work again, I'll post the code here. If not..... I guess I'll hope someone else figures it out.
https://dev.twitter.com/blog/changes-coming-to-twitter-api
http://www.metro.co.uk/olympics/907250-twitters-olympic-mood-beamed-to-world-from-edf-energy-london-eye
I was still excited to see the concept on the international stage.
Or perhaps with an ethernet shield? I'm really interested!
http://www.mathworks.com/matlabcentral/trendy/plots/644
It only updates once/day, but might be interesting to monitor over time.
http://www.mathworks.com/matlabcentral/trendy/plots/644
will the script be different?
Thanks for the reply!
'Serial' was not declared in this scope error. Does anyone know how to fix it? When I tried looking online, I came across a blog that suggested to include the Software Serial library, but that didn't seem to do anything.
http://arduino.cc/forum/index.php/topic,65655.0.html
It also appears that these issues are more common if you're using the Arduino Duo instead of the Duemilanove.
Btw, very nice project/instructable
But I think I won't use a 9V battery I'm interrested by a Lithium battery like http://www.nuelectronics.com/estore/index.php?main_page=product_info&cPath=1&products_id=17 (with a solar panel http://www.nuelectronics.com/estore/index.php?main_page=product_info&cPath=6&products_id=16 ?).
Let's get crazy :)
However I dont have the money for an arduino or the wifi adapter.
You should collaborate with someone who knows stuff about microchips and create a microchip and maybe replace the wifi with an ethernet port..
(you could add selective tweets through a lan cord that way, and collect tweets)
that way more people may be able to afford it, and you could even sell it to people like me :)