<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://badge.emfcamp.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Russ</id>
	<title>EMF Badge - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://badge.emfcamp.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Russ"/>
	<link rel="alternate" type="text/html" href="https://badge.emfcamp.org/wiki/Special:Contributions/Russ"/>
	<updated>2026-04-23T20:58:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://badge.emfcamp.org/w/index.php?title=TiLDA_MK3/Firmware_Update&amp;diff=267</id>
		<title>TiLDA MK3/Firmware Update</title>
		<link rel="alternate" type="text/html" href="https://badge.emfcamp.org/w/index.php?title=TiLDA_MK3/Firmware_Update&amp;diff=267"/>
		<updated>2017-08-13T09:44:26Z</updated>

		<summary type="html">&lt;p&gt;Russ: /* Before you start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Update your Tilda Mk3==&lt;br /&gt;
&lt;br /&gt;
This guide will help you to update your Tilda Mk3 badge. Be careful, following these instructions will delete all files and setting on your badge, so make sure you have copies of everything!&lt;br /&gt;
&lt;br /&gt;
If you're having trouble following these instructions or updating your badge, [mailto:badge@emfcamp.org please get in touch] and we'll do our best to help.&lt;br /&gt;
&lt;br /&gt;
== Before you start==&lt;br /&gt;
&lt;br /&gt;
You need to put your badge into DFU mode. This activates a USB bootloader stored in ROM on the STM32 processor.&lt;br /&gt;
&lt;br /&gt;
'''To enter DFU mode:''' Switch on the badge. Press the center joystick button while at the same time quickly pushing the reset button on the back of the badge. &lt;br /&gt;
&lt;br /&gt;
In some cases this seems to require a few attempts. You can also try unplugging the battery, and holding down the center button while plugging in USB.&lt;br /&gt;
&lt;br /&gt;
==OSX==&lt;br /&gt;
&lt;br /&gt;
'''Prerequisites needed for Mac OS X'''&lt;br /&gt;
&lt;br /&gt;
1. XCode (from App Store)&lt;br /&gt;
&lt;br /&gt;
2. Python &amp;amp; pip&lt;br /&gt;
* Homebrew method&lt;br /&gt;
*: 1. [http://docs.python-guide.org/en/latest/starting/install/osx/ Install Homebrew and Pip]&lt;br /&gt;
*: 2. &amp;lt;code&amp;gt;brew install libusb&amp;lt;/code&amp;gt;&lt;br /&gt;
*: 3. &amp;lt;code&amp;gt;pip install libusb1 pyusb&amp;lt;/code&amp;gt;&lt;br /&gt;
* MacPorts method&lt;br /&gt;
*: 1. [http://johnlaudun.org/20150512-installing-and-setting-pip-with-macports/ Install MacPorts and Pip]&lt;br /&gt;
*: 2. &amp;lt;code&amp;gt;sudo port install usbutils py-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
*:: usbutils provides e.g. lsusb, useful for knowing if the badge is connected in DFU mode&lt;br /&gt;
*: 3. &amp;lt;code&amp;gt;sudo pip install libusb1 pyusb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Check that you're connected in DFU mode:&lt;br /&gt;
: &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt;&lt;br /&gt;
: Should output something like:&lt;br /&gt;
: &amp;lt;code&amp;gt;Bus 020 Device 002: ID 0483:df11 STMicroelectronics STM Device in DFU Mode&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. &amp;lt;code&amp;gt;wget https://update.badge.emfcamp.org/update.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. &amp;lt;code&amp;gt;sudo python update.py&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. To get a shell: &amp;lt;code&amp;gt;screen /dev/tty.usbmodem*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Troubleshooting'''&lt;br /&gt;
&lt;br /&gt;
If you get the error &amp;lt;code&amp;gt;Error: No backend available&amp;lt;/code&amp;gt; then python cannot find the USB library.  Please Repeat steps 2 and 3 above, see https://github.com/walac/pyusb/issues/120 for more details.&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
Install prerequisites if required:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install python-usb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open a terminal and execute this line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl --silent --show-error --retry 5 https://update.badge.emfcamp.org/update.py | python&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you get an error saying &amp;lt;code&amp;gt;ImportError: No module named core&amp;lt;/code&amp;gt; then the python-usb package in your distribution is too old. On Debian, you should be able to fix it using pip instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt install python-pip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo pip install --upgrade pyusb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;WARNING&amp;lt;/span&amp;gt;: There have been reports of badges being bricked when flashed from windows. They can be recovered using the OSX/Linux update procedure. We are looking for alternative ways of updating using Windows.'''&lt;br /&gt;
&lt;br /&gt;
On a Windows PC, you will need to download the STMicroelectronics DfuSe USB device firmware updater software http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/stsw-stm32080.html and use the 'Upgrade or Verify Action' part of the GUI to update the firmware instead.&lt;br /&gt;
&lt;br /&gt;
* Install the STMMicroelectronics utility from the link above.&lt;br /&gt;
* Download the firmware.dfu file from https://update.badge.emfcamp.org/firmware.dfu and save it.&lt;br /&gt;
* With the badge plugged into the computer, hold the centre joystick button and press reset. The badge should now boot into the bootloader, and be detected as a 'STM Device in DFU Mode'.&lt;br /&gt;
* Start up DfuSeDemo.exe, and click the 'Choose' button - select the firmware.dfu file and then hit 'Upgrade'&lt;br /&gt;
* Your firmware will now be updated.&lt;br /&gt;
&lt;br /&gt;
== Other Operating systems==&lt;br /&gt;
&lt;br /&gt;
To update your badge please download the following script and run it via python: [https://update.badge.emfcamp.org/update.py update.py]&lt;br /&gt;
&lt;br /&gt;
If you know how to flash the badge yourself you can also download the DFU binary directly: [https://update.badge.emfcamp.org/firmware.dfu firmware.dfu]&lt;br /&gt;
&lt;br /&gt;
== Build your own version==&lt;br /&gt;
&lt;br /&gt;
If you want to build your own version of the firmware have a look [https://badge.emfcamp.org/wiki/TiLDA_MK3/build here]&lt;/div&gt;</summary>
		<author><name>Russ</name></author>
	</entry>
	<entry>
		<id>https://badge.emfcamp.org/w/index.php?title=Badge_Competition_2016&amp;diff=246</id>
		<title>Badge Competition 2016</title>
		<link rel="alternate" type="text/html" href="https://badge.emfcamp.org/w/index.php?title=Badge_Competition_2016&amp;diff=246"/>
		<updated>2016-10-02T15:45:26Z</updated>

		<summary type="html">&lt;p&gt;Russ: Created page with &amp;quot;We're running a competition for the best use of the TiLDA Mk3 badge from EMF 2016. We'll award a prize in two categories: software and hardware.  The prize in both categories...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We're running a competition for the best use of the TiLDA Mk3 badge from EMF 2016. We'll award a prize in two categories: software and hardware.&lt;br /&gt;
&lt;br /&gt;
The prize in both categories will be '''two tickets to EMF 2018''' (plus the 2017 one-day event if it happens), with the runners up getting another TiLDA Mk3 badge.&lt;br /&gt;
&lt;br /&gt;
==Entering==&lt;br /&gt;
&lt;br /&gt;
All apps submitted to the app library will be considered for the competition. If your entry can't be uploaded to the library, drop us an email at badge@emfcamp.org.&lt;br /&gt;
&lt;br /&gt;
Entries will close on December 31st, 2016.&lt;/div&gt;</summary>
		<author><name>Russ</name></author>
	</entry>
	<entry>
		<id>https://badge.emfcamp.org/w/index.php?title=TiLDA_MKe&amp;diff=4</id>
		<title>TiLDA MKe</title>
		<link rel="alternate" type="text/html" href="https://badge.emfcamp.org/w/index.php?title=TiLDA_MKe&amp;diff=4"/>
		<updated>2015-05-01T15:22:39Z</updated>

		<summary type="html">&lt;p&gt;Russ: Created page with &amp;quot;Front Front  [http://en.wikipedia.org/wiki/E_(mathematical_constant) Why MKe?]  =EMF 2014 Badge=...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:IMG_0474.jpg|500px|right|thumb|Front]]&lt;br /&gt;
[[File:Badge_Front.png|right|thumb|Front]]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/E_(mathematical_constant) Why MKe?]&lt;br /&gt;
&lt;br /&gt;
=EMF 2014 Badge= &lt;br /&gt;
The main aim of the 2014 badge is to give camp attendees an interesting bit of hardware to play with during the camp and experiment with afterwards. We designed an Arduino compatible platform to allow easy reuse and access, and have published all code and design files.&lt;br /&gt;
&lt;br /&gt;
==Battery Warning==&lt;br /&gt;
A very last minute battery (and connector) change on the badge due to a supplier problem meant two issues arose with the badge during EMF:&lt;br /&gt;
&lt;br /&gt;
* '''Always make sure to plug your battery in the right way round!''' The new battery connector allows you to connect it backwards. We did our best to mitigate this, but connecting it incorrectly will destroy the power management controller and prevent the badge from charging or running from the battery. It will still function perfectly using USB power. &amp;quot;Red&amp;quot; and &amp;quot;Black&amp;quot; are written next to the connector - please make sure to plug it in correctly.&lt;br /&gt;
&lt;br /&gt;
* '''Be careful not to short the battery connector wires!''' The new battery connector slightly exposes the wires when the battery is plugged in. If a metal object shorts the two wires, it can result in extreme battery damage. If we'd known this was such an issue before the event we would have applied protective material to it - we suggest covering the exposed connector in tape, sugru, blu-tack, or some other insulating material. Alternatively, simply unplug the battery when your badge is not in use!&lt;br /&gt;
&lt;br /&gt;
==My badge is broken!==&lt;br /&gt;
Due to the aforementioned supplier issues it is possible that you may have received a faulty badge, or it may have been damaged by connecting the battery backwards. If you badge will not turn on when it has been plugged in with a MicroUSB cable (and the power switch on the back is set to &amp;quot;USB&amp;quot;), or something else seems wrong with it, please email [mailto:badge@emfcamp.org badge@emfcamp.org] and we'll try to fix or replace your badge.&lt;br /&gt;
&lt;br /&gt;
==Basic post-event features==&lt;br /&gt;
We made sure that the badge has a few features to play with once the event is over. More will be added over time as attendees submit changes to us.&lt;br /&gt;
&lt;br /&gt;
[[File:Badge_Back.png|right|thumb|Back]]&lt;br /&gt;
* Torch mode - Press the light button next to the screen. It will only light up fully if it's hung upside down to avoid blinding&lt;br /&gt;
* Snake&lt;br /&gt;
* Tetris&lt;br /&gt;
&lt;br /&gt;
But of course the point of the badge is to modify it and use it for other interesting things! The following sections describe how to update the firmware on the badge, how to use it as a simple arduino, and how to write your own code for the main badge firmware.&lt;br /&gt;
&lt;br /&gt;
==Getting help==&lt;br /&gt;
The EMF 2014 badge is a complex piece of hardware and software, however remember that you can just treat it as an Arduino if you find it all too daunting.&lt;br /&gt;
&lt;br /&gt;
If you get stuck and need advice, there's an [http://webchat.freenode.net/?channels=tilda active IRC chatroom] you can join to ask for advice, or if you're really stuck you can email us on [mailto:badge@emfcamp.org badge@emfcamp.org].&lt;br /&gt;
&lt;br /&gt;
=How to update the badge software &amp;amp; program the badge=&lt;br /&gt;
The badge software has been substantially updated since EMF, fixing bugs and removing features that will no longer work now you're away from our radio network. You should update your badge before starting to play with it any further. If you've never used an Arduino before this might be tricky - ask an Arduino-literate friend to help you, or drop by your nearest [http://hackspace.org.uk hackspace] and ask for advice.&lt;br /&gt;
&lt;br /&gt;
The badge is Arudino Due compatible, so [http://arduino.cc/en/Guide/ArduinoDue some of their instructions may help you if you have problems].&lt;br /&gt;
&lt;br /&gt;
==Set up your environment==&lt;br /&gt;
* Plug your badge into your computer via a MicroUSB cable. Make sure the power switch on the back is set to &amp;quot;USB&amp;quot;.&lt;br /&gt;
* Download the newest version of the Arduino IDE from http://arduino.cc/en/main/software&lt;br /&gt;
* Download the TiLDA firmware code from https://github.com/emfcamp/Mk2-Firmware&lt;br /&gt;
* Start the Arduino IDE.&lt;br /&gt;
* Now you have to change the sketchbook-folder to be the folder you just cloned or downloaded. To do this use File -&amp;gt; Preferences -&amp;gt; “Set Sketchbook location”. On MacOS, this is Arduino -&amp;gt; Preferences. &lt;br /&gt;
* Restart the Arduino IDE.&lt;br /&gt;
* Open sketch “EMF2014”.&lt;br /&gt;
* Set Tools -&amp;gt; Board to MKe v0.333 (RTOS Core).&lt;br /&gt;
* Set Tools -&amp;gt; Port to correct port for the Arduino&lt;br /&gt;
** On MacOS this is will start /dev/tty.usbmodem with 4 digits, and change for each port&lt;br /&gt;
** On Linux this is usually /dev/ttyACM0 but may be a higher number if you have other USB Serial devices&lt;br /&gt;
* Hit the upload button&lt;br /&gt;
* Wait&lt;br /&gt;
* Your badge should now be running the latest TiLDA firmware!&lt;br /&gt;
&lt;br /&gt;
==Programming the badge as an Arduino==&lt;br /&gt;
The badge is completely Arduino Due compatible, simply set the board type to &amp;quot;MKe v0.333(Arduino Core)&amp;quot; upload normal Arduino code and the badge will function. However if you want to use any of the more complex hardware on the badge (such as the screen and radio) we recommend programming it using our FreeRTOS framework documented below.&lt;br /&gt;
&lt;br /&gt;
Below is a version of the standard blink sketch that will flash the RX and TX LEDs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  void setup() {&lt;br /&gt;
    pinMode(PIN_LED_TX, OUTPUT);&lt;br /&gt;
    pinMode(PIN_LED_RX, OUTPUT);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void loop() {&lt;br /&gt;
      digitalWrite(PIN_LED_TX, HIGH);&lt;br /&gt;
      digitalWrite(PIN_LED_RX, LOW);&lt;br /&gt;
      delay(1000);&lt;br /&gt;
      digitalWrite(PIN_LED_TX, LOW);&lt;br /&gt;
      digitalWrite(PIN_LED_RX, HIGH);&lt;br /&gt;
      delay(1000);&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you do program the badge with simple Arduino code but wish to switch back to our official firmware, simply change the sketch to &amp;quot;EMF2014&amp;quot; (and if needed set the board type back to &amp;quot;MKe v0.333 (RTOS Core)&amp;quot;) and upload again.&lt;br /&gt;
&lt;br /&gt;
To make the badge Arduino shield compatible, follow [https://wiki.emfcamp.org/wiki/TiLDA_MKe#Making_the_badge_Arduino_shield_compatible these instructions].&lt;br /&gt;
&lt;br /&gt;
===Gotchas===&lt;br /&gt;
* Most Arduino code out there use Serial not SerialUSB. On MKe Serial is wired to the SRF radio. When using example code do a find and replace for Serial/SerialUSB this will redirect the Serial traffic of the USB port&lt;br /&gt;
* If you want to send data over the Radio you need to wake it and enable it first, set SRF_SLEEP to LOW using the following two lines of code  &amp;lt;code&amp;gt;pinMode(SRF_SLEEP, OUTPUT); digitalWrite(SRF_SLEEP, LOW);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Programming the badge in FreeRTOS==&lt;br /&gt;
===Your first “Hello world” app===&lt;br /&gt;
There’s a “HelloWorldApp.cpp” file in which you can play around. In order for it to show up on the Homescreen you have to uncomment line 51 in AppManager.cpp and flash the changed code to the badge. Great app pull requests are appreciated!&lt;br /&gt;
&lt;br /&gt;
If you are still using the Arduino IDE at this point, note that it will not let you edit the .cpp and .h files that are needed to create Apps for the badge. To force the IDE to re-compile/re-read any files you've edited using an external editor, make sure to go to the File -&amp;gt; Preferences dialog box, and check the &amp;quot;Use external editor&amp;quot; checkbox.&lt;br /&gt;
&lt;br /&gt;
===Why are things so different from standard Arduino code?===&lt;br /&gt;
We’re using a library called FreeRTOS that allows us to multitask - something that’s normally not possible with standard Arduino code. This allows us to run multiple tasks at the same time. FreeRTOS uses preemptive scheduling to switch between the task. Due to this we have to be very careful about how we do some things. For example we can’t just define interrupts for buttons in every task (imagine the mess!) or write to the serial port directly (your task might stop in the middle of the message). &lt;br /&gt;
&lt;br /&gt;
We’ve also spent quite a lot of time to make the built-in components as easy to use as possible without having every task to write lots of boilerplate code. If you feel like using the build-in components on the badge, chances are we already wrote a wrapper for them that is already used by one of the other tasks. &lt;br /&gt;
&lt;br /&gt;
Have a look at the “Documentation” section in this document for a full list of API functions. You will avoid a lot of headaches if you stick to those.&lt;br /&gt;
&lt;br /&gt;
=== Code structure ===&lt;br /&gt;
* FreeRTOS has the concept of “Tasks” which work like threads. We’ve wrappered them in a class called “Task” (for background stuff) and “Apps” (for foreground, one-at-a-time things)&lt;br /&gt;
* Everything needs to be in the main EMF2014 folder. Subfolders are not allowed. This is an Arduino IDE restriction :(&lt;br /&gt;
&lt;br /&gt;
==Debugging and Gotchas==&lt;br /&gt;
* The USB serial is set up to 115200 baud. There are lots of terminals that can connect to them. See below for how to enable the debug logging.&lt;br /&gt;
* If you can’t revive a badge, or only get the two red programming LEDs when you plug it, in, do a full erase (see below)&lt;br /&gt;
* Avoid busy waiting, use FreeRTOS queues and Tilda::delay() instead&lt;br /&gt;
* Don’t use low level functions like interrupts or serial ports directly unless you really, really know how FreeRTOS will handle them. For general logging you can use Tilda::log()&lt;br /&gt;
* If sending code to the badge using the Arduino IDE &amp;quot;Upload&amp;quot; button fails, even though the /dev/ttyACM0 (linux com port) is there, just retry, twice if neccessary.&lt;br /&gt;
&lt;br /&gt;
==Full erase==&lt;br /&gt;
This is the failsafe process if your badge won't show up over USB.&lt;br /&gt;
&lt;br /&gt;
# Unplug the badge&lt;br /&gt;
# Connect the Erase pins on the back together (two holes down the left hand side next to the battery and under the blue wireless module). You can use a jumper, jump wire, or the leg of a resistor for this.&lt;br /&gt;
# Turn the badge back on with the switch or plug it back in&lt;br /&gt;
# Press the Reset button on the front (bottom centre) and release&lt;br /&gt;
# Wait 15 seconds&lt;br /&gt;
# Unplug the badge or turn it off&lt;br /&gt;
&lt;br /&gt;
When you plug the badge back into a computer it will come back up in programming mode, with a different serial port to the usual one. Open the EMF 2014 sketch in the Arduino IDE, select the Tilda v0.333 (RTOS) programmer, and find the new serial port. The IDE console should show something like this:&lt;br /&gt;
&lt;br /&gt;
 Sketch uses 118,748 bytes (22%) of program storage space. Maximum is 524,288 bytes.&lt;br /&gt;
 Erase flash&lt;br /&gt;
 Write 127668 bytes to flash&lt;br /&gt;
 &lt;br /&gt;
 [                              ] 0% (0/499 pages)&lt;br /&gt;
 [                              ] 2% (10/499 pages)&lt;br /&gt;
 [=                             ] 4% (20/499 pages)&lt;br /&gt;
 [=                             ] 6% (30/499 pages)&lt;br /&gt;
 ...&lt;br /&gt;
 [============================= ] 98% (490/499 pages)&lt;br /&gt;
 [==============================] 100% (499/499 pages)&lt;br /&gt;
 Verify 127668 bytes of flash&lt;br /&gt;
 &lt;br /&gt;
 [                              ] 0% (0/499 pages)&lt;br /&gt;
 [                              ] 2% (10/499 pages)&lt;br /&gt;
 [=                             ] 4% (20/499 pages)&lt;br /&gt;
 [=                             ] 6% (30/499 pages)&lt;br /&gt;
 ...&lt;br /&gt;
 [============================= ] 98% (490/499 pages)&lt;br /&gt;
 [==============================] 100% (499/499 pages)&lt;br /&gt;
 Verify successful&lt;br /&gt;
 Set boot flash true&lt;br /&gt;
 CPU reset.&lt;br /&gt;
&lt;br /&gt;
==Your own wireless badge network==&lt;br /&gt;
[[DIY TiLDA Badge Network]] has instructions on how to setup your own private badge network using a RaspberryPi and two Ciseco radios.&lt;br /&gt;
&lt;br /&gt;
==Contribute==&lt;br /&gt;
Send us a pull request via [https://github.com/emfcamp/Mk2-Firmware GitHub] - We’ll do our best to review and merge the good ones during EMF so others can use them.&lt;br /&gt;
&lt;br /&gt;
=Using the badge hardware=&lt;br /&gt;
The badge has a plethora of hardware built in for you to play with, everything from accelerometers and gyroscopes to hidden ethernet headers! Breaking it all down is too much detail for this document, however we'll call out some things we built in that you might want to play with.&lt;br /&gt;
&lt;br /&gt;
Remember the badge is Arduino Due compatible, and we broke out nearly all the features of the ARM chip so you can access them. [http://arduino.cc/en/Main/ArduinoBoardDue Anything the Due can do], the TiLDA can do!&lt;br /&gt;
&lt;br /&gt;
==Making the badge Arduino shield compatible==&lt;br /&gt;
[[File:Sheild_Headers.JPG|500px|right|thumb|Sheild Headers]]&lt;br /&gt;
To make the badge Arduino shield compatible you'll need to solder simple strips of header pins onto the back of the badge. &lt;br /&gt;
You need the following headers&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Qty !! Type !! Use !! Rapid part&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2x03 Male || SPI ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1x08 Female || Power, Analog pins ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1x10 Female || Digital pins ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2x08 Male || Ethernet ||&lt;br /&gt;
|}&lt;br /&gt;
The picture to the right shows the placement.&lt;br /&gt;
&lt;br /&gt;
==Interesting things to play with==&lt;br /&gt;
Most of the interesting things are on the back of the badge. They're clearly marked in white. [https://wiki.emfcamp.org/w/images/b/bd/Badge_Back.png This diagram of the back] should allow you to locate them. Some of the following require extra parts to be added to your badge.&lt;br /&gt;
&lt;br /&gt;
* Full Arduino R3 shield compatible pins (Requires soldering the headers on the back of the badge)&lt;br /&gt;
* Pins either side of the lanyard holes for conductive thread (D19, D18, GND, 3V3)&lt;br /&gt;
* Infrared transmitter on the front (Pin shortcut IR_TX_PWM)&lt;br /&gt;
* Infrared receiver on the front (Pin shortcut IR_RX, Part Vishay TSOP75238TT available from digikey and Farnell )&lt;br /&gt;
* Piezo buzzer (Pin shortcut PIEZO or PIEZO_PWM)&lt;br /&gt;
* On-board ethernet (not available on the Due) - requires breakout module (eBay: Elechouse Taijiuino Ethernet PHY DM9161 Module)&lt;br /&gt;
* [http://www.invensense.com/mems/gyro/mpu6050.html MPU-6050] 3-axis Accelerometer and 3-axis gyro (IMUTask.cpp and the MPU6050 library)&lt;br /&gt;
* 128x64 pixel backlit LCD display (JHD12864, see [https://github.com/emfcamp/Mk2-Documentation/tree/master/LCD%20JHD12864 here for docs])&lt;br /&gt;
* [http://shop.ciseco.co.uk/srf-wireless-rf-radio-surface-mount/ Ciseco SRF Radio]&lt;br /&gt;
* [http://shop.ciseco.co.uk/powerpod-ncp1402-5v0/ PowerPOD NCP1402] interface, used to generate 5V from 3V3 battery supply power (needed for some shields)&lt;br /&gt;
* MicroSD adapter breakout (Molex 1050270001 available from digikey)&lt;br /&gt;
* Compass (magnetometer) breakout (HMC HMC5883L-TR available from digikey and Farnell)&lt;br /&gt;
* Reprogramming headers for the 868Mhz [http://www.ti.com/product/cc1110f32 CC1110 radio module]&lt;br /&gt;
* 1 megabit flash module (Part S25FL216K0PMFI011)&lt;br /&gt;
* SPI breakout&lt;br /&gt;
* 2x RGB LEDs on the front &lt;br /&gt;
* FTDI header (shared with SRF Radio)&lt;br /&gt;
* JTAG header (Part M50-3500542 available form Farnell&lt;br /&gt;
&lt;br /&gt;
==Included hardware==&lt;br /&gt;
&lt;br /&gt;
The following hardware has been included on the badge.&lt;br /&gt;
&lt;br /&gt;
* [http://www.atmel.com/products/microcontrollers/arm/sam3x.aspx Atmel ATSAM3X8E]&lt;br /&gt;
** This is the same chip as the [http://arduino.cc/en/Main/ArduinoBoardDue Arduino Due] and gives us the base platform for the badge&lt;br /&gt;
** 32bit ARM Cortex M3 * 84MHz&lt;br /&gt;
** 512KBytes Flash RAM&lt;br /&gt;
** 96KBytes of SRAM&lt;br /&gt;
* A 128x64 pixel monochrome LCD display&lt;br /&gt;
* [http://shop.ciseco.co.uk/srf-wireless-rf-radio-surface-mount/ Ciseco SRF Radio]&lt;br /&gt;
** 868Mhz RF Transceiver&lt;br /&gt;
** Simple UART interface&lt;br /&gt;
** Low power sleep mode&lt;br /&gt;
* [http://www.invensense.com/mems/gyro/mpu6050.html MPU-6050] 3-axis Accelerometer and 3-axis gyro&lt;br /&gt;
** I2C interface&lt;br /&gt;
** Tri-Axis angular rate sensor (gyro) with a sensitivity up to 131 LSBs/dps and a full-scale range of ±250, ±500, ±1000, and ±2000dps&lt;br /&gt;
** Tri-Axis accelerometer with a programmable full scale range of ±2g, ±4g, ±8g and ±16g&lt;br /&gt;
** Digital Motion Processing™ (DMP™) engine offloads complex MotionFusion, sensor timing synchronisation and gesture detection&lt;br /&gt;
* PMIC &amp;amp; LiPo&lt;br /&gt;
* Joystick, 4 way with click&lt;br /&gt;
* Buttons&lt;br /&gt;
* RGB LEDs&lt;br /&gt;
* IR Transmitter&lt;br /&gt;
* Arduino Headers&lt;br /&gt;
* Pads for wearable tech&lt;br /&gt;
&lt;br /&gt;
=Useful Hacks!=&lt;br /&gt;
==3d printable &amp;amp; laser-cuttable badge case==&lt;br /&gt;
Draft 3d print-able and laser-able case files [http://www.thingiverse.com/thing:436815 here]&lt;br /&gt;
==Convert images to TiLDA bitmap format==&lt;br /&gt;
* A Python script (via [https://twitter.com/trotmaster99 @trotmaster99]) that converts a monochrome bitmap image into a format suitable for the Tilda can be found [http://pastebin.com/8XeazQjT here].&lt;br /&gt;
* A similar script in Perl to create TiLDA MKe fullscreen bitmaps from XBM: -&lt;br /&gt;
&amp;lt;div style =&amp;quot;height:200px;overflow-x:hidden;overflow-y:auto;border: 4px solid orange;&amp;quot;&amp;gt;&lt;br /&gt;
'''xbm2mke.pl by [[User:Msemtd]]'''&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!perl -w&lt;br /&gt;
use strict;&lt;br /&gt;
# Little script to convert a regular XBM to TiLDA MKe bitmap&lt;br /&gt;
# only tested with fullscreen bitmaps!&lt;br /&gt;
# Hot file handle magic...&lt;br /&gt;
select((select(STDERR), $| = 1)[0]);&lt;br /&gt;
select((select(STDOUT), $| = 1)[0]);&lt;br /&gt;
sub t(@);&lt;br /&gt;
sub d($);&lt;br /&gt;
sub chug($);&lt;br /&gt;
my $f = shift;&lt;br /&gt;
#~ $f = 'blankish.xbm' if not $f;&lt;br /&gt;
if(not defined $f or not $f =~ /^(.*)\.xbm$/i){&lt;br /&gt;
    die &amp;quot;Usage: gimme an XBM file dude!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
my $name = $1;&lt;br /&gt;
t &amp;quot;Reading file '$f'...&amp;quot;;&lt;br /&gt;
my $data = chug($f);&lt;br /&gt;
t &amp;quot;OK&amp;quot;;&lt;br /&gt;
my @lines = split /^/, $data;&lt;br /&gt;
@lines = grep{chomp; s/^\s+//; s/\s+$//; length;} @lines;&lt;br /&gt;
#~ t d \@lines;&lt;br /&gt;
my($width, $height) = (0,0);&lt;br /&gt;
my @head = @lines[0..5];&lt;br /&gt;
foreach(@head){&lt;br /&gt;
    if(/_width\s+(\d+)/){$width = $1;}&lt;br /&gt;
    if(/_height\s+(\d+)/){$height = $1;}&lt;br /&gt;
}&lt;br /&gt;
t &amp;quot;width x height = $width x $height&amp;quot;;&lt;br /&gt;
my @k;&lt;br /&gt;
foreach(@lines){ push @k, split /,/; }&lt;br /&gt;
@k = grep { s/^.*(0x[0-9A-Fa-f]{1,2}).*$/$1/o; /(0x[0-9A-Fa-f]{1,2})/o } @k;&lt;br /&gt;
#~ t d \@k;&lt;br /&gt;
my $bc = scalar(@k);&lt;br /&gt;
t &amp;quot;Pulled out $bc hex bytes&amp;quot;;&lt;br /&gt;
if($bc != $width * $height / 8) {&lt;br /&gt;
    die &amp;quot;byte count $bc does not match that expected for w x h&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
t &amp;quot;OK - reorder bytes for MKe bitmap&amp;quot;;&lt;br /&gt;
my $wb = int($width/8) + (($width &amp;amp; 0x07) ? 1: 0);&lt;br /&gt;
t &amp;quot;width in whole bytes for $width pixels = $wb&amp;quot;;&lt;br /&gt;
my @mke;&lt;br /&gt;
for(my $col = 0; $col &amp;lt; $wb; $col++){&lt;br /&gt;
    for(my $row = $height - 1; $row &amp;gt;= 0; $row--){&lt;br /&gt;
        my $idx = ($row * $wb) + $col;&lt;br /&gt;
        my $val = $k[$idx];&lt;br /&gt;
        #~ t &amp;quot;Column $col + Row $row = idx $idx = $val&amp;quot;;&lt;br /&gt;
        push @mke, $val;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
my $out = &amp;quot;static const uint8_t &amp;quot;.uc($name).&amp;quot;_BM[] = {\n&amp;quot;&lt;br /&gt;
	.&amp;quot;    $width, // width\n&amp;quot;&lt;br /&gt;
	.&amp;quot;    $height , // height\n&amp;quot;;&lt;br /&gt;
#~ $out .= join(&amp;quot;, &amp;quot;, @mke);&lt;br /&gt;
while(scalar @mke){&lt;br /&gt;
	$out .= join(&amp;quot;, &amp;quot;, splice(@mke, 0, 16)).&amp;quot;,\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$out .= &amp;quot;};\n&amp;quot;;&lt;br /&gt;
# meh, just print it out&lt;br /&gt;
t $out;&lt;br /&gt;
&lt;br /&gt;
sub t(@) {&lt;br /&gt;
    foreach (@_) {&lt;br /&gt;
       print STDOUT &amp;quot;$_\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
sub d($) {&lt;br /&gt;
    require Data::Dumper;&lt;br /&gt;
    my $s = $_[0];&lt;br /&gt;
    my $d = Data::Dumper::Dumper($s);&lt;br /&gt;
    $d =~ s/^\$VAR1 =\s*//;&lt;br /&gt;
    $d =~ s/;$//;&lt;br /&gt;
    chomp $d;&lt;br /&gt;
    return $d;&lt;br /&gt;
}&lt;br /&gt;
sub chug($) {&lt;br /&gt;
  my $filename = shift;&lt;br /&gt;
  local *F;&lt;br /&gt;
  open F, &amp;quot;&amp;lt; $filename&amp;quot; or die &amp;quot;Couldn't open `$filename': $!&amp;quot;;&lt;br /&gt;
  local $/ = undef;&lt;br /&gt;
  return &amp;lt;F&amp;gt;;&lt;br /&gt;
}  # F automatically closed&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;span id=github&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Source =&lt;br /&gt;
&lt;br /&gt;
All the source code and designs are on openly available on Github:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/emfcamp/Mk2-Hardware Hardware] - the full board design&lt;br /&gt;
* [https://github.com/emfcamp/Mk2-Documentation Documentation] - a dump of relevant parts datasheets&lt;br /&gt;
* [https://github.com/emfcamp/Mk2-Firmware Firmware] - source code for the badge software&lt;br /&gt;
* [https://github.com/emfcamp/Mk2-Software Software] - server-side software for the network&lt;br /&gt;
&lt;br /&gt;
If you want to help, point your IRC client to #tilda on Freenode.&lt;br /&gt;
&lt;br /&gt;
= Firmware Documentation =&lt;br /&gt;
== Debugging ==&lt;br /&gt;
===Enabling the USB serial debug log messages===&lt;br /&gt;
To enable the debug logging you must uncomment the following line in [https://github.com/emfcamp/Mk2-Firmware/blob/master/hardware/emfcamp/sam/libraries/debug/debug.h#L42 hardware/emfcamp/sam/libraries/debug/debug.h]&lt;br /&gt;
&lt;br /&gt;
 // Enable debug task and output&lt;br /&gt;
 // #define DEBUG 1&lt;br /&gt;
&lt;br /&gt;
===Tilda::log(String text)===&lt;br /&gt;
&lt;br /&gt;
This logs “text” to the serial console. To read it connect to it via the Arduino IDE Serial Monitor. Don’t use “SerialUSB.println” or similar -- it’s not thread-safe and you might end up with utter nonsense.&lt;br /&gt;
&lt;br /&gt;
===Debugging using the JTAG interface===&lt;br /&gt;
The JTAG interface on the board provides powerful debugging facilities like breakpoints, backtraces, dumping memory, inspecting variables, checking task states, catching exeptions etc. To make this to work requires additional hardware and software, see [[TiLDA Debugging using JTAG]].&lt;br /&gt;
&lt;br /&gt;
== Buttons ==&lt;br /&gt;
The badge has 8 buttons: Up, Down, Left, Right, Center (on the joystick), A, B and Light. You can use arduino-style “digitalRead(BUTTON_RIGHT)” to read the current status of any button, but you can’t define your own interrupt (because we already did that). This doesn’t mean you can’t wait for a certain button to be pressed, it just means you have to approach it slightly differently:&lt;br /&gt;
&lt;br /&gt;
Example: A simple app displaying the button code&lt;br /&gt;
 void ButtonApp::task() {&lt;br /&gt;
     ButtonSubscription allButtons = Tilda::createButtonSubscription(LIGHT | A | B | UP | DOWN | LEFT | RIGHT | CENTER);&lt;br /&gt;
 &lt;br /&gt;
     while(true) {&lt;br /&gt;
         Button button = allButtons.waitForPress(1000);&lt;br /&gt;
         if (button == A) {&lt;br /&gt;
             debug::log(“You pressed button A”);&lt;br /&gt;
         } else if (button == LEFT) {&lt;br /&gt;
             debug::log(“You pressed LEFT”);&lt;br /&gt;
         } else if (button == NONE) {&lt;br /&gt;
             debug::log(“No button has been pressed in 1000ms”); &lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===ButtonSubscription Tilda::createButtonSubscription(&amp;lt;buttons&amp;gt;)===&lt;br /&gt;
&lt;br /&gt;
Registers a subscriptions for a defined set of buttons and returns a ButtonSubscription. Multiple Buttons can be combined via “|” (see example above). One button can not be subscribed by more than 10 subscriptions (which shouldn’t really happen, but keep it in mind). &lt;br /&gt;
&lt;br /&gt;
Don’t use this function in a constructor, it requires FreeRTOS to be running. Using it inside the task() function is the only safe place for it.&lt;br /&gt;
&lt;br /&gt;
===Button ButtonSubscription::waitForPress(TimeInTicks timeout)===&lt;br /&gt;
&lt;br /&gt;
This is normally called in a loop. It causes the task to block until one of the buttons has been pressed. If the timeout occurs before any button has been pressed “NONE” will be returned. &lt;br /&gt;
&lt;br /&gt;
===ButtonSubscription::waitForPress()===&lt;br /&gt;
&lt;br /&gt;
The same as above, but without the timeout.&lt;br /&gt;
&lt;br /&gt;
===ButtonSubscription::clear()===&lt;br /&gt;
&lt;br /&gt;
This should be called after an App has been suspended, just before it’s going to be resumed. It causes the Queue to be cleared which could otherwise lead to buttons being reported that have been pressed while other apps were in the foreground. Have a look at the FlashLightApp for an example.&lt;br /&gt;
&lt;br /&gt;
==LEDs==&lt;br /&gt;
===Tilda::setLedColor(Led led, Color color);===&lt;br /&gt;
===Tilde::setLedColor(Color color);===&lt;br /&gt;
&lt;br /&gt;
Sets the color of all or one led. Color is an object that takes red, green and blue as a value between 0 and 255 each. If no led is defined both leds will be set to the same color.&lt;br /&gt;
&lt;br /&gt;
Example: A simple color-changing task&lt;br /&gt;
 void ColorfulTask::task() {&lt;br /&gt;
     while(true) {&lt;br /&gt;
         Tilda::setLedColor(LED1, {255, 0, 0}); // Red&lt;br /&gt;
         Tilda::setLedColor(LED2, {0, 255, 0}); // Green&lt;br /&gt;
         Tilda::delay(300);&lt;br /&gt;
         Tilda::setLedColor(LED1, {0, 255, 0}); // Green&lt;br /&gt;
         Tilda::setLedColor(LED2, {0, 0, 255}); // Blue&lt;br /&gt;
         Tilda::delay(300);&lt;br /&gt;
         Tilda::setLedColor(LED1, {0, 0, 255}); // Blue&lt;br /&gt;
         Tilda::setLedColor(LED2, {255, 0, 0}); // Red&lt;br /&gt;
         Tilda::delay(300);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Display==&lt;br /&gt;
&lt;br /&gt;
The Display Library is based on GLCDv3 (http://playground.arduino.cc/Code/GLCDks0108), docs (http://code.google.com/p/glcd-arduino/source/browse/trunk/glcd/doc/GLCD_Documentation.pdf) but adapted to support our screen.  The Init routine is called in the setup, and the LCDTask takes care of ensuring the screen is updated every 40ms if required (Unlike the original GLCD library, screen updates are decoupled from the graphics routines.)&lt;br /&gt;
&lt;br /&gt;
Also available is M2tklib (https://code.google.com/p/m2tklib/) which is a nice toolkit library.  Further details on using this will come later, but expect the main loop to be handled for you, and just passing the menu structure you require for your app.&lt;br /&gt;
&lt;br /&gt;
Right now, you can call the GLCD functions directly with GLCD.DrawBitmap() for example.  This is going to change to be accessed through the GUITask class in the near future, to ensure only one task at a time writes to the screen.  Expect this to be simply GUITask in place of GLCD, along with a registering a redraw call back to GUITask. The bitmap format, by the way, is rather unconventional but there are a couple of utility scripts to convert popular formats down in the hacking section below - you can grab the SponsorsApp.h as an example and swap out the bitmap array with one of your choosing.&lt;br /&gt;
&lt;br /&gt;
Extra features that are included, GLCD.SetRotation() will handle rotation of the screen for you, and GLCD.CurrentWidth() and GLCD.CurrentHeight will give you the correct Width and Height for the current orientation.  GLCD.Width and GLCD.Height constants are not available, and the GLCD predefined Text areas will not be rotated for you, if you require this define your own text areas.&lt;br /&gt;
&lt;br /&gt;
Note that one function was not ported to the badge version of GLCD, &amp;quot;Printf&amp;quot;, you'll have to cope without it.&lt;br /&gt;
&lt;br /&gt;
== Sound == &lt;br /&gt;
There's a fully working Piezo on board!&lt;br /&gt;
&lt;br /&gt;
== IMU ==&lt;br /&gt;
=== Tilda::getOrientation ===&lt;br /&gt;
returns &amp;quot; ORIENTATION_HELD&amp;quot;, &amp;quot;ORIENTATION_RIGHT&amp;quot; (joystick to the right of the screen), &amp;quot;ORIENTATION_HUNG&amp;quot; or &amp;quot;ORIENTATION_LEFT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Flash Storage ==&lt;br /&gt;
We have 2mb of flash storage, but we're not using it in the main firmware - Please get this working!&lt;br /&gt;
== Data: Schedule ==&lt;br /&gt;
===Tilda::getDataStore().getSchedule(day, location) ===&lt;br /&gt;
== Date: Weather Forecast ==&lt;br /&gt;
===Tilda::getDataStore().getWeatherForecast()===&lt;br /&gt;
== Radio ==&lt;br /&gt;
There's no way of sending messages in the current version of the firmware, sorry :(&lt;br /&gt;
&lt;br /&gt;
== Time ==&lt;br /&gt;
&lt;br /&gt;
=== Tilda::delay(uint16_t delayInMs) === &lt;br /&gt;
&lt;br /&gt;
Works like Arduino’s delay(), but is FreeRTOS-safe. It’s safe to use this function before FreeRTOS has started.&lt;br /&gt;
&lt;br /&gt;
=== tilda::getClock() ===&lt;br /&gt;
&lt;br /&gt;
Returns an instance of https://github.com/MarkusLange/Arduino-Due-RTC-Library/blob/master/rtc_clock.h&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
===uint16_t tilda::getBadgeId()===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Battery==&lt;br /&gt;
===float TiLDA::getBatteryVoltage()===&lt;br /&gt;
Returns the current voltage as a float&lt;br /&gt;
&lt;br /&gt;
===uint8_t TiLDA::getBatteryPercent()===&lt;br /&gt;
Returns the current voltage as a percentage&lt;br /&gt;
&lt;br /&gt;
===uint8_t TiLDA::getChargeState()===&lt;br /&gt;
Returns the charge state&lt;br /&gt;
&lt;br /&gt;
0 Charging&lt;br /&gt;
1 Not Charging&lt;br /&gt;
&lt;br /&gt;
[[Category: Badges]]&lt;/div&gt;</summary>
		<author><name>Russ</name></author>
	</entry>
	<entry>
		<id>https://badge.emfcamp.org/w/index.php?title=SiNE&amp;diff=3</id>
		<title>SiNE</title>
		<link rel="alternate" type="text/html" href="https://badge.emfcamp.org/w/index.php?title=SiNE&amp;diff=3"/>
		<updated>2015-05-01T15:22:13Z</updated>

		<summary type="html">&lt;p&gt;Russ: Created page with &amp;quot;300px ==About SiNE== SiNE: Investigating the Neighbourhood of EMW&amp;lt;br /&amp;gt; Each attendee of Electromagnetic Wave receives a SiNE badge which h...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:SiNE_Front_Angle.JPG|thumb|300px]]&lt;br /&gt;
==About SiNE==&lt;br /&gt;
SiNE: Investigating the Neighbourhood of EMW&amp;lt;br /&amp;gt;&lt;br /&gt;
Each attendee of Electromagnetic Wave receives a SiNE badge which has two purposes; firstly it allows you to take part in a treasure hunt based around the boat. By solving the clues you will be directed to an object or location either on or near the Stubnitz. The clue letter is also the first letter of the answer - when you arrive at the correct location you will find a large matching letter. Hold your badge in front of the letter, and the corresponding light on your badge will illuminate. The first person to solve all the clues and bring their fully illuminated badge to the ticket desk wins two tickets to Electromagnetic Field 2014. Anyone else solving the puzzle will be allowed to choose from a selection of prizes for as long as they last!&lt;br /&gt;
&lt;br /&gt;
The second purpose of the badge is as a locator beacon - as people walk around the boat they will create a trail of the places they visit and the talks they attend. We hope to use this information to better schedule our future events. The data will be made available publicly after the event, and we'll provide a way of finding their badge identifier for those who want to get their own trail.&lt;br /&gt;
&lt;br /&gt;
===Scavenger hunt===&lt;br /&gt;
As you locate the beacons hidden around EMWave more of your LED's will light up. To save power the LED do not stay on all the time and the beacons you have seen are flash in groups every few seconds.&amp;lt;br /&amp;gt;&lt;br /&gt;
The beacons you have seen is store in the EEPROM and so the data is preserved even if you remove the power&lt;br /&gt;
====Clue List====&lt;br /&gt;
Now EMWave has past here is the clue list: (Will add answers soon --[[User:Dpslwk|Dpslwk]] ([[User talk:Dpslwk|talk]]) 14:21, 6 May 2013 (UTC))&lt;br /&gt;
*A: I can't believe it's not butter!&lt;br /&gt;
*B: Bond would be comfortable here and he has a licence.&lt;br /&gt;
*C: One of your EMW badge designers.&lt;br /&gt;
*D: One of your EMW badge designers.&lt;br /&gt;
*E: Powered by Orange.&lt;br /&gt;
*F: ____ and aft.&lt;br /&gt;
*G: False patch of nature.&lt;br /&gt;
*H: All _____ on deck! &lt;br /&gt;
*I: Initial illumination, informing incomers.&lt;br /&gt;
*J: Java's main export.&lt;br /&gt;
*K: A nautical speed, mooring the Stubnitz. &lt;br /&gt;
*L: Budding safecrackers.&lt;br /&gt;
*M: An essential orienteering tool.&lt;br /&gt;
*N: A German Venus? Not exactly Botticelli!&lt;br /&gt;
*O: Fun times in the Emergency Room!&lt;br /&gt;
*P: A most unusual Landrover.&lt;br /&gt;
*Q: Encoded in a massive square.&lt;br /&gt;
*R: A lifesaver in Germany.&lt;br /&gt;
*S: Quite possibly the most unusual holiday home.&lt;br /&gt;
*T: One of your EMW badge designers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Locator ID===&lt;br /&gt;
[[File:SiNE_Front_Buttons.jpeg|thumb|300px]]&lt;br /&gt;
Each badge is programmed with a unique ID, that is transmitted about 5 times a second. There will be Raspberry Pi's doted around the ship, collecting data.&amp;lt;br /&amp;gt;&lt;br /&gt;
EMF will not know your badge ID, as there are handed out at random. &amp;lt;br /&amp;gt;&lt;br /&gt;
A badge's ID is shown on the LED using binary encoding.&lt;br /&gt;
This is done at power up, or by pressing and holding the &amp;quot;ID&amp;quot; button&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you '''do not''' wish to have your badge trasnmitting an ID you can clear it by holding the &amp;quot;Erase&amp;quot; button for about 5 seconds.&lt;br /&gt;
&lt;br /&gt;
The badge ID is 9 bit's long, these are displayed across the A-I LED's, a lit LED is 1 and unlit is 0, LSB first.&amp;lt;br /&amp;gt;&lt;br /&gt;
Example if LED's A D E and H are lit then we have 010011001 in binary or 0x099 in HEX or 153 in decimal.&lt;br /&gt;
&lt;br /&gt;
Unfortunately due to a lack of time the Raspberry Pi's were never setup, as so no data was collected.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sponsors==&lt;br /&gt;
[[File:SiNE_Back_Angle.JPG|thumb|300px]]&lt;br /&gt;
SiNE was only possible thanks to our sponsors:&lt;br /&gt;
* [http://www.twilio.com Twilio] A Cloud communications company sponsored the parts need to make badges.&lt;br /&gt;
* [http://ciseco.co.uk Ciseco] A Nottingham based electronics company that make low power wireless radios, donated the time to build the badges on there SMT assemble line.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DevBoards===&lt;br /&gt;
[[File:DevBoards.JPG|thumb|300px]]&lt;br /&gt;
Before designing the final SiNE badge we built three development boards, not bothered about the looks, they were built to test the hardware and wiring between the parts. &amp;lt;br /&amp;gt;&lt;br /&gt;
Once it was confirmed that the parts worked together they were passed onto the software developer to start work on the code need for the scavenger hunt and location tracking. &amp;lt;br /&amp;gt;&lt;br /&gt;
Using these development boards meant the software was ready to go around the same time as the final badges were produced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==Badge Hacking==&lt;br /&gt;
[[File:SiNE_Schematic.png|thumb|300px]]&lt;br /&gt;
We actively encourage users to hack there badge better and hope the information provided below will help&lt;br /&gt;
&lt;br /&gt;
===Flashing and Fuses===&lt;br /&gt;
We use avrdude and an ISP programer to flash the ATTiny44A&lt;br /&gt;
Example command lines can be found in the Makefile in the SiNE-Firmware github&lt;br /&gt;
&lt;br /&gt;
avrdude part flag (-p) is t44&lt;br /&gt;
&lt;br /&gt;
Fuses:&lt;br /&gt;
* Low: 0xC2&lt;br /&gt;
* High 0xD7&lt;br /&gt;
* Extended: 0xFF&lt;br /&gt;
&lt;br /&gt;
===Components===&lt;br /&gt;
The following parts were used: (data-sheet links to come)&lt;br /&gt;
* ATTiny44A - MCU running all the code&lt;br /&gt;
* 74HCT164AD - Shift register connecting the matrix of LED's&lt;br /&gt;
* LED's - 20 0805 LED's for each of the hidden locations&lt;br /&gt;
* IR Receiver - listening for the unique ID of each of the hidden beacons&lt;br /&gt;
* IR Sender - sending out the badges ID for Location tracking&lt;br /&gt;
* 2032 Coin Cell - Power for the day and possible more &lt;br /&gt;
* ISP header - Used for programming of the ATTiny44A&lt;br /&gt;
&lt;br /&gt;
===Resources===&lt;br /&gt;
* [https://github.com/EMF-TiLDA/SiNE-PCB PCB]&lt;br /&gt;
* [https://github.com/EMF-TiLDA/SiNE-Firmware Firmware]&lt;br /&gt;
&lt;br /&gt;
[[Category:Badges]]&lt;/div&gt;</summary>
		<author><name>Russ</name></author>
	</entry>
	<entry>
		<id>https://badge.emfcamp.org/w/index.php?title=Main_Page&amp;diff=2</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://badge.emfcamp.org/w/index.php?title=Main_Page&amp;diff=2"/>
		<updated>2015-05-01T15:21:42Z</updated>

		<summary type="html">&lt;p&gt;Russ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We like to try and provide a great badge for each of our events, find out more below.&amp;lt;br/&amp;gt;&lt;br /&gt;
The aim for the every badge we produce is always to give people hardware they’ve probably not played with before while being simple enough that anyone can play with it during and after the event.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Emf2012_badge_pcb.png|thumb|300px]]&amp;lt;br/&amp;gt;&lt;br /&gt;
==EMF2012==&lt;br /&gt;
[http://wiki-archive.emfcamp.org/2012/articles/b/a/d/Badge.html TiLDA]&amp;lt;br/&amp;gt;&lt;br /&gt;
The first EMF camp badge, base around the Arduino Leonard, with on board IR, NRF24 Radio and RGB LED's.&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://blog.emfcamp.org/post/28558155390/revealing-tilda-our-camp-badge Revealing TiLDA, our camp badge!]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SiNE_Front_Angle.JPG|thumb|300px]]&lt;br /&gt;
==EMW2013==&lt;br /&gt;
[[SiNE]]&amp;lt;br/&amp;gt;&lt;br /&gt;
SiNE: Investigating the Neighbourhood of EMW&amp;lt;br/&amp;gt;&lt;br /&gt;
Each attendee of Electromagnetic Wave receives a SiNE badge which has two purposes; firstly it allows you to take part in a treasure hunt based around the boat. By solving the clues you will be directed to an object or location either on or near the Stubnitz. The clue letter is also the first letter of the answer - when you arrive at the correct location you will find a large matching letter. Hold your badge in front of the letter, and the corresponding light on your badge will illuminate.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EMF2014==&lt;br /&gt;
[[File:Badge_Front.png|right|thumb|Front]]&lt;br /&gt;
[[TiLDA MKe]]&amp;lt;br/&amp;gt;&lt;br /&gt;
The TiLDA MKe project, Code name &amp;quot;ElectroMagnetic Boogaloo&amp;quot;&amp;lt;br/&amp;gt;&lt;br /&gt;
The MKe brings an LCD display and Arduino Due compatibility. To give people live schedule updates and camp notifications.&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://blog.emfcamp.org/post/94157161753/announcing-tilda-mke-the-incredible-emf-2014-camp Announcing TiLDA MKe, the incredible EMF 2014 camp badge]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please Note: There are a couple of minor hardware and some firmware issues that might be effecting your badge. If you've let the magic smoke out of your charge controller or have tried to re-flash and ended up with nothing but a couple of dimly glowing lights then DO NOT DESPAIR -It's recoverable and fixes, documentation and lots of firmware are still being produced :)&lt;br /&gt;
&lt;br /&gt;
==[[Team:Badge|Badge Team]]==&lt;br /&gt;
&lt;br /&gt;
The baged team is being headed by &lt;br /&gt;
*[[User:Dpslwk|'RepRap' Matt]] from Nottinghack&lt;br /&gt;
*[[User:thinkl33t|Bob]] from HACMan&lt;/div&gt;</summary>
		<author><name>Russ</name></author>
	</entry>
</feed>