
Mic board
ouspg/SOP-Robot
Robot project for the Embedded Software Project [521275A] and Software Project [521479S]

Robot project for the Embedded Software Project [521275A] and Software Project [521479S]
PreampV3 is an open-source printed circuit board by ouspg, from the ouspg/SOP-Robot repository on GitHub. It is a 2-layer board of 52.6 × 25.9 mm with 18 parts on 15 nets, routed with 67 tracks and 0 vias.
It is built around the NE5534D. Its parts include 7 capacitors, 4 resistors, 2 ICs, 2 connectors and 2 inductors. It belongs with the robots and motor control boards of this library.
The robot uses ROS2 (Robot Operating System 2). Read the ROS2 wiki!. Tutorials and how-to guides are worth to check.
Read also controller documentation to understand why certain controllers are needed and how they control the motion. Here are ros2 control demo repositories and more documentation about controllers.
SOP-Robot uses Pixi to install ROS 2 Humble,
Python packages, and build tools into a local .pixi/ environment.
sudo apt update
sudo apt install -y git curl espeak
curl -fsSL https://pixi.sh/install.sh | bash
git clone --recurse-submodules https://github.com/ouspg/SOP-Robot.git
cd SOP-Robot
pixi run setup-runtime
pixi run build
pixi run robot-fakeSetting up Lehmus AI api key:
cp .env.example .env.localLLM_API_KEY=your lehmus ai api key goes hereFor real Dynamixel hardware, install the U2D2 udev rule once:
pixi run setup-udevThe launch tasks source install/local_setup.bash for you. If you enter
pixi shell for manual ROS commands, source the overlay first:
source install/local_setup.bashLaunch the complete demo from one terminal with pixi run robot-demo-fake
for simulation or pixi run robot-demo-real for real hardware. Press Ctrl+C
in that terminal to stop the stack. See Robot bring-up
for individual components and logging options.
The robot uses dynamixel servos. Servos are controlled via the robot_hardware ROS node, which implements the hardware interface for ros2_control. robot package contains the servo controller configurations for the robot. See robot.yaml, for example. The head supports joint_trajectory_controller. When using this controller, joints can be controlled by sending action messages to the trajectory controller. See bring up for an example of action message.
Joint -> Servo mappings are defined in two files. Configuration file connects servo ID with certain joint. dynamixel_arm.yaml is for servos of robot arm and dynamixel_head.yaml for servos of head.
client - contains client to send actions for robot handconfig - dynamixel servo configurationsrc - all packages
src/face_tracker - tracks the faces using camera feed and calculates locations and distances of faces and detects mouth movement.src/inmoov_description - robot files, which define the robot geometry and configuration for simulation (URDF, SRDF & rviz configuration)src/robot - robot launch files & servo controller configurationssrc/robot_hardware - hardware interface for ros2_controller, communicates with U2D2 via dynamixel workbenchsrc/tts_package - Text-to-speech package for finnish speech synthesissrc/sst_package - Speech-to-text package
for finnish speech recognitionsrc/llm_package - OpenAI client package used for using llm model with Lehmus AI APIsrc/unified_arms- unified node for controlling arms thought serial and hands with topicssrc/full_demo - Main control node for the robotWhile the robot is idle, full_demo_node selects an arm action every 120 seconds by
default: a randomized arm-and-hand action 70% of the time, or one of wave, rock,
rotate, and swingarms 30% of the time. The random action is implemented by
unified_arms_node and runs for 40-60 seconds using the original randomized joint ranges.
It does not command the head. The interval can be changed with the
random_gesture_interval parameter on full_demo_node.
Note: Servos can be configured using Dynamixel Wizard 2.0
Baud rate: 57600, Voltage: 7.5
Note: You can use Dynamixel Wizard 2.0 to check that servos have enough voltage to operate normally.
| Servo ID | Model | Joint name | Description |
|---|---|---|---|
| 1 | XL430 | head_tilt_right_joint | Head tilt right-side |
| 2 | XL430 | head_tilt_vertical_joint | Head tilt up/down |
| 3 | XL430 | head_tilt_left_joint | Head tilt left-side |
| 4 | XL430 | head_pan_joint | Head turn left/right |
| 9 | XL320 | eyes_shift_horizontal_joint | Eyes shift left/right |
| 11 | XL320 | eyes_shift_vertical_joint | Eyes shift up/down |
| 12 | XL320 | head_jaw_joint | Open/close jaw |
| 31 | XL320 | r_thumb_joint | Open/close thumb |
| 34 | XL320 | r_index1_joint | Open/close index |
| 37 | XL320 | r_middle1_joint | Open/close middle |
| 40 | XL320 | r_ring_joint | Open/close ring |
| 44 | XL320 | r_pinky_joint | Open/close pinky |
| 47 | XL320 | unnamed joint | Rotate wrist |
Note: head tilt range of motion is poor
Note: wrist joint seems to overload very easily
Note: servo angle limits are not configured
Note: Be careful not to move joints too much, limits are not set yet
| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | 0.1uF | fab:C_1206 | C3, C4 |
| 2 | 100uF | fab:C_1206 | C2, C7 |
| 2 | 2.2uF | fab:C_1206 | C5, C6 |
| 2 | 22uH | Inductor_SMD:L_Wuerth_HCI-7030 | L1, L2 |
| 1 | 10k | fab:R_1206 | R3 |
| 1 | 15k | fab:R_1206 | R4 |
| 1 | 1k | fab:R_1206 | R2 |
| 1 | 5V input | fab:PinHeader_1x02_P2.54mm_Horizontal_SMD | J3 |
| 1 | 6.8k | fab:R_1206 | R1 |
| 1 | Microphone connector | fab:PinHeader_1x03_P2.54mm_Horizontal_SMD | J4 |
| 1 | NE5534 | opamp:DIP794W45P254L959H508Q8 | U2 |
| 1 | NMA0505SC | Converter_DCDC:Converter_DCDC_Murata_NMAxxxxSC_THT | U1 |
| 1 | Sound output | fab:PinHeader_1x01_P2.54mm_Horizontal_SMD | mic_out2 |
| 1 | lowpass | fab:C_1206 | C1 |

ouspg/SOP-Robot
Robot project for the Embedded Software Project [521275A] and Software Project [521479S]

StoneRose35/cortexguitarfx
guitar effects processor implemented on various arm cortex platforms


nietamten/VoltageConverterForSolar
NCP1034 buck with regulated output voltage, output current, minimum input voltage


ODARI-CHARLES1/AudioAmplifierPCB-NE5532
Audio Amplifier using NE5532 OP. AMP in KICAD


Acramonics/AudioFilter
High-/Band-/Low-pass filter based on Jake Rothman's Audio Out, Practical Electronics May 2026

Acramonics/HiFiPreamp
A high quality modular HiFi Preamp based on designs by Douglas Self
It measures 52.6 × 25.9 mm and has 2 copper layers, 1.6 mm thick.
18 parts, built around the NE5534D. 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.
From the ouspg/SOP-Robot repository on GitHub, at the commit this page was made from: the board is 3d_models/microphone_and_preamp/CAD_files/preampV3/preampV3.kicad_pcb and its schematic 3d_models/microphone_and_preamp/CAD_files/mic_board/mic_board.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask ouspg before reusing the design.