Introduction: LED Weather Words Forecast

This project utilizes a 22 x 13 matrix of addressable RGB LEDs to visualize a weather forecast pulled from the Weather Underground API.

A Raspberry Pi runs a python program designed to fetch weather forecast data from the API at regular intervals, parse the data into temperature, wind speed, and weather condition arrays, and then light specific sets of LED's that represent words in the LED matrix.

Mounted in its own enclosure, the project can set on a shelf, desk, or hang on a wall as a visual display for upcoming weather conditions over the next 12 hours.

The inspiration for this project comes from the beautiful LED Word Clocks that captured my imagination when they first began showing up on maker community forums. After a lot of research, tinkering, programming, and several failed attempts, I'm happy to have a version with a twist that I can share with the community that inspired me.

If you enjoy "Weather Words", please check out my previous weather visualization, "Weather Colors" here.

Step 1: Materials

Hardware

  • Raspberry Pi with Raspbian installed and configured to connect to the internet (for this project, I prototyped with the 3 and later installed the Zero*)
  • 5 Volt Power Supply, 4 Amps or greater
  • 2.1mm Female Barrel Jack Adapter or MicroB USB Connector (depending on your power supply jack)
  • Micro USB Connector Shell
  • Capacitor - 1000 µF, 6.3V or higher (I used a 1000µF, 16V that I had on hand)
  • Resistor (300 to 500 Ohm)
  • 74AHCT125 Level Converter
  • 5 Meters Addressable 5V RGB LED Strip (60 LEDs per meter) - 286 LED's are used in this project
  • Breadboard, Connecting Wires, and Headers

* Note that if you choose to use the Zero, you will need a USB hub, a Micro USB Male to USB Female Adapter, and a Mini HDMI to Standard HDMI Jack Adapter to interface with the Pi for software setup and troubleshooting.

Software

Other Materials

  • 11" x 14" Shadow Box Frame (or other enclosure to suit)
  • 11" x 17" Copy Paper and Transparency Film (Acetate)*
  • Cardboard
  • Black Garbage Bag
  • Vellum (optional)
  • Hot Melt Glue Gun and Glue (for mounting cardboard to cardboard)
  • Suitable Double Sided Tape (for mounting LED's, Breadboard, and Pi to cardboard)
  • Suitable Glue (for mounting printed templates to cardboard)

* Note that my local copy shop did not carry the needed transparency film. I purchased the film online in a bulk quantity which was an expense that was not anticipated at the start of this project. You might get lucky or be able to negotiate with a shop in your area on carrying this material.

Special Tools

  • You will need to be able to solder for this project. The rows of addressable LED's will need to be soldered together to connect their inputs and outputs. The Raspberry Pi Zero will need to have at least two headers soldered for GPIO connections.
  • Beside basic cutting tools (scissors and hobby knife), a craft/scrapbooking paper trimmer will aid greatly in cutting evenly dimensioned "light baffles" from thin cardboard.
  • Laser printer for printing on the transparency film (I utilized the local copy shop laser printer).

Templates

Step 2: Prepare the Bottom and Top Weather Word Templates

For this project, it will be important to center the bottom and top Weather Word Templates in the enclosure so that when the two are mounted together, the light baffles will lay between the rows and blocks of words.

Measure and record the innermost length and width of the enclosure. Mine measured 11" x 14-1/16". Cut a sturdy piece of cardboard to this dimension and check that it fits snuggly in the enclosure. This piece will serve as the base for mounting the LED's, light baffles, and assembled electronic hardware. Cut another sturdy piece of cardboard that is approximately 14" long and 4" wide. This piece will be cut into light baffle sides at a later step.

Print out two (2) copies of the "Bottom Word Template" on 11" x 17" paper. Be sure to print it at 100% scale (not "scaled to fit"). Measure and trim one of the templates to center it to the cardboard base. Glue this template firmly to the cardboard ensuring that the majority of the paper is adhered (this is important because the LED's and light baffles will be adhered to this base at a later step). Set the second copy of the Bottom Template aside for later reference (it will be useful for measuring and comparing your Top Templates at a later step).

Print out one (1) copy of the "Side Baffle Template" on 11" x 17" paper. Be sure to print it at 100% scale. The lines on this template are meant to align with the word rows on the bottom template and to serve as an aid for obtaining straight and square light baffle rows later in the project. Measure and trim the template to center it to the 14" x 4" piece of cardboard. Glue this template firmly to the cardboard ensuring that the majority of the paper is adhered.

Print out three (3) copies of the "Top Word Template" on 11" x 17" transparency film (acetate) using a laser printer (I utilized the local copy shop for this step). Again, be sure that these are printed at 100% scale. Also check that the top template is roughly centered on the width of the acetate (my enclosure width was exactly the width of my acetate ... maintaining centering at this step helped to ensure I was roughly centered to my bottom template). Before proceeding, compare the printed top templates to the saved copy of the bottom template. The two should be a close match (there will be some difference top to bottom as the acetate shrinks under the heat of the laser printing, but the difference should only be slight). Measure and trim each of the top templates to center them to the enclosure dimensions recorded previously and check that they fit snuggly in the enclosure. Align the words of each copy of the top template together and adhere the copies together using double sided tape.

Step 3: Prepare the LED Rows

The LED matrix consists of (22) rows of addressable RGB LED strips (13 LED's per row). Because the LED strips are purchased in meter plus lengths, each row for this project was cut across the copper terminal pads between the 13th and 14th LED of the purchased strip.

Use double sided tape to adhere each row of LED's to the bottom template. Start with the travel of the data from left to right on the top word row (look for the arrows on your LED strip) and then right to left on the next word row. Alternate the data travel in this fashion down through all 22 rows of the template.

The rows of LED's will be connected in groups of 5 (and then 2 at the end). All of the rows will be connected at the data points (to make a fully addressable block of 286 LED's) but the rows will only be powered in parallel groups of 5.

Before soldering the rows together, you might consider cutting holes or slots through the bottom template at the end of each row to feed the wire through. You can see from the pictures that I looped the wire directly between the rows and later needed to cut slots in the side baffles to accommodate. The baffle slots worked fine and did not cause any excess light bleed outside of the intended area, but they took extra time to cut and fit properly over the wires.

Now solder each row together using short (approximately 2") wire to connect GND-to-GND, DIN-to-DOUT, and VDC-to-VDC in the direction of data travel stopping at the end of the 5th row. Only solder the DIN-to-DOUT between the 5th and 6th row. Solder short wire to the GND and VDC of the 6th row and leave those free to connect power later. Continue in this fashion down all 22 rows of the template.

Step 4: Prepare the Light Baffles

Obtain some thin(ish) cardboard for cutting into light baffle rows (I used cereal boxes). Measure and trim the cardboard into (46) strips that are 8-5/8" long x 1" wide. Use double sided tape to adhere the strips together in pairs to obtain (23) light baffle rows (the baffles seemed flimsy individually and I thought that two together would provide better stability across the rows ... in hindsight this may of have been overkill, but I can't speak for whether a single strip is sufficient).

Cut an extra (5) strips for use as word block baffles at a later step.

Use a hot melt gun and glue to adhere each light baffle row to the line on the bottom template. Be sure to use plenty of glue and work quickly to obtain strong adhesion between the baffle rows and the bottom template. Also be sure to try to keep each baffle row aligned along and end-to-end of the printed bottom template line.

Measure and trim the 14" x 4" piece of cardboard with the adhered side baffle template into two strips that are 13-1/4" long x 1" wide. Fit check the sides to the bottom template. Each line on the side baffle template should align with the word rows on the bottom template. There should also be some overhang of the side baffle at the top and bottommost rows.

Use a hot melt gun and glue to adhere the side baffles along the left and right hand sides of the bottom word template. Again being sure to use plenty of glue and working quickly to obtain strong adhesion between the sides and the bottom template. Now use the hot melt glue to adhere each end of the baffle rows to the baffle sides.

Next, cut and adhere the (47) word block baffles. These baffles will block the light between the lighted weather words. Using the bottom template as a guide, trim individual block baffles and use hot melt glue to adhere each into place. Trim each to obtain a snug fit ... enough to block the light but not enough to distort the baffle rows.

The final step in the light baffle process is to cut a black plastic garbage/trash bag to size that completely covers the light baffles. The bag serves two purposes ... it diffuses the light from the bright LED's that can be seen through the clear transparency lettering and it serves as an additional black barrier to prevent the light from showing through the black transparency layers and highlighting the baffles behind.

As an optional step, I cut vellum paper to size and curved it slightly over the LED's in each word cell. This method cancelled the effect of seeing each individual LED when viewed directly through the clear transparency lettering.

Step 5: Connect the Hardware

The Raspberry Pi Zero does not have headers assembled to the GPIO pads. You will need to solder at least one header to the Pin 12 location (GPIO18).

The basic hardware installation is an almost one-for-one implementation of the Level-converter Chip Wiring setup found on Adafruit's Learning System tutorial NeoPixels on Raspberry Pi. The breadboard setup is summarized as follows:

  • Connect power supply ground to 74AHCT125 ground & 1OE pins and GND for each group of LED rows (5 rows per group ... all five groups of rows connected in parallel).
  • Connect power supply 5V to 74AHCT125 VCC, and VDC for each group of LED rows (5 rows per group ... all five groups of rows connected in parallel).
  • Connect Raspberry Pi pin 12 (GPIO18) to 74AHCT125 pin 1A.
  • Connect 74AHCT125 pin 1Y to the first LED row DIN.

In addition to the above, I chose to add a capacitor(1000 µF, 6.3V or higher) across the + and – terminals and a data line resistor (300 to 500 Ohm) between the 74AHCT125 pin 1Y and the input to the first LED row DIN. The project was tested without the added hardware with no observable ill effect but were added as a precaution based on the Best Practices found in the "Adafruit NeoPixel Überguide".

Power is brought into the enclosure via a MicroB USB Connector Breakout and split to power both the Pi and the breadboard in parallel. Solder header terminals to VCC and GND. Solder the capacitor and two pair of wire to each header terminal (be sure that the capacitor leads are correctly matched to the positive/VCC terminal and the negative/GND terminal). Connect one pair of VCC and GND wire ends to the breadboard. Solder the Micro USB Connector Shell to the other pair of wire ends and connect it to the Raspberry Pi.

You should now be able to power up the Pi from the micro USB connections. However, the LED's won't do anything yet until the NeoPixel Library is installed in the next step.

*Note: It is not necessary to wire the Pin 6 location (GND) as shown in the reference picture when the Raspberry Pi and the LEDs share the same power supply. I originally wired the project this way and noticed that a large proportion of current was grounding through this pin. Removing this connection had no adverse effect on the operation of the LEDs.

Step 6: Install the NeoPixel Library and Test the LED's

First, before proceeding with the software installation, it will be necessary to blacklist the Broadcom audio kernel (onboard sound driver for the Pi). This is to eliminate a PWM conflict between the following library installation and the onboard audio which can cause some strange behavior in the LEDs (random mix of flickering or blinking pixels) or functioning of the Pi when the HDMI is disconnected. The Instructable "Disable the Built-in Sound Card of Raspberry Pi" will walk you through the blacklist steps.

Now, download and install the NeoPixel Library for Raspberry Pi (rpi_ws281x library), following the Software instructions from the Adafruit Learning System tutorial with one exception. In addition to the tutorial instruction to install the library to Python by executing:

cd python
sudo python setup.py install

You will also need to install the library to Python 3 by executing:

sudo python3 setup.py install

This is because the weather_word.py program that you will install in a later step was written in Python 3.

Continue the Software instructions with the Strandtest Example. Be sure to change the LED_COUNT constant to the reflect the number of pixels in your project (in this case 286) or else only the first row of your matrix will be controlled when you execute the example code.

If all of your connections are good, you will get a nice bright* demonstration across the entire matrix!

* Note that for the Strandtest example and using a brightness setting of 255 and a pixel count of 286, a 2 Amp power supply will be pushed to it's upper limit. I measured about 2.2 Amps for the LED's while running the rainbow sequence on a 2 Amp power supply and about 2.5 Amps while running on a 4 Amp power supply. However, use caution when playing with the code. An all white (255, 255, 255) setting could pull more than 17 Amps (reference the Powering NeoPixels section of the "Adafruit NeoPixel Überguide" for estimating NeoPixel power requirements). I ran an all white as a test and it tripped my Pi into a reboot sequence.

Step 7: Install the "Weather Word" Programming

The Weather Word program is designed to fetch weather forecast data from an API in 15 minute intervals, parse the data into temperature, wind speed, and weather condition arrays, and then light specific sets of LED's that represent words in the LED matrix.

In order for the API to work, you will need to obtain an API key from the WeatherUnderground website (available here). This key will be entered into the apiboot.txt file at a later step.

From the Raspberry Pi terminal, execute the following command to download and install the needed apiboot.txt and weather_word.py program files.

git clone https://github.com/aughtnaughtzero/weather_word.g...

You will now need to edit the apiboot.txt file to 1) add your API key, 2) choose (uncomment) one of the API query options, and 3) choose 'english' (degrees F) or 'metric' (degrees C).

Executing the following command will open the apiboot.txt file in the nano text editor:

sudo nano /home/pi/weather_word/apiboot.txt

By default, the city/state query is uncommented (Miami/FL). Choose and modify any query of your liking, just be sure to comment (#) any unused query. Reference the Weather Underground documentation for more examples about the query types and how to tailor the queries to work with your specific need. When you are done editing the nano file, Ctrl-X to exit and Y to save the file.

Now, to test the installation, execute the following:

sudo python3 /home/pi/weather_word/weather_word.py

Upon execution, the program will write its first log.txt file. Though, if you open the log file now, the log file will only indicate that the program is initializing with the rainbow color sequence.

The rainbow color sequence will chase across the LED matrix for 60 seconds. The weather_word program is intended to be launched upon Raspberry Pi startup. The 60 second delay is meant to give the Pi plenty of time to boot and connect to wifi before it makes the first API call.

After approximately 60 seconds have passed, the program will make its first API call. If all goes well, the current weather conditions will be displayed on the LED matrix. Every 20 seconds, the display will cycle to 'upcoming low' and then 'upcoming high' forecasted weather conditions based on results parsed from the next 12 hours of weather data.

Opening the log.txt file will reveal the data set from the API call. The program will continue to make API calls and update the LED matrix and log.txt file every 15 minutes until the Pi is shutdown or the program is terminated (Ctrl-C from the terminal).

If the API call fails to connect or returns an error, the program will wipe the LED matrix with a red display, write the error encountered to the log.txt file, and terminate.

If the API call times out during the boot sequence, the program will wipe the LED matrix with a yellow display, write a message to the log.txt file, and attempt to connect again in 3 minutes.

For the purpose of testing the quality of the light baffles in your project, I wrote the following test program to cycle through each word in the display.

sudo python3 /home/pi/weather_word/weather_word_test.py

Each word dwells for 5 seconds and then repeats when reaching the end of the display.

When you are satisfied with your setup, the final step in the software installation is to have the Pi launch the program at startup. This is accomplished by using the following terminal command to modify the crontab.

sudo crontab -e

Scroll to the bottom of the file and add the line:

@reboot sudo python3 /home/pi/weather_word/weather_word.py

When you are done editing the file, Ctrl-X to exit and Y to save the file. Now when you shutdown and reboot your Pi, the weather_word program will launch as intended. Be patient during launch as there will be no display for the first 15 seconds or so until the crontab is executed. You can now untether the project from your keyboard, mouse, and display and place it anywhere that you would want to see the current weather and forecast at a glance!

Comments

author
alq1 made it!(author)2017-02-28

Hey, I cant find the API key...so where exactly can i find it on weather underground.

Thanks.

author
AughtNaughtZero made it!(author)2017-03-02

Hello alq1 ... try going to ... https://www.wunderground.com/weather/api ... there should be a link there to signup for the developer key ... it does not matter which plan you sign up for (I signed up for the cumulus plan) as there is no cost associated with any of the options.

author
alq1 made it!(author)2017-03-04

Thanks a lot, but now i have a new problem.. my LEDs have 4 soldering slots which are ( R G B 12V ) so im facing an issue in the wiring..

author
AughtNaughtZero made it!(author)2017-03-04

I think that the 12 V LEDs are going to be unsuitable for this project. 1) The main risk will be the total number of watts required to power the total number of LEDs ... too much wattage for the breadboard. 2) My project shows the Pi wired in parallel with the breadboard and LEDs ... the 12v will be too much for the Pi and will require a seperate power supply.

author
alq1 made it!(author)2017-03-04

Oh... So what if i wired the LED's to its own power supply i wont be able to wire the Pi to the Strip

author
AughtNaughtZero made it!(author)2017-03-04

Check out the instructions for wiring here ... https://learn.adafruit.com/neopixels-on-raspberry-pi/wiring ... these instructions are what I used to derive this project from. I think you should test the capability of the hardware you've chosen before moving forward with the project. If your LED's won't light or cannot be controlled using the methods described in the link, then you will have to change up your hardware to match. I'm thinking that the 12V is too much for the project ... even if you power the two independently. For example, the 74AHCT125level shifter is only capable of 3 to 5V. Are you certain that you purchased a 12V strip of LED's? Do you have a make/model for the LED's that you are willing to share so that I can check the specs?

author
AughtNaughtZero made it!(author)2017-01-24

The LED's do not have to be NeoPixel ... look for WS2182 when you shop and you should be good to go. Just make sure you purchase RGB and not RGBW ... the project does not currently support RGBW.

author
alq1 made it!(author)2017-01-28

Thank you and much appreciated!

author
alq1 made it!(author)2017-01-23

Can we use any other type of LED's ? or we have to particularly use the NeoPixels LEDs ?

author
AughtNaughtZero made it!(author)2016-11-19

Posting a note for the following update: Changed handling of errors received from the API to resolve to 'yellow' (soft) fail mode instead of 'red' (terminate) fail mode.

author
BGlad1 made it!(author)2016-11-16

I'm getting the "red mode" almost every day. Is there anything else, beyond reducing the brightness level, that may solve this?

author
AughtNaughtZero made it!(author)2016-11-16

I've had the same issues this week. Looking over the log.txt file it appears that the API is returning an error associated with a bad or missing key. I had originally set the program to terminate on API errors to flag the user that there may be a problem with the API request being made, especially at first launch (such as a bad or missing API key) ... well, this doesn't work so well when the server is returning false positives on this particular error (doh!)

I've tweaked the code to go to the 'yellow' (soft) error mode instead of the 'red' (terminate) error mode for API errors. I'm going to PM you a link to the file and let you try it for a day or two before I upload it publicly. Let me know how it works for you ... you will see more yellow errors but at least it won't be crashing.

author
BGlad1 made it!(author)2016-10-27

AughNaughtZero, did you reduce the LED brightness from a problem that you had? I think my power adapter failed, since it randomly went out and no power is getting into the pi at all.

author
AughtNaughtZero made it!(author)2016-10-27

Hello BGlad ... After monitoring the performance of the project over the course of several weeks, I had noticed effects of heat on the breadboard around some of the pin connections. I realized that when the program would go into 'yellow' or 'red' mode, the LEDs were pushing the limits of the hardware by pulling every bit of power that they could from the available power supply. I've monitored the project since updating the software and haven't had any issues with heat.

Please be sure to update the software to the latest before running your project again. Be sure to also update the apiboot.txt file as well ... the revised program will be looking for additional information from the boot file.

author
BGlad1 made it!(author)2016-11-01

Thanks ANZ,

It's updated and working well so far. I was trying to figure out if I could use theaterchase from rpi_ws281 library for certain words such as thunderstorms and a version of it for rain. I'm pretty sure theres a way but I'm not an expert in Python.

author
AughtNaughtZero made it!(author)2016-11-01

I'm glad that you were able to get your project up and running again! Please post your results if you develop any special effects for the display. I have a few ideas that maybe I will work on over the winter months ;)

author
AughtNaughtZero made it!(author)2016-09-27

Posting a note for the following updates: 1) In the software ... Lowered default LED brightness settings to yield a maximum current draw of less than 4 amps and added CAUTION comments to warn of changing brightness settings beyond project hardware capability. Added new function colorWipeRand for shuffled pixel effect when displaying 'yellow' error modes. Added new option to select temperature units english (degrees F) or metric (degrees C) in the apiboot.txt file. 2) In the Instructable ... Removed instruction to connect Pi Pin 6 (GND) and added instruction to blacklist the Broadcom audio kernel.

author
BGlad1 made it!(author)2016-09-07

I'm soo close! Everything works except for when I try to hang it on the wall. The program freezes. It appears that it only works when I have the HDMI cable plugged in. I believe it's a grounding issue but haven't figured out a solution yet.

author
AughtNaughtZero made it!(author)2016-09-08

Ok, I'm going to answer your question with another question ;)

Do you have the project set to launch at boot (did you edit crontab to launch weather_word.py)? I ask because you should be able to unteather the project from all peripherals, plug it in and it should run without interruption.

author
BGlad1 made it!(author)2016-09-08

Thanks for all the help Aught. Yes, the crontab is set and working properly. So when the HDMI cable is not plugged in, and I plug it in, it will start the rainbow wheel but then literally just stop moving and stay in rainbow without moving. Once I power up with the HDMI connected to the TV, it boots up perfectly. Strange isn't it? Maybe it's a defective pi?

author
AughtNaughtZero made it!(author)2016-09-08

Take a look at this thread and see if it helps ... https://github.com/jgarff/rpi_ws281x/issues/102

author
BGlad1 made it!(author)2016-09-12

That was a pleasantly surprising fix, all I needed was to add hdmi_force_edid_audio=1 in /boot/config.txt.

IMG_8114.JPG
author
AughtNaughtZero made it!(author)2016-09-12

Rock n' Roll BGlad ... I'm completely stoked that you were able to duplicate this project! I like the all black enclosure and it looks great hanging on the wall.

I will update the instructions to include the hdmi_force fix ... it will need to be a permanent addition to the installation going forward.

author
BGlad1 made it!(author)2016-09-05

Hey Aught,

Awesome project, I've made it up to here. But I am having trouble getting weather_word started. I keep getting "attributeerror: 'module' object has no attribute 'WS2811_STRIP_RGB'" perhaps this is because I'm using pi3 instead of Zero or my strip is RGBW. I'm not sure but maybe you might know how I can trouble shoot here. Thanks!

image.jpeg
author
AughtNaughtZero made it!(author)2016-09-05

Hello BGlad1... it is great that you have made it this far into the project! I'm working to better understand what might be failing.

First, I've run the weather_word and strandtest code on Pi2B, Pi3, and Zero with no issues other than the 'random flickering' issue noted at the bottom of Step 6.

Second, though I've not specifically used an RGBW in any of my projects, I believe that the neopixel library will treat the W bit as 0 unless specifically called.

It is hard to tell from your picture, but do you have the the rpi_ws281x library installed and did the strandtest example work? Are the rip_ws281x and weather_word folders showing in the /home/pi/ directory?

author
BGlad1 made it!(author)2016-09-07

Now, I am having a failure to read the APIboot.txt I added my API key from Weather Underground and I de-commented one line for CA\\San_Francisco. Still no joy :(. But I am certainly closer to finishing it.

author
BGlad1 made it!(author)2016-09-06

That was the problem! Thanks now it's in the right directory

author
BenjaminN27 made it!(author)2016-07-26

Thank you so much for this. I would would like to do this myself.

However I am unable to get the program files.

"Program Files - apiboot.txt and weather_word.py (available here)"

I cant click on the available here to download them. Would you be able to fix it or send me the files?

Thank you!

author
AughtNaughtZero made it!(author)2016-07-27

Good catch! I will fix the link later today when I'm off of my mobile. In the meantime, you can view and download the repository here ... https://github.com/AughtNaughtZero/weather_word

author
BenjaminN27 made it!(author)2016-07-27

Okay great! Thank you so much.
I am actually in High School in Australia and was just assigned a project today in my Information Technology class to build/create something.

Is there an email or Skype that I can contact you at for further questions and things along the way of me building it?

author
AughtNaughtZero made it!(author)2016-07-27

I think for now, we should maintain the questions within this forum ... Any question that you have could be one that the community would benefit from also.
In general, I believe that the steps posted in the Instructable should stand on their own ... But you might be the first to put the steps to the test ;)

author
BenjaminN27 made it!(author)2016-07-27

Okay no problem.

Thank you very much.

I will be back to talk and maybe ask questions. Thanks

author
BenjaminN27 made it!(author)2016-08-11

I was just told by my teacher that our budget is 50$.

Is there any way to do this, or something similar or smaller and be able to fit the budget?

Maybe doing it with LED's or something.

I hope you can help me, as I really want to do something like this for our class project.

author
AughtNaughtZero made it!(author)2016-08-11

With the following list of materials, I'm coming up with a cost of $56.50 ... this doesn't include shipping fees and it doesn't include the cost of some base materials (wire, solder, resistor) and hardware for setup (wireless keyboard, powered usb hub). I think you can beat this cost with some creative shopping and parts substitution (individual LED's versus a strip or stick) ... other materials you might be able to borrow from a classroom or friend (breadboard, decent power supply, etc).

Pi Zero Budget Pack ($25), 74AHCT125 Level Converter ($1.50), Wifi Adapter ($8), Breadboard ($5), Power Supply ($8), Barrel Jack ($2), Neopixel Stick ($6).

author
BenjaminN27 made it!(author)2016-08-15

Thank you very much for this.

What kind of Wifi Adapter do I need? There are too many to choose from nowadays I'm not sure what is required. I'm also not sure what Power Supply is needed. If you are able to find the Power Supply and Wifi Adapter on this website: http://www.jaycar.com.au/
That would be much appreciated, if the Power Supply and Wifi Adapter are not on there just the name of what I need would be fine.

Would I be able to follow the same instruction your provided in my project with these new parts? Or is the procedure different because I have different parts?

Thank you very much.

author
AughtNaughtZero made it!(author)2016-08-15

I purchased this power supply and this wifi adapter.

I don't think that you will be able to do this particular project for $50. The number of addressable LED's is a significant cost factor ... There are other methods of driving that quantity of LED's that will be less expensive ... you might check out the Sleek Word Clock instructable as an example. But the method to drive the LED's is different so the hardware setup and code would be quite different.

I'm thinking that you might scale the project way down to a handful of LED's and let the colors of the LED's represent the variables (maybe an LED for temperature and another for Humidity, etc).

Keep on thinking your project through Benjamin ... start sketching out what you want your project to look like and then start defining what it is you want the project to do. Then start working on the bill of materials and the code.

author
instructaspark made it!(author)2016-07-29

I signed up for a Weather Underground account and began looking over the phrases they use in their responses (https://www.wunderground.com/weather/api/d/docs?d=...). Since I am making my display in Celsius, I don't need some of the variable (hundred, ninety, eighty, seventy, sixty, fifty). Since I have a few extra lines, I plan to add some phrases so they can match up to the responses from wunderground better. The nice thing about using the addressable RGB LEDS is that you could have the entire display colour change from red to blue depending on range of current temperatures. I think I like the classic white look, but the colour could go to red as a warning if there is a heat warning advisory or wind chill advisory (or tornado warnings if that is in your area).

phrases.png
author
AughtNaughtZero made it!(author)2016-07-29

Very nice instructaspark ... you are on the right track and I like your suggestions.

The weather_word.py program parses forecast code data from the API using the 'fctcode' format described at the bottom of the page that you reference ... You are correct that you could receive a much more verbose response parsing from the 'icon' or the 'condition' API codes.

If you dump 'fctcode' in favor of another format, be sure to also adjust how the 'high' and 'low' weather conditions are sorted as well ;)

author
instructaspark made it!(author)2016-08-04

I got into it a bit deeper and found that I would have to make more than one API call to WeatherUnderground to get all the data I might need to figure out the conditions (I wanted more info like light/heavy precipitation and hail which isn't addressed using only the "forecast" API call). And since WU only allows 500 API calls per day and only 10 per minute, I might go over (I already did once while developing the code - you get 3 warnings before being banned).

Due to this, I have started looking into The Dark Sky Forecast (https://developer.forecast.io/docs/v2#forecast_cal... which gives MUCH more information with just one API call. And allows 1000 calls per day before it costs money (that's 40 an hour). I'll keep you posted.

author
AughtNaughtZero made it!(author)2016-08-05

I've read good things about the Dark Sky Forecasting. Thank you for keeping us updated on your progress. It will be great to see the end result!

author
instructaspark made it!(author)2016-08-08

I've got a website up and running to test the code over the next few weeks to see if I like the output (unfortunately I can't post a link here or I will go over my allowed API calls per day). I am mostly using Dark Sky Forecast for the data with a little bit of Weather Underground for special cases (like thunderstorms/flurries/blizzards).

If it is currently precipitating, then I can display if it is "light" or "heavy" based on the variable "precipIntensity" and the rule of thumb that anything under 2mm/hr is light and over 10mm/hr is heavy.

If it isn't precipitating, I can display if there is a "slight chance of" or a "chance of" precipitation based on the "precipProbablitiy" and the rule of thumb that anything over 0.5 is chance of and anything under is slight.

I am hoping to deduce more situation using the definisitions found here:

http://www.timeanddate.com/weather/glossary.html

For example, showers are defined as intermittent whereas rain is defined as for an extended duration. I could look at the probability and or intensity over the next few hours and if it is over a threshold for at least 3 hours, then it is rain instead of showers.

Also, snow fall is referred to as flurries if there is no accumulation. Luckily, Dark Sky has a prediction on accumulation so I can check these and decide whether to call it snow or a flurry.

The nice thing is I will always have info for the cloudiness regardless of what precipitation is occurring. This is something WU cannot do. If it tells you there are rain showers, you lose the ability to tell if the sky is partly/mostly cloudy.

Similarly, with Dark Sky, if it is raining, you can also tell if it is foggy because of the "visibility" data. If less than 2km, it is classed as fog (though I may have to watch if the reduced visibility is due to heavy snow/rain). But the main point is that this is all possible.

In the attached image, the various coloured words should be able to be mostly independent of each other so that the poster has the most words lit up to be as descriptive as possible.

WordLayout3.png
author
AughtNaughtZero made it!(author)2016-07-30

Posting a note that the weather_word.py code has been updated to correct a condition where the program would quit unexpectedly after receiving an empty 'hourly_forecast' response from the API. Updates are posted and maintained within the github repository.

author
Aquatation made it!(author)2016-07-26

This looks awesome. I'm in Europe, does this support temperatures in Centigrade?

author
AughtNaughtZero made it!(author)2016-07-27

A minor code edit will be necessary to parse out metric data from the API response. Open the weather_word.py file and search for the words 'english' and replace with 'metric'.
You should be good to go after that ... The remaining code and template will support a number range between +/- 199.

author
YourClassicCoder made it!(author)2016-07-26

I really like the idea of this project and I would like to make it without the LED lights.

Is there a solution to this? My first idea was to change the color of the text to determine the weather, I haven't tried it yet though. I am pretty good at python but I am only 12 years old so some help would be appreciated :)

author
AughtNaughtZero made it!(author)2016-07-26

Good question YourClassicCoder ... Yes, I believe that there are a variety of ways that you could make your own forecasting project without a huge LED array. You could try scrolling the forecast across a standard 16x2 LCD (https://www.adafruit.com/products/181) or string together a series of matrices (https://www.adafruit.com/products/3155) to look something like this (http://lifehacker.com/build-a-raspberry-pi-powered-weather-forecast-display-1783350558) ... a ring of pixels (https://www.adafruit.com/products/1643) that change color to suit the forecast would be neat.

From a 'coding' standpoint, all of my projects have started small. First maybe playing around with some code to get the lights to work the way I want them to. Then, some separate piece of code to play with API or other web data. Then some bigger code to start putting the two together and getting them to work in a predictable way.

author
instructaspark made it!(author)2016-07-25

Very cool project... this has been added to my "Honey Do" list. I don't mind because I like complex projects like this which require programming and electronics as well as assembly of components to perform a real world task. I am from Canada so I'm working on modifying the words for Celsius temperatures. I am also planning to implement this with an Electric Imp instead of Raspberry Pi. Thanks for the inspiration!

author
AughtNaughtZero made it!(author)2016-07-26

Rock on instructaspark ... The world needs more Weather Word forecasters ;) Keep us posted on your results!

author
WesleyW25 made it!(author)2016-07-25

How much did this project cost?

author
AughtNaughtZero made it!(author)2016-07-25

The total cost was north of $200 ... breakdown of the top expenses are 1) 5 meters of addressable LED's $99.95, 2) Raspberry Pi (Zero Budget Pack) $24.95, 3) Shadow Box $13, 4) 5 volt 4 amp power supply $8.99, 5) Wifi USB Adapter $7.99, 6) Breadboard $4.95, 7) Copy Shop $2, 8) 74AHCT125 Level Converter $1.50 ... the unexpected purchase of Acetate (11x17, 100 sheets) was $60 ... but now I have a lifetime supply ;)

About This Instructable

27,877views

382favorites

License:

More by AughtNaughtZero:LED Weather Words ForecastLED Weather Forecast
Add instructable to: