Community /

Robotic Future

1. What are you making?

My project is to control a powerful robotic arm with the brain through EEG signals gathered from the scalp. I will be focusing primarily on the Cz, C3, and C4 locations and expirment further once I have tested that those locations work. I have already designed a prototype of the robotic arm and I am currently working to improve its strength while keeping its cost effectivity. I will be using cycloidal drives powered by nema 17 motors to control the arm.

2. How are OpenBCI tools being applied?

The OpenBCI Cyton board, along with their electrodes, will help gather the signals and process them where they can then be inputted into other devices like a Raspberry Pi. This is the paramount component that enables my project since without them, the data aquisition from the brain would be impossible.

3. Why is this important?

Over 5 million people in the U.S. alone live with paralysis or motor impairments, often losing the ability to perform simple tasks like grasping objects. Current assistive technologies, like joysticks or voice controls, can be slow, expensive, or inaccessible for some users. My project tackles this by developing a non-invasive BCI that reads brain signals—specifically, the mu rhythm, which changes when you imagine moving your hand. This system could allow people to control a robotic arm intuitively, using only their thoughts, making assistive technology faster, more natural, and more affordable

4. Who is involved in this project?

I am currently working alone but I would like to shout out my excellent school and teachers that that have pushed me, along with my parents, to reach for the stars and attempt such ambitious projects like this.

5. Want to learn more about this project?

I will be uploading progress videos to Youtube and my old robotic arm is on there aswell.

I will be uploading some code and other progress to my github

Here is a picture of version two of the robotic arm. Previously it was controlled with twine and was very blocky. The second revision saved filament without compromising strength and made it belt driven enabling more power and accuracy. The next version will use cycloidal drives to provide high torque ratio while keeping backlash low.

October 2025 Update

This update will be split into two segments, the arm’s hardware and the EEG control software.

Hardware

I have been mostly working on the hardware components of the arm itself since it requires less initial set up time. Most of this work is designing the cycloidal drive system.

Below you can see the inside of the first cycloidal drive design. It works well but is very big and requires large bearings. If you look, you will notice there is no shaft, and that is because, since I am trying to use small bearings, the shaft is very weak.

Top view of cycloidal drive

I wanted to make this system smaller and not require the large bearings. I have begun working on a very small cycloidal drive inspired by https://www.youtube.com/@SweepDynamics/shorts and their really small reducers. I do worry about the strength of the whole system, so I do plan on increasing the size of the drive eventually, but for now, I am experimenting with this:

I am working on v2 right now. All these files will be on github soon

Electronics

I improved the control of the robotic arm by using larger stepper motor drivers (TB6600) that allow much more current (4A), thus giving me more torque. This is much better than my old system using a cnc shield on my arduino uno and A4988 Drivers with a max current of 1.2A.

I also upgraded the controller to an esp32 to allow for faster processing, more pins, and wifi/bluetooth connection availability.

On top of these, I made it so that the motors can now move simultaneously, which was a big problem in my old designs.

Software

Since the whole EEG system takes a while to set up and is more complicated, I have made less progress in it. I have taken readings from the Cz, C3, and C4 locations and used the OpenBCI GUI.

I have been using the mne library in Python to collect and process the data. For a long time, I was experiencing issues with having flat EEG data.

Flat EEG Data

So the data looked like this for a significant amount of time, and I could not find out why.

After ICA cleaning it looked like this:



However, a little hint that the world gave was lying in the section between each step:

So, what is shown is that each of the sections between each step seems to be very defined. When looking back over the csv’s of data, I saw that a lot of data points are released suddenly, then a break in between. This is what causes this cycle of high definition, to none. 

It turns out all of this is a known issue. In this video: https://www.youtube.com/watch?v=xStvKju-4-o&list=LL&index=2 the author mentions for a second that there are bursts of data and this is exactly what is shown in the data. After searching the OpenBCI docs, I found this page: https://docs.openbci.com/Troubleshooting/FTDI_Fix_Windows/

Which explains exactly how to fix this problem. In the end, the issue was that windows limits the frequency that a serial port sends data to the computer. The default is 16ms, but when set to 1ms, the issue is fixed then i get the following graph across 3 cleaned electrode channels.

I do not know yet how accurate or usable this information is, since I am new to EEG, and I cannot really tell the accuracy of these graphs. I am currently working on better managing the ICA training and live filtering.

More on ICA

I am using the MNE library’s built-in ICA functions. For training of the ICA model, I add an extra 4 electrodes for measuring movements in the face and eye. I have one above and below my right eye, and the other two are placed on the left and right sides of the face at eye level. This allows me to incorporate eye movements as well as facial movements, which are explicitly defined. For the body movements, I was just moving randomly during certain intervals without giving MNE the timestamps since it was without a queue. I am working on adding a prompt system that records the times for when I am supposed to be moving my arms and my body so that it can be included in the ICA.

I will post all my code to my github soon.

Any help would be greatly appreciated, please reach out to me at:

[email protected] if you have any questions or advice.

Leave a Reply