Construa um Contador Geiger-Müller Personalizado com Arduino, Boost de Alta Tensão e LCD 20x4
Componentes e Materiais
| Componente | Quantidade | Observações |
|---|---|---|
| Arduino UNO (ou compatível) | 1 | Qualquer placa Arduino funciona; não precisa ser especificamente UNO |
| Módulo Boost DC-DC 1.5-3V para 300-400V (380V) | 1 | Tensão ideal final: 400V; faixa operacional do tubo GM: 350-450V |
| Tubo Geiger-Müller STS-5 | 1 | Geralmente adquirido no eBay (mais barato); costuma vir da Ucrânia (2-3 semanas de entrega) |
| Módulo LCD Serial I2C 2004 20x4 (SunFounder) | 1 | Menos fios que displays paralelos; qualquer 20x4 serve |
Ferramentas Necessárias
- Ferro de solda (genérico) – para montagem em placa de circuito impresso e solda do capacitor no transformador
- Protoboard 270 pontos – opcional, para testes iniciais antes da soldagem definitiva
Sobre o Projeto
⚠ AVISO DE SEGURANÇA: Este dispositivo utiliza altas tensões (400 V) que são perigosas. Embora as correntes sejam baixas, qualquer quantidade de corrente ou tensão introduzida no corpo humano pode induzir arritmia cardíaca, podendo levar à morte. Quem construir este projeto deve ter experiência em eletrônica e tomar extremas precauções de segurança ao lidar com a parte de alta tensão do circuito.
O objetivo foi adaptar o trabalho de AdNovea para criar um contador Geiger-Müller com maior liberdade de programação (o projeto original usava scripts que não consegui modificar). Isso permite entender melhor a física do tubo e criar um dispositivo adaptado às necessidades do usuário.
Simplifiquei o diagrama de circuito do AdNovea, removendo buzzer, módulo Ethernet e o resistor que liga ao tubo GM (que impedia corrente suficiente para o funcionamento). O resultado é um contador pessoal de radiação de fundo, sem conexões de rede complexas.
Construção e Montagem
A montagem é direta (consulte o diagrama). A maior dificuldade foi obter o tubo GM e o conversor de alta tensão – ambos comprados no eBay da Ucrânia e China, respectivamente, com 3-4 semanas de espera.
Comecei testando em protoboard para validar o circuito e fazer ajustes. Depois, soldei tudo em uma placa de circuito impresso. Usei Arduino UNO, mas um Nano economizaria espaço. Fixei o tubo GM na placa com fita isolante (também isola os terminais do transformador por segurança). Como não tinha ferramentas para fazer uma caixa bonita, usei a caixa de papelão do kit Arduino inicial.
Recortei a tampa para o display (reforçado com fita) e a lateral para o cabo USB. Baterias 9V não duraram; usei alimentação USB. Isolamento adicional com fita elétrica previne curtos e risco de incêndio.
Funcionamento do Software
O programa conta pulsos do tubo GM a cada 30 segundos, multiplica por 2 para obter CPM (contagens por minuto – unidade padrão). Converte para µSv/h usando fator 0.0057 (aproximação para tubo STS-5). Calcula média progressiva e erro padrão (DP/√n) das leituras. Limitação de memória do Arduino permite array de 100 amostras (50 minutos de dados), tamanho amostral adequado.
Ideias para melhorias futuras: alarme sonoro/visual quando CPM exceder radiação de fundo, ajustar período de log para medições mais rápidas, otimizar uso de memória para mais amostras.
Código
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
unsigned long counts = 0;
unsigned long previousMillis = 0;
float averageCPM = 0;
float sdCPM = 0;
int currentCPM = 0;
float calcCPM = 0;
LiquidCrystal_I2C lcd(0x27, 20, 4);
float CPMArray[100];
#define LOG_PERIOD 30000 // Período de contagem em ms (30s)
void setup() {
counts = 0;
currentCPM = 0;
averageCPM = 0;
sdCPM = 0;
calcCPM = 0;
lcd.init();
lcd.backlight();
Serial.begin(9600);
pinMode(2, INPUT);
attachInterrupt(digitalPinToInterrupt(2), impulse, FALLING);
}
void loop() {
lcd.setCursor(0, 2);
lcd.print("CPM Count: ");
lcd.print(counts);
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > LOG_PERIOD) {
previousMillis = currentMillis;
CPMArray[currentCPM] = counts * 2; // CPM = contagens/30s * 2
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("uSv/hr: ");
lcd.print(outputSieverts(CPMArray[currentCPM]));
counts = 0;
averageCPM = 0;
sdCPM = 0;
// Calcula média
for (int x = 0; x < currentCPM + 1; x++) {
averageCPM += CPMArray[x];
}
averageCPM /= (currentCPM + 1);
// Calcula desvio padrão e erro padrão
for (int x = 0; x < currentCPM + 1; x++) {
sdCPM += sq(CPMArray[x] - averageCPM);
}
sdCPM = sqrt(sdCPM / currentCPM) / sqrt(currentCPM + 1);
Serial.println("Avg: " + String(averageCPM) + " +/- " + String(sdCPM) + " ArrayVal: " + String(CPMArray[currentCPM]));
currentCPM++;
displayAverageCPM();
}
}
void impulse() {
counts++;
}
void displayAverageCPM() {
lcd.setCursor(0, 1);
lcd.print("Avg: ");
lcd.print(outputSieverts(averageCPM));
lcd.print("+/-");
lcd.print(outputSieverts(sdCPM));
}
float outputSieverts(float x) {
return x * 0.0057; // Fator de conversão CPM → µSv/h para STS-5
}
Esquemático
O esquemático no Fritzing pode aparecer com componentes reposicionados. Arquivo: geiger_counter_4LAnJvZEpC.fzz
Processo de manufatura
- Construa um Contador Geiger com Raspberry Pi – Tutorial de Sensor de Radiação Open-Hardware
- Monitoramento em Tempo Real de Painel Solar com Arduino: Sistema de Aquisição de Dados de Baixo Custo
- Construa um Spybot Controlado por Bluetooth com Arduino
- FlickMote: Controle Remoto IR por Gestos para Casa Inteligente
- DIY Arduino TV B-Gone: Controle Remoto Universal para Todas as TVs
- Construa um Relógio Mestre LED Personalizado com Alarme – Visível a 12 Metros
- Garanta Aquecimento Seguro de Água: Monitor de Tensão do Termopar para Chama Piloto
- Find Me: Localizador Inteligente de Objetos com Arduino e Bluetooth
- Crie um Botão de Teclado "Socável" Personalizado com Arduino: Guia Passo a Passo
- Presente de Dia dos Namorados: Contador DIY de Dias Juntos