Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Сборка собственного счётчика Гейгера‑Мюллера на Arduino, HV Boost и LCD 20x4

Компоненты и материалы

Arduino UNOМожно использовать любую плату Arduino, не обязательно UNO1
DC-DC преобразователь 1.5‑3V в 300‑400V 380VИдеальное выходное напряжение 400V, допустимый диапазон 350‑450V (рабочий диапазон ГМ‑трубки)1
Гейгера‑Мюллера трубка STS‑5Можно найти на eBay (дешевле). Обычно отправляется из Украины, доставка 2‑3 недели1
Модуль LCD 20x4 с I2C (SunFounder IIC I2C TWI Serial 2004)Удобен меньшим числом проводов. Подойдёт любой 20x4 дисплей1

Необходимые инструменты

О проекте

ВНИМАНИЕ: ЭТО УСТРОЙСТВО ИСПОЛЬЗУЕТ ВЫСОКОЕ НАПРЯЖЕНИЕ (400 В), КОТОРОЕ ОПАСНО ДЛЯ ЖИЗНИ. ХОТЯ ТОКИ НЕБОЛЬШИЕ, ЛЮБОЕ ПОПАДАНИЕ ТОКА ИЛИ НАПРЯЖЕНИЯ В ОРГАНИЗМ ЧЕЛОВЕКА МОЖЕТ ВЫЗВАТЬ АРИТМИЮ СЕРДЦА И ПРИВЕСТИ К СМЕРТИ. СБИРАЮЩИЕ ЭТО УСТРОЙСТВО ДОЛЖНЫ ИМЕТЬ ОПЫТ РАБОТЫ С ЭЛЕКТРОНИКОЙ И СТРОГО СОБЛЮДАТЬ МЕРЫ ПРЕДОСТОРОЖНОСТИ ПРИ РАБОТЕ С ВЫСОКОВОЛЬТНОЙ ЧАСТЬЮ СХЕМЫ.

Цель проекта — взять за основу работу AdNovea и создать счётчик Гейгера‑Мюллера, который можно свободно программировать под свои задачи (оригинальный проект использовал скрипты, сложные для модификации). Это позволяет лучше понять физику работы трубки и адаптировать прибор под свои нужды.

Схема упрощена по сравнению с оригиналом AdNovea: убраны Ethernet‑модуль, зуммер и подключение к внешним сетям. Экспериментировалось с Bluetooth‑модулями и зуммерами, но в итоговом варианте оставлен только фоновый измеритель дозы.

Сборка собственного счётчика Гейгера‑Мюллера на Arduino, HV Boost и LCD 20x4

Сборка простая (см. схему). Основная сложность — закупка деталей (ГМ‑трубка и высоковольтный преобразователь). Оба заказаны на eBay из Украины и Китая, доставка заняла 3‑4 недели.

Сначала схема собиралась на макетной плате для отладки. Сборка производилась по схеме AdNovea, но без зуммера, Ethernet‑модуля и резистора, идущего к ГМ‑трубке (с ним ток был недостаточным для работы трубки). Затем всё перепаяно на монтажную плату.

Сборка собственного счётчика Гейгера‑Мюллера на Arduino, HV Boost и LCD 20x4

Использован Arduino Uno, но можно сэкономить место, применив Arduino Nano. ГМ‑трубка закреплена на плате изолентой, контакты преобразователя также изолированы изолентой для безопасности. Корпус сделан из картонной коробки от набора Arduino.

Сборка собственного счётчика Гейгера‑Мюллера на Arduino, HV Boost и LCD 20x4

В крышке вырезано отверстие под LCD‑дисплей, закреплённый скотчем. Сбоку — отверстие для USB‑кабеля питания.

Сборка собственного счётчика Гейгера‑Мюллера на Arduino, HV Boost и LCD 20x4
Сборка собственного счётчика Гейгера‑Мюллера на Arduino, HV Boost и LCD 20x4

Питание от 9V батареек быстро садилось, поэтому устройство запитано от USB. Дополнительная изолента защищает плату от контакта с картоном.

Программа

Счётчик фиксирует импульсы от ГМ‑трубки каждые 30 секунд, умножает на 2 для получения CPM (счётов в минуту). Затем переводит в мкЗв/ч (микрозиверт в час) по формуле uSv/h = CPM * 0.0057. На дисплее показываются текущие CPM, текущая доза в мкЗв/ч, а также накопленное среднее значение и стандартная ошибка (SD / sqrt(n)). Из‑за ограничений памяти Arduino массив хранит только 100 измерений (50 минут работы), что достаточно для статистической выборки фонового излучения.

Планы по доработке: добавить зуммер для тревоги при превышении фона, экспериментировать с периодом логирования для более быстрых измерений. Код открыт для модификаций.

Код

#include <LiquidCrystal_I2C.h>
#include <Wire.h>

unsigned long counts;          // переменная для событий ГМ‑трубки
unsigned long previousMillis;  // переменная для замера времени
float averageCPM;
float sdCPM;
int currentCPM;
float calcCPM;

LiquidCrystal_I2C lcd(0x27, 20, 4);
float CPMArray[100];

#define LOG_PERIOD 30000  // период логирования в миллисекундах (30 сек)

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;
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("uSv/hr: ");
    lcd.print(outputSieverts(CPMArray[currentCPM]));
    counts = 0;
    averageCPM = 0;
    sdCPM = 0;
    // расчёт среднего и стандартного отклонения
    for (int x = 0; x < currentCPM + 1; x++) {
      averageCPM += CPMArray[x];
    }
    averageCPM /= (currentCPM + 1);
    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) {
  float y = x * 0.0057;
  return y;
}

Схемы

Схема в Fritzing может отображаться со смещением компонентов. Файл схемы: geiger_counter_4LAnJvZEpC.fzz

Производственный процесс

  1. Создание счетчика Гейгера на Raspberry Pi — туториал по открытому датчику радиации
  2. Мониторинг солнечной панели в реальном времени: дешёвая система сбора данных на Arduino и Excel
  3. Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
  4. FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
  5. DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
  6. Создание пользовательских LED-часов с будильником — видно с 12 метров
  7. Мониторинг термопары газового водонагревателя: SMS/Email алерт при погасании горелки
  8. Find Me: Умный поисковик вещей на Arduino и Bluetooth
  9. Создание настраиваемой «бьющейся» клавиши на Arduino: пошаговое руководство
  10. Подарок на День святого Валентина: Счетчик дней вместе своими руками