{ "cells": [ { "cell_type": "markdown", "id": "63d8a7a6-1107-4334-8b73-598aa1ca97c4", "metadata": {}, "source": [ "# Byonoy Absorbance 96 Automate\n", "\n", "- [OEM Link](https://byonoy.com/absorbance-automate/)\n", "- **Communication Protocol / Hardware:** HID / USB-A/C\n", "- **Communication Level:** Firmware\n", "- VID:PID `16d0:1199`\n", "- Takes a single SLAS-format 96-wellplate on the detection unit, enables movement of the cap/illumination unit over it, and reads all 96 wells simultaneously.\n", "- Up to 6 configurable absorbance wavelengths (dependent on specifications during purchase)." ] }, { "cell_type": "markdown", "id": "840adda3-0ea1-4e7c-b0cb-34dd2244de69", "metadata": {}, "source": [ "---\n", "## Setup Instructions (Physical)\n", "\n", "The Byonoy Absorbance 96 Automate (A96A) is a an absorbance plate reader consisting of...\n", "1. a `detection_unit` containing the light sensors,\n", "2. a `illumination_unit` containing the light source,\n", "3. a `parking_unit` representing a simple resource_holder for the `illumination_unit` that is equivalent to the detection unit in terms of shape, and\n", "4. an `sbs_adapter` which is an optional holder for the `detection_unit` or `parking_unit`, enabling placement of this machine onto a standard SLAS/SBS-format plate holder.\n", "\n", "### Communication\n", "It requires only one cable connection to be operational:\n", "1. USB cable (USB-C at `base` end; USB-A at control PC end)" ] }, { "cell_type": "markdown", "id": "e4aa8066-9eb5-4f8a-8d69-372712bdb3b5", "metadata": {}, "source": [ "---\n", "## Setup Instructions (Programmatic)" ] }, { "cell_type": "code", "execution_count": null, "id": "4907224e", "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": null, "id": "38a9cf2d-840c-49ce-a886-da29c67fb124", "metadata": {}, "outputs": [], "source": [ "from pylabrobot.plate_reading.byonoy import byonoy_a96a" ] }, { "cell_type": "code", "execution_count": null, "id": "ad91bfca", "metadata": {}, "outputs": [], "source": [ "reader, illumination_unit = byonoy_a96a(\"Absorbance96 Automate\")\n", "reader" ] }, { "cell_type": "code", "execution_count": null, "id": "0f86d997", "metadata": {}, "outputs": [], "source": [ "await reader.setup()" ] }, { "cell_type": "markdown", "id": "30619f34-af58-4a74-b4fd-e2d53033c2de", "metadata": {}, "source": [ "### Query Machine Configuration" ] }, { "cell_type": "code", "execution_count": null, "id": "2254228f-2864-4174-a615-9d1aed119ad5", "metadata": {}, "outputs": [], "source": [ "wavelengths = await reader.backend.get_available_absorbance_wavelengths()\n", "wavelengths" ] }, { "cell_type": "markdown", "id": "fc15c1b4-be77-4180-a5ce-d8a31480d0d4", "metadata": {}, "source": [ "### Measure Absorbance" ] }, { "cell_type": "markdown", "id": "9c1d898e", "metadata": {}, "source": [ "Before you can do a plate reading measurement in PLR, you need to assign a plate to the reader." ] }, { "cell_type": "code", "execution_count": null, "id": "34f54968", "metadata": {}, "outputs": [], "source": [ "from pylabrobot.resources.corning.plates import Cor_96_wellplate_360ul_Fb\n", "demo_plate = Cor_96_wellplate_360ul_Fb(name=\"plate\")" ] }, { "cell_type": "code", "execution_count": null, "id": "8f6a50bd", "metadata": {}, "outputs": [], "source": [ "reader.assign_child_resource(demo_plate)" ] }, { "cell_type": "code", "execution_count": null, "id": "e5a1d2e2-7b2c-4077-bde6-338f257b1993", "metadata": {}, "outputs": [], "source": [ "wavelength = wavelengths[0] # Choose the first available wavelength\n", "\n", "data = await reader.read_absorbance(\n", " wavelength=wavelength,\n", " use_new_return_type=True,\n", ")\n", "\n", "print(f\"Wavelength: {data[0]['wavelength']} nm\")\n", "print(f\"Time: {data[0]['time']}\")\n", "print(f\"Temperature: {data[0]['temperature']}\")\n", "print(\"Data\")\n", "print(data[0]['data'])" ] }, { "cell_type": "markdown", "id": "1a33230d-8243-4d21-88e1-4a4eb6cba7c8", "metadata": {}, "source": [ "## Disconnect from Reader" ] }, { "cell_type": "code", "execution_count": null, "id": "21a72488", "metadata": {}, "outputs": [], "source": [ "await reader.stop()" ] }, { "cell_type": "markdown", "id": "ad4bdba5", "metadata": {}, "source": [ "## Resource model" ] }, { "cell_type": "markdown", "id": "a2f610f3", "metadata": {}, "source": [ "In the example above, we instantiated the Byonoy Absorbance 96 Automate reader using the `byonoy_a96a` function, which automatically creates the necessary resources for the reader." ] }, { "cell_type": "code", "execution_count": null, "id": "5e58d4ef", "metadata": {}, "outputs": [], "source": [ "reader.illumination_unit_holder.resource is illumination_unit" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.0" } }, "nbformat": 4, "nbformat_minor": 5 }