① 개발 작품/교육용 반도체 포토공정 장비

교육용 포토공정 장비 - ② SPIN COATER

by 코딩구짱 2023. 2. 4.

 

소스코드 ▼

더보기

 

마이크로 컨트롤러 - Arduino Mega128
const int stepsPerRevolution = 450;
const int stepsPerRevolution2 = 900;
const int dirPin = 2;
const int stepPin = 3;
const int ENABLEB = 11;
const int POT = A5;
int sw1 = 4;
int sw2 = 5;
int sw3 = 6;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int sw4 = 7;
int sw = 8;
int IN1 = 9;
int IN2 = 10;
int IN3 = 13;
int IN4 = 12;
int mode;
int v;
void setup() {
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  pinMode(sw, INPUT_PULLUP);
  pinMode(sw1, INPUT);
  pinMode(sw2, INPUT);
  pinMode(sw3, INPUT);
  pinMode(sw4, INPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  delay(2000);}

void loop() {
  int pot_position = analogRead(POT);
  int a = analogRead(A0);
  int y = analogRead(A1);
  int sw1 = digitalRead(4);
  int sw2 = digitalRead(5);
  int sw3 = digitalRead(6);
  int sw4 = digitalRead(7);
  Serial.print("a="); 
  Serial.print(a); 
  Serial.print("  ");
  Serial.print("y="); 
  Serial.print(y); 
  Serial.print("  ");
  Serial.print("SW= "); 
  Serial.print(z); 
  Serial.print(" ");
  Serial.print(sw1); 
  Serial.print(" ");
  Serial.print(sw2); 
  Serial.print(" ");
  Serial.print(sw3); 
  Serial.print(" ");
  Serial.println(sw4);

  int v = 0;
  int ff = 0;
  int rr = 0;
  int vv = 0;
  if (a > 512) v |= 1;
  if (a < 490) v |= 2;
  if (sw = 0)  v |= 4;
  if (sw1 > 0) v |= 8;
  if (sw2 > 0) v |= 16;
  if (sw3 > 0) v |= 32;
  if (sw4 > 0) v |= 64;

  switch (v) {
    case 0:  break; //통과
    case 1:  ff = 0; rr = 0; vv = 1; break; //레일 위 이동
    case 2:  ff = 0; rr = 1; vv = 0; break; //레알 아래 이동
    case 4:  ff = 1; rr = 0; vv = 0; break;  // 레일 상하 운동
    case 8:  ff = 1; rr = 0; vv = 1; break; // PR 분사
    case 16: ff = 1; rr = 1; vv = 0; break; //  회전 정지
    case 32: ff = 0; rr = 1; vv = 1; break; // 회전 일반속도
    case 64: ff = 1; rr = 1; vv = 1; break; // 회전 빠른속도}

  //레일 위 이동
  if (!ff && !rr && vv) {
    if (mode != 1) {
      mode = 1;
      digitalWrite(dirPin, LOW);
      lcd.setCursor(2, 0);
      lcd.print("[SPIN COATER]");
      lcd.setCursor(2, 1);
      lcd.print("GATE DOWN");
      for (int x = 0; x < stepsPerRevolution; x++)
      {
        digitalWrite(stepPin, HIGH);
        delayMicroseconds(800);
        digitalWrite(stepPin, LOW);
        delayMicroseconds(800);
      } delay(100);}}

  //레알 아래 이동
  if (!ff && rr && !vv) {
    if (mode != 2) {
      mode = 2;
      lcd.setCursor(2, 0);
      lcd.print("[SPIN COATER]");
      lcd.setCursor(2, 1);
      lcd.print("GATE UPUP");
      digitalWrite(dirPin, HIGH);
      for (int x = 0; x < stepsPerRevolution; x++)
      {
        digitalWrite(stepPin, HIGH);
        delayMicroseconds(800);
        digitalWrite(stepPin, LOW);
        delayMicroseconds(800);
      } delay(100);}}

  // 레일 상하 운동
  if (ff && !rr && !vv) {
    if (mode != 3) 
    {
  mode = 3;
      lcd.setCursor(2, 0);
      lcd.print("[SPIN COATER]");
      lcd.setCursor(2, 1);
      lcd.print("TEMP: ");
      digitalWrite(dirPin, HIGH);
      for (int x = 0; x < stepsPerRevolution; x++)
      {
        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);
      } delay(100);}}

  // PR 분사
  if (ff && !rr && vv) {
    if (mode != 4) {
      mode = 4;
      lcd.setCursor(2, 0);
      lcd.print("[SPIN COATER]");
      lcd.setCursor(2, 1);
      lcd.print("PR INJECT");
      digitalWrite(dirPin, HIGH);
      digitalWrite(IN1, HIGH);
      digitalWrite(IN2, LOW);
      delay(100);
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
      delay(1000);}}

  // 회전 정지
  if (ff && rr && !vv) {
    if (mode != 5) {
      mode = 5;
      lcd.setCursor(2, 0);
      lcd.print("[SPIN COATER]");
      lcd.setCursor(2, 1);
      lcd.print("SPIN STOP");
      digitalWrite(dirPin, HIGH);
      for (int x = 0; x < stepsPerRevolution; x++)
      {
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
      } delay(1000);}}

  // 회전 일반속도
  if (!ff && rr && vv) {
    if (mode != 6) {
      mode = 6;
      lcd.setCursor(2, 0);
      lcd.print("[SPIN COATER]");
      lcd.setCursor(2, 1);
      lcd.print("SPIN REGU");
      digitalWrite(dirPin, HIGH);
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
      analogWrite(11, 60);
      delay(1000);}}

  // 회전 빠른속도
  if (ff && rr && vv) {
    if (mode != 7) {
      mode = 7;
      lcd.setCursor(2, 0);
      lcd.print("[SPIN COATER]");
      lcd.setCursor(2, 1);
      lcd.print("SPIN FAST");
      digitalWrite(IN3, HIGH);
      digitalWrite(IN4, LOW);
      analogWrite(11, 80);
      delay(1000);}}

  // 그외경우의수
  lcd.setCursor(2, 0);
  lcd.print("[SPIN COATER]");
  lcd.setCursor(2, 1);
  lcd.print("WATING....");}

 

댓글