Solar Graffiti

Jason Eppink and I have been working on the concept of solar graffiti (site-specific solar-powered installations of light and projection that explore the interplay of darkness and light, and image and text) for a few months now. So far we’ve created solar powered projectors, solar throwies and solar light boxes. We taught a solar graffiti workshop at Baltan Labs earlier this Summer which was a lot of fun. More info and documentation below…

Through the Solar Graffiti Workshop led by David Darts and Jason Eppink, participants will be introduced to public space art and will work together to transform Eindhoven into an urban laboratory for creative experimentation. Participants create site-specific solar-powered installations of light and projection. Using inexpensive off-the-shelf electronics and other household items, participants will design and produce light projections and sculptures, and install them in the urban environment. As part of the workshop, a dedicated artwork will be developed for the new gallery space MU at Strijp-S.The focus will be on producing light installations for display in and around the city. Specific topics of study will include circuit bending and basic electronics and design work. Participants will experiment with the creative customization of electronic devices and will explore the interplay of darkness and light, and image and text.

solar.graffiti1

solar.graffiti2

solar.graffiti6

solar.graffiti3

solargraffiti5

solar.graffiti4

Full Solar Graffiti flickr set here.

LEDfirefly

LED.firefly

I’ve made plenty of LED Throwies in my day but I only recently discovered Karl Lunt’s low power LED firefly project. I was immediately inspired to make my own LEDfireflies. Unlike LED Throwies which will only last 4 or 5 days per battery, these LEDfireflies utilize ATTiny AVR microcontrollers and the LED as a light sensor (cool!) to get several weeks of flashing on a single battery.

LEDfirefly.build.3

LEDs are commonly used as lights (they are diodes tuned specifically to emit light and packaged in translucent enclosures) but they can also be used as photodiodes to detect light. If you have an Arduino kicking around, you can easily experiment with this concept. Check out Zorink’s Instructable for a step-by-step and also Mike Cook’s page for more info and a video demo.

This LEDfirefly project has a very short materials list which means you can build them for under $2USD per firefly though you will need to invest in an AVR programmer ($22USD) and will need some basic electronics tools.

Note: It’s possible to use an Arduino as an AVR Programmer though that’s outside of the scope of this tutorial.

Materials

  • ATTiny13A (Google)
  • 1 M ohm, 1/8-watt resistor (1/4-watt works too!) (eBay)
  • CR2032 Battery Holder (TNRBattery)
  • CR2032 Battery (Amazon)
  • Diffused LED (Amazon)

Tools

  • Soldering Iron and Solder
  • Helping Hand (Amazon)
  •  Needle Nose pliers
  • Small wire cutter
  • USBTinyISP AVR Programmer (Adafruit) (Note: This kit requires a USB cable USB 2.0 A-Male to B-Male Cable)
  • Board Vice (Amazon) (optional but helpful for assembling the USBTinyISP)
  • Solder Sucker (Amazon) (optional but helpful for assembling the USBTinyISP)
  • Jumper Wires (Amazon)
  • Breadboard (Amazon)

Programming the ATTiny

The following tutorial was created on a Mac running OSX 10.8. However, you can also accomplish everything under Linux or even Windows.

1. First you’ll need to assemble the USBTinyISP Programmer. This is what you’ll use to speak with and upload files from your computer to the AVR microcontroller. LadyAda provides detailed instructions for how to do this. Note: when you’re installing the resistors to the board that you should use jumper wires (instead of of the supplied resistors) for R4 and R7.

2. Once you’ve assembled the USBTinyISP Programmer, you’ll need to download and install the CrossPack development environment for Atmel’s AVR microcontrollers. If you’re running Linux, refer to Lady Ada’s AVR Tutorial and if you’re using Windows, check out AVR Studio.

3. Connect the programmer to your computer via USB and open a terminal window (Applications > Utilities > Terminal). Test the interface to see if the programmer is recognized by entering the following command:

avrdude -p attiny13 -c usbtiny -n

It should send back the following message:

avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override this check.
avrdude done. Thank you.

This confirms that your computer is connected to and recognizes the USBTinyISP Programmer. If you’re on a Mac, the green LED light on your programmer will now likely be illuminated. Cool!

Note: If your test instead sends back:

avrdude: Error: Could not find USBtiny device

You should double check your USB connection and try changing USB ports and running the test again. You might also double check your soldering work and make sure you put all of the components in the right places. If you’re still having trouble after that, spend some time on the Adafruit forum and, if necessary, with your favorite search engine.

 4. Once you’ve confirmed that your computer can connect to and recognize the USBTinyISP Programmer, the next step is to wire up the microcontroller on your breadboard. I’ve created a diagram to help illustrate how to wire up the pins correctly.

Note: This illustration is created from a bird’s eye view and assumes that the “holes” on the USBTinyISB 6-pin connector and the “legs” of the microcontroller are all facing down towards the table.

Firefly.wiring.diagram.1

When you’re finished wiring everything up, it should look like this (right side of breadboard).

LEDfirefly.build.1

Note: I’ve built several LEDfireflies and have hacked together a small cable connector jig to simplify the process (see left side of breadboard on photo above). This allows me to quickly plug in the 6-pin USBTinyISP cable to my breadboard without fumbling with the jumper wires each time.

5. Now you’re ready to program the chip. First let’s run a test to make sure your computer can communicate with the microcontroller. Open up your terminal and enter:

avrdude -p attiny13 -c usbtiny -n

It should return the following message:

avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9007
avrdude: safemode: Fuses OK
avrdude done.  Thank you.

If you instead get an error message, check your connections (the breadboard wiring can be confusing and you may have done it backwards). When you get stuck, refer to the Adafruit forum and the Internet for help.

Next, you’ll need to download a copy of Karl Lunt’s code (mirror) to flash the microcontroller. Note that the zip file includes the C source file and a .hex file. Unzip the folder and place it somewhere convenient like your desktop. Then inside the terminal, change to the correct directory:

cd Desktop/fireflyLED

Now upload the .hex file to the microcontroller:

avrdude -p attiny13 -c usbtiny -U flash:w:fireflyLED.hex:i

It should send back a success message. Cool!

Assemble the LEDfirefly

Now that you’ve successfully programmed the ATTiny microcontroller, you can begin to build your LEDfirefly. Here’s a bird’s eye view wiring diagram of an assembled LEDfirefly.

LED.firefly.wiring

1. Take your LED and gently pry the two leads (legs) apart as if you were going to create the letter A. Now wrap one of the leads from the 1 M ohm, 1/8-watt resistor around one of the leads of the LED (about 1cm down from the glass base of the LED). Then wrap the second resistor lead around the second LED lead.

LEDfirefly.build.2

Note: It doesn’t matter which lead connects to which – these resistors work in either direction.

Also note: The shorter lead of the LED is negative. I recommend marking the negative lead with a sharpie (near where it meets the glass base) so that you can identify it later.

2. Now solder the resistor to the LED.

3. Once you’ve finished, you can cut the LED leads short (be sure to leave the leads from the resistor uncut). Now take the negative lead and attach it to the ground pin on the ATTiny13A. Then take the positive lead and solder it to the pin beside the ground.

LEDfirefly.build.4

4. Now that the LED and resistor are soldered to the ATTiny13A, the last step is to connect them to the battery holder. Flip the battery holder upside down and position the ATTiny13A on top so that it’s ground pin is closest to the negative terminal on the battery. Solder a short jumper wire from the ground pin of the ATTiny13A to the negative terminal on the battery holder.

5. Finally, solder a short jumper wire from the VCC pin of the ATTiny13A to the positive terminal of the battery holder.

6. Insert the CR2032 battery into the battery holder.

Note: The “+” and text on the battery should face outwards so that you can see them.

 7. The LED should now start flashing. If you place the LED directly under a strong light (or in direct sunlight) it will stop flashing.

Enclosure

Once you’ve successfully built your LEDfirefly, the next step is figuring out what to do with it. Assuming you plan to install it outdoors, you’ll want to weatherproof the electronics in some way. While the possibilities are endless, a simple solution is to place the LEDfirefly in a zip lock bag. However, I’ve found that a more elegant approach is to place my LEDfireflies in small translucent takeaway sauce containers.

LED.firefly.enclosure.2

If you drill a hole in the container lid, you can carefully pop the LED through the top while keeping the electronics sealed inside. LED.firefly.enclosure

I also like to place a 1/2″ rare earth magnet in the bottom of the container as it allows me to easily throw and attach the LEDfirefly to any ferromagnetic surface.

LED.Firefly.enclosure.3

 

PirateBox DIY

PirateBox can be configured to run on many devices, including wireless routers, single-board computers, laptops, and mobile phones. Key hardware platforms include the TP-Link MR3020 and the Raspberry Pi both of which start at US$35.

sk8box1

OpenWrt
PirateBox will potentially run on most OpenWrt compatible routers with USB storage. Check out this tutorial and be sure to visit the forum for support and more info.

piratebox-openwrt1

OpenWrt with Mesh
Thanks to lead PirateBox developer Matthias Strubel PirateBox can now be configured to create wireless mesh networks using Alexandre Dulaunoy’s Forban. This feature is still in testing – for more info, check out this forum post.

piratebox-openwrt3

Raspberry Pi
PirateBox can be configured to run on single-board computers like the Raspberry Pi. See this tutorial and search the forum for more info.

piratebox-openwrt2

PirateBox Live
Check out Cale Black’s Linux PirateBoxLive and Windows PirateBoxLive for tutorials outlining how to run PirateBox directly from a USB flash drive. These packages are based on Matthias Strubel’s amazing PirateBox installation scripts.

piratebox-diy1

Android
PirateBox can also be run on Android. Check out the Fun2Code tutorial and this xda-developers discussion thread.

piratebox-sk8box2

PirateBox Logo/Sticker
You can download a svg version of the PirateBox logo here (thanks Kent Seaton) or a .png file from here. And/or you can order PirateBox stickers from zazzle.

piratebox-diy1

PirateBox Forum
Please post your questions, discoveries, ideas, and solutions in the PirateBox Forum.

PirateBox

PirateBox is a self-contained mobile communication and file sharing device. Simply turn it on to transform any space into a free and open communications and file sharing network.

piratebox1

Share (and chat!) Freely Inspired by pirate radio and the free culture movements, PirateBox utilizes Free, Libre and Open Source software (FLOSS) to create mobile wireless communications and file sharing networks where users can anonymously chat and share images, video, audio, documents, and other digital content.

piratebox2

Private and Secure PirateBox is designed to be private and secure. No logins are required and no user data is logged. Users remain anonymous – the system is purposely not connected to the Internet in order to subvert tracking and preserve user privacy.

piratebox3

Easy to Use Using the PirateBox is easy. Simply turn it on and transform any space into a free communication and file sharing network. Users within range of the device can join the PirateBox open wireless network from any wifi-enabled device and begin chatting and sharing files immediately. See the short video demonstration below for more details.

piratebox4

DIY PirateBox was created by David Darts and is registered under the GNU GPLv3. This license grants the right to freely copy, distribute, and transform creative works according to the principles of copyleft.

FAQ

How does it work?
Simply turn PirateBox on to transform any space into a temporary communication and wireless file sharing network. When users join the PirateBox wireless network and open a web browser, they are automatically redirected to the PirateBox welcome page. Users can then immediately begin chatting and/or uploading or downloading files.

PirateBox runs on multiple devices, including wireless routers, single-board computers, laptops, and mobile phones.

Can I make my own PirateBox?
Absolutely! The PirateBox is registered under the GNU GPLv3. You can run it on an existing device or can be built as a stand-alone device for as little as US$35. For detailed instructions, visit the PirateBox DIY page.

Where can I read more about the PirateBox?
Visit the PirateBox Press page for a listing of and links to more than 175 stories about the PirateBox.

Where can I find more photos of the PirateBox?
Check out the PirateBox Gallery.

Where can I find more videos of the PirateBox?
Check out these PirateBox Videos.

Why did you build the PirateBox?
The PirateBox solves a technical/social problem by providing people in the same physical space with an easy way to anonymously communicate and exchange files. This obviously has larger cultural and political implications thus the PirateBox also serves as an artistic provocation. See this ars technica article and this New Scientist article for more info.

Why did you call it the PirateBox?
The PirateBox is inspired by the free culture and pirate radio movements. The name is a playful remixing of the title of the world’s most resilient bittorrent site, The Pirate Bay.

Does the PirateBox promote stealing?
No. The PirateBox is designed to facilitate communication and sharing between friends and local community members.

What are you currently sharing on your PirateBox?
I’ve seeded my box with a variety of songs, books, and videos. At the moment, my PirateBox includes a collection of stories by Cory Doctorow, Abbie Hoffman’s Steal this Book, DJ Danger Mouse’s The Grey Album, Girl Talk’s Feed the Animals, a collection of songs by Jonathan Coulton and some animations by Nina Paley.

Who helped you build the PirateBox?
My friend Aaron Williamson from the Software Freedom Law Center provided some much needed technical advice. Matthias Strubel is the lead developer and has been very active in continuing to expand and improve the PirateBox project. Special props also to Christiane Ruetten who originally ported PirateBox to OpenWrt.

Do you know of any other projects similar to PirateBox?
Yes, check out Aram Bartholl’s fantastic Dead Drops. Also visit Jason Griffey’s PirateBox fork LibraryBox and the CoWBox (CoWorking Box).

Where can I discuss the PirateBox?
Post a comment below and/or visit the PirateBox Forum.

PirateBox DIY – OpenWrt

You can build a PirateBox for as little as US$30. Be sure to check out the PirateBox forum for more info and support. And you can read more about the PirateBox project here and here.

piratebox5

Stuff You’ll Need

  • TP-Link MR3020 (Newegg) or TP-Link TL-WR703N (DX) (eBay)
  • USB Flash Drive (formatted FAT32 with a single partition)
  • Ethernet cable
  • 5V/USB Battery (optional)

Pre-Installation

The following tutorial was created on a Mac running OSX 10.8. However, these instructions will also work for Linux or Windows (requires PuTTY).

1. First download a custom copy of OpenWrt for the MR3020 (modified by Matthias Strubel to include all needed kernel-modules). See this thread on the forum for more info. NOTE: The 12.09 OpenWrt firmware has been reported to not work! See see this OpenWrt discussion thread before proceeding. For the WR703N, download this OpenWrt firmware

2. Set the toggle switch located beside the LAN/WAN port to WISP mode

3. Turn off your laptop’s wireless (in OSX, click on the wifi icon and select “Turn Wi-Fi Off”)

4. Connect the router via ethernet cable to your computer and open a web browser to http://192.168.0.254 (for the MR3020) or http://192.168.1.1 (for the WR703N)

5. Enter the default username & password (admin & admin)

6. Navigate to System Tools > Firmware Upgrade and select the OpenWRT firmware

(Note: The WR703N firmware text is in Chinese. To flash OpenWrt from the web interface, select the last menu item on the left, and then the third submenu item. More info in this Village Telco post).

7. After the upgrade completes, the system will restart

8. Telnet to the device:

telnet 192.168.1.1

9. Use the passwd command to set your login password – this will enable SSH:

passwd

10. Edit the network file with vi (vi cheat sheet):

NOTE: The following instructions assume your gateway router’s (home router’s) IP address is 192.168.2.1. If your gateway router differs from this, you will need to modify your network file accordingly. Keep in mind that your OpenWrt (PirateBox) router should not have the same address as your gateway router though it will need to be on the same subnet in order to access and download files from the Internet.

vi /etc/config/network

The modified file should look like this:

config interface 'loopback'                                                               
        option ifname 'lo'                                                                
        option proto 'static'                                                             
        option ipaddr '127.0.0.1'                                                         
        option netmask '255.0.0.0'                                                        

config interface 'lan'                                                                    
        option ifname 'eth0'                                                              
        option type 'bridge'                                                              
        option proto 'static'                                                             
        option ipaddr '192.168.2.111'                                                       
        option netmask '255.255.255.0'                                                    
        option gateway '192.168.2.1'                                                     
        list dns '192.168.2.1'                                                           
        list dns '8.8.8.8'

11. Remove the power from the router.

12. Turn ON your laptop’s wireless (for OSX, click on the wifi icon and select “Turn Wi-Fi On”)

13. Connect the MR3020 (or WR703N) to your gateway router (e.g. your home network router) with an ethernet cable and plug the power back in. Wait a couple of minutes until the router boots up. With your computer connected to your home network, try sshing into the router (Note: use the “ipaddr” you assigned in step 9):

ssh root@192.168.2.111

14. Ping google to ensure your firewall settings are correct:

ping google.com

15. Add USB support to OpenWrt by installing and enabling the following packages (Note: this step is not required if you used the customized OpenWrt image from step 1):

opkg update
opkg install kmod-usb-uhci
insmod usbcore ## may return: file exists
insmod uhci
opkg install kmod-usb-ohci ## may return: up to date.
insmod usb-ohci

Install PirateBox

Next you’ll need to install PirateBox on the router.

1. Connect your USB drive (formatted to FAT32 with only one partition) to the USB port.

2. Install the mkPirateBox package by issuing the following commands.

cd /tmp
opkg update && opkg install http://piratebox.aod-rpg.de/piratebox_0.6.3_all.ipk

3. Optional: Install the Kareha Image Board:

/opt/piratebox/bin/timesave.sh /opt/piratebox/conf/piratebox.conf install
/opt/piratebox/bin/install_piratebox.sh
/opt/piratebox/conf/piratebox.conf imageboard

Afterwards, edit the Kareha image board config file to change the admin username and password (ADMIN_PASS and SECRET):

vi /opt/piratebox/www/board/config.pl

4. Once the install is completed, unplug the ethernet cable and disconnect the power for at least 10 seconds.

5. Restart the device and join the “PirateBox – Share Freely” network. Open any web page and you should be redirected to the PirateBox menu.

6. Begin sharing files and chatting!

Upgrading

To upgrade from an earlier version of PirateBox, check out this tutorial on the PirateBox forum.

Recovery

For the TL-WR703N, use these instructions from the OpenWrt wiki to enter failsafe mode. See also Matthias Strubel’s video demo.

More info about building a serial port (useful for recovering a “bricked” router) for the TL-WR703N on TheVillageTelco wiki.

PirateBox Forum

Please post your questions, discoveries, ideas, and solutions in the PirateBox Forum.