Arduino, BabyO (B-168), and Serial Communications?

I am able to get the BabyO programmed using the Arduino environment but also want to get output directed to the “Serial Monitor” display in Arduino.

I have two questions:

  1. Is the Arduino Serial communications with “print” and “println” supported on the BabyO?
  2. What modifications are needed to convert the Orangutan USB Programmer to allow serial communications?

I understand there is a jumper for the switch but do I need something soldered to the RX, TX, and G pins on the programmer?

Hello.

I don’t have any experience with the Arduino IDE’s serial monitor, but you should be able to easily transmit serial data between your Baby Orangutan and PC using your Orangutan USB programmer. Simply move the jumper on your programmer as described in the programmer’s user’s guide (so that it spans the two pins marked by a “U” on the back of the PCB) and the programmer will function as a USB-to-serial adapter. In this mode, the pads on the side of the programmer labeled RX, TX, and G serve as your logic-level serial interface. You should connect the RX pad to your Baby Orangutan’s transmit line (PD1), the TX pad to your Baby Orangutan’s receive line (PD0), and the G pad to your Baby Orangutan’s ground. You can solder wires directly to these pads, or you can solder a header onto your programmer and make a custom cable.

If you look under your computer’s device manager, you should be able to figure out which COM port your Orangutan USB programmer is on (but I’m guessing you already had to figure this out in order to program your Baby Orangutan). I assume you just need to set your Arduino IDE to use this port and hopefully it will pick up your transmitted serial data and display it using its serial monitor.

The Arduino serial functions should work just fine on the Baby Orangutan since they’re written for the same microcontroller.

If you want to use your Baby Orangutan as a true Arduino clone, you could use the programmer to burn the Arduino bootloader onto the ATmega168 and then you could program your Baby Orangutan through the USB-to-serial adapter. You might have to change the bootloader slightly for it to work at 20 MHz, though. If you go this route, you should check the Arduino website for more information on burning the bootloader onto chips that run at clock speeds other than the standard Arduino 16 MHz.

Please let me know if you run into any problems. Additionally, if you get serial communication working between your Baby Orangutan and the Arduino serial monitor I’d be very interested to hear about it!

- Ben

I did get the serial communications working. This was my first exposure to the BabyO and I would have designed my circuit boards differently to provide easier serial communication support. My choice of using the BabyOrangutan was a last minute decision instead of my usual work with the Boarduino. The BabyOrangutan’s onboard motor controller allowed me to make a simpler circuit board for our DIY robots in the summer camp class. The class was made up of kids from about 10 to 16 year olds. We built our robots from scratch including using the laser printer transfer method to etch our own circuit boards. The kids really enjoyed the experience.

I’m really glad to hear things worked out well, and it’s great to hear about kids having fun making robots! Did you have any difficulties getting the serial communication working? Are there any tips you would give others who want to do the same thing?

- Ben

Very cool. If you have time, could you describe how you did the toner transfer to copper-clad boards? I’ve tried a bunch of times with everything from glossy magazine paper to professional transfer paper, always with horrible results!

-Adam

One of the best complements I got from the kids was; “When my parents signed me up for this class I was expecting some kind of lame robot kit that we put together while the instructor goes out and drinks coffee, this is exactly what I was hoping for”. I brought in a band saw and drill press so they could cut and drill their chassis parts from sheet aluminum. They each got to etch their own circuit boards and solder the circuitry.

The only problem I had with the serial communications was not having prior experience to design additional circuitry into our circuit boards. The Arduino serial communications worked without any problems.

I am working on curriculum to try and get people to build their own home based robotics labs. I have been helping some area high schools as a mentor for their FIRST robotics teams. Three things I’ve noticed is that the robotics kits are too expensive for most of the high school student’s families to buy for home use.

The second thing is that around here, the FIRST teams are only located around the large metropolitan areas of Kansas City and St. Louis. I believe the low cost of Arduino related tools could help make this affordable to everyone and hopefully encourage the rural areas to get involved with robotics whether FIRST or otherwise.

Third, robotics is intimidating to many of the potential mentors. I am working on developing training materials and hope to make train the trainer sessions / materials available. I believe the Arduino technology can help ease the intimidation factor.

I’m not trying to create a movement to replace FIRST but instead trying to supplement the experience by making robotics affordable for each student to take home and experiment more on their own.

One thing I’m going to be working on is to see how much trouble it is to set up the BabyO for the native Arduino programming. Not that I don’t like your libraries but I would like to introduce the BabyO to students through the native Arduino bootloader to keep it simple. I’m also looking into how compatible it is to switch between the Actual Arduino and the BabyO.

Vince

I like the quote attributed to Edison that he didn’t fail a thousand times but found a thousand things that don’t work. I have several boards that I show as examples of what not to do.

I experimented with a number of papers too. I liked the HP Photo paper but it seems to have a plastic surface that becomes hard to remove from the copper. I need to go back into my notes to find the actual web site that suggested using Staples brand photo basic gloss item #666176. I’m using the Staples brand with good results, however the last few image transfers I did started having some problems so I’m wondering if there is a freshness factor to the paper. The next time I buy more of the Staples paper I’m going to start storing it in an airtight bag.

I tried using a clothes iron and had some problems. Also I am making two sided circuit boards so the iron method becomes problematic. I try to encourage robotics hobbyists to realize that fabrication is part of the fun in building robots and sometimes we have to build our own tools to build robots. I use two 3/16" aluminum plates to apply even pressure over all the circuit board for the transfer. Since my circuit boards have mounting holes these holes make a good way to align the copper board and both laser print images. I use a leather hole punch to cut the holes in the photo paper. I bolt together the aluminum plates, printed images and copper. If the bolt holes are far enough apart I also use a C-clamp to add pressure in the middle area. I bought a toaster oven at a garage sale and use this to bake the assembly. I like to raise the assembly’s temperature to 320 degrees using my infrared thermometer which usually takes about 10 minutes.

Cleanliness of the copper seems to be extremely important to the image transfer. I may over do the process but I’m using scotchbrite scouring pads and Acetone to start cleaning the copper. Then I’m using some GoJo hand cleaner with pumice and a paper towel rubbing evenly over the board. Third I’m using rubbing alcohol to remove the hand cleaner. Then I wash it in soapy water and rinse in clean water. That seemed to work most of the time. If you’re superstitious you might try wearing two socks on your left foot while rubbing a rabbits foot :slight_smile:

Hope this helps, Vince

Thanks for the details Vince,

Is this the website you were talking about? I agree that super-cleaning the board right before the transfer step is a must. I also got the best (or at least the only marginally usable) results with Staples photo-basic gloss paper. What’s sad is that I even tried some Pulsar Toner Transfer System paper: “For PCB’s, Decals, Tattoos…”. At $1 a sheet you would expect to see it work at least as well as photo paper, but it didn’t work at all! It’s an interesting feeling to watch the toner traces float up off your board as one piece before dissolving in the water… It sounds like the big difference between what we did is your excellent sounding aluminum-plate in a toaster oven method. I was in a hurry so I stopped fooling around when I got a board using the clothes-iron method that I could at least hand-patch. The next time I need to etch a board in a big hurry I’m going to give it a shot.

On another matter, I played around a little with making a version of the Arduino bootloader for the Baby O, there’s a little bit about it here. The only major difference is that the Baby O operates on a 20MHz clock, while most Arduino boards operate at 16MHz. Compiling a version of the bootloader that expects a 20MHz clock was trivial, I just needed to change the definition in the makefile. For the first quick test I used the Arduiono NG settings, since they simply use a long delay to stay in the bootloader at startup. For easy use though, you would probably want to make a version based on the Diecimila version of the bootloader, which has a very short delay, but uses the DTR and RTS serial lines to reset the AVR just before programming it (although just one would probably be enough). Unfortunately these pins aren’t brought out on the Pololu Orangutan programmer, but you could build a plug-in programmer out of a USB to Serial adapter.

The problem I haven’t solved yet is that a lot of the standard Arduino libraries that involve timing assume that the board is running at 16MHz. For example, the bit-bang software serial functions output at 6000bps when set to 4800bps. I looked around just a little more to try to find that magic file with the clock speed definition for the compiler, but with no luck (plus we had already solved the original problem that lead to this whole experiment). Some of the new Arduino boards, like the Lily Pad, don’t use an external crystal, and operate on the AVR’s internal 8MHz oscillator. I don’t have any of these to play around with, but I hope there’s a setting somewhere that changes how the standard libraries are compiled, otherwise everyone who uses one of these boards is running their code at half-speed!

Anyway, I think you have a great idea there. Please let us know what progress you make, and if you run into problems. This is a particularly hectic month for me, but when things settle back down I’ll take another crack at the Arduino compiler clock problem. It sounds like you’re doing some great stuff in your mentoring, and it would be neat it if you could let us know more about your curriculum when it’s ready.

-Adam

P.S. Of course the mechanical engineer in me says just replace the Orangutan’s external ceramic resonator with a 16MHz one.

Quick followup:

There are a bunch of official and unofficial Arduino boards around now running at 8MHz, which take advantage of the “LillyPad” setting on the Arduino programming software:

So somewhere down in the depths of the libraries and makefiles and such is an F_CPU definition that just needs to be set to 20000000 to make all the timing related functions work properly on an Orangutan running at 20MHz. Alternatively you could flip the Orangutan back over to run on it’s internal 8MHz oscillator, but that’s no fun!

-Adam

Another quick followup, I hadn’t read through the Arduino Environment Programming resource; the Pololu guys have already solved this problem. Looks like it’s not in any of the libraries or makefiles after all.

-Adam