DIY - Openware para laboratorio¶
Listado de subpáginas:
Articulos y notas¶
- Microscopio confocal: "How DIY technologies are democratizing science" https://www.nature.com/articles/d41586-020-03193-5
Perfiles interesantes¶
Software¶
- ImageJ/Fiji Shortcuts: https://imagej.net/Keyboard_shortcuts#Listing_all_keyboard_shortcuts
LIMS¶
LIMS es "Laboratory Information Management System". OpenBIS es uno de ellos.
Hay más: https://open-neuroscience.com/post/lab-management-software/
OpenBIS¶
Documentacion de OpenBIS: https://unlimited.ethz.ch/display/openBISDoc2010/openBIS+20.10+Documentation
Demo: https://openbis.ch/index.php/demo/#demo
Video tutoriales: https://openbis.ch/index.php/screencasts/#video%20tutorials
Repositorio: https://sissource.ethz.ch/sispub/openbis
Desgargas:
- https://unlimited.ethz.ch/display/openbis/openBIS+Download+Page
- Docker container: https://hub.docker.com/r/openbis/debian-openbis/tags/
OpenBIS Docker¶
Ver:
- https://unlimited.ethz.ch/display/openBISDoc1906/openBIS+deployment+using+docker+virtual+containers
- https://hub.docker.com/r/openbis/debian-openbis/tags/
Comandos:
# Para instalar OpenBIS
docker pull openbis/debian-openbis:latest
# Para iniciar OpenBIS
sudo docker run -p443:443 openbis/debian-openbis &
## Visitar: https://localhost:443 ####
## Visitar: https://localhost/openbis/ ####
## u: admin ####
## p: changeit ####
# Para detener el container
sudo docker container list
sudo docker stop 675acf59bfc8
La contraseña se cambia con variables en el Dockerfile.
Wetware¶
Ni hardware, ni software, wetware serían los reactivos y organismos que se usan en el labo de biología:
- Reactivos: https://forum.reclone.org/
- Bitesizebio DIY-lab: https://bitesizebio.com/lab-diy/
- Phusion y RT caseras, amo ese sitio: https://pipettejockey.com/2017/08/18/purifying-commonly-used-enzymes-homebrew-phusion/
- Guardo un snapshot porsia, hay muchos comments utiles:
- Guardo un snapshot porsia, hay muchos comments utiles:
FreeGenes project¶
https://stanford.freegenes.org/
Hardware¶
Otros sitios y proyectos interesantes¶
Gaudi Labs tiene un montón de cosas copadas:
Talleres Opensource:
Cosas de neuroscience (usualmente no tan específicas):
Otros:
- Gaudi’s final project: “How to set up a microbiology lab” https://web.archive.org/web/20171124112827/http://bio.academany.org/2015/labs/luzern/final_project.html
- Frugal Lab: https://forum.openhardware.science/t/workshop-march-27th-low-cost-approach-to-molecular-biology/2751
- Muy bueno: http://gaudi.ch/PocketPCR/
- Buenísimo: https://www.labonthecheap.com/3d-print-a-pipette-tip-sorter/
- http://f-labth.blogspot.com/
- https://hackaday.com/2020/02/12/laser-tachometer-knows-how-fast-you-were-spinning-back-there/
- https://twitter.com/HardwareX1
- https://twitter.com/BeneficialBio
- https://twitter.com/jimhaseloff
- Piezo-pumps:
- The Ethoscope Platform (para biologia del comportamiento de moscas Drosophila): http://gilestrolab.github.io/ethoscope/
- Espectrometría de masa:
- https://hackaday.com/2019/12/04/ben-krasnow-builds-a-mass-spectrometer/
- https://www.eevblog.com/forum/projects/has-anybody-built-their-own-mass-spectrometer-before/
- https://www.rapp-instruments.de/Radioaktivitaet/div/quadropol/quadro.htm
- https://www.youtube.com/watch?v=nIKhUizkXxA
- https://aip.scitation.org/doi/10.1063/1.2832334
- https://fusor.net/board/viewtopic.php?t=10568
- Microscopia:
- Colorimetros:
- "Hyperspectral" scanner: https://github.com/BadenLab/Hyperspectral-scanner
- Cyclic-Lab Equipos basicos de laboratio: https://osf.io/hez75/
- Bonsai programming framework: https://github.com/bonsai-rx/bonsai
To-do:
- Pasar el trello de pIA a esta wiki (https://trello.com/b/Zh3PNyPU/proyecto-ia).
Proyectos:
- Bomba peristaltica: https://www.thingiverse.com/thing:2619479
Cursos¶
http://instrumentacion.qi.fcen.uba.ar/
Microscopía¶
Con un celu: https://www.nature.com/articles/s41598-018-21543-2#Sec1
Con un microscopio y usando el celu como cámara: https://www.thingiverse.com/thing:3020917
OFM¶
Para comprar y usar un objetivo 40x con el OFM hay que entender algunas cosas de óptica y estándares de microscopios: https://www.edmundoptics.com/knowledge-center/application-notes/microscopy/understanding-microscopes-and-objectives/
Ver ahí "The Objective Standard" la parte de "fixed length objectives".
Ver también:
- https://www.microscopyu.com/tutorials/fixedtubelength
- http://blog.microscopeworld.com/2014/04/microscope-infinity-corrected-optics.html
- https://physics.stackexchange.com/questions/394600/tube-length-of-a-microscope
- https://micro.magnet.fsu.edu/primer/anatomy/infinityintro.html
- https://www.olympus-ims.com/en/microscope/terms/feature15/
- https://www.olympus-lifescience.com/en/microscope-resource/primer/anatomy/components/
Entiendo de todo eso que los objetivos "finite" / "fixed tube length".
Vienen en dos estándares. Lo importante para el OFM es de "160 mm", y tambien dice que importa el "parafocal length" es 35 mm o 45 mm, dependiendo de si se usa el sample riser del OFM.
En el primer link dice:
The DIN standard has a 160mm distance from the objective flange to the eyepiece flange.
Joya, necesito uno DIN, pero más adelante en el mismo sitio se dice:
Lastly, there is a dimension typically listed for objectives to allow the user to consistently know what length it is: the parfocal distance (PD).
The parfocal distance is the distance from the flange of the objective to the object under inspection.
For DIN objectives this distance is a standard 45mm and for JIS is it 36mm
Y eso es un poco confuso, porque el manual habla sobre dos distancias parafocales, pero solo sobre un tube length.
Más confuso respecto a lo estándar es que el OFM usa un "tube lens" antes del sensor de la cámara (ver manual). Y se supone que este tipo de microscopio no tiene "tube lens".
En teoría un objetivo "fixed" genera una imagen magnificada real, que luego es magnificada por el lente ocular. ¿Por qué no se usa la del objetivo directamente? La imagen magnificada por un ocular es virtual, osea que no se podría formar una imagen sobre el sensor del raspberry pi, y en el microscopio convencional esa imagen real se enfoca o proyecta sobre la retina solamente a través del lente del ojo.
Entonces: ¿como funciona el OFM?
Expectativa:
Realidad?:
En el segundo sistema, el segundo lente se corrió para que forme una imagen magnificada real (o sea con el objeto mas lejos del lente que su distancia focal). Esa es la proyección que necesita el OFM.
Acá explica bien lo que pasa: https://build.openflexure.org/openflexure-microscope/v6.1.5/docs/#/parts/optics/tube_lens
La idea es acortar la distancia a la que se forma la imagen del objetivo, para que se forme antes (sobre el sensor de la cámara) en vez de a los 160 mm o lo que sea. Algo así:
Aparentemente en la simulación, eso achica la imagen final. Si los pixeles del sensor resuelven todo igual, entonces no hay pérdida real.
Salvo que las correcciones del objetivo se degraden por usar un lente que no debería estar.
Quizas por eso eligieron un "achromatic doublet" como lente de "tubo" (ver manual).
Ver también:
- https://openflexure.discourse.group/t/objective-lens-advice/491/2
- https://openflexure.discourse.group/t/din-objectives-adaptation-for-microscope/384
- https://openflexure.discourse.group/t/question-about-specific-objective-lens/623
Termociclador - PCRrera¶
Un viejo proyecto (en pausa).
Docs: https://drive.google.com/drive/folders/0Bx7ffAgTk0buTmR4ZjI1bDBFMGM
Code: https://github.com/naikymen/Plataforma-Increible-Argenta
Robot pipeteador¶
Ver la página del proyecto.
Work in progress...
Espectrofotómetro¶
Proyectos interesantes:
- Portable low-cost open-source wireless spectrophotometer for fast and reliable measurements https://www.sciencedirect.com/science/article/pii/S246806722030016X?via%3Dihub
- Apuntes genial sobre colorimetros y turbidímetros open source: https://docs.google.com/document/d/1vM2MXbsRmXswq5W6U_234DTH7rzHVtUj7k6jOHHOmn8/
Centrífuga¶
Proyectos:
- https://hackaday.com/2013/09/23/openfuge-an-open-source-centrifuge/
- https://www.instructables.com/id/3D-Printed-DIYbio-Mini-Centrifuge/
- http://hackteria.org/wiki/index.php/Hacked_Hard-disc_Centrifuge
Rpm counter:
Reciclado de motores:
HDD Centrifuge¶
Para tubos de 0.5 mL.
Da entre 1000 g (5400 RPM) y 3000 g (7200 RPM).
Hay que cortar piezas de acrílico para altas velocidades, las de plástico de impresora 3D no son adecuadas.
Quizás podría agregarle algún sistemita de swing para que al detenerse el tubo quede parado (y no acostado como en el diseño original).
Cableado y partes: https://www.youtube.com/watch?v=WDrRPRUpvgg&feature=share
Hay que conseguir un ESC (que sale 1400 pesos) o armar algo de cero, ver la página para eso.
Auto-balanceo¶
Ver: proyectos/mecanica
Pipeta electrónica¶
Una bomba de diafragma: https://hackaday.com/2020/12/02/diaphragm-air-engine/
Servos para pipetear¶
Problemas:
- La resolución angular de un servo controlado por el PWM de GRBL no es muy alta.
- El servo tiene algo de "rebote". La inercia del movimiento interno del servo hace que se "pase" un poco y luego vuelva a donde debería haber frenado en un principio.
Soluciones: usar el servo para trasladar la pipeta en Z y el stepper para pipetear.
Alternativas:
- Usar un stepper (con algun feedback mejor) directamente sobre el shaft de la pipeta. Por ejemplo alguno pequeño de estos: https://www.pololu.com/category/87/stepper-motors
- Usar un embolo con resortes mucho más blandos, no es necesario que sean tan duros en este caso, pero significa que no puedo usar muchas micropipetas directamente.
Servos:
- https://hackaday.com/2016/10/30/primer-on-servos-hits-all-the-basics/
- https://hackaday.com/2012/10/18/the-inner-workings-of-servo-motors/
- https://hackaday.com/2012/07/21/servos-servos-and-more-servos/
- https://hackaday.com/2009/11/06/servo-database/
Closed-loop control¶
- Podría usar PID con el sensor de un calibre o de un mouse óptico para medir el movimiento lineal. En ese casi ni siquiera necesitaría el servo, cualquier motor DC con una reducción funcionaría bien.
- CNC con escobillas: https://www.youtube.com/watch?v=PEYNJVxxpMQ
- Pr#81 - Caliper i2c Arduino | Medidor Filamento 3D: https://www.youtube.com/watch?v=CIRKRzw54Zs
- https://hackaday.com/2016/05/17/improved-digital-caliper-interfacing-including-3d-printed-connector/
- DIY Digital Caliper Data Plug: https://www.youtube.com/watch?v=34IsYgL4cMw
- DIY Digital Caliper Data Plug Part 2 - Arduino Code and Special Announcement: https://www.youtube.com/watch?v=5Us-V6410j8
- Using a computer mouse as linear sensor: https://www.youtube.com/watch?v=CIRKRzw54Zs
- Inside a cheap set of eBay digital calipers: https://www.youtube.com/watch?v=fKSSY1gzCEs
- Digital Caliper HACK/MOD from 150mm to 650mm: https://www.youtube.com/watch?v=JYnit_PSSMY
- https://www.woodgears.ca/caliper/
- https://electronics.stackexchange.com/questions/6713/how-does-an-electronic-caliper-work
- https://www.wonkeedonkeetools.co.uk/calipers/how-does-a-digital-caliper-work
Movimiento lineal¶
- https://hackaday.com/2018/06/02/servo-becomes-mini-linear-actuator/
- https://hackaday.com/2015/12/24/3d-printed-rc-servo-to-linear-actuator-conversion/
- https://hackaday.com/2010/01/19/servo-hacked-linear-actuator/
- https://hackaday.com/2018/11/02/save-a-few-steps-on-your-next-build-with-these-easy-linear-actuators/
- https://hackaday.io/project/156520-3d-printed-mini-linear-actuator
Control remoto¶
- PWM con Arduino (lo usual).
- Con "voz" y Android SL4A: https://hackaday.com/2011/11/20/an-exercise-in-servo-voice-control-with-android/
- Con audio y Android: https://hackaday.com/2012/08/14/robot-servo-control-using-smartphone-audio-jack/
- Eso se podría combinar con un receptor de audio bluetooth para entradas "aux".
Música¶
- https://hackaday.com/2018/01/07/afroman-teaches-intro-to-servos-builds-laser-turret/
- https://hackaday.com/2014/07/09/servobender-the-electronic-pedal-steel/
Servo-pipeta¶
Thing: https://www.thingiverse.com/thing:3985878
Models: https://www.tinkercad.com/things/2ZC4g48iKkl-pipette-dock/
Ese servo era bastante malo, se movia solo! y la fuerza que opone el resorte de la pipeta es bastante grande.
Servo-jeringa¶
Ideas:
- Cable de cierto diametro + o-rings como sello.
- Positive displacement disposable tips.
- Jeringas hamilton / de cromatografia.
- https://www.google.com.ar/search?tbm=isch&q=low+volume+air+displacement+mechanisms+piston
- Algo con un tornillo y una tuerca (?)
Seria mas facil quizas, hacer algo por mi cuenta que adaptar otra cosa. Que osa el Opentrons OT-2?
Antecedentes:
Mecánica de sellos¶
Diafragma simple de la BiroPette:
- https://open-labware.net/projects/biropettes/
- Página 8: https://openlabwaredotnet.files.wordpress.com/2015/11/pipette-v15.pdf
Notas y artículos:
Stepper para pipetear¶
Análogo al eje "E" de las impresoras 3D. Usar un Arduino para esto es "trivial", hay librerías para eso y muchos ejemplos.
Control directo con RPi y Driver¶
Usando un Raspberry Pi y un "Pololu" no es tan común, pero se puede hacer.
Nota: A4988 y DRV8255 son equivalentes en cuanto a software de control.
La posta: https://www.rototron.info/raspberry-pi-stepper-motor-tutorial/
Más info¶
Ejemplos:
- DRV8255: https://www.rototron.info/raspberry-pi-stepper-motor-tutorial/
- A4988: https://forum.pololu.com/t/a4988-with-raspberry-floating-step-during-boot/8645/2
- A4988: https://www.raspberrypi.org/forums/viewtopic.php?t=110368
- TMC5130: https://blog.trinamic.com/2017/04/07/how-to-use-tmc5130-eval-with-your-raspberry-pi-32/
- TMC2130 (ver comentarios): https://blog.trinamic.com/2018/04/09/realtime-motor-and-motion-control-with-a-raspberry-pi-without-a-realtime-os/
Código:
- https://www.rototron.info/raspberry-pi-stepper-motor-tutorial/
- https://github.com/hknyldz/RaspberryPiStepperDriver
- https://github.com/topics/stepper-motor-driver
- https://github.com/binbash12/raspberrypi-stepper/blob/master/drive.py
- https://github.com/search?q=stepper+python+TMC
- RPi + Arduino: https://github.com/mateuszdrwal/rpiTMC2130
Links ML:
- A4988: https://articulo.mercadolibre.com.ar/MLA-838562075-driver-pololu-a4988-p-arduino-cnc-impresora-3d-motor-paso-_JM
- TMC2130: https://articulo.mercadolibre.com.ar/MLA-791307717-driver-tmc2130-v11-ultrasilencioso-256-impresora-3d-_JM
- https://electronica.mercadolibre.com.ar/componentes-electronicos/tmc#D%5BA:tmc,OC:MLA11830]
pigpio DMA chains y Real-time Kernel¶
Quizás ayude:
pigpio wave chains will control steppers with zero CPU cost.
"Transmitted waveforms are accurate to a microsecond" (< 1 MHz range)
- https://www.raspberrypi.org/forums/viewtopic.php?f=117&t=206747
- https://github.com/ppisa/rpi-rt-control
Control indirecto RPi con Arduino y Driver¶
Hay mucha data para esto, podria usar un arduino con GRBL directamente.
Arduino Nano¶
https://www.instructables.com/id/GRBL-Pinout-Arduino-Nano-v30/
Homing con GRBL Probe¶
Se puede usar una Probe para calibrar el eje S si es que se usa el Raspberry con otro Arduino para el stepper de la pipeta. Si no habría que codearlo (algo bién rústico en un loop) en el raspberry o buscar algo hecho.
RPi Stepper¶
A lo bruto con GPIO y for loops¶
#!/usr/bin/python
from time import sleep
from RPi import GPIO
DIR = 20 # Direction GPIO Pin
STEP = 21 # Step GPIO Pin
CW = 1 # Clockwise Rotation
CCW = 0 # Counterclockwise Rotation
SPR = 200 # Steps per Revolution (360 / 7.5)
GPIO.setmode(GPIO.BCM)
GPIO.setup(DIR, GPIO.OUT)
GPIO.setup(STEP, GPIO.OUT)
GPIO.output(DIR, CW)
MODE = (14, 15, 18) # Microstep Resolution GPIO Pins
GPIO.setup(MODE, GPIO.OUT)
RESOLUTION = {'Full': (0, 0, 0),
'Half': (1, 0, 0),
'1/4': (0, 1, 0),
'1/8': (1, 1, 0),
'1/16': (0, 0, 1),
'1/32': (1, 0, 1)}
GPIO.output(MODE, RESOLUTION['1/4'])
step_count = SPR * 32
delay = .0208 / 32
#step_count = SPR
#delay = .0208
for x in range(step_count):
GPIO.output(STEP, GPIO.HIGH)
sleep(delay)
GPIO.output(STEP, GPIO.LOW)
sleep(delay)
sleep(.5)
GPIO.output(DIR, CCW)
for x in range(step_count):
GPIO.output(STEP, GPIO.HIGH)
sleep(delay)
GPIO.output(STEP, GPIO.LOW)
sleep(delay)
GPIO.cleanup()
Con PWM más cheto¶
Tener en cuenta posibles frecuencias para la "ramp" de aceleración:
Antes hay que correr:
$ sudo pigpiod
from time import sleep
import pigpio
DIR = 20 # Direction GPIO Pin
STEP = 21 # Step GPIO Pin
# Connect to pigpiod daemon
pi = pigpio.pi()
# Set up pins as an output
pi.set_mode(DIR, pigpio.OUTPUT)
pi.set_mode(STEP, pigpio.OUTPUT)
MODE = (14, 15, 18) # Microstep Resolution GPIO Pins
RESOLUTION = {'Full': (0, 0, 0),
'Half': (1, 0, 0),
'1/4': (0, 1, 0),
'1/8': (1, 1, 0),
'1/16': (0, 0, 1),
'1/32': (1, 0, 1)}
for i in range(3):
pi.write(MODE[i], RESOLUTION['1/16'][i])
def run_ramp(ramp):
"""Generate ramp wave forms.
ramp: List of [Frequency, Steps]
"""
pi.wave_clear() # clear existing waves
length = len(ramp) # number of ramp levels
wid = [-1] * length
# Generate a wave per ramp level
for i in range(length):
frequency = ramp[i][0]
micros = int(500000 / frequency)
wf = []
wf.append(pigpio.pulse(1 << STEP, 0, micros)) # pulse on
wf.append(pigpio.pulse(0, 1 << STEP, micros)) # pulse off
pi.wave_add_generic(wf)
wid[i] = pi.wave_create()
# Generate a chain of waves
chain = []
for i in range(length):
steps = ramp[i][1]
x = steps & 255
y = steps >> 8
chain += [255, 0, wid[i], 255, 1, x, y]
pi.wave_chain(chain) # Transmit chain.
ramp = [[320, 20],
[500, 40],
[800, 50],
[1000, 70],
[1600, 90],
[2000, 1000]]
# Ramp up
run_ramp(ramp)
Problemas¶
A veces tiraba esto y no sé por qué:
pigpio.error: too many chain counters
Activar limit switch¶
Como el wave chain ya es async quizás pueda interrumpirlo usando las funciones con las que viene.
Y funciona, la wave chain se puede detener despues de que se manda sin hacer nada raro en python mirando el GPIO del switch en un while loop.