Python 3 Interface
Interaction with Otto is accomplished through a graphical user interface (GUI) coded in Python 3 using Tkinter and Tk themed widgets. This allows for a simple, yet comprehensive interface through which to utilize all of OTTO’s capabilities. When the GUI is opened, users are presented with a choice of assays and equipment setup. After selecting their preference, users will then have the ability to calibrate OTTO, configure their plate setup or run their plates. The Python program effectively serves as a “translator/interpreter” between the user’s inputs and the Arduino Due which has direct connections to the motors.
The .exe file is too large to be hosted on Github, so it is hosted on Google Drive: Download GUI Companion for OTTO
The raw python file (dependencies will have to be downloaded seperately) is hosted on GitHub: Download Python File
The Arduino Due is running a custom lightweight G-code firmware that receives and translates G-code generated by Python program and translates these coordinates into motor movements. To learn more about G-Code click here. To keep the firmware simple, the Due can only recognize necessary G-code commands, such as:
- G1 Movement commands (e.g., G1 X30 Y15 Z20 E5, where E refers to the pipette linear actuator)
- G28 Home position
- G90 Set to absolute positioning (OTTO currently only runs in absolute coordinate mode)
- M150 Setting LED color (Optional feature)
- M701 Load pipette tip
- M1001 Check tip presence and alignment with laser system (optional feature)
The Arduino Due firmware can be easily edited with the Arduino Integrated Development Environment. Edits will need to be made if the wiring differs from the electrical section or if you use different size rails or gearing (e.g., a 16T vs 20T pulley for time timing belt.
The Arduino Due then relies on the AccelStepper library to translate positions sent over by G-code into step pulses that move the motors in accordance with set acceleration and velocity curves. While Arduino has a built-in stepper motor library available, AccelStepper was chosen for a few reasons that were essential to the success of this project: it supported the acceleration and deacceleration of motors, it allowed for independent control of multiple motors that were running concurrently and it supported stepper drivers. This ultimately allowed us to use motors that were able to conduct the precise movements OTTO needed to undertake while still maximizing the speed of its movements.