Create an Applescript/Arduino Alert flag.

 by aarone
Featured
Have you ever felt like the mail sound on your Mac just wasn't enough? Simple sounds and alerts just don't cut it for you? You want something more apparent and rewarding? If so, this is the Instructable you've been looking for.

In this Instructable, I'll show you how to hook up your Arduino to your Mac and throw up an actual flag when the alert of your choice occurs. In our example, we'll be doing an email alert, but you can use AppleScript to call this when almost anything happens.

I've created a little Instructables flag to go off when I receive comments on my instructables.

Let's get started!
 
Remove these adsRemove these ads by Signing Up

Step 1: What you Need

Hardware:

An Arduino: I know at least that the Duemilanove and the Diecimila will work. I don't know if older board versions will work.

A Flag: I made an instructables flag to alert me when I get instructables comment.

A 47 Ohm resistor: This is to prevent the Arduino from resetting at the close of a serial connection

A Servo

Wires to connect the Arduino to the Servo. My wires were a bit longer than needful.

Software:

Tod Kurt's Arduino Serial C code. Tod put this code up which makes it tremendously easy to communicate with the Arduino. Files included here. For more info look here:
http://todbot.com/blog/2006/12/06/arduino-serial-c-code-to-talk-to-arduino/

- Arduino Code

- Run Flag Applescript
vishalapr says: Jul 24, 2011. 9:14 AM
when I download runflag it downloads and saves as an unknown file type so what do I need to select to open it?
I tried adobe application installer but it didn't work...so please help!
aarone (author) in reply to vishalaprJul 24, 2011. 11:05 AM
runflag is an applescript file. If you're using it on Windows, it won't work.

The applescript simply calls runs the C script which puts the flag up. Depending on what email client you use, you may be able to write a script for that which will run the same C shell script in windows.
vishalapr in reply to aaroneJul 24, 2011. 11:32 AM
ok...so is there any way we can do thisbut on windows XP?
aarone (author) in reply to vishalaprJul 24, 2011. 1:02 PM
No.
You would be able to use to c script, but not the Applescript. You. Would have to find a way to call the c script from within your email client.
vishalapr in reply to aaroneJul 24, 2011. 9:43 PM
ok...thanks...
vishalapr says: Jul 24, 2011. 9:20 AM
Is it possible to use this method but for windows XP...hope there is...I would really love any help on this!
Thanks
peter_schlamp says: Mar 19, 2011. 7:55 PM
Excellent post. This will be my first servo project!
sparkyish says: Dec 1, 2010. 8:35 PM
great write up, thanks a ton. I am very new to this. I am using arduino to control a dc motor, and i wanted to make a voice command script recognized by speech recognition + applescript to run an appropriate forward or backward movement. i had the arduino portion set up and working by entering either an f (for forward) or b (for backward) in the serial monitor of arduino, but after i compiled Tom Kurt's code following your instructions the motor no longer turns. I can send the character f or b through terminal and it successfully makes it through to arduino (proven through a serial.println to the serial monitor), but no turn on the motor.. do I need to setup another serial port?

here is my test terminal command:
./arduino-serial -b9600 -p /dev/tty.usbserial-A700dYg4 -s f

results in: "Running forward" in the serial monitor

and here's my arduino code:

#include

AF_DCMotor motor(2, MOTOR12_1KHZ);

void setup() {
Serial.begin(9600);
motor.setSpeed(255);
}

void loop() {
if (Serial.available() > 0) {
int inByte=Serial.read();
switch (inByte) {
case 'f':
Serial.println("Running forward");
motor.run(FORWARD);
delay(500);
motor.run(RELEASE);
break;
case 'b':
Serial.println("Running backward");
motor.run(BACKWARD);
delay(500);
motor.run(RELEASE);
break;
default:
Serial.println("default value reached");
}
}
}

thanks for your time/advice!
sparkyish in reply to sparkyishDec 1, 2010. 8:45 PM
edit.... and after all that i noticed the ground came unplugged. lucky me for easy solutions! thanks again, haha
aarone (author) in reply to sparkyishDec 1, 2010. 9:07 PM
Glad to hear it's working! Be sure to detail in a blog or something so we can all take a look when it's done :)
Mansan says: Nov 11, 2010. 6:06 AM
Hi, cool project, I have been searching a lot for something that does this!

I have this weird problem though, the Arduino only responds properly if the IDE and serial monitor are open, otherwise I just get a quick double blink from the LED. How can this be?

Thanks!

Mansan in reply to MansanNov 11, 2010. 6:59 AM
Also, I'm using an Arduino Uno.
aarone (author) in reply to MansanNov 11, 2010. 7:19 AM
Hmm, that's a bit of a tricky one.

I haven't looked very hard at the Uno's reset. I know they made some changes to engage the reset which is probably why your setup isn't working right. On the Arduino, the board resets automatically when a serial connection closes. In my setup the resistor on the reset pin holds it high to prevent it from resetting.

If the reset on the Uno is different, it may be what's preventing this from working.
bfarn says: Oct 5, 2010. 12:36 PM
Just wanted to make your flag pop up.

And to thank you for this project. I'm using it to control a simple status light on an applescript and photoshop-action based photo booth.

Fun!
anonymouse197 says: Jul 28, 2010. 3:36 PM
Thanks for a fantastic instructable! Being a bit of a novice I was wondering how I could do away with the servo and flag (as my servo has not yet arrived) and simply light the Arduino LED for a couple of seconds. I originally though that this would simply be as easy as replacing every servo related command with a corresponding LED pin 13 one, but I have got a bit confused with the command line aspect. Please could you give me a hand with the Arduino scripting and command line? Thank you very much for your help and a great instructable, Ari
anonymouse197 in reply to anonymouse197Jul 29, 2010. 1:56 AM
Ah Ha! Its OK, I have figured it out. :)
bobbob says: May 15, 2010. 4:31 PM
 Hello,
I put the file in the correct folders but I get this error:
sh: /Users/drummerboyx/Library/Scripts/arduino-serial.c: Permission denied

Any ideas?
aarone (author) in reply to bobbobMay 15, 2010. 11:14 PM
From there error, it looks like you didn't compile the script, or you put the c source code into your runflag script instead of the executable file. In the runflag.scpt file, look at the lines:

./arduino-serial -b 9600 -p /dev/tty.usbserial-A4001lGx -s 1

and see if they don't read something like:

./arduino-serial.c -b 9600 -p /dev/tty.usbserial-A4001lGx -s 1

if you did end up compiling your executable as a .c file for some reason, you can change it's permissions in the info window of the file. Select the file in the finder and choose "Get Info".
humphreys7 in reply to aaroneMay 19, 2010. 7:18 PM
 How do you compile it?
humphreys7 in reply to humphreys7May 19, 2010. 7:32 PM
never mind, figured it out

and for anyone else who doesn't know how:

 gcc ./arduino-serial.c
aarone (author) in reply to humphreys7May 19, 2010. 9:48 PM
specifically, it's
gcc -o arduino-serial arduino-serial.c
The -o flag directs the output to a particular file.

Glad you figured out. Hope you find it successful

I've been considering redoing the instructable. The applescript should be sending a single command, and the arduino handling it on the otherside based on that. That would make for a smarter program.
glocketz says: Mar 8, 2010. 9:19 AM
 Hey there. Great project. Im having problems downloading the script file and the .pde. They just show up as .tmp files on my desktop. Thoughts?
aarone (author) in reply to glocketzMar 8, 2010. 10:08 AM
This is just a file issue between the site and your browser. If you rename the files with the appropriate extensions, they'll work fine :) (they're just text files...)
glocketz in reply to aaroneMar 8, 2010. 1:38 PM
 thanks for the quick response. everything works great. Im a bit new to avr programming, and im wondering if you can help me. Im using the project for an application that needs the servo to rotate 180deg in the positive direction and stop. then, when receiving a "1" command, rotate again 180deg in the positive direction, etc. Can you help me augment your .pde? 
aarone (author) in reply to glocketzMar 16, 2010. 11:15 AM
Sorry, I just realized I hadn't answered this. You should be able to do something like what you're describing, but I don't think I can help you. To make what you're describing, it sounds like you'll at least need a full-rotation servo. I don't think my Arduino program is very well suited for what you want, but it shouldn't be too difficult to write something like this. You may want to swing by the arduino forums and see if they have some suggestions. Be sure to be detailed in what you're trying to do, and good luck!
Leandro Tavares says: Jan 17, 2010. 1:14 PM
Hello, first of all, congratulations for this project!

I tested the terminal part, and it worked, but when I tried the AppleScript part I got an error message: "sh: /Users/leandrolucianitavares/Library/Scripts/arduino-serial: No such file or directory". I created the folder "Scripts" at the Library Folder, and put both the arduino-serial.c and the AppleScript file(which i called LedArduino) into it. I tried everything i could tought to solve it, but it was not effective! Could you help me? 


Thanks,

Leandro Tavares
aarone (author) in reply to Leandro TavaresJan 17, 2010. 3:41 PM
Hmm, this can be a toughy...

I'd double check that you've put the Applescript into your user's library folder and not the library folder at the root of the system. That is:
Make it's in:
/Users/yourUsername/Library/Scripts/

and not
/Library/Scripts/

Secondly, in your Mail rule, make sure that the path is properly set. In my example, I wrote 
~/Library/Scripts/

The tilde (~), if you're unaware is a shortcut to your user directory. If it's not there, Mail will try to look for the script at the root level, (Just /Library/Scripts/ ) and it's not there...

I hope that helps. If you still have problems, PM me and we'll talk more details...

Leandro Tavares in reply to aaroneJan 17, 2010. 4:42 PM
 Thanks for your time and the support, I made a mistake when I put the files, I forgot to put the compiled arduino-serial, I only put the arduino-serial.c, it was a dumb mistake!

By the way, I am expanding it for other applications (Adium as an example), but I am using LEDs instead of servos! I am thinking about a push button to turn off the LEDs (representing that the message was received) !

I was looking for a project like this!!
Again, thanks for this!!!

Leandro Tavares
aarone (author) in reply to Leandro TavaresJan 17, 2010. 5:20 PM
 You're very welcome, Thanks for being interested in my project! 

A push button to turn "off" is great. Make sure you have debouncing in there to make it work properly. It's also occurred to me that putting the "off command" into the Arduino via hardware, such as two connected pins would be great. One set to high output, the other reading for a high or low output, or if that pin wasn't set, then you could wait for software command to send the "off" signal. 

Good luck with your project. I'm glad you found a solution, and glad you found this useful!
mutface says: Sep 7, 2009. 10:25 PM
files dont download, all i get is .tmp : (
aarone (author) in reply to mutfaceSep 8, 2009. 7:52 AM
This has something to do with the Instructables site. Fortunately, there's an easy workaround. Just change the .tmp to a .c or a .pde and you'll be able to open the file. It's just text in there anyway.
mutface in reply to aaroneSep 11, 2009. 9:47 PM
thanks! it worked great
aethiolas says: Mar 31, 2009. 12:27 PM
I just wanted to throw the flag up!! Awesome job!
munchman says: Mar 12, 2009. 11:21 PM
For windows, you could get an outlook rule to trigger the arduino.
=SMART= says: Mar 12, 2009. 2:10 PM
Cool !
NachoMahma says: Mar 12, 2009. 2:19 AM
. Awesome! I don't need that particular implementation, but I can see where this could be adapted for all sorts of useful things. . Would it be possible to leave the flag up until you open the msg? Some other event, eg, mouse click?
aarone (author) in reply to NachoMahmaMar 12, 2009. 10:34 AM
I'm not sure. The Applescript dictionary for Mail is cool, but fairly limited. I don't think it attaches to specific messages. Potentially though, one could write a script that would fire when messages are received and watch those messages waiting for one to be opened. It's just not available out of the box.
Swishercutter says: Mar 12, 2009. 8:54 AM
How about a pirate flag, since most people use their computers as "pirate ships".
Swishercutter in reply to SwishercutterMar 12, 2009. 8:55 AM
Make it pop up whenever the bit torrent client is running.
aarone (author) in reply to SwishercutterMar 12, 2009. 9:45 AM
Absolutely. I know at least one Torrent client supports Applescript. If it has the proper hooks, I'd set it up to fire when a Torrent was completed.
gmjhowe says: Mar 12, 2009. 1:30 AM
This is great! I would love a little flag that pops up. But i check Ibles so often..
WirelessMonk says: Mar 11, 2009. 10:49 PM
I LOVE THIS!
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!