Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/melchisedech333/laser-scanning-microscopy
🧪 Reproducing the concept of Confocal Laser Scanning Microscope. Using Arduino and easily found materials. Generating images in Grayscale just for fun.
https://github.com/melchisedech333/laser-scanning-microscopy
arduino arduino-uno confocal confocal-images confocal-microscope confocal-microscopy image-generation laser-scanner laser-scanning microscope microscope-control microscope-hardware microscope-image microscope-images microscopes microscopic-images microscopy microscopy-data microscopy-image microscopy-images
Last synced: 14 days ago
JSON representation
🧪 Reproducing the concept of Confocal Laser Scanning Microscope. Using Arduino and easily found materials. Generating images in Grayscale just for fun.
- Host: GitHub
- URL: https://github.com/melchisedech333/laser-scanning-microscopy
- Owner: melchisedech333
- License: bsd-3-clause
- Created: 2022-10-10T16:17:38.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2022-10-17T19:11:14.000Z (about 2 years ago)
- Last Synced: 2024-05-01T21:16:16.894Z (8 months ago)
- Topics: arduino, arduino-uno, confocal, confocal-images, confocal-microscope, confocal-microscopy, image-generation, laser-scanner, laser-scanning, microscope, microscope-control, microscope-hardware, microscope-image, microscope-images, microscopes, microscopic-images, microscopy, microscopy-data, microscopy-image, microscopy-images
- Language: PHP
- Homepage:
- Size: 4.39 MB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- Funding: .github/FUNDING.yml
- License: license
Awesome Lists containing this project
README
Note: this document is written in PT-BR 🇧🇷
Caso seja de sua preferência, você também pode ler este texto no TabNews, ou no Medium.
Este projeto foi feito por pura diversão. A ideia dele é simplesmente capturar uma imagem de alguma coisa em escala microscópica, e olhar pra ela com um belo sorriso no rosto, porque é legal.
Como amostra utilizei uma lâmina de silício com a litografia de um microchip exposta. Onde foram capturadas imagens mostrando os pontos de contato do microchip.
IMAGE 1
IMAGE 2
IMAGE 3
Tendo em vista que em um espaço de 2mm cabem mais ou menos 10 pontos de contato (como mostra na imagem acima). Convertendo de milímetros para micrômetros, temos então 2000 micrômetros. Dividindo 2000 micrômetros por 10, temos o valor de 200 micrômetros por ponto de contato. Podemos então dizer que a imagem 1 capturada possui mais ou menos 200 micrômetros.
O truque aqui é compreender o conceito de CLSM e entender que as coisas refletem luz, e que podemos capturar essa luz e com ela montar uma imagem em grayscale.
Vamos para o experimento...
## :bulb: O Conceito
Para conseguir realizar essa brincadeirinha divertida vamos ter que reproduzir o conceito de (CLSM) Confocal Laser Scanning Microscope. Portanto, para esclarecer as coisas, vamos ter em mente do que se trata este conceito.
Tudo começa no laser, ele emite um feixe de luz que se choca com o chamado Beam Splitter, que é apenas um vidro transparente. Veja na imagem ao lado o que acontece quando uma luz de um laser se choca com um vidro.
Como é um vidro transparente, parte da luz simplesmente atravessa o vidro, mas outra parte é refletida, pois o vidro, mesmo transparente, também funciona em parte como um espelho.
Image: ibidi.com
Esta luz que saiu do laser e foi refletida pelo Beam Splitter seguirá indo na direção da Objective Lens, que é nossa lente objetiva, utilizada para focar o feixe da luz do laser num único ponto.
Logo abaixo de nossa lente objetiva, estará nossa amostra, ou seja, o material que queremos capturar uma imagem microscópica. Portanto, é importante que o laser esteja devidamente focalizado na amostra para que o dispositivo possa funcionar.
Isto que acabamos de descrever se resume na imagem ao lado. Observe o caminho que a luz faz, simbolizado pelas setas em azul.
Image: ibidi.com
Agora observe nesta imagem ao lado. Ela nos mostra o que acontece após a luz do laser bater sobre nossa amostra.
A luz é refletida novamente para cima, atravessando novamente a lente objetiva, depois atravessando também nosso Beam Splitter, até atingir um sensor.
Importante também observar que antes da luz atingir o sensor (que no caso é um sensor de luminosidade), ela primeiro atravessa o chamado Pinhole, que trata-se de um obstáculo para passar pouca luz (isto ajuda a remover ruídos).
Portanto, resumindo tudo, a luz que sai de nosso laser é refletida pelo Beam Splitter, depois atravessa nossa lente objetiva responsável por realizar o foco em nossa amostra. Após a luz incidir sobre nossa amostra, a mesma é refletida para cima, atravessando nossa lente objetiva e atingindo novamente nosso Beam Spliter, mas agora fazendo o caminho inverso. Se tratando nosso Beam Splitter de um simples vidro transparente, parte da luz irá atravessá-lo, passando posteriormente por nosso obstáculo (Pinhole) e atingindo nosso sensor de luminosidade.
Desta maneira, utilizando algo como um sensor LDR convencional, teremos no máximo um ponto focalizado em nossa amostra, mas o que queremos é uma imagem. Logo, temos que ter algum mecanismo que nos permita realizar uma varredura nos eixos X,Y. Sendo este o nosso tão querido Scanner.
Desta maneira é possível realizar a varredura nos eixos X,Y de alguma amostra, e a cada ponto focalizado do laser, capturamos a intensidade luminosa com um sensor de luminosidade. Vamos então armazenando esses valores em algum software, para posteriormente gerar uma imagem com base nesses dados.
Estando claro o conceito descrito acima, vamos para a parte prática :star_struck:
## :hammer: Materiais
A primeira coisa que vamos precisar fazer é ir em algum site e comprar um Arduíno e alguns componentes básicos, como resistores, capacitores, jumpers e coisas do tipo. Depois vamos precisar ir em algum ferro-velho e procurar alguns drivers de DVD. Segue abaixo a lista dos materiais.
Importante deixar claro que para construir este projeto, é necessário algumas noções básicas de eletrônica e programação.
Materiais comprados em lojas online:
- Uma protoboard e jumpers
- Arduino UNO
- Capacitores de 10k uf
- Resistores 330 ohms, 1k ohms, 10k ohms
- Sensor de luz LDR
- Transistores MOSFET (NPN)
- Um laser potente
Materiais comprados no ferro-velho:
- Drivers de DVD (eu usei 4, mas 2 servem)
Claro, coisas como cola-quente, papelão e isopor podem ajudar muito. Também é importante deixar claro que para este projeto é necessário um bom laser, o que utilizei eu comprei no Mercado Livre, e é este da imagem abaixo.
## 🟦 O Scanner
Sendo talvez a nossa parte mais importante do projeto, precisamos do scanner para realizar a varredura nos eixos X e Y. E isso nós faremos com as bobinas de foco das lentes dos próprios drivers de DVD.
Note que pegamos um pedaço de fio um pouco rígido e colamos a ponta dele no local onde fica a lente de foco do leitor de DVD. Isso nos permitirá, ao controlar a bobina responsável pelo foco da lente, realizar o movimento para frente e para trás.
Este será nosso eixo Y.
Utilizando a mesma noção acima, mas agora controlando a bobina que realiza o movimento para as laterais, vamos ter nosso eixo X.
Em seguida vamos precisar criar algumas perninhas para sustentar nosso dispositivo, ficando como nas imagens abaixo.
Note que os fios utilizados nas perninhas são na verdade fios de cabo de rede (os famosos RJ45). Desta maneira é possível movimentar toda nossa "mesinha" (sim, vamos chamar ela de mesinha daqui pra frente) com o controlador do eixo Y. Tendo assim o controle dos eixos X e Y.
Além desta ideia utilizando as bobinas dos driver de DVD, também é possível utilizar alto-falante para controlar os respectivos eixos X e Y.
Em todo caso o que necessitamos é realizar uma varredura nos citados eixos.
## 🟪 Controle do eixo Z
Para que consigamos focar a luz do laser devidamente sobre nossa amostra é necessário termos controle do eixo Z, para regulá-lo corretamente, de modo que após estar focado, comecemos nossa varredura.
Como você pode ver na imagem ao lado, utilizei a própria peça do driver para ser o controlador. Colei um pedaço de régua nele, onde na ponta desta régua irá ficar minha amostra.
O que faço é girar vagarosamente aquela engrenagem lateral, para fazer a amostra subir e descer, e assim ter um bom (e manual) controle do eixo Z.
Se você tiver um suporte de microscópio óptico convencional, você também pode utilizá-lo, mas caso você não tenha, fica ai a dica para construir algo equivalente.
## 🔶 O Sensor LDR
De modo semelhante ao controle do eixo Z, também fiz um para ajustar devidamente meu sensor LDR. Lembrando que aqui é muito melhor utilizar um suporte de "Lupa multifunção de mesa", mas como eu estava sem, fiz desta maneira.
Tenha em mente que meu sensor de luminosidade LDR está dentro deste tubinho branco, a ideia é fazer a luz refletida do laser entrar ali dentro, para esta luz ser capturada e o devido sinal enviado para o Arduino.
## 🔘 O Pinhole
Nesse caso eu utilizei um pedaço de latinha de refrigerante/cerveja, mas você pode utilizar um papel alumínio se preferir.
## 🔲 O anteparo
Você pode utilizar o que quiser, ele nos será util para ajustar o foco.
Atenção, pois este ponto é importante e decisivo para fazer seu projeto funcionar: quando a luz do laser incidida sobre sua amostra for refletida, se tratando de uma lente óptica (a lente do DVD), o que ocorrerá é que vários pontos da superfície da amostra é que serão refletidos. Isto significa que você terá uma imagem inteira refletida. A ideia deste anteparo é para você conseguir visualizar esta imagem, e assim identificar quando a sua imagem realmente está focalizada. Pois quando estiver, você poderá realizar sua varredura.
Muitos tem dificuldade neste ponto para conseguir encontrar o foco, e no meu caso foi bem difícil também, até que meu irmão me fez perceber que eu poderia utilizar a própria imagem refletida como meio de encontrar o foco. E funcionou perfeitamente.
## :hamburger: Juntando tudo
Pegando tudo dito acima e juntando em uma caixa, fica mais ou menos como nessa imagem abaixo.
Note que nesta segunda imagem, fiz um suporte para o laser incidir de cima para baixo, onde ele atingirá a peça de DVD da nossa "mesinha". Tendo isto em mente, você já deve ter percebido que o projeto está com uma diferença. No caso a única diferença em relação ao conceito do CLSM abordado anteriormente, é que trocamos os lugares do laser e do sensor. Ficando nosso laser incidindo de cima pra baixo, e nosso sensor capturando a luz refletida pela lateral.
Note também que para controlar o laser fiz uma ligação direta (cuidado para não queimar seu laser, verifique os limites dele). Onde usei um segundo Arduino só para servir de Power Supply.
## :space_invader: O controle do dispositivo
Antes de tudo tenhamos em mente que estamos controlando exatamente estas coisas:
- A bobina do eixo Y
- A bobina do eixo X
- O sinal lido pelo sensor LDRÉ bem sabido que para variar um sinal no Arduino basta fazer uso da função analogWrite, e utilizar algum pino para enviar o sinal. Logo, tudo que precisamos é de um simples circuito eletrônico para realizar amplificação de sinal, coisa que fazemos com o uso de transistores, resistores e capacitores (existem muitos tutoriais na internet a respeito disso). Tendo isto em mente, tudo que você precisa fazer é criar um circuito que controle (e varie) o sinal enviado para suas bobinas, para assim fazê-las movimentar.
No Arduino teremos o seguinte código (arduino.c):
```c
#define PIN_X 9
#define PIN_Y 3
#define PIN_LDR A0void setup()
{
pinMode(PIN_X, OUTPUT);
pinMode(PIN_Y, OUTPUT);
pinMode(PIN_LDR, INPUT);Serial.begin(115200);
delay(100);
Serial.println("Jesus Amor");
}int delayTime = 23;
int limit = 256;
int increment = 1;void loop()
{
if (Serial.available() > 0)
{
String command = Serial.readStringUntil('\n');
command.trim();
char receivedChars[256];
memset(receivedChars, '\0', 256);
command.toCharArray(receivedChars, 256);// Read line.
if (strstr(receivedChars, "read:"))
{
char *ptr = &receivedChars[ strlen("read:") ];
char currentYCh[256];
int currentY = 0;memset(currentYCh, '\0', 256);
for (int a=0; ptr[a]!='\0' && ptr[a]!='\n'; a++)
{
if (ptr[a] == '-')
{
currentY = atoi(currentYCh);
break;
}
currentYCh[a] = ptr[a];
}// Control: X, Y.
Serial.print("startline");
analogWrite(PIN_Y, currentY);
delay(50);
for (int x=0; xread:Y-", onde o valor de Y equivale a linha que está sendo processada. Em seguida o mesmo faz a bobina movimentar-se para a devida posição, para em seguida começar a leitura. Ou seja, a bobina do eixo X irá movimentar-se de 0 a 256, onde a cada incremento é realizada a leitura do sensor de luminosidade. Tudo é enviado para o programa que está recebendo estes dados.No computador executamos o programa [read-data.php](source/read-data.php), onde o papel dele é simplesmente realizar essa comunicação com o Arduino, iniciar e controlar a leitura, armazenar os dados localmente para com eles gerar uma imagem em grayscale.
## :white_check_mark: Esclarecendo alguns pontos
Importante mencionar que nossa peça do driver de DVD faz o papel do Beam Splitter. Ou seja, o mecanismo do driver de DVD já tem quase tudo pronto para usarmos, basta alguns ajustes para com ele termos nosso microscópio.
Na imagem abaixo você pode ver um protótipo operando. Observe que a luz do quarto está desligada, pois como todo o dispositivo está exposto, não é legal que exista interferência luminosa.
## :gem: Amostra
Para utilizar como amostra eu dei um jeito de retirar uma lâmina de silício de dentro de um microchip convencional (isso deu trabalho). Dê uma olhada nas imagens abaixo.
Utilizando lentes ópticas eu consegui um zoom grande para assim ter uma fotografia optica de minha amostra, para que eu pudesse ver como são meus microchip.
ITEM 1
ITEM 2
ITEM 3
Os itens 1 e 2 são apenas para dar uma noção de proporção e tamanho.
O item 3 é a fotografia óptica que consegui (para ela usei uma lente também de driver de DVD, mas acoplada na câmera do celular). O bom de termos uma fotografia óptica é para confirmar se nossa imagem gerada pelo dispositivo está correta.
## :wrench: Complicações e ajustes
O erro mais comum de quem tenta reproduzir este experimento é não conseguir ajustar o foco devidamente, quando isso ocorre sua imagem de saída ficará semelhante a esta. Ou seja, um lixo.
Quando você começa a conseguir corrigir o foco, já começa aparecer algumas formas legais, como esta, onde já começa a aparecer alguns terminais de contato do microchip.
Em resumo, você deve ir ajustando seu dispositivo para ficar o melhor possível, pois qualquer coisinha torta, ruído nas leituras, interferências luminosas, travamentos das peças (caso os driver de DVD forem velhos demais), tremores (um carro passando lá na esquina da sua casa irá afetar os seus resultados), e coisas semelhantes afetam em seu resultado final.
## :bar_chart: Resultados
Observe que na parte de cima das imagens geradas há sempre uma distorção, pelo que entendi isso se deve ao meu mecanismo estar meio duro no começo da leitura. Depois ele fica normal e segue até o fim. Como eu disse, qualquer coisinha torta já afeta no seu resultado. No entanto já começam a aparecer imagens legais.
Retirando a parte distorcida de nossa leitura, as imagens ficam assim:
Colocando nossa lâmina de silício ao lado das nossas imagens, conseguimos ter melhor uma noção de proporção. Se fosse encontrar um número para nos dar uma aproximação satisfatória do tamanho da imagem que conseguimos capturar, chegaremos ao valor de mais ou menos 200 micrômetros.
## :heavy_check_mark: Finalização
Como você pode notar, tudo isso é apenas uma diversão. Logo, é claro que há pontos e coisas que podem ser melhoradas (sempre há). Em todo caso, espero que tenha gostado 😀
Fique com Jesus e nossa Mãe Maria Santíssima :purple_heart:
Até a próxima!
## :link: Links e Referências
http://www.gaudi.ch/GaudiLabs/?page_id=652
https://www.instructables.com/Laser-Scanning-Microscope/
https://www.instructables.com/Scanning-Laser-Microscope-With-Arduino/
https://bitesizebio.com/19958/what-is-confocal-laser-scanning-microscopy/
https://ibidi.com/content/216-confocal-microscopy
https://bitesizebio.com/19958/what-is-confocal-laser-scanning-microscopy/
## :smiley: Autor
Patrocinar: [melchisedech333](https://github.com/sponsors/melchisedech333)
Twitter: [Melchisedech333](https://twitter.com/Melchisedech333)
LinkedIn: [Melchisedech Rex](https://www.linkedin.com/in/melchisedech-rex-724152235/)
Blog: [melchisedech333.github.io](https://melchisedech333.github.io/)
## :scroll: Licença
[ BSD-3-Clause license](./license)