Intro

The experiment I will illustrate aims to demonstrate that birds can be not always angry, but also can do something else!

Before reading how I have reached this goal, please enjoy seeing them laughing and dancing.

The question I will answer is what the birds do when are not angry?

Finding the answer to this question also demonstrates my theory, based on the hypothesis that birds can dance. So how is it possible to set up some birds (I have found four for my experiment) dancing in a comfortable, small ecosystem?

Hardware

I have captured four nice birds found at a cheap retail who sell any kind of strange things; I loved them as I saw them on the shop’s shed.

They are soooo nice, don't you think?

Then, I used: six micro servos from a pack of 10 bought on Amazon. I suggest not to use the super cheap ones as they tend to be unstable on some angle. As dancing is something complex, as well as sync six different servos, I have used an Arduino Mega 2560Arduino Mega 2560 to control the motion; many pins, good speed, and a reasonable amount of programming memory and RAM.

If the birds can dance, controlled by an Arduino Mega 2560, what else I can use to control the Arduino? It’s obvious! to control a microcontroller l can use... a microcontroller!

So I decided to adopt a BBC micro:bitBBC micro:bit to interface the Arduino Mega through the user; I should be able to control the micro:bit by myself, adding another component: a smartphone to interface the human (me) to the cloud of microcontrollers, using the Kitronik app available for free on the Android Play Store.

To wire comfortably the micro:bit to the Arduino Mega I have used a Kitronik Edge connectorKitronik Edge connector, including a small experimental board to wire the four pins connected to the Arduino an power the micro:bit with the 3.3 VCC power from the Arduino pins.

Assembling the Structure

The Birds Platform

Dance need music. I searched for something suitable for nice, small birds. A baby game with lights and sound was perfect to make them happy.

After disassembling and removing the unneeded components I was able to power it with the Arduino, while the belly button of the toy to change the sound has been left to preserve the integrity of the puppet; a servo can press it just like a baby does, with a pleasant scenic effect.

To build the whole scenario I have figured required six servos.

Four servos for the four birds

One to change the music (the puppet belly button)

One servo to jump the birds

As I am recently doing in many of my projects, also the Dancing Birds scenery has been created with recycled materials, cardboard, and a hot glue gun. The dancing platform has been painted and decorated with some autumn leaves, as winter is coming...

{gallery} Creation of the Danging Birds Platform as fixing the servos

The brids rotating platforms and the top layer of the support

The support of the birds rotating platforms obtained by two layers of carboard

The birds on the cardboard rotating platforms, not yet fixed

Bottom of the birds support with the servos glued in place

Top support of the birds rotating platforms painted

Bird rotating platform with the servo support glued to the bottom

The birds on the rotating platforms fixed over the servos axes

The birds on the rotating platforms fixed over the servos axes

Reassembling the Musical Puppet

After preparing the wires to control the pupped from the Arduino it has been reassembled and screwed on a small wooden support, with a moving part to press the music changer belly button.

Wiring and Testing the Servos

Before gluing the srovs inside the bird structure I have setup a breadboard and developed a small test software for testing

Birds Control and Arduino Software

Testing the Servos in Place

The images below show in detail the servos disposition inside of the birds platform (bottom side)

The four servos moving the birds steps to dance glued to the oscillating platform (bottom and top side views)

The round birds bases with the servo connector. Will be placed on the servo shafts of the floating platform with the birds fixed on the top side

The assembled birds on the floating platform, controlled by the four servos.

The servo connected to the lever pressing the puppet belly button, bottom and top view (music changer)

The servo moving the floating platform with the dancing birds (jump while dancing)

Full view of the bottom side of the dancing birds platform with the six servo in place.

Issues, Issues, Issues!

The original plan was to control the Arduino board with a BBC micro:bit through the I2C protocol. I spent some days trying to set up a good software strategy but this solution was then definitely excluded.

The logic of the communication between the two microcontrollers was too complex to be managed easily through a set of commands sent by the micro:bit (master) to the Arduino (slave) Commands should be checked continuously to interrupt already running tasks, depending on the user interaction.

There are many unused pins on the Arduino so the next approach has been creating a micro:bit board using the Kitronik prototype board and eight digital pins of the board corresponding to the eight buttons of the pad.

Again something went wrong and servos were not moving!

Testing the signals wit my BitscopeBitscope I saw something very strange and unexpected.

The observed effect on all the digital signals was something like a sort of self-generated PWM frequency, and any trying to change the logic state of the pins got not result.

After further investigation, I noted that the digital pins from 3 to 10 of the micro:bit shows this phenomen and are unresponsive when the micro:bit Bluetooth library is loaded.

The final solution I got working was using the four ping 13-16 of the micro:bit

I changed the Arduino software again, accordingly with this new hardware wiring: every one of the eight pad controls from the smartphone app generates a four-bits value between 0001 and 1000 (0x01 - 0x08) decoded as well by the Arduino as a specific control commmand.

The software on the micro:bit board has been developed in Java, easy to be converted to block editor.

It is necessary to load the micro:bit Bluetooth library (excluding the radio library loaded by default) to connect it to the smartphone. On the Android smartphone, I ran the Kitronik pad application, and everything was perfect.

The higher speed I was able to reach with this kind of communication was a command every 20 milliseconds but I had to introduce a series of delay in the critical tasks to compensate the time needed by the servos to accomplish the commands.

Software

Arduino sketch and micro:bit javascript sources are available under the Apache 2.0 license on GitHub: Dancing Birds