Mudanças entre as edições de "Incubadora de Placas de Petri"
(14 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 2: | Linha 2: | ||
==Objetivo== |
==Objetivo== |
||
+ | |||
− | O objetivo desse projeto é criar uma incubadora para cultivo de microorganismos em placas de petri. Com esse equipamento é possível garantir o crescimento nas melhores condições controladas para diferentes tipos de microrganismos. Uma incubadora é um dos equipamentos essenciais para qualquer laboratório de microbilogia ou biologia molecular. |
||
+ | O objetivo desse projeto é criar uma incubadora para cultivo de micro-organismos em placas de Petri, que é um projeto dentro das atividades do grupo de [[Biohacking]] do Garoa. Com esse equipamento é possível garantir o crescimento nas melhores condições controladas para diferentes tipos de microrganismos. Uma incubadora é um dos equipamentos essenciais para qualquer laboratório de microbiologia ou biologia molecular. |
||
==Design== |
==Design== |
||
Linha 27: | Linha 28: | ||
==Eletrônica e Elétrica== |
==Eletrônica e Elétrica== |
||
Usamos um dos clones brasileiros do Arduino mais mão-na-roda do mercado, o [http://www.labdegaragem.org/loja/garagino-rev1.html Garagino rev1], montando todo o circuito em protoboard. |
Usamos um dos clones brasileiros do Arduino mais mão-na-roda do mercado, o [http://www.labdegaragem.org/loja/garagino-rev1.html Garagino rev1], montando todo o circuito em protoboard. |
||
− | O controle todo é muito simples: um relê controlando o par de coolers de resfriamento, um relê controlando o liga-e-desliga da lâmpada incandescente (que é fonte de aquecimento), um termistor (foi usado um termistor bem não-convencional por questões de disponibilidade, [http://www.datasheetcatalog.net/pt/datasheets_pdf/1/0/3/J/103JT-050.shtml esse aqui]) medindo a temperatura, dois botões e um LCD. |
+ | O controle todo é muito simples: um [http://www.labdegaragem.org/loja/modulo-rele-10a.html módulo relê] controlando o par de coolers de resfriamento, [http://www.labdegaragem.org/loja/modulo-rele-10a.html um relê] controlando o liga-e-desliga da lâmpada incandescente (que é fonte de aquecimento), um termistor (foi usado um termistor bem não-convencional por questões de disponibilidade, [http://www.datasheetcatalog.net/pt/datasheets_pdf/1/0/3/J/103JT-050.shtml esse aqui]) medindo a temperatura, dois botões e um LCD. |
O esqueminha eletrônico construído foi o seguinte: |
O esqueminha eletrônico construído foi o seguinte: |
||
− | [[Arquivo:Incubadora_Esquema_Eletrônico.jpg| |
+ | [[Arquivo:Incubadora_Esquema_Eletrônico.jpg|500px]] |
− | |||
− | O código Arduino escrito: |
||
− | {{scroll box|text= |
||
− | #include <LiquidCrystal.h> |
||
− | #include <math.h> |
||
− | |||
− | //Variables// |
||
+ | O código Arduino escrito foi [https://garoa.net.br/wiki/Arquivo:Incubator_sketch.ino esse aqui]. |
||
− | //Electronic system configuration |
||
+ | E a tentativa de uma esquematização elétrica do sistema é a seguinte: |
||
− | int thermistorPin = A0; // Pin where the thermistor is connected |
||
− | int minusButton = 9; // Pin where the menu temperature decreasing button is connected |
||
− | int plusButton = 10; // Pin where the menu temperature increasing button is connected |
||
− | int fanRelay = 11; // Pin where the Relay Module for controlling the fans is connected |
||
− | int lampRelay = 12; // // Pin where the Relay Module for controlling the heating lamp is connected |
||
− | LiquidCrystal lcd(2, 3, 5, 6, 7, 8); |
||
+ | [[Arquivo:Esquema_Elétrico_Completo.jpg|500px]] |
||
− | //Operational variables |
||
− | int standardTemp = 25; // Initial temperature of the Incubator |
||
− | int maxTemp = 45; // for safety precautions, 45 celsius is the largest value the incubator may have |
||
− | int minTemp = 20; // temperature arbitrary defined for the minimum temperature setting allowed |
||
− | int maxHeat = 2; // maximum temperature difference allowed for the current temperature to be higher than the defined by the user |
||
− | int refreshingRate = 500; // Milliseconds that each loop waits for checking the temp and if the buttons are pressed |
||
+ | A ideia foi usar fontes com a voltagem e corrente específicas para alimentar os coolers e manter o microcontrolador ligado. Essas fontes vieram de uma pilha enorme de fontes antigonas de celular e eletrônicos obsoletos que existe no Garoa. |
||
− | //Temperature equation constants |
||
− | double Beta = 3435; // Beta value (or "B" value) from the thermistor, using the Beta parameter equation, a particular case of the Steinhart–Hart equation for thermistors |
||
− | double R25 = 10000; // Resistance of the thermistor at 25 celsius |
||
− | double Ref = 10000; // Resistance of Reference from the Voltage Divider Circuit (10K for example) |
||
+ | ===Debugando a Eletrônica e o Software=== |
||
− | //Functions// |
||
+ | A coisa ficou uma fiozarada enorme: |
||
+ | [[Arquivo:Fiozarada_da_Incubadora.jpg|150px]] |
||
− | void CheckButtons(int plus, int minus){ // Checks if the user press-and-holded one of the two buttons and changes the standardTemp variable. Also refresh the LCD screen for the target temperature |
||
− | while(digitalRead(plus) == HIGH){ //while the user is pressing the button the target temperature is incremented |
||
− | if(standardTemp == maxTemp){ // if the standardTemp reaches the maximum temperature allowed it is not incremented anymore |
||
− | break; |
||
− | } |
||
− | standardTemp++; |
||
− | lcd.setCursor(9, 0); |
||
− | lcd.print(standardTemp, DEC); |
||
− | delay(300); // this defines how fast the numbers being set on the LCD screen are changed |
||
− | } |
||
− | while(digitalRead(minus) == HIGH){ //while the user is pressing the button the target temperature is decremented |
||
− | if(standardTemp == minTemp){ // if the standardTemp reaches the minimum temperature allowed it is not decremented anymore |
||
− | break; |
||
− | } |
||
− | standardTemp--; |
||
− | lcd.setCursor(9, 0); |
||
− | lcd.print(standardTemp, DEC); |
||
− | delay(300); // this defines how fast the numbers being set on the LCD screen are changed |
||
− | } |
||
− | } |
||
+ | Ao ligar as coisas não funcionaram direito e faltaria verificar como estão as correntes no circuito montado. Como isso demorou para ser feito, outro desenvolvedor do projeto desmontou tudo e está fazendo uma placa de PCB para facilitar seres humanos colaborarem com o projeto. |
||
− | double MeasureResistance(int ARead){ // Transforms pwm values of thermistorPin in voltage and calculates the thermistor resistance by the voltage divider equation |
||
− | double Rtherm = ((5.0*Ref)/(ARead*(5.0/1023.0))) - Ref; |
||
− | return Rtherm; |
||
− | } |
||
+ | Este desenvolvedor que ficou anônimo, ele fez um desenho para a placa no software Fritzing para depois passá-la na placa de fenolite: |
||
− | int CalculateTemp(double resistance){ //Given the resistance value of the thermistor, returns the temperature by using the thermistor equation for termperature |
||
− | double T = ((298.0*Beta)/(298.0*log(resistance/R25) + Beta)); // Beta parameter equation, a particular case of the Steinhart–Hart equation for thermistors. Temperature of reference is 25 Celsius. |
||
− | T = T-273; // converts Kelvin to Celsius |
||
− | return T; |
||
− | } |
||
+ | [[Arquivo:Nova_plaxa_etch_copper_bottom_mirror.pdf]] |
||
− | byte degree[8] = { //Generates the "degree" character of the Celsius representation on the LCD screen |
||
− | B00111, |
||
− | B00101, |
||
− | B00111, |
||
− | B00000, |
||
− | B00000, |
||
− | B00000, |
||
− | B00000, |
||
− | }; |
||
+ | ==Programação das partes=== |
||
− | void setup() { |
||
− | |||
− | // LCD stetup // |
||
− | lcd.begin(16, 2); |
||
− | lcd.setCursor(0, 0); |
||
− | lcd.print("Target:"); |
||
− | lcd.setCursor(11, 0); |
||
− | lcd.write(byte(degree[8])); |
||
− | lcd.print("C"); |
||
− | lcd.setCursor(0, 1); |
||
− | lcd.print("Status:"); |
||
− | lcd.setCursor(11, 1); |
||
− | lcd.write(byte(degree[8])); |
||
− | lcd.print("C"); |
||
− | |||
− | // Pins Setup // |
||
− | |||
− | pinMode(plusButton, INPUT); |
||
− | pinMode(minusButton, INPUT); |
||
− | |||
− | pinMode(fanRelay, OUTPUT); |
||
− | pinMode(lampRelay, OUTPUT); |
||
− | } |
||
+ | * Codigo de teclado matricial [https://garoa.net.br/wiki/Teclado_Matricial_para_Incubadora]; |
||
− | void loop() { |
||
+ | * Codigo de lcd com IC2 [https://garoa.net.br/wiki/LCD_IC2_para_iNcubadora] |
||
− | //Data gathering// |
||
− | |||
− | CheckButtons(plusButton, minusButton); //Checks for new user inputs |
||
− | double Rvalue = MeasureResistance(analogRead(thermistorPin)); // The Voltage measured on thermistorPin is converted to Resistance by measureResistance and the temperature is given by calculateTemp, then the LCD is refreshed |
||
− | int Temp = CalculateTemp(Rvalue); // Returns, in Celsius, the current temperature value; |
||
− | lcd.setCursor(9, 1); |
||
− | lcd.print(Temp, DEC); //LCD current temperature refreshing |
||
− | |||
− | //Incubator Controlling// |
||
− | |||
− | if(Temp < standardTemp){ // if the current temp is lower than the target, it turns on the lamp |
||
− | digitalWrite(lampRelay, HIGH); |
||
− | if(digitalRead(fanRelay) == HIGH){ // in case the cooling fans were on, they're shut down |
||
− | digitalWrite(fanRelay, LOW); |
||
− | } |
||
− | } |
||
− | if(Temp > standardTemp){ // if the current temp is higher than the target, it turns off the lamp |
||
− | digitalWrite(lampRelay, LOW); |
||
− | if(Temp >= standardTemp + maxHeat){ // in case the current temperature is too high (defined by maxHeat), the cooling fans are turned on |
||
− | digitalWrite(fanRelay, HIGH); |
||
− | } |
||
− | } |
||
− | if(Temp == standardTemp && digitalRead(lampRelay) == HIGH){ // in case the current temperature matches the one defined by the user and the lamp is on, it turns it off |
||
− | digitalWrite(lampRelay, LOW); |
||
− | } |
||
− | if(Temp == standardTemp && digitalRead(fanRelay) == HIGH){ // in case the current temperature matches the one defined by the user and the fans are on, it turns them off |
||
− | digitalWrite(fanRelay, LOW); |
||
− | } |
||
− | |||
− | delay(refreshingRate); //time the microcontroller stays idle until the next check and controlling cycle |
||
− | } |
||
− | }} |
||
==Referências== |
==Referências== |
||
* [http://biohackacademy.github.io/ Biohack Academy] |
* [http://biohackacademy.github.io/ Biohack Academy] |
||
* [http://www.garagemfablab.com/ Garagem FAB Lab] |
* [http://www.garagemfablab.com/ Garagem FAB Lab] |
||
+ | * [http://www.arduino.cc/en/Tutorial/LiquidCrystal Código da LCD Screen] |
||
+ | * [http://www.arduino.cc/en/Tutorial/Pushbutton Código dos botões] |
||
+ | * [http://bildr.org/2012/11/thermistor-arduino/ Divisor de voltagem para medição de temperatura com um termistor] |
||
+ | * [http://labdegaragem.com/profiles/blogs/tutorial-controlando-rele-via-comunica-o-serial-m-dulo-rele Controle do Relê] |
||
[[Categoria:Projetos]] |
[[Categoria:Projetos]] |
Edição atual tal como às 22h10min de 29 de junho de 2017
Objetivo
O objetivo desse projeto é criar uma incubadora para cultivo de micro-organismos em placas de Petri, que é um projeto dentro das atividades do grupo de Biohacking do Garoa. Com esse equipamento é possível garantir o crescimento nas melhores condições controladas para diferentes tipos de microrganismos. Uma incubadora é um dos equipamentos essenciais para qualquer laboratório de microbiologia ou biologia molecular.
Design
O design da incubadora foi feito para uma estrutura de mdf de 3mm de espessura com encaixes para parafusos de máquina de 10 mm de comprimento e 3,4 mm de diâmetro. O design é baseado no projeto "Incubator" da Biohack Academy e as partes em mdf foram cortadas no Garagem FAB Lab. Uma mudança da funcionalidade do design original foi a colocação de coolers para resfriamento do interior da incubadora caso necessário.
Modelo 3D
O modelo 3D da incubadora foi feito em sketchup. O modelo e sua planificação estão disponíveis para download aqui:
Debugando o Hardware
Após cortar na laser percebeu-se que as medidas cortadas foram cerca de 10% maiores do que o esperado. O plano era aproveitar uma caixa de isopor para ser o isolante. Por causa disso foi preciso arrumar placas avulsas de isopor de espessura adequada, o que deu um pouco mais de trabalho. É importante tomar cuidado com as importações para dxf à partir do sketchup. Usamos esse plugin.
A dobradiça em mdf é bonitinha mas quebra com facilidade. É melhor usar uma dobradiça comercial facilmente encontrável por aí - aproveite e compre uma tranca simples também.
Eletrônica e Elétrica
Usamos um dos clones brasileiros do Arduino mais mão-na-roda do mercado, o Garagino rev1, montando todo o circuito em protoboard. O controle todo é muito simples: um módulo relê controlando o par de coolers de resfriamento, um relê controlando o liga-e-desliga da lâmpada incandescente (que é fonte de aquecimento), um termistor (foi usado um termistor bem não-convencional por questões de disponibilidade, esse aqui) medindo a temperatura, dois botões e um LCD.
O esqueminha eletrônico construído foi o seguinte:
O código Arduino escrito foi esse aqui. E a tentativa de uma esquematização elétrica do sistema é a seguinte:
A ideia foi usar fontes com a voltagem e corrente específicas para alimentar os coolers e manter o microcontrolador ligado. Essas fontes vieram de uma pilha enorme de fontes antigonas de celular e eletrônicos obsoletos que existe no Garoa.
Debugando a Eletrônica e o Software
A coisa ficou uma fiozarada enorme:
Ao ligar as coisas não funcionaram direito e faltaria verificar como estão as correntes no circuito montado. Como isso demorou para ser feito, outro desenvolvedor do projeto desmontou tudo e está fazendo uma placa de PCB para facilitar seres humanos colaborarem com o projeto.
Este desenvolvedor que ficou anônimo, ele fez um desenho para a placa no software Fritzing para depois passá-la na placa de fenolite:
Arquivo:Nova plaxa etch copper bottom mirror.pdf
Programação das partes=
- Codigo de teclado matricial [1];
- Codigo de lcd com IC2 [2]