Skip to the content
PCBKitNew board
2 layers9 × 3.6 mmOpticalEncoder, the printed circuit board in 3D

Getting the most out of your hobby servo

Size
9 × 3.6 mm
Copper layers
2
Thickness
1.6 mm
Parts
6
Nets
6
Pads
16
Tracks, vias
0, 0
Routed
Not yet
KiCad
KiCad 5 (file 20171130)
Created
13 Apr 2021
Updated
1 Apr 2024

Overview

OpticalEncoder is an open-source printed circuit board by adamb314, from the adamb314/ServoProject repository on GitHub. It is a 2-layer board of 9 × 3.6 mm with 6 parts on 6 nets.

It is built around the ITR8307. Its parts include 4 resistors and 2 ICs. It belongs with the robots and motor control boards of this library.

Main components

1

README

README.md

ServoProject

by Adam Bäckström

Getting the most out of your hobby servo

Robot

Video demo of project

Demo video

Additional documentation for the project

Theory

Dependencies

Build instructions
Legacy build instructions

Project structure

ArduinoSketch

This folder contains the Arduino project for the Adafruit ItsyBitsy M0 Express boards.

Easiest way to program and configure the servos is through the configurationWizard.py script. Just run python3 ./ArduinoSketch/configurationWizard.py to get started. The script will ask if it should install any missing dependencies.

PLEASE NOTE! Windows users must use MSYS2 due to the the PyGObject package, see https://pygobject.readthedocs.io/en/latest/getting_started.html. After installing MSYS2 run the script with:

text
C:\msys64\mingw64\bin\python.exe ArduinoSketch\configurationWizard.py
Manually compiling the Arduino sketch

When compiling, the active configuration is selected by modifying the #include "*.h" line in the config/config.h file to include the desired config file. The configSelector.py script can be used to simplify the config selecting process by giving a drop-down list with all configs in the config folder.

The folder also holds a Makefile which can be used to compile and transfer the project. One benefit of using the Makefile is that the configSelector script is always executed prior to compiling. To be able to use the Makefile you must first install arduino-cli.

text
Arduino sketch dependencies:
  - Adafruit DotStar `source:` Arduino Library List
  - Eigen `source:` Arduino Library List

ArduinoLibrary/ServoProjectController

Arduino library for communicating with the servos.

View Example Arduino sketch

C++/Library

Holds the C++ library for communicating with the servos.

text
Dependencies:
  - GNU Make >= 4.2.1
  - gcc >= 9.3.0
  - boost >= 1.71.0
C++/Demo

Minimal c++ demo project.

View Example Code

C++/Example6dofRobot

Example 6dof robot project.

View Example Code

To compile run make. This creates the program ./executable with the following options.

text
Allowed options:
  --playPath            play the path defined in createPath()
  --gui                 open jogging gui
  --output arg          data output file
  --simulate            simulate servos
text
Dependencies:
  - Eigen >= 3.4.0
  - gtkmm-3.0 >= 3.24

CadFiles

Holds all .stl and the original Freecad files

PcbDesignes

Holds all KiCad projects for the electronics

Python/Demo

Python demo project.

View Example Code

Python/ServoProjectModules

Holds all python modules for the project.

Communication bus setup for demo projects

ONLY CONNECT THE SERVO TO 3.3V LOGIC!!!!

Robot

PLEASE NOTE! The bus controller needs to have a low latency to get fast communication with the servos. Most standard USB to Serial converters buffer the data and only transfers every 10 ms or so. This becomes a problem since the communication protocol will wait for the response from each servo before moving on to the next, adding huge delays.

To get the best communication speed it is recommended to use an "Adafruit ItsyBitsy M0 Express" (or similar ARM based Arduino) as the USB to Serial converter. Just program the Arduino with the usbToSerial.h configuration in the ArduinoSketch to get started. In usbToSerial.h you can also configure any regular servos you want to control together with the ServoProject modified ones.

How to switch to PWM interface version

ONLY CONNECT THE SERVO TO 3.3V LOGIC!!!!

Using the PWM interface is not recommended due to low resolution and high noise, but it is possible by modifying the configuration file. To enable PWM control replace the getCommunicationHandler() function with the version below.

text
    static std::unique_ptr<Communication> getCommunicationHandler()
    {
        Serial.begin(115200);
        auto com = std::make_unique<Communication>(SerialComOptimizer(&Serial));
        uint8_t pwmPin = 0; // Rx pin, ONLY CONNECT TO 3.3V LOGIC!!!!
        uint8_t controlSpeed = 14;
        uint8_t backlashControlSpeed = 2;
        float scale = 2.0f; // 2 units per us (4096 units == 360 deg)
        float offset = 1024.0f; // move to 1024 units (90 deg) for 1500 us pwm signal
        com->addCommunicationNode(
                std::make_unique<DCServoCommunicationHandlerWithPwmInterface>(1,
                    createDCServo<SetupConfigHolder>(controlSpeed, backlashControlSpeed),
                    pwmPin, scale, offset));
        return com;
    }

License

Open Source License

ServoProject is free software. You can redistribute it and/or modify it under the terms of Creative Commons Attribution 3.0 United States License.

To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/us/

Parts

6
QtyValueFootprintReferences
2120Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1, R3
28.2KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR2, R4
2ITR8307OptoDevice:Everlight_ITR8307U1, U2

Questions

How big is the OpticalEncoder PCB?

It measures 9 × 3.6 mm and has 2 copper layers, 1.6 mm thick.

What parts does the OpticalEncoder use?

6 parts, built around the ITR8307. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the OpticalEncoder KiCad files?

From the adamb314/ServoProject repository on GitHub, at the commit this page was made from: the board is PcbDesignes/legacy/ServoCoreless/OpticalEncoder/OpticalEncoder.kicad_pcb and its schematic PcbDesignes/combined/combined.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the OpticalEncoder design in my own project?

Its repository states no licence, so its author keeps all rights: ask adamb314 before reusing the design.

More from adamb314/ServoProject

4
  • 2 layers36 × 20 mmCombined, the printed circuit board in 3D

    Combined

    adamb314/ServoProject

    Getting the most out of your hobby servo

    24 parts545
  • 2 layers45.3 × 42.7 mmMainPcb, the printed circuit board in 3D

    MainPcb

    adamb314/ServoProject

    Getting the most out of your hobby servo

    14 parts545
  • 2 layers8.4 × 3.6 mmMainPcb, the printed circuit board in 3D

    MainPcb

    adamb314/ServoProject

    Getting the most out of your hobby servo

    12 parts545
  • 2 layers8.1 × 11 mmAs5048aEncoderBoard, the printed circuit board in 3D

    As5048aEncoderBoard

    adamb314/ServoProject

    Getting the most out of your hobby servo

    8 parts545

Similar boards

  • 2 layers31.4 × 16.3 mmPrototipo1, the printed circuit board in 3D

    Prototipo1

    erufes/Seguidor2021-H

    Projeto de hardware do robô da equipe de Seguidor de Linha do projeto Equipe de Robótica da UFES (ERUS) para o robô de 2020 e 2021, com objetivo de construir um robô para competir pelas primeiras posições na IronCup…

    20 parts2GPL-3.0
  • 2 layers78 × 66 mmLineSensor, the printed circuit board in 3D

    LineSensor

    RoboticsBrno/RB0001-LineSensor

    Line sensor with 8 sensors for measuring the reflectance of the surface with integrated I2C A/D converter.

    36 parts1MIT
  • 2 layers93 × 85.9 mmMiniSumoSTM, the printed circuit board in 3D

    MiniSumoSTM

    balamutnypapcio/MiniWilus2.0

    68 parts
  • 2 layers87 × 79 mmKonar2, the printed circuit board in 3D

    Konar2

    balamutnypapcio/Wilus_MiniSumo

    56 parts
  • 2 layers83.5 × 70 mmMinisumo, the printed circuit board in 3D

    Minisumo

    BartekOrchowski/MiniSumoAVR

    This project is a MiniSumo robot developed during a workshop organized by the KoNaR student scientific association.

    47 parts
  • 2 layersSquarewave, the printed circuit board in 3D

    Squarewave

    dunz0r/Circuits

    Schematics, PCBs, libs

    72 parts
  • 2 layers96 × 120.1 mmSide panel, the printed circuit board in 3D

    Side panel

    ToonVanEyck/OpenFlap

    The OpenFlap project aims to create a open source, affordable split-flap display for the makers and tinkerers of the world.

    43 parts98
  • 2 layers36 × 144.2 mmSensorArray, the printed circuit board in 3D

    SensorArray

    LaboratorioGluon/Velocista-Marrajo

    Line follower robot for competitions.

    36 parts2