본문 바로가기

캡스톤

[캡스톤] Spin coating (pt.2)

포토공정에서 사용되는 spin coating 장비를 구현해보고자 한다. 

 

 


wafer의 이동을 담당하는 스텝모터와 서보모터 / 진공모터에서 발생하는 진동을 잡는 것이 이번 프로젝트에 키포인트였다.

 

진공을 분산시켜주기 위해, 진동흡착판, 스위치가 달린 서보모터, 고무관, 고무링을 사용해주었다. 

 

 

사진 

 

 

사용한 4핀은 2ball bearing이 사용된 모델로

공기가 세어나가는 부분을 차단하기 위해 스피링을 실리콘 와셔로 변경해 진공이 최대로 진행될 수 있도록 해주었다.

fan 프로펠러의 중심부에 외경 약 1mm의 관을 연결해 이 관과 진공모터가 연결되게 된다.

 

 사진

 

 

 

초기에 사용하던 진공모터 스펙

후에 변경한 진공모터 스펙

 

 

초기에 사용했던 모터의 성능 부족으로 인해 휴지 이외의 wafer 혹은 종이로 제작한 wafer에서의 진공은 원할하게 이루어지지 않는다고 판단 후, 스펙이 더 좋은 모터로 변경해주었다.

 

 

초기 모터 사용한 진공 테스트 (휴지)

 

 

 

 

추가 진공 테스트 1 (실제 2 inch wafer)

 

 

 

추가 진공 테스트 2 (실제 2 inch wafer)

 

 

 

추가 진공 테스트 3 (종이로 제작한 wafer)

 

 

 

본래 사용한 fan의 스펙으로는 1800~4000RPM (오차 10%)

프로펠러를 제거하게 되면 훨씬 빠른 RPM이 출력되는 것을 확인할 수 있다.  (공기 저항 감소)

(10.9v / 약 5500RPM)

 

 

 

 

 

 

chuck 위에 wafer를 안착시키고 제거함에 있어 용이함을 위해 fan의 모서리부분을 제거해 주었다.

 

사진

 

 

 

아두이노 보드는 총 3개 사용하였다. 

wafer 이동수단 (스텝모터, 서보모터) = 아두이노 메가 보드

초음파센서, fan, lcd = 아두이노 우노 보드

초음파센서, 진공모터 = 아두이노 우노 보드

 

fan과 진공모터에 연결한 보드를 분리해준 이유는, 

RPM 측정시 fan에서 발생하는 interrupt를 count해 측정하게 되는데

다양한 전기적 노이즈가 생기는 경우가 다분히 발생해 두개의 아두이노 보드를 사용해 이를 최소화 해주었다.

 

진공모터와 fan을 연결해준 후, wafer의 진공이 원할하게 작동되는 것을 확인 후, 아두이노 우노 보드에 초음파센서, fan, lcd 를 연결해준다.

(1.5s / 4.4v / 약 2500RPM spin coating 진행)

#include <LiquidCrystal_I2C.h>     //LiquidCrystal 라이브러리 추가 
LiquidCrystal_I2C lcd(0x27, 16, 2);

const int fan_control_pin = 9;
int count = 0;
unsigned long start_time;
const int ECHO_PIN = 11;
const int TRIG_PIN = 12;
const int LED_PIN = 13;
int rpm;

void setup() {

  lcd.begin();

  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);

  pinMode(fan_control_pin, OUTPUT);
  analogWrite(fan_control_pin, 0);
  Serial.begin(9600);
  attachInterrupt(digitalPinToInterrupt(2), counter, RISING);
}
void loop() {

  digitalWrite(LED_PIN, LOW);

  int distance = 0;
  count = 0;

  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10); 
  digitalWrite(TRIG_PIN, LOW); 

  distance = pulseIn(ECHO_PIN, HIGH)/58.2; /* 센치미터(cm) */
  

  if (distance <= 5) {
    digitalWrite(LED_PIN, HIGH);
    delay(3000);
    
    Serial.print(distance);
    Serial.println("cm");

    delay(1000);

    analogWrite(fan_control_pin, 255);
    delay(1000);

    
    start_time = millis();
    count = 0;
    while ((millis() - start_time) < 1000) {
    }
    rpm = count * 60 / 2;

    lcd.setCursor(2, 0);
    lcd.print("RPM is ");
    lcd.print(rpm);

    Serial.print("RPM is ");
    Serial.print(rpm);
    Serial.println(" rpm");

    delay(500);

    Serial.println("stopping fan");
    analogWrite(fan_control_pin, 0);
    delay(5000);

    lcd.clear(); 
    
    delay(5000);

    digitalWrite(LED_PIN, LOW);
    Serial.println("restart");
  } 
  else {

    digitalWrite(LED_PIN, LOW);
    analogWrite(fan_control_pin, 0);

  }
}

void counter() {
  count++;
}

(초음파센서 인식 cm 단위)

 

 

 

두개의 아두이노 우노 보드를 이용해, 진공모터와 fan을 연결해주었기 때문에

초음파 센서를 이용해 동시에 신호를 전달받을 수 있도록 해주었다.

int vac_speed = 4;
const int ECHO_PIN = 11;
const int TRIG_PIN = 12;
const int LED_PIN = 13;

void setup() {

  pinMode(vac_speed, OUTPUT);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);

  Serial.begin(9600);

}
void loop() {

  long duration, distance;

  digitalWrite(TRIG_PIN, HIGH);       
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  duration = pulseIn(ECHO_PIN, HIGH);  
  distance = ((float)(340 * duration) / 1000) / 2;  //mm 단위

  delay(500);

  if (distance <= 50) {
  
    digitalWrite(LED_PIN,HIGH);
    delay(2500);

   digitalWrite(vac_speed,HIGH);
   delay(5000); 
  
    digitalWrite(vac_speed,LOW);
    delay(5000); 
    
    digitalWrite(LED_PIN,LOW);
  }
  else{
    digitalWrite(vac_speed,LOW);
    digitalWrite(LED_PIN, LOW);
  }

}

(초음파센서 인식 mm 단위)

 

 

 

+추가 (초음파센서의 거리 측정 코드)

const int ECHO_PIN = 11;
const int TRIG_PIN = 12;
const int LED_PIN = 13;

void setup() {

  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);

  Serial.begin(9600);

}

void loop() {

  long duration, distance;

  digitalWrite(TRIG_PIN, HIGH);       
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  duration = pulseIn(ECHO_PIN, HIGH);    
  distance = ((float)(340 * duration) / 1000) / 2; 
 
  delay(500);

   if (distance <= 100) {
    
    Serial.println(distance);

    digitalWrite(LED_PIN, HIGH);
    delay(5000);

  }
  else{
    digitalWrite(LED_PIN, LOW);
  }
}

 

 

 

 

 

 

 

'캡스톤' 카테고리의 다른 글

[캡스톤] Spin coating (pt.3)  (0) 2023.07.03
[캡스톤] Spin coating (pt.1)  (1) 2023.06.28