Making a speedcubing timer which can work on a (Linux) terminal and can be interfaced with Arduino

Over a year ago on this site, I had written the fabled words...
But here's why i'm writing this update. I am not moving forward with this project, at least for now. I am about to enter High School in the following weeks so I wont have time to work on the project. But, thats not saying it cant be done. Someday I might be able to make the project into a reality someday, but time will tell.
A lot has changed since then.

Since that post was written, I managed to gain a lot of experience over the summer and had honed my skills as a programmer (learnt C and C++, IT summer internship in one of the largest companies in my city, made a smart home assistant that contained language processing, LLMs, and BLE connectivity to control circuits). After 3 months and >270 lines of code, I would like to unveil a part of the smart speedsolving coach that I am working on, a part that may seem insignificant, but it lays an important foundation for the project to be built upon. Without further ado, here's a demonstration on how it works!

The whole project is programmed in Python, as that's the langauge I have the most experience in (6 years). It's slow, but the simplicity of the language helped me prototype the whole thing in a quicker fashion than using C or C++.

The speedcubing timer works with a smart cube. You won't be able to time your solves on the timer manually using a normal speedcube. The program first tries to find the nearest smart cube that is available (more specifically, a GAN 356 i3).

1765312501449.png


After the cube has been found, the program is instructed to listen and record any moves the smart cube performs. After the connection process, the program prompts us to scramble the cube to a specific pattern.

1765312547503.png


There are two cube visualizations here; the one on the top shows the smart cube, while the one on the bottom shows the scrambled state of the cube. The cube visual on the top updates with the cubes state on every turn of the BLE cube. The bottom visualisation is erased after the cube has been scrambled correctly.

Once the cube has been scrambled and the cube has made the first move, the timer starts at that point, and all the moves are recorded. Once the cube has been solved, the program would print out the move history on the cube as well as the time taken.

1765312616989.png


The program also interfaces with an Arduino Uno using serial USB connection, and I programmed it so that the program sends signals to the Arduino to turn on a few LED's to visualise the solves progress (if the cross has been solved, light up this LED, it F2L has been finished, turn on this LED, and so on so forth). I haven't taken a picture of the circuit yet.

Now, up until this point, the program contains a few bugs and performance issues, mainly in the move history, but the main foundations of the program have been built. Now, I am planning to add an analysis feature which can detect F2L pairs, OLL and PLL cases and gives you the best moves to solve them.

My vision for the project is to integrate the whole project into a robotic mechanism that is similar in design to the GAN robot that is able to turn the cube without pauses, yet I feel like this would limit the accessibility of the program to all of you. What do you think about it? Should I prepare the program for public launch as software only? Should I prepare the robotic mechanism with the program integrated but advertise the whole project as the robot alone? Should I try to release this as seperate software and create the robot with the software I designed and tweak it to work with electronics? I am trying to do this project to boost my project portfolio for university applications*/, and I really wanted to design the robotic mechanism to make the project seem more impressive. Anyway, any and all guidance is appreciated.

I might make this project open-source in the future when I fix all the problems in it.

Anyway, that's all from my side. Cheerio!

\*MIT is my goal anyway. I need to make these impressive projects just for a chance to get in ;)

Edit: The reason why the GAN 356 I3 is the only cube supported is because GAN likes to encrypt their BLE communication protocol, and cracking that alone took too much time (approximately 2/3 of the total development time), so imagine how long it would take to crack ALL smart cube BLE protocols.
 
Last edited:
Over a year ago on this site, I had written the fabled words...

A lot has changed since then.

Since that post was written, I managed to gain a lot of experience over the summer and had honed my skills as a programmer (learnt C and C++, IT summer internship in one of the largest companies in my city, made a smart home assistant that contained language processing, LLMs, and BLE connectivity to control circuits). After 3 months and >270 lines of code, I would like to unveil a part of the smart speedsolving coach that I am working on, a part that may seem insignificant, but it lays an important foundation for the project to be built upon. Without further ado, here's a demonstration on how it works!

The whole project is programmed in Python, as that's the langauge I have the most experience in (6 years). It's slow, but the simplicity of the language helped me prototype the whole thing in a quicker fashion than using C or C++.

The speedcubing timer works with a smart cube. You won't be able to time your solves on the timer manually using a normal speedcube. The program first tries to find the nearest smart cube that is available (more specifically, a GAN 356 i3).

View attachment 44709

After the cube has been found, the program is instructed to listen and record any moves the smart cube performs. After the connection process, the program prompts us to scramble the cube to a specific pattern.

View attachment 44710

There are two cube visualizations here; the one on the top shows the smart cube, while the one on the bottom shows the scrambled state of the cube. The cube visual on the top updates with the cubes state on every turn of the BLE cube. The bottom visualisation is erased after the cube has been scrambled correctly.

Once the cube has been scrambled and the cube has made the first move, the timer starts at that point, and all the moves are recorded. Once the cube has been solved, the program would print out the move history on the cube as well as the time taken.

View attachment 44711

The program also interfaces with an Arduino Uno using serial USB connection, and I programmed it so that the program sends signals to the Arduino to turn on a few LED's to visualise the solves progress (if the cross has been solved, light up this LED, it F2L has been finished, turn on this LED, and so on so forth). I haven't taken a picture of the circuit yet.

Now, up until this point, the program contains a few bugs and performance issues, mainly in the move history, but the main foundations of the program have been built. Now, I am planning to add an analysis feature which can detect F2L pairs, OLL and PLL cases and gives you the best moves to solve them.

My vision for the project is to integrate the whole project into a robotic mechanism that is similar in design to the GAN robot that is able to turn the cube without pauses, yet I feel like this would limit the accessibility of the program to all of you. What do you think about it? Should I prepare the program for public launch as software only? Should I prepare the robotic mechanism with the program integrated but advertise the whole project as the robot alone? Should I try to release this as seperate software and create the robot with the software I designed and tweak it to work with electronics? I am trying to do this project to boost my project portfolio for university applications*/, and I really wanted to design the robotic mechanism to make the project seem more impressive. Anyway, any and all guidance is appreciated.

I might make this project open-source in the future when I fix all the problems in it.

Anyway, that's all from my side. Cheerio!



Edit: The reason why the GAN 356 I3 is the only cube supported is because GAN likes to encrypt their BLE communication protocol, and cracking that alone took too much time (approximately 2/3 of the total development time), so imagine how long it would take to crack ALL smart cube BLE protocols.
whoa sounds cool!
ooo you're done with the home assistant? firee
atb!!
 
Back
Top