Tag: 3d printer

  • ESP-Now Remote Control Test

    ESP-Now Remote Control Test

    To control a robot, I wanted to see if ESP-NOW, a communication method developed explicitly for the ESP family, would work. This project aims to determine whether ESP-NOW provides a reliable connection over a reasonable distance and whether ESP-NOW can send sufficient data back and forth.
    ESP-NOW makes it possible to set up different types of communication:

    • One-way communication
    • One master and multiple slaves
    • One slave and multiple masters
    • Two-way communication
    • Multiple-way communication (a network of ESP boards)

    In my example, I use the two-way communication protocol to build a remote control that can operate a robot. The robot must also send data back. If you want to read more about the possibilities and background of ESP-NOW, check out this excellent source of information:
    https://randomnerdtutorials.com/esp-now-esp32-arduino-ide/

    Setup

    My first test setup consists of the following components:

    Board 1

    • Joystick (Sends signal)
    • Prints the distance from the distance sensor via Serial

    Board 2

    • Servo (Uses X position from the joystick)
    • HC-SR04 distance sensor mounted on the servo
    • Prints the distance from the distance sensor via Serial

    The joystick on the master board controls the servo on the slave board. The distance sensor rotates along with the servo, and the measured distance is sent back to the master board. The setup is simple, and it gives a first impression of the speed and reliability of the ESP-NOW connection.

    BOM (Bill of Materials)

    In this project, I used:

    • DOIT ESP32 DEVKIT V1
    • ESP32S 38P/V4/Goouuu Expansion board
    • ESP32/V4/Goouuu Terminal Adapter Expansion board
    • Dual-axis XY Joystick Module
    • Tower Pro Micro Servo SG90
    • HC-SR04 Distance sensor
    • Level Converter board
    • Jumpwires
    • 3D printed parts (Optional)

    Of course, you can use different components if you want — no problem at all.

    Preparation

    To use ESP-NOW, you need to know the MAC addresses of the ESP boards. It is essential to send data to the correct board. You can find this easily by uploading the following code and reading the MAC address via the Serial Monitor in the Arduino IDE:

    #include "WiFi.h"
    
    void setup(){
      Serial.begin(115200);
      WiFi.mode(WIFI_MODE_STA);
      Serial.println(WiFi.macAddress());
    }
    
    void loop(){
    }

    Once uploaded, open the Serial Monitor and press the reset button on the DOIT board, and the MAC address will appear.

    Build

    Once we know the MAC addresses, we can start building the setup. I’m using parts from Evenblox to keep everything neatly together and make it easier to transport. You can find these parts and more information on https://www.evenblox.com. Also, check out this great 3D model for mounting your sensor: HCSR04 mount for SG90 servo by rjlew – Thingiverse

    Below you’ll find the schematic of board one (Master) and a photo of the breadboard setup:

    Next is the schematic of board 2 (Slave) and a photo of its setup:

    I’m using the HC-SR04 sensor to measure distance. I’ve written an article about this before — check it out here: HC-SR04 Project – SwanRobotics.

    The servo and the HC-SR04 both run on 5V. The ESP32 operates at 3.3V, so a level converter is needed. There are HC-SR04 versions that support both 3.3V and 5V, but the one used in this project does not. For more information about level converters, check out Level Converter – SwanRobotics.

    Alternatively, you could use the HC-SR04P sensor, which supports both 3.3V and 5V directly.

    Code

    The code is available on GitHub. Remote_control_test_ESP-NOW

    You’ll need to update the MAC addresses in the code to make it work for your setup. The code handles several tasks:

    The remote sends a heartbeat every 200 ms. A heartbeat is essential when the system controls an actual robot. The robot checks for incoming data. If no data comes in, the servo returns to its middle position.
    The joystick value is sent to the robot, which reads it and converts it to a servo position.
    The sensor measures the distance and sends it back to the remote.
    The data from both ESP boards can be monitored via the Serial Monitor in the Arduino IDE, making it easy to test the connection in different locations.

    Once the code is uploaded, it should be possible to view the correct data.

    What’s Next

    This setup works well, and the ESP boards pass data smoothly. I want to test how far the boards can communicate in different environments (home, street, forest), so I’ll add a display to the remote control to show the connection status. That way, I can see when the signal is lost. The joystick is sensitive near the center position, so I plan to smooth that out in software.

  • InMoov Back Covers

    InMoov Back Covers

    Now we are going to put the back covers in place. This is a fairly easy build. Just print all parts and clean them up. It’s important to put all the mounts in place first. The panels should be glued together on the robot itself because to prevent to much stress on the parts.

    On the following picture, the parts are layed out as they should be mounted.

    The top part of the back covers should look like this. I used super glue to glue the PLA parts together. Those cheap clamps are usefull to keep everything aligned.

    At the end you should see something like this.

    If you have questions or comments, please let me know. inMoov is designed by Gaƫl Langevin so make sure you visit is website at https://inmoov.fr.

  • InMoov hand build

    InMoov hand build

    Finally I made some progress on inMoov robot in a long time. The left arm is completely done already, but the right side still needs the lower arm and the right hand. In this article we going to look at the right hand.

    I made a video with every step of the build in detail, so you can follow along. inMoov is designed by Gaƫl Langevin so make sure you visit is website at https://inmoov.fr.

    I always print the parts with a brim so it needs a lot of cleanup, but it makes sure the parts are nice and straight. This is important if you need to glue parts together. After cleaning up it’s a good thing to lay all the part on the table to see if everything is there.

    I found it a little bit confusing how the fingers should be glued together, but it’s fairly simple If you know where to look at.

    The lower part of the finger has a marking in the shape of a rectangle when the parts are glued together. The top cap should be glued together with the part with two small holes on the top for the wires. I use hot glue for this part so I can remove the cap if I have to replace the wires someday. For the other parts I used Super Glue. The middle parts of the finger have a shape on the face where the two parts come together.

    For the rotating part I used a piece of filament and cut it with a small wire cutter to make a straight cut.

    .

    The other parts are not too complicated to fit together, with help of the picture below.

    You need a tweezer to put the wires through the fingers and the hand. It’s not easy but with some patients it’s not impossible.

    At last I mounted the top of the hand with some 3 mm screws. The 4 parts on the fingers are glued on the fingers. I made the mistake once to glue them on the hand and that looks strange when the hand is in closed position.

    If you have questions or comments, please let me know. inMoov is designed by Gaƫl Langevin so make sure you visit is website at https://inmoov.fr

  • inMoov Robot Bicep

    inMoov Robot Bicep

    The bicep from the inmoov is not a complex part and are the same for both left and right arm. The covers are sometimes a struggle to mount because in my case the print is a bit taller then it should be.

    My Servo (Hitec HS-805BB+) has a square potentiometer so this doesn’t fit in the orginal LowArmSideV1 version from GaĆ«l . I found a LowArmSideV1 with a square hole on Thingiverse by alansrobotlab (https://www.thingiverse.com/thing:533469). This part receives the square potentiometer snugly.

    Let’s start. I started with gluing the HighArmSide and the LowArmSide parts together twice. Only a few adjustments where needed with sanding paper and a file.

    After this the Reinforcer was added to both sides. I used glue to make a strong connection between the parts.

    Then I glued one of the sides to the RotMid. I didn’t glue the other side, because I want to be able to remove one side, if something is wrong.

    The gears from Pistonanticlock and the Pistonbaseanti prints had some rough edges. I sanded these parts a little bit and then I rotated the piston over and over again in the Piston base. I went back and forth with the sandpaper and after a while it rotated nicely. The Pistonbaseanti needed some adjustments on the axle on the sides. In my case the axle was not completely round, but more like an oval shape. I used a file and sandpaper to make it as round as possible. I also made the holes from the arm sides a little bit bigger.

    The Pistonbaseanti fits together with the Spacer between the two sides.

    The Servobase and the Servoholder are mounted together with screws so you can replace the servo if it breaks down. I used screws with a diameter of 3,5 mm and a length of 16 mm. The wires from the modified servo need to go through the holes on the side of the Servoholder. The potentiometer is to large and has to be detached from the servo. The wires have to be guided through the channel on the side, so the wires don’t get squashed by other parts of the bicep. I used thicker wire then intended, so I had to make the channel for the wire a bit bigger. A drop of hot glue keeps them in place. To guide the wires over the servo I used black tape.

    To mount the Pistonanticlock on the servo I made the four holes bigger with a 3 mm drill. Then I used a screw with a diameter of 3 mm and a length of 16mm. My screws where to long so I had to file them to the right length.

    Then I fitted the Pistonanticlock and the Pistonbaseanti together by turning the servo manually.

    The Elbowshaftgear and the Robcap are glued together and then mounted on the bicep with a 8mm bolt.

    My potentiometer fits nicely in the square hole. It doesn’t need any screws now, but maybe I will add them later. On the potentiometer the Gearpotentio is mounted. The Gearholder then is slided over the gear to prevent is from sliding off.

    The last step in this assembly is to glue all covers together and mount them on the bicep. It’s looks a lot cooler with the covers on. I needed to file some parts because it didn’t fit.

    In the next episode I am going to build the lower arm and will connect the arm to the shoulders part of the inMoov. If you have questions or comments, please let me know. inMoov is designed by Gaƫl Langevin so make sure you visit is website at https://inmoov.fr

  • InMoov Support Block

    InMoov Support Block

    After the crash of my inMoov robot it took a lot of work to put it back together. To prevent a crash again I decided buy a stable speaker stand for big speakers. To make it fit it was necessary to design a special block to connect the upper body of the inMoov robot to the 35 mm pipe of the speaker stand.

    My speaker stand is from the brand Innox, but there are several brands offering the same product. For example: Speaker stand on Amazon.

    You can find the STL file of this support on Thingiverse.com.

    Make sure you take a look at the website from the designer of the inMoov robot at www.inmoov.fr.

  • Eye Mechanism inMoov robot

    Eye Mechanism inMoov robot

    Wow. Time flies when you having fun. This website is about my the things I build in my free time. Last 2 years where very intense at work and in my private life. Now I decided to work less, to put more time in building robots and at first finish my inMoov robot.

    After the crash on the floor and all the broken pieces the robot in the same state where I left off before my last post. The first thing to do was finishing the Eye Mechanism of my inMoov robot.

    In the designs of the inMoov robot (www.inMoov.fr) you can add small camera’s. In this stage I don’t want to use these yet, so I will use an round piece of 3D printed plastic to cover the hole in the eye. I also want to keep the inMoov robot as robot like as it can be at the moment. So I don’t bother to make the eye as realistic as it can be.

    I made a video of the build on my YouTube channel.

    The Eye mechanism has some small parts.On the picture below you can see the standard parts.

    The parts fitted nicely. The only thing that not fit directly was the EyeHingeCurve. Probably because I used an other servo than Gael Langevin did in his design. I had to adjust the hinge with a knife šŸ˜‰

    The final eye Mechanism.

    In the Youtube video I used a small test code in arduino to move the eyes. You can use this code to test your own servo. In this example the servo’s are connected to a Arduino Mega on pin 22 and 24. Please change the value’s to your needs.

    /* Based on the Sweep example
     by BARRAGAN <http://barraganstudio.com>
     This example code is in the public domain.
    
    modified 8 Nov 2013
     by Scott Fitzgerald
     http://arduino.cc/en/Tutorial/Sweep
    
    Modified to control Eye mechanism inMoov robot (With Arduino Mega)
     https://swanrobotics.com
     */
    
    #include <Servo.h>
    
    Servo horServo; // Horizontal servo (left tot right)
     Servo verServo; // Vertical servo (Up and down)
    
    // Change these settings to your own setup and preferences.
     int horServoPin = 22;
     int horMaxLeft = 60; // Maximum servo position Left
     int horMid = 90; // Middle servo position horizontal
     int horMaxRight = 120; // Maximum servo position Right
     int horStep = 1; // Step size for position horizontal
    
    int verServoPin = 24;
     int verMaxUp = 45; // Maximum servo position Up
     int verMid = 65; // Middle servo position vertical
     int verMaxDown = 95; // Maximum servo position Down
     int verStep = 1; // Step size for position vertical
    
    int delaySpeed = 500; // time between the movement
     int pos = 0; // variable to store the servo position
     int positionwait = 5; // variable to wait for the servo to reach the position
    
    void setup()
     {
     horServo.attach(22); // attaches the servo on horzontal pin
     verServo.attach(24); // attaches the servo on vertical pin
    
    horServo.write(horMid); // Put horizontal servo in neutral position
     verServo.write(verMid); // Put vertical servo in neutral position
     }
    
    void loop()
     {
    
    // Look right
     for(pos = horMid; pos <= horMaxRight; pos += horStep)
     {
     horServo.write(pos);
     delay(positionwait);
     }
     delay(delaySpeed);
    
    // Look left
     for(pos = horMaxRight; pos>=horMaxLeft; pos-=horStep)
     {
     horServo.write(pos);
     delay(positionwait);
     }
     delay(delaySpeed);
    
    // Look neutral
     for(pos = horMaxLeft; pos<=horMid; pos+=horStep)
     {
     horServo.write(pos);
     delay(positionwait);
     }
     delay(delaySpeed);
    
    // Look Up
     for(pos = verMid; pos <= verMaxDown; pos += verStep)
     {
     verServo.write(pos);
     delay(positionwait);
     }
     delay(delaySpeed);
    
    // Look down
     for(pos = verMaxDown; pos>=verMaxUp; pos-=verStep)
     {
     verServo.write(pos);
     delay(positionwait);
     }
     delay(delaySpeed);
    
    //Look neutral
     for(pos = verMaxUp; pos <= verMid; pos += verStep)
     {
     verServo.write(pos);
     delay(positionwait);
     }
     delay(delaySpeed);
     }

     

     

  • Nervo Boards

    Nervo Boards

    The summertime was not the best time to work on my inMoov robot, because of outdoor activities. But now it is getting cold and the Dutch weather is keeping me inside. It is time to moving forward again.

    I ordered the Nervo Boards from the www.inMoov.fr website. I first ordered one set, because I wanted to see what the quality was. This was what I received.

    01inmoovprints

    I was happy with the quality so I ordered the second set also. First I had to figure out how the all boards supposed to fit together. For now I don’t want to use the finger sensors, but they are on the left side on the picture below.

    02Printssorted

    At first I took an Arduino Mega compatible board (Funduino) and inserted the pins needed for the Nervo Board. This is done to be sure that the pins are straight and on the right position. Beware: not all the pins on the Arduino Mega board are used, so leave those position empty.

    03Pins

    Next I fitted the main Nervo Board over the pins on the Arduino Mega. The pins 8 till 13 didn’t fit perfectly. I don’t know of this was caused by the Nervo board or the Funduino. I had to lift one side up to bring the pin closer to the hole.

    04Pins with board

    I soldered all together.

    05pinssolder

    06solderbottom

    My inMoov will use the same Voltage for all the servos, so I soldered the 3 connections on the top side of the board. The solder did stick very well on the pads at bottom right on the picture. A little piece of wire was needed to make a solid connection.

    07bridge

    I removed the head and neck pins from the main board, because I was afraid to burn the headers on the top board. I was easier to solder the pins on the top breakout board first and then solder the 12 pin connectors. Now it was easy to solder the breakout board on the Nervo main board.

    08pinsupper 09upperboards
    After an evening of soldering the result is very nice. The right board doesn’t have the neck and Stomach breakout board on it. You can use an Arduino Uno instead of an Arduino Mega. You never can have enough io. šŸ˜‰

    10allboard

    To mount the Nervo Board assemblies on my inMoov robot I printed a Mount from Thingiverse. [http://www.thingiverse.com/thing:30270]. It didn’t fit. I remove the rim around the board because I didn’t want to print another one.

    11megamount

    I used two 3 x 16 mm screws to mount the assemblies on the back of the inMoov. There is not a dedicated spot for it, so I looked at a spot where the two screws would fit.

    12oninmoov13With board

     

     

     

  • inMoov has a Chest

    inMoov has a Chest

    The world is unfair. My Ultimaker printer had to do more then 70 hours of printing and it took me only 1 hour to put the parts on the inMoov robot. šŸ˜‰ Below you can see all the parts from the Chest.

    Chestparts

    From left to right and from top to bottom you can see the following parts:

    • ChestTopAttachV1 (right and left part)
    • ChestTopV1 (right and left part)
    • SideRibsCoverV1 (right and left part)
    • ChestRightV1
    • InMrightV1HollowV1 (orange)
    • InMleftV1HollowV1 (orange)
    • ChestLeftV1
    • BottomChestV1(right and left part)
    • MiddleChest+PIRV1
    • UnderKinectV1 (right and left part in black)

    I am very happy with the results of these prints and they fit really well. The easiest way to mount the chestparts is starting with the ChestRight and ChestLeft together with the InMrightV1Hollow and InMleftHollow. After this you can mount the MiddleChest+PIR and the Kinect. The Kinect is mounted with the UnderKinect parts. I had to push it in with a little bit force to fit it together. I think this was caused by some warping of the prints.

    The inMoov robot gets a PIR sensor to react on people moving by. This is not done yet so you can see a nice hole where the PIR sensor should.

    inMoovChest1 inMoovChest2 inMoovChest3

    Make sure you check the website fromĀ Gael Langevin at www.inmoov.fr.

  • Schoulder Inmoov

    Schoulder Inmoov

    The shoulder of the inMoov robot exists of several parts. In this post I describe the build of the parts responsible for the up and down motion of the arm en the back and forward rotation.

    My Ultimaker original with a heated bed prints clean partsĀ most of the time. Only the first layer leaves some burr so I use a file and a knife to remove it.

    The PivWorm part need a lot more work to make it ready to use.Ā First you have to remove the support needed for the worm shape. I used pliers to remove the big parts by breaking it with a little bit of force.

    schoulder1

    After this I needed a knive to remove the supports sticking to the worm part itself. Also the bottom side of the worm needed a file to remove the irregularities.

    schoulder2

    After mounting the PivWorm in it’s casing and adding the PivGear part it did fit as I expected. The strange thing was that the Tooth of the gear where hitting the end of the worm at end closest to the servo. On the InMoov forum this was discussed a few time but it seems not a lot of people experience this problem. I fixed it by using the file again. On the picture below you can see clearly the work I have to make it fit.

    schoulder3

    After this was done it was time to wear it in a little bit. I connected the servo and make it run for 30 minutes and cleaned it afterwards.

    schoulder4

    The gear and worm received a big amount of grease and the housing was closed. The potentiometer was mounted in the square PivPotentio part which is Ā available on Thingiverse at http://www.thingiverse.com/hairygael/collections/inmoov-parts-and-derivatives. I used a servo motor driver and current meter to see if it worked. At first it did work at it supposed to be and almost break the potentiometer on the right side. The two outside wires on potentiometer should be switched because the angle was measured the wrong way around.

    schoulder5

    A bit of hot glue to secure the wires and prevent the bare wires to touch each other.

    schoulder6

    Next the servo was put in the ServoHolster and the PistionClavi was mounted on the Servo.

    schoulder7

    Then the two parts where connected to each other with the two servoholder parts.

    schoulder8

    On the pictures below you can see the mounted parts on the torso. I also used the square version from potentiometer holder from Thingiverse.

    schoulder9

    schoulder10

    schoulder11

    schoulder9b

    The final result is with the two shoulders attached to the InMoov torso. This is nice progress.

    schoulder12

    Make sure you check the website fromĀ Gael Langevin at www.inmoov.fr.

  • InMoov follows own progress

    InMoov follows own progress

    A nice picture of my InMoov robot following it’s own progress.

    immoovfollowsprogress

     

    Can you guess what part the Ultimaker is making?

    Be sure you check the website fromĀ Gael Langevin at www.inmoov.fr.