알코올 램프 안전 손잡이 받침대 3D프린팅

학교에서 알코올 램프를 사용할 때 겪는 불편한 문제 중 하나. 삼발이가 뜨거워져서 알코올 램프를 끌 때, 손 등 부분이 삼발이에 닿아서 데이기 쉽다는 것이다. 이 때문에 한국에서는 알코올 램프를 끼워 안전하게 쓸 수 있는 받침대를 구입하여 사용하곤 했다.

그런데 온갖 잡동사니를 다 팔고 있는 중국 타오바오를 아무리 뒤져보아도 막상 이런 형태의 알코올 램프 받침대를 찾을 수가 없었다. 그동안 사용했던 받침대들이 깨지고, 열에 의해 변형되어 새로 구입을 하기는 해야하는데, 어떻게 할까 생각하다가…

전자기파 검출기 만들기

전자기파 검출#

콘센트, 멀티탭, 전자제품 등에서 나오는 60Hz 정도의 전자파를 검출하여 증폭시킨 뒤, 이를 스위칭 신호로 만들어 LED를 켜는 회로를 구성해본다.

※ 참고: 눈이 즐거운 물리 (www.phys.pe.kr)


schematic#

/image/w/wave-27.png

작동원리#

  • 안테나에 전자기파가 잡히면
  • C1815 트랜지스터로 신호를 증폭
  • 1N4148 다이오드는 반대 방향으로 흐르는 노이즈 신호를 제거하여, 안테나에 잡힌 전자기파만을 유효 신호로 처리하도록 함
  • 증폭된 신호를 A1015 트랜지스터를 스위치 삼아 LED를 켬

준비물#

개별 준비물#

  • LED 1개
  • 0.01uF (103) 세라믹 캐패시터 1개
  • A1015 트랜지스터 1개
  • C1815 트랜지스터 1개
  • 10uH 인덕터 코일 (갈-검-검-금) 1개
  • 1N4148 스위칭 다이오드 1개
  • CR2032 3V 리튬전지 1개
  • 듀퐁 케이블 10P (9P 사용 가능) 1개

기타 준비물#

스트리퍼, 가위, 스카치테이프

STEM, Solar Tracker

Solar Tracker 만들기#

팬(도리도리) & 틸트(끄덕끄덕)가 가능한 2축 서보모터 거치대와 2개의 서보모터를 사용하여 Solar Tracker를 만들어 보자.


단계1: Solar Tracker Frame 3D Printing#

/image/SolarTracker01.png

.stl 파일 .gcode 파일

3D 프린팅 후, 조도센서를 설치할 4곳에 1mm 드릴을 이용하여 각각 2개씩 구멍을 뚫는다 (총 8개).



단계2: 조도센서 조립하기#

조도센서 삽입#
/image/SolarTracker02.png

조도센서의 다리를 위에서 뚫은 구멍을 통해 넣은 뒤,

/image/SolarTracker03.png

뒤쪽에 글루건을 쏘아 고정시킨다. (조도센서는 극성을 구분할 필요가 없으므로, 서로 선이 맞닿지만 않으면 된다.)

ESP32, 중력 가속도 측정

중력(Gravitational Force)#

뉴턴은 달의 운동과 케플러의 법칙을 통해, 달과 지구 사이에 작용하는 힘은 지구의 질량과 달의 질량의 곱에 비례하고 거리의 제곱에 반비례한다는 만유인력의 법칙을 밝혔다.

\[ F = G \frac{Mm}{r^2} = m_i a = mg \]

지구의 질량 M

\[ M=5.072 \times 10^{24}~kg \]

지구 반지름 r

\[ r = 6371~km \]

만유인력 상수값은 다음과 같다. (캐번디시에 의해 측정된 G값은 6.674)

\[ G = 6.67259 \times 10^{-11}~N \cdot m^2 /kg^2 \]

만유인력이 지상의 물체에 작용되는 경우, 이때 작용하는 힘을 중력이라고 한다.

Arduino, Geiger Counter

※ SAT Subject Chemistry: Pactice Test

Used to detect radioactivity.
① Calorimeter
② Geiger Counter
③ Burette
④ Funnel
⑤ Bunsen Burner

가이거 계수기#

  • 방사선을 측정할 수 있는 관으로 방사능 입자 하나하나를 셀 수 있다. 1908년 러더퍼드의 제자 요하네스 한스 빌헬름 가이거(Johannes Hans Wilhelm Geiger)가 알파선을 감지할 수 있는 감지기를 개발하였으며, 그 후 1928년 가이거와 가이거의 제자인 발터 뮐러가 함께 개량하여 모든 전리방사선을 감지할 수 있도록 만든 것이 현재의 가이거-뮐러 튜브(GM Tube)이다.
  • 원리: 튜브는 비활성 기체가 충전된 상태이며 중심 전극(+극, anode)과 관의 내벽(-극, cathode, 금속이나 흑연으로 코팅)으로 구성되어 있다. 여기에 수백V의 전압을 걸면, 관 안에 걸린 높은 전기장 때문에 이온은 음극을 향해 가속되고, 전자는 양극을 향해 가속되며 운동에너지를 얻게 되며 이동 중에 충돌한 기체분자도 함께 전이된다. 이렇게 가스 안에 하전입자의 붕괴가 일어나면 음극에서 양극을 향해 짧고 강한 펄스전류가 순간적으로 나타나 흐르게 된다. 이 펄스전류가 ‘스피커’를 지날때 반응음으로 가이거 계수기 특유의 ‘틱티티틱’하는 소리가 만들어지는데, 이것이 ‘방사선이 존재한다’는 상황을 알려주는 소리이다. 그리고 이 소리 1개음이 방사능 입자 1개에 대한 대응 신호가 된다. 오래된 방식이지만 오늘날에도 큰 변화 없이 이 원리를 응용하여 방사선을 측정하고 있다.
  • 단점: 상당히 큰 펄스신호를 얻을 수 있지만, 이 전류의 강도는 방사선이 가진 에너지와 비례관계를 나타내는 것은 아니기때문에, 방사선이 가진 에너지를 측정하는 것은 불가능하다. (방사선의 에너지를 알기 위해서는 비례계수관을 사용해야 한다.) 또한 고준위 방사선의 경우에는 전류가 연속적으로 흐르게 되어 펄스의 횟수를 계수할 수 없게 되는 경우도 있다. (주로 500cps 이상의 경우) 이것을 막기 위해 전자의 흐름을 제어하는 별도의 장치를 부착하거나, 신틸레이터(scintillator)나 이온화 챔버 같은 다른 검출기로 계측한다.
  • 가이거 카운터에 사용하는 튜브관은 여러 종류가 제조되고 있다. 대부분의 GM관은 감마선과 2.5MeV 이상의 베타선을 검출한다. 감마선의 검출 감도는 좋지는 않다. GM관 안의 가스밀도가 낮아서, 투과력이 높은 감마선은 상호작용을 일으키기 어렵기 때문이다. 중성자선은 가스로부터 전리하지 않기때문에 검출하지 못한다. 하지만, 관 안쪽을 붕소로 코팅하거나, 삼불화붕소 아니면 ³He가스를 충전하면 중성자선에도 반응하는 GM관을 만들 수 있다. 중성자는 붕소원자핵과 반응하여 알파선을 생성하거나, ³He원자와 반응하여 수소와 트리튬이온과 전자를 생성하므로 이 전하입자들이 붕괴를 발생시킨다. 각 튜브마다 검출하는 입자가 다르기 때문에, CPM(Count Per Minute) 단위를 uSv/h(Sieverts Per Hours) 단위로 바꾸기 위한 Conversion Factor가 모두 다르다. 그러므로 사용하는 튜브관이 어떤 것인지 정확하게 알아두어야 한다.
  • GM관은 하드웨어 난수발생기로서 이용할 수도 있다.
  • Background Radiation: 자연적으로 존재하는 자연 방사선, 즉 Background Radiation의 경우 J305β 튜브관을 사용할때 평균 15.6 CPM이 측정된다. (주변 상황에 따라 조금씩 달라짐)

라이브러리 추가하기#

  • Wire : 기본 내장 라이브러리
  • LiquidCrystal I2C (by Frank de Brabander) 검색하여 설치

schematic (for standalone)#

/image/Geiger-Counter.png
GM MonuleGND5VVIN
ArduinoGND5VD2VINA4A5PowerJack
1602 LCD I2CGNDVCC(VCC)SDASCL
9V battery(+)(-)
  • 외부로 들고 다니면서 측정할 수 있도록 9V 배터리 1개를 추가하여 Arduino, 1602 LCD, GM Molule을 모두 작동시킬 수 있도록 하였다.

sketch#

/* --------------------------------------------------------------------------------------
* WHAT IS CPM?
* CPM (counts per minute) is events quantity from Geiger Tube you get during one minute.
* Usually it used to calculate a radiation level.  
* Different GM Tubes has different quantity of CPM for background.
* Some tubes can produce about 10-50 CPM for normal background,
* other GM Tube models produce 50-100 CPM or 0-5 CPM for same radiation level.
* Please refer your GM Tube datasheet for more information. 
* Just for reference here, SBM-20 can generate about 10-50 CPM for normal background.
* --------------------------------------------------------------------------------------*/

// This Sketch counts the number of pulses a minute.
// Connect the GND on Arduino to the GND on the Geiger counter.
// Connect the 5V on Arduino to the 5V on the Geiger counter.
// Connect the VIN on the Geiger counter to the D2 on Arduino.

// For I2C 1602 LCD : VCC-5V / GND-GND / SDA-A4 / SCL-A5
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// I2C address: 0x20~0x27 or 0x3F
LiquidCrystal_I2C lcd(0x27, 16, 2);  

int cpm;
float sievertshour; // for converting from cpm to sieverts/hour
//float sieverts; // for converting from cpm to sieverts  
unsigned long counts; //variable for GM Tube events
unsigned long previousMillis; //variable for measuring time

#define LOG_PERIOD 60000 // count rate (1 minute)
#define CONV_FACTOR 0.008120 // for GM tube of J305beta type

void setup() { //setup
  counts = 0;
  Serial.begin(9600);
  pinMode(2, INPUT);

  lcd.init();               // lcd 초기화
  lcd.backlight();
  
  attachInterrupt(digitalPinToInterrupt(2), impulse, FALLING); //define external interrupts
}

void loop() {
  lcd.setCursor(0,0);
  lcd.print("CPM:");
  lcd.setCursor(9,0);
  lcd.print(" #:");
  lcd.setCursor(12,0);
  lcd.print(counts);
  lcd.setCursor(0,1);
  lcd.print("uSv/h:");
  //lcd.print("uSv  :");
  
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis > LOG_PERIOD) {   //every 1 minute
    previousMillis = currentMillis;

    lcd.clear();
    lcd.setCursor(5, 0);
    cpm = counts;
    lcd.print(cpm); //Display CPM
    Serial.println(cpm);
    sievertshour = cpm * CONV_FACTOR;
    //sieverts = sievertshour * 356 * 24;
    lcd.setCursor(7,1);
    lcd.print(sievertshour);
    //lcd.print(sieverts);
     
    counts = 0;
  }
}

void impulse() { // called every time there is a FALLING signal at pin 2
  counts++;
}

sketch : for ESP8266 (Geigerzaehler-LCD-ESP.ino)#

/*************ARDUINO SKETCH FOR GEIGER COUNTER******************
Author: RH Electronics www.radiohobbystore.com / www.mygeiger.org
*****************************************************************
This sketch can be used with DIY Geiger Counter board. It allow
to receive CPM data during minute. You can modify the sketch
for your needs.
*****************************************************************
LCD I2C Connection:
LCD SDA -> D10  =  1
LCD SCL -> D9   =  3
VCC to +3,3V and ground
****************************************************************/

// include the library code:
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <Wire.h>

#define LOG_PERIOD 15000  //Logging period in milliseconds, recommended value 15000-60000.
#define MAX_PERIOD 60000  //Maximum logging period without modifying this sketch
#define PERIOD 60000.0 // (60 sec) one minute measure period

volatile unsigned long CNT; // variable for counting interrupts from dosimeter
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
unsigned long dispPeriod; // variable for measuring time
unsigned long CPM; // variable for measuring CPM

const int inputPin = 4;  // pin D2 is VIN on geiger counter

// initialize the library with the numbers of the interface pins
LiquidCrystal_I2C lcd(0x3F,20,4);

void setup() {               // setup
Wire.begin(1,3);
lcd.begin(20, 4);
lcd.init();
// Turn on the backlight.
lcd.backlight();

CNT = 0;
CPM = 0;
dispPeriod = 0;
attachInterrupt(digitalPinToInterrupt(inputPin), GetEvent, FALLING); // Define interrupt D2 on falling edge
}

void loop() {           // main loop
lcd.setCursor(0,0);
lcd.print("Berlin-Siemensstadt");
lcd.setCursor(0,1);
lcd.print("   Geiger Counter ");
lcd.setCursor(0,2); // print text and CNT on the LCD
lcd.print("CPM:");
lcd.setCursor(0,3);
lcd.print("CNT:");
lcd.setCursor(5,3);
lcd.print(CNT);
if (millis() >=dispPeriod + PERIOD) { // If one minute is over
cleanDisplay(); // Clear LCD
// Do something about accumulated CNT events....
lcd.setCursor(5, 2);
CPM = CNT;
lcd.print(CPM); //Display CPM
CNT = 0;
dispPeriod = millis();
}
}

void GetEvent(){           // Get Event from Device
CNT++;
}

void cleanDisplay (){      // Clear LCD routine
lcd.clear();
lcd.setCursor(0,0);
lcd.setCursor(0,0);
}

(출처: rhelectronics.net)