LED cube 3x3 with Arduino uno


   เป็นการนำ LED สีแดงมาเรียงต่อกันเป็นลูกบาศ์ก 3x3  แล้วมีการเขียนโค้ด arduino กำหนดแสงติดตับของ LED แต่ละตัว  หลักๆงานนี้ได้ฝึกทักษะการบัดกรีซะเป็นส่วนใหญ่





อุปกรณ์ที่ใช้
1. LED สีแดง จำนวน 27
2. Transister 2N222 จำนวน 3
3. ตัวต้านทาน 330 โอห์ม จำนวน 9
4. ขาก้างปลา จำนวน 13
5. Arduino uno
6. wire (สายไฟจั้มป์ ผู้-เมีย)
7. สายไฟ
8. แผ่นปริ้นอเนกประสงค์ แบบจุดไข่ปลา
8. หัวแร้ง
9. ตะกั่วบัดกรี
10. ฟิวเจอร์บอร์ดหรือแผ่นกล่องกระดาษ

วิธีการทำ
1. เจาะฟิวเจอร์บอร์ดเป็นจุด 3x3 แต่ละจุดห่างกัน 2.5 เซนติเมตร ขนาดของจุดใส่หลอด LED ได้พอดี ดังรูปด้านล่าง


2. งอขา LED ฝั่งขาแคโทด(ขาสั้น) เป็นดังรูปด้านล่าง จากนั้นนำมาใส่ในแผ่นฟิวเจอร์บอร์ด  ทำการจัดเรียงขาแคโทดให้บัดกรีเชื่อมต่อกันได้



3. ทำการต่อ LED ตามแบบข้อ 2 จนครบ 3 ชุด จากนั้นให้ทำการทดสอบ LED แต่ละตัวว่าใช้งานได้หรือไม่โดยการจ่ายไฟและดูว่า LED ติดหรือไม่


4. บัดกรีชุด LED แต่ละชั้นโดยเชื่อมต่อขาแอโนดเข้าด้วยกันระหว่างชั้น(ขาแนวตั้ง) อาจใช้สก็อตเทปพันเพื่อให้ขาติดกันดังรูปด้านล่างในกรณีที่ไม่มีอุปกรณ์สำหรับหนีบขา


5. ออกแบบวงจรสำหรับการวางสายไฟบนแผ่นปริ้น ดังรูปด้านล่าง





6. ต่อวงจรบนแผ่นปริ้นกับบอร์ด arduino ดังรูปด้านล่าง



7. อัพโหลดโค้ดเพื่อทดสอบใช้งาน  หลักการทำงานคือตัว Arduino จะควบคุม LED จำนวน 9 ดวง แต่เรามี LED ทั้งหมด 27 ดวง เราจะควบคุมทั้งหมดได้อย่างไร  วิธีการคือนำ Transistor 2N2222 เข้ามาใช้  ให้เรามอง LED เป็นชั้นๆ  เรามี 3 ชั้น แต่ละชั้นมี LED 9 ดวง ตัว Transistor จะทำหน้าที่เป็นสวิตซ์เปิดปิดของแต่ละชั้น  เราใช้ Transistor 3 ตัว ตัวละ 1 ชั้น เราทำวงจรเป็น common cathode ในแต่ละชั้นทำให้ควบคุม LED ทั้ง 27 ดวงได้

void setup() {

  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void allLayer() {
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(13, HIGH);
  }

void noLayer() {
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
  }

void rotate() {
  allLayer();
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  delay(100);
  empty();
  digitalWrite(2, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(10, HIGH);
  delay(100);
  empty();
  digitalWrite(3, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(9, HIGH);
  delay(100);
  empty();
  digitalWrite(4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(8, HIGH);
  delay(100);
  empty();
  noLayer();  
  }

void fill() {
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  }

void swirl() {
  digitalWrite(2, HIGH);
  delay(50);
  digitalWrite(3, HIGH);
  delay(50);
  digitalWrite(4, HIGH);
  delay(50);
  digitalWrite(7, HIGH);
  delay(50);
  digitalWrite(10, HIGH);
  delay(50);
  digitalWrite(9, HIGH);
  delay(50);
  digitalWrite(8, HIGH);
  delay(50);
  digitalWrite(5, HIGH);
  delay(50);
  digitalWrite(6, HIGH);
  delay(50);
  }

void myName() {
  //P
  digitalWrite(11, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(9, HIGH);
  delay(100);
  noLayer();
  digitalWrite(12, HIGH);
  delay(100);
  noLayer();
  digitalWrite(13, HIGH);
  delay(200);
  noLayer();
  digitalWrite(12, HIGH);
  delay(100);
  noLayer();
  digitalWrite(11, HIGH);
  delay(100);
  noLayer();
  empty();
  
  //N
  digitalWrite(11, HIGH);
  digitalWrite(2, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(10, HIGH);
  delay(100);
  noLayer();
  digitalWrite(12, HIGH);
  delay(100);
  noLayer();
  digitalWrite(13, HIGH);
  delay(200);
  noLayer();
  digitalWrite(12, HIGH);
  delay(100);
  noLayer();
  digitalWrite(11, HIGH);
  delay(100);
  noLayer();
  empty();

  //Y
  digitalWrite(11, HIGH);
  digitalWrite(2, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(9, HIGH);
  delay(100);
  noLayer();
  digitalWrite(12, HIGH);
  delay(100);
  noLayer();
  digitalWrite(13, HIGH);
  delay(200);
  noLayer();
  digitalWrite(12, HIGH);
  delay(100);
  noLayer();
  digitalWrite(11, HIGH);
  delay(100);
  noLayer();
  empty();

  //.
  digitalWrite(11, HIGH);
  digitalWrite(6, HIGH);
  delay(100);
  noLayer();
  digitalWrite(12, HIGH);
  delay(100);
  noLayer();
  digitalWrite(13, HIGH);
  delay(200);
  noLayer();
  digitalWrite(12, HIGH);
  delay(100);
  noLayer();
  digitalWrite(11, HIGH);
  delay(100);
  noLayer();
  empty();

  }

void empty() {
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  }  

void createX() {
  digitalWrite(2, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(10, HIGH);
  delay(1000);
  digitalWrite(2, LOW);
  digitalWrite(4, LOW);
  digitalWrite(6, LOW);
  digitalWrite(8, LOW);
  digitalWrite(10, LOW);
  delay(200);
   digitalWrite(2, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(10, HIGH);
  delay(200);
   digitalWrite(2, LOW);
  digitalWrite(4, LOW);
  digitalWrite(6, LOW);
  digitalWrite(8, LOW);
  digitalWrite(10, LOW);
  delay(200);
 digitalWrite(2, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(10, HIGH);
  delay(200);
   digitalWrite(2, LOW);
  digitalWrite(4, LOW);
  digitalWrite(6, LOW);
  digitalWrite(8, LOW);
  digitalWrite(10, LOW);
  delay(200);
   digitalWrite(2, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(10, HIGH);
  delay(200);
  digitalWrite(2, LOW);
  digitalWrite(4, LOW);
  digitalWrite(6, LOW);
  digitalWrite(8, LOW);
  digitalWrite(10, LOW);
  delay(200);
   digitalWrite(2, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(8, HIGH);
  digitalWrite(10, HIGH);
  delay(200);
  digitalWrite(2, LOW);
  digitalWrite(4, LOW);
  digitalWrite(6, LOW);
  digitalWrite(8, LOW);
  digitalWrite(10, LOW);
  delay(500);
}


void loop() {
  
//FILL - UP AND DOWN

 digitalWrite(13, HIGH);
 fill();
 delay(200);
 empty();
 noLayer();
 digitalWrite(12, HIGH);
 fill();
 delay(100);
 empty();
 noLayer();
 digitalWrite(11, HIGH);
 fill();
 delay(200);
 empty();
 noLayer();
 digitalWrite(12, HIGH);
 fill();
 delay(100);
 empty();
 noLayer();
 digitalWrite(13, HIGH);
 fill();
 delay(200);
 empty();
 noLayer();
 digitalWrite(12, HIGH);
 fill();
 delay(100);
 empty();
 noLayer();
 digitalWrite(11, HIGH);
 fill();
 delay(200);
 empty();
 noLayer();
 digitalWrite(12, HIGH);
 fill();
 delay(100);
 empty();
 noLayer();
 digitalWrite(13, HIGH);
 fill();
 delay(200);
 empty();
 noLayer();
 digitalWrite(12, HIGH);
 fill();
 delay(100);
 empty();
 noLayer();
 digitalWrite(11, HIGH);
 fill();
 delay(200);
 empty();
 noLayer();
 digitalWrite(12, HIGH);
 fill();
 delay(100);
 empty();
 noLayer();
 digitalWrite(13, HIGH);
 fill();
 delay(200);
 empty();
 noLayer();
 delay(1000);

//SWIRL - 1 LAYER EACH TIME

 digitalWrite(13, HIGH);
 swirl();
 delay(10);
 empty();
 noLayer();
 digitalWrite(12, HIGH);
 swirl();
 delay(10);
 empty();
 noLayer();
 digitalWrite(11, HIGH);
 swirl();
 delay(10);
 delay(400);
 empty();
 noLayer();

//SWIRL - ALL LAYERS AT ONCE

 allLayer();
 swirl();
 delay(400);
 empty();
 noLayer();
 delay(1000);

//NAME COMES UP
myName();
delay(1000);

//ROTATING PANE - ALL LAYERS
rotate();
rotate();
rotate();
rotate();
rotate();
rotate();
rotate();
rotate();
delay(1000);
}

จบการนำเสนอ