Work in progress
This project contains code and instructions for making simulated toy qubits that you can hold.
The basic concept is to have a bunch of balls with Arduinos and other electronics inside. The Arduinos record motion data and report it over bluetooth to a hub computer doing the quantum simulation. Simple ball movements (turning, knocking, and pressing together) are thereby translated into quantum operations (single-qubit rotations, measurement, controlled rotations).
The main things left to do are:
- Better debugging and testing of the Arduino code. Something is causing the contact detection to go flaky when the Arduinos are reset.
- Correcting gyrometer drift with accelerometer data.
- Correctly turning the motion into quantum rotations.
- Make a demo video demonstrating quantum teleportation.
[[[work in progress]]]
- Each ball is a qubit.
- A nearby computer acts as a hub handling the quantum simulation and talking to the balls over bluetooth.
- When you turn a ball, its qubit is correspondingly rotated around the Bloch sphere.
- When you knock a ball against a surface, its qubit is measured. The measurement axis is always vertical, and the result is indicated by a buzzer going "Beep beep beep!" for DOWN or "Riiiiiiiing!" for UP.
- When you press two balls together, rotations become controlled. Turning one ball will only affect the parts of the state space where the other ball's qubit is UP.
-
Clone the repository.
git clone https://github.com/Strilanc/Hand-Qubits.git
-
Get the necessary parts.
- Arduino Uno or Nano or similar
- MPU-6050 Accelerometer/Gyrometer (datasheet)
- HC-05 Bluetooth Module (datasheet)
- Buzzer
- Switch
- ~15cm Diameter Polystyrene Ball
- Conductive Paint
- Breadboard / Various Wires / 9V Battery / Appropriate USB Cable / Soldering Stuff / Etc
-
Configure parts.
- Open
Hand-Qubits/qubit-microcontroller/qubit-microcontroller.ino
with the Arduino IDE - Upload to the Arduino
- Also Configure the HC-05 Bluetooth Modules.
- Change the addresses and pins in
Hand-Qubits/hub/src/config/KnownBoards.cs
to match. - Pair your computer with the Bluetooth modules.
- Open
-
Run the server.
- Open
Hand-Qubits/hub/HandQubitServer.sln
with Visual Studio. - Run the project on a computer with bluetooth enabled.
- Once you've assembled things, the powered Arduinos can connect and start feeding in data.
- Open
-
Assemble electronics.
Connect
vcc
andground
pins appropriately. The MPU-6050'sSDA
andSCL
pins go toA5
andA6
respectively. The HC-06'sRX
andTX
pins go toD4
andD3
respectively. The buzzer goes fromA3
toground
.A0
will go to the conductive paint or copper tape wrapping around the ball. Also, connect the battery and switch.A diagram of the pin connections:
Once the electronics are ready, test that the powered Arduino connects and feeds motion data to the server.
-
Assemble balls.
First, paint over the polystyrene ball with an acrlyic paint. This stops the polystyrene from shedding constantly when touched. After the acrylic has dried, add conductive paint traced in tangled lines all over the surface. Once the conductive paint has dried, cut the ball in half.
Make a hole for the electronics to sit in by carving into the insides of each half-ball using a butter knife or scissors. Try to make the fit snug, and positioned so that the switch just barely pokes out the side. Once the hole is carved, paint it and the rest of the insides with acrylic so they don't shed.
After placing the electronics inside, and somehow connecting A0 to the conductive paint traces, close up the halves and use an office stapler to staple them together. You can position the staples so they act as a conductive path from conductive paint on the top half to conductive paint on the the bottom half.
Here are some pictures of balls in progress:
Staples can be pulled out easily, if you need to make changes. If you want a more permanent connection, such as a hinge between the backs of the two halves, I recommend sewing them together with needle and thread.
-
Play with your qubits!