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 🙂
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 😉
After the Lower part, the Upper body was the logical next step. Actually, there was not much to do on this one… I started by installing the insert for the Top Cover, using the same method as before, which went flawlessly…
After the inserts, only the Flexible OLED display was left to install. I placed it first to see how the active area will match the outline of the body,then, I simply added double sided tape on the inner frame and pressed it against. In order to protect it, I added some felt tape and it looks nicer as well 🙂
For the cable, I first wanted to use braided sleeve but it turned out to be too rigid on the connectors and bit tricky to do… so I opted for the automotive solution by wrapping the cable in automotive tape. This looks pretty neat and avoid rattling noise if the cable is moving against the body.
And voila! The result turned out to be much better than I thought, this curved display looks stunning ! I can’t wait to make a proper HMI and menus 🙂
See you later for the Top Cover assembly !
After so many weeks of waiting, all Animabot’s parts are finally home !!!
I decided to start with the lower body assembly and then working the way up to the head. The legs will be the last parts to be mounted because I need to redo the PCB and the PCB should be mounted before the legs 😀 this, and also because I didn’t find the courage yet to disassemble the current version yet
The first I did was to check if the motherboard and the servos were properly fitting inside and yes they do! So from this, I started by mounting the screws inserts in place ( by using a soldering iron, then pressing gently them in the hole). Once this step done, I continued with the buttons on the rear panel which are inserted and glued (easy peasy) and placed the dust grid behind the air vents. To install them, I also used the soldering iron and kind of “soldered” to the inner side of the body (melted both together), the result is not particularly aesthetic but it’s easy and durable !
Below the battery, is mounted the dock connector constituted of 2 concentric copper rings (no polarity inversion possible !) and also the dock sensor which is basically a simple magnetic switch (Reed switch). All this is isolated from the battery with some Kapton tape. Last but not least, the IR Telemeter is now fiercely mounted on the front. The switch on the very bottom is the battery kill switch which allows me to completely disconnect the battery from the system …. just in case… 😀
Next Step will be the upper body 😉
Good news ! The body parts are done and on the way ! I’m really exited to see how Animabot will come along once assembled. For the moment, I’m still writing and testing the drivers of the Motherboard and testing all components…. So hopefully, within few weeks I will finish this, send a new motherboard to production and integrate it.
Now, let’s enjoy the beauty of SLA 3D printing with smooth finish :
He is gonna be AWESOME !!!!
I finally received the rest of the components for the motherboard ! took me some hours to populate everything (QFN packages take a bit of time to solder when you are not used to 😀 )The smoke test passed for the Power supplies (7.6V, 5V) but I still have to test the battery charger… which gives me a bit of apprehensions because I don’t want to fry my battery
I will definitely have to make an improved version in the next few weeks to fix the following issues:
- Lack of thermal exchange for the PSU controller and MOSFET
- Change from 10DOF IMU board to a 9DOF IMU (LSM9DS1TR)
- Separate I2C bus for the Eyes (they use too much bandwidth forth rest of the sensors)
- Overall Routing & Layout improvements
- More detailled SilkScreen
But first I have to finish testing all the features and components to see if further modifications are required. But for now I’m pretty happy with the result, no big trouble. I did some thermal test and the PSU is around 40°C in idle mode without cooling and 35°C when the fan is active, even so the thermal dissipation of the component in not ideal and the fan is powered at 3V3 instead of 5V.
As mentioned, I still have the rest of the features to test (around 15: Telemeter, Bluetooth, Charger, Raspberry Pi communication, Servos, etc…) so stay tune 🙂