Download dynamics_01.zip and unzip it on your system.
It contains the ported Traer code (in traer3a_01.pde) and a simple pendulum sample.
If you haven't already, download Processing. Run the dynamics_01.pde file
in it. It is fairly easy to try out changes to your sketch in the Processing IDE.
Download the current Processing.js and copy it to your
webserver. Modify "dir1" in the sample HTML (in the next step) to point to wherever you've put it on your
webserver. Update the name of the .js file (currently "processing-1.0.0.js") in the HTML if it's changed.
Copy the dynamics_01.pde, widgets.pde, and traer3a_01.pde files to your webserver.
Modify "dir2" (in 3 places) in the following HTML to point to wherever you've put them,
and copy the HTML file to your server. This sample HTML
uses the canvas tag to run the sketch on a webpage:
Access the page in an HTML5 capable browser (the latest versions of Chrome, Firefox, IE, Opera and Safari
all appear to work). Here is the pendulums sample along with a couple other that I've been fiddling with:
From openprocessing.org
by Bryan Teoh. Download my current version.
Note: To run this sample in the Processing IDE, uncomment the first line in setup() and comment out the
size(200,200); following it.
From Traer's
Cloth sample. Download my current version.
Familytree
Under construction
-- With each of my downloads above (the "Download my current version" links), the Traer physics library
code (ported to Processing.js + Carl Pearson's improvements) is included in the sketch's folder (in traer3a_01.pde).
-- I am trying to reduce the CPU consumption of these samples, mainly by putting each to sleep after a while - when the red
indicator goes out. You can also turn the "power" on/off by clicking on that indicator.
-- The button on the pendulums sample, initially labeled "F.R. Undefined", indicates the setting of frameRate(). It is
initially undefined - that is, it has not been called yet in the code. In this case, the default fps should be 60
according to the doc. Clicking on that button results
in a call to frameRate(60) and the button changes to "F.R. Limited". Clicking again results in a call to
frameRate(9999) and the button now changes to "F.R. Unlimited". Then it toggles between 60 ("F.R. Limited")
and 9999 ("F.R. Unlimited"). Refresh the page to get back to "F.R. Undefined". The "fps" are the average frames
per second for that "power-on" period (ie. the current time period when the red power indicator is/was on). Here are some results that I'm seeing.
To develop an app for Processing.js deployment, I'd suggest making small changes to your sketch and trying them often in
your Processing.js/webserver/browser setup. Backup your code often in case you have to revert to a previous working
version. There are a couple things
that run in the Processing IDE, but won't when you try them in the Processing.js
environment, and tend to fail without any error messages. To debug them
you'll need to sprinkle println statements into your sketch, or I assume use a Javascript debugger.
For the HTML Grapher, I modified the original code from
www.aharef.info/static/htmlgraph
to fetch multiple pages and color them differently in the plot. To download and try my code:
To run it in the Processing IDE (once you've downloaded and installed the IDE),
open the sketch by double clicking on htmlgrapherApplet.pde or via File>Open.
You'll need the jar files
that are included in the applet directory of htmlgrapherApplet.zip. You can copy them to a
folder named 'libraries' inside the 'sketchbook' folder (as the error message will tell you) or you should be
able to simply drag them onto your sketch in the IDE - how easy is that? Click on the Run button in the IDE.
A window should appear with a couple buttons in the upper left corner. Click on the run button. The result should
look like --->
You can change hostname and urlPaths in the sketch to point to the site and pages you want to crawl. Also, note that this
sketch is using a utility called getDataFromURL.php on www.aharef.info to fetch the webpages. As the original author
notes, this may go away at some point so you might have to modify it to work.
The applet subdirectory also includes an index.html file that you can use to imbed the applet in your webserver.
The index.html file (along with the rest of the applet subdirectory) was created automatically by Processing using File>Export.
This code controls Arduino's LED connected to pin 13 from an iPod Touch or iPhone (or any browser able to make a
WiFi connection to an ad-hoc network - apparently not all devices with WiFi interfaces can). There is a demo
of the UI on this page. I have 2 versions of the code - one for the
Asynclabs WiShield 2.0
(which unfortunately is no longer manufactured) and one for the
Sparkfun WiFly shield. I'd like to port it to the
new Arduino WiFi Shield
announced in September,
but it's not available yet (as of 23 Jan 2012). I'm hoping the new Arduino-blessed WiFi shield will foster
a common API.
Arduino ADK (the sketch is about 14,700 bytes in size)
iPod Touch 1g with iOS 3.x (the only one I have handy)
MacBook to upload the sketch to the Arduino board
To download and setup the code,
if you have the Asynclabs WiShield 2.0,
download hwrc.14oct2011.zip (180 KB) which contains
the sketch file and libraries.
if you have the Sparkfun WiFly shield,
download hwrc_on_WiFly.27jan2012.zip (66 KB)
which contains the sketch file and libraries.
Here is what's in the downloads:
The WiShield version
The WiFly version
HWRC.pde
HWRC_on_WiFly.ino
The sketch file. This controls the webserver running on the Arduino.
It also controls the LED.
It includes the HTML and Javascript code that is served from the webserver and defines the UI.
/libraries/WiShield/
The WiShield library with the webserver code modified to do more logging and instrumentation.
/libraries/WiFlyAlpha2/
The WiFly Alpha 2 library, modified to run on Arduino 1.0.
/libraries/TimerOne/
The standard Timer1
library (in case you don't already have it).
The WiShield version runs on Arduino 022 IDE. The WiFly version runs on Arduino 1.0.
There's no special reason for that - it's just the versions that were available when I did the code.
You should be able to, fairly easily, convert my code to run on another version of the Arduino IDE if you want.
Anyway, copy the libraries over to your Arduino's /library/ folder.
You need to restart the Arduino IDE for them to be recognized.
For the WiShield version, load the HWRC.pde sketch
in the Arduino 022 IDE.
For the WiFly version, load HWRC_on_WiFly.ino
in the Arduino 1.0 IDE.
If, when trying to compile the sketch, you see error messages like:
... /WiShield/g2100.c: In function 'zg_init':
... /WiShield/g2100.c:62: error: 'PRR0' undeclared (first use in this function)
... /WiShield/g2100.c:62: error: (Each undeclared identifier is reported only once
... /WiShield/g2100.c:62: error: for each function it appears in.)
... /WiShield/g2100.c: In function 'zg_drv_process':
... /WiShield/g2100.c:424: error: 'PORTH' undeclared (first use in this function)
then make sure you select the Arduino board before trying to compile the sketch. I'm using the Mega 1280 board so I selected
Tools > Board > ArduinoMega (ATmega1280).
Open up the Arduino IDE's Serial Monitor window to see the trace of requests to the server. Use
115200 baud.
On the WiShield version, it took up to 20 seconds for setup() to complete on my system. There will be a message,
HWRC.setup() done., on the Serial Monitor window when it is ready.
On the WiFly version, the message you should see when setup() is complete is
Enter "$$$" (with no line ending) to enter WiFly command mode. ("CMD")
Then enter each command followed by a carriage return.
HWRC.setup() done.
Request: "/"
Server connection closed, 2606 bytes ACKed. RC=200.
Request: "/apple-touch-icon-57x57-precomposed.png"
Server connection closed, 26 bytes ACKed. RC=404.
Request: "/apple-touch-icon-57x57.png"
Server connection closed, 26 bytes ACKed. RC=404.
Request: "/apple-touch-icon-precomposed.png"
Server connection closed, 26 bytes ACKed. RC=404.
Request: "/apple-touch-icon.png"
Server connection closed, 26 bytes ACKed. RC=404.
Request: "/tp/hwrc/controller?stbu=Stop"
Server connection closed, 41 bytes ACKed. RC=200.
Request: "/tp/hwrc/controller?stbu=Start"
Server connection closed, 41 bytes ACKed. RC=200.
Request: "/tp/hwrc/controller?morb=morse"
Server connection closed, 41 bytes ACKed. RC=200.
Request: "/tp/hwrc/controller?morb=blinky"
Server connection closed, 40 bytes ACKed. RC=200.
It took about 18 seconds before the HWRC.setup() done message. Then I clicked on the app
on the iPod's Home Screen. That caused the "/" request to which the server returned the
webpage (2606 bytes) and Return Code 200 ("OK"). The browser then tried to fetch an icon for the webpage - something
they do automatically. We don't need any and the webserver returned 404 Return Codes ("Not Found"). Then I clicked
on the Start/Stop button twice. Then the "Morse Code" and "Blinky" radio buttons.
Doing a full reset...
Enter "$$$" (with no line ending) to enter WiFly command mode. ("CMD")
Then enter each command followed by a carriage return.
Connected via Ad-Hoc on Wifly-GSX-4e
Request: "/", RC=200
Request: "/apple-touch-icon-precomposed.png", RC=404
Request: "/apple-touch-icon.png", RC=404
Request: "/tp/hwrc/controller?stbu=Stop", RC=200
Request: "/tp/hwrc/controller?stbu=Start", RC=200
Request: "/tp/hwrc/controller?morb=morse", RC=200
Request: "/tp/hwrc/controller?morb=blinky", RC=200
Ad-Hoc is lost
This (also coincidentally) took about 18 seconds before the Enter "$$$" ... message.
Then I clicked on the app
on the iPod's Home Screen. That caused the "/" request to which the server returned the
webpage and Return Code 200 ("OK"). The browser then tried to fetch an icon for the webpage - something
they do automatically. We don't need any and the webserver returned 404 Return Codes ("Not Found"). Then I clicked
on the Start/Stop button twice. Then the "Morse Code" and "Blinky" radio buttons.
On your iPod Touch or iPhone, go to Settings > WiFi and
on the WiShield version, select ASYNCLABS.
Open a Safari browser page and go to http://192.168.1.2/
on the WiFly shield version, select WiFly-GSX-xx.
Open a Safari browser page and go to http://169.254.1.1/
When the Hello World Remote Controller page is displayed, click on
this
button in the middle of Safari's option bar,
then Add to Home Screen and finally
Add. The page lays out properly when you
start it from your Home Screen - ie. without Safari displaying it's address bar.
You should see the button has been added to one of your Home
Screen pages. E.g.
Click on it. You should be able to control the Arduino board's LED from that page.
Again, the UI demo is shown here.
I wanted to make a stereo webcam. I found some Mac OS-X code on Dominic Szablewski's blog,
www.phoboslab.org,
to control UVC webcams.
The webcams that I'm using, the Logitech Orbit AF, follow that standard. I added the following to his code:
controls for a couple unique features supported by the Orbit AF (Pan/Tilt, Manual Focus, and Zoom)
indicators to show Auto Exposure/Gain and Auto White Balance in action - that is,
when in auto mode for one of those, the sliders dynamically show the value set by the webcam
support for a 2nd webcam (for a stereo 3D view) - the program works with either 1 or 2
the option to write the stereo video to a file.
The saved .mov video can be sized for YouTube (480x270, 640x360, 960x540, 1280x720)
To try my version, you'll need Mac OS-X (I'm using Snow Leopard, 10.6.5) and at least 1 Logitech Orbit AF webcam. Then,
Plug in 1 or 2 Logitech Orbit AF webcams. My program should detect whether there are 1 or 2 plugged in when it starts.
Start the program by double-clicking on SW.xcodeproj (if you have Xcode); otherwise double-click on build/Debug/SW.app.
You should see something like (well, if you were lying in the berth of a small sailboat):
With 1 webcam
With 2 webcams
I have an overview video started, plus will put together some documentation. Please let me know if you have any
problems or suggestions - email to
.