Перейти к содержимому

Добро пожаловать к нам на сайт! Про Ваш статус и права можно прочитать в Этой теме

Для просмотра картинок и скачивания файлов с форума - пройдите регистрацию!   Проблемы с регистрацией - вам сюда




Фотография

Дозиметр на Arduino

Дозиметр на Arduino

  • Авторизуйтесь для відповіді у темі
У цій темі немає відповідей

#1
RUS_D

RUS_D

    Главный АДМИН

  • Не в сети
  • Тех. Админ
  •  Администратор
  • Старожил сайта
<- Информация ->
  • PipPipPipPip
  • Регистрация:
    08-грудень 08
  • 5 004 Cообщений
  • Пропуск №: 2

0 баллов предупреждения
Репутация: 8 120

Репутация: 8120 Постов: 5004
  • Skype:rus_did
  • Страна проживания:Украина
  • Реальное имя:Руслан
  • Пол:Мужчина
  • Город:Полтавская обл.

Краткая инструкция как построить дозиметр на Arduino используя счетчик Гейгера СБМ-20.

 

Схема простейшая - преобразователь 400в + СБМ-20, и ключ на транзисторе с делителем выдает импульсы на вход ардуинки с прерыванием.

1404250562_snimok.png

 

Плата у меня вместе с датчиком размещена в герметичном корпусе и размещена на улице.
До ардуины идет 4-х жильный экранированный кабель диной 1,5 метров (помех пока не было)
1 жила - минус питания
2 - + питания (у меня 12в+ стабилизатор, а у вас будет 5)
3 - выходной сигнал (2 ножка UNO или MINI Arduino)
4 - +5 от ардуины на делитель R18 + R19
doz.jpg
 
Если надо сделать портативную версию (носимую, то собираете все в одном корпусе)
 
Я же использую его в метеостанции для вывода информации на сайт Народного мониторинга.
 
Скетч для ардуины.
#include <SPI.h>
#include "LiquidCrystal.h"
#define LOG_PERIOD 36000  //Logging period in milliseconds, recommended value 15000-60000.
#define MAX_PERIOD 60000  //Maximum logging period without modifying this sketch

unsigned long counts;     //variable for GM Tube events
unsigned long cpm;        //variable for CPM
unsigned int multiplier;  //variable for calculation CPM in this sketch
unsigned long previousMillis;  //variable for time measurement

LiquidCrystal lcd(4, 8, 5, 6, 3, 7);
void setup(){             //setup subprocedure
  lcd.begin(8, 2);
  pinMode(13, OUTPUT);
  counts = 0;
  cpm = 0;
  multiplier = MAX_PERIOD / LOG_PERIOD;      //calculating multiplier, depend on your log period
  Serial.begin(9600);
  attachInterrupt(0, tube_impulse, FALLING); //define external interrupts 
lcd.setCursor(0,0);
lcd.print("Counter");
lcd.setCursor(0,1);
lcd.print("Wait");
delay(2000);  lcd.clear();
lcd.print("FON"); 
}

void loop(){    //main cycle
 unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > LOG_PERIOD){
    previousMillis = currentMillis;
    cpm = counts * multiplier;
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("FON");
    lcd.setCursor(0,1);
    lcd.print(cpm);  
    lcd.print(" uR/h");

   // Serial.println(cpm); // вывод в сом порт для отладки
    counts = 0;
  }
  
}

//////////////////////////////////////////////////

void tube_impulse(){       //subprocedure for capturing events from Geiger Kit
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1);              // wait for a second
  digitalWrite(13, LOW);
  counts++;
  lcd.setCursor(6,0); // в тпервой строке будет появляться количество пролетевших частичек за период измерения - 36 сек
  lcd.print(counts);
}




реклама на сайте подключена

Использование материалов сайта только с разрешения Администрации!
Или с указанием прямой ссылки на источник. 2008 - 2017 © Stalker-Worlds