The development of features and functionalities is going pretty well. I’m now working on the mood and expression of the little guy. Now that the drivers are mainly done, this makes thing much easier 🙂
The development of Anima is continuing, I have been pretty busy writing the drivers for the Charger and the IMU, but I think I have a pretty good base to work on for now.
The current step is to have a homogen code and trying to make it as clean as possible, organize everything together, then I will start working on the servos !
But for now, the OLED HMI looks promising 😉
After one year of thinking, design, manufacturing and assembly, Animabot is almost ready to be properly programmed.
Not much to say for this post, except that I’m relieved I could do all within this year and that it worked out almost as planned 😀
Now, it is time to verify that all works, then I will continue to write the missing drivers and subroutines before working on the gaits, behavior and so on…
Stay tuned 😉
The assembly is finally coming to an end with the Top Cover. This part holds the Raspberry Pi and the Head of Anima. This was most certainly the most difficult to assemble and to fit all the components inside in a nice way.
The cables beneath the RasPi looks a bit messy for now because before fixing them definitely, I want to make sure the motherboard and the Pi are properly communicating. This method of soldering all directly on the Pi seemed to me the most practical one, I only have one cable to connect to the motherboard, the rest is connected just beneath the Pi.
I could have done a custom PCB to Plug the Pi into but it would have been too high for the Hood… But thinking about it now, I also could have used a PCB as base for the elevator instead and inverting the 40 header pin. If I have issue later with the hood mechanism, maybe I will think about it seriously.
The mechanism was not easy to integrate and to make it work nicely but after many tweaks (and a lot of patience) it is finally working. It is not as beautiful as I hoped for but it will be hidden and as long as it works, I’m happy with it. So basically, the hood mechanism consist of a small servo pushing or pulling a lever making the platform going up and down.
The bottom looks quite messy with all the cables but unfortunately, there is not much I can do because at some point, cables need to be connected to the motherboard. However, this architecture allows me to install and remove the Top Cover from the body without too much trouble (for maintenance or bug fix). Having the hood held with magnets is also very convenient to access the Raspberry Pi and plug the HDMI or USB cable.
Now it is time for the head assembly, as always, this is kind of a headache because of all the tiny parts and dimensions… I started by mounting the eyes (OLED PCB) with the 5Mpx camera (between the eyes). The PCB is screwed in place. Then I continued with the gesture sensor with is directly glued, I couldn’t used screws due to the thin thickness of the head and the lack of space !
Then, followed the servos of the ears, this step was pretty straightforward. Place the motors and screw them 😉 As you can see, there is not so much space for adjustment…
The most complicated part was to install the neck servos, due again to the small space, it was quite hard to fit all together with screws, bearings and cables… I had to make custom horns and spacers to fit everything in place. The overall tolerance I had to place the servos was exactly 1mm, and it took me a complete morning to assemble the head properly but that is the price for compactness.
After mounting the neck onto its head, it was time to test if all was working as expected (I2C for the eyes and camera) and thankfully, it does :D. All the cables passe through the back of the neck for a rotation of about +- 60°. However, I have some doubts about the head connection to the yaw servo, I find it a bit weak and wobbly… I guess I will have to find a way to make it more robust.
The last part to assemble is the Top Cover, containing the Raspberry Pi, audio amplifier, speakers, the Hood and the tactile switch…
After weeks of testing and debugging, I think that the motherboard is finally ready 😀 I had some trouble with the charger which wasn’t communicating nor charging… The reason was simply a bloody wrong capacitor value…. but now it is fixed and working like a charm !
I also discovered some issues on the Servos power supply. Basically, it was not regulating well and completely not handling any load… So, I fixed that as well and did some extensive tests. Now, I’m proud to announce that the power supply has been tested with a continuous load of 16A at 7.6V (8A per channel) for 1 hour without any issue ! the temperature didn’t exceed 60°C (without fan).
So now that all errors are solved, I installed the motherboard where it belongs, and here are the results :
The first version of the hardware was a very good start, I could use and verify many components and features. However, I found many bugs and improvements here and there were necessary !
The first problem was the bandwidth used by the 2 OLEDS for the eyes. In order to have fast and smooth transitions on both display I boosted the bus clock from 400kHz to 800kHz. I know that normally the I2C high speed is 400kHz but from an article I read on HackaDay, the SSD1306 doesn’t actually need the ack to process the command from what I remember… Obviously the other sensors cannot follow that speed, that’s why I use now two I2C bus: one for the Eyes, the other for the rest of the sensors.
The second problem was the JTAG connector right under the TopCover bottom base, so the cover couldn’t fit properly…
After some servos tests, I discovered to my surprise that when given a PWM, they are always making noise ! These servos are meant for Helicopters so I guess regarding the huge copter noise this is not disturbing… but for my purpose it is ! So after many test of PWM and software tricks I decided that the most efficient way was to add am MOSFET to the servos power supply. With this solution I only power the servo when they need to move, the rest of the time they are OFF (which is also good for power consumption)
I also improved the cooling of the main PSU by adding thermal pads beneath the MOSFETs and by adding a “venturi hole”. The wind tunnel uses a radial fan just on top of the PSU, but as it is a radial , it blows air directly towards the tunnel output. As the area below the fan is closed, all the sucked air goes directly out and there is a “hot air pocket” below it. By adding a hole beneath, the air is also sucked form the bottom of the PCB and flows through the component this time !
I decided to get rid of the 10DOF IMU board… it was too bulky and after consideration I do not need a barometer neither a compass. The accelerometer and gyro are just what I need for stabilization, the rest would be gadget… So, I looked up a bit an found a nice inertial module from ST, the LSM9DS1. Yes, it has a compass, but I will not use it.
Concerning the 5V power supply, I still don’t know why it burned when I connected the battery, because the schematic and layout are correct, and when it burned, the use case was within the range of the component,. So it will require further investigation and hopefully it won’t happen again !
Last but not least, I redesigned the power management, which allows a smart shutdown from the MCU instead of the switch, which gives me more flexibility and control. So basically, when you flip the switch ON, it enables the 3V3 of the MCU. Then the MCU has control over the 5V and 9V of the motors with dedicated EN pins and via a general switch (MOSFET). When I want to shutdown the robot, I flip the switch OFF, this info is transmitted to the MCU and after a predefined timeout the robot will prepare its shutdown, move to its Park position then switch OFF completely (no current draw at all !)
The white thing you see on the bottom side is the NTC of the battery charger. I mounted it on strap which serves as a spring to press the NTC against the battery for temperature control 😉