computerkimcuong gửi vào
- 47678 lượt xem
Chắc hẳn các bạn đều đã từng dùng qua máy tính bàn và biết rằng trong đó có những ổ đĩa HDD cũ. Khi lên đời laptop, những chiếc HDD cũng hàng chục GB đã trở nên vô dụng vì dung lượng quá ít của nó hoặc nó đã hỏng từ lâu! Qua bài viết này, mình mong muốn truyền một ít kiến thức và thành quả của mình để các bạn biến ổ cứng HDD cũ trở nên có ít hơn. Như mình chẳng hạn... biến nó thành một máy mài mini !
1. Chuẩn bị
- Arduino UNO
- IC Attiny13, IC ổn áp 7805
- Điện trở 10k, 1k, 330, 560 Ohm
- LED
- Transistor c1815, H1061
- Ổ cứng HDD cũ để lấy động cơ brushless, hoặc bạn có thể lấy động cơ quay đĩa trong ổ đĩa CD / DVD.
2. Sơ đồ mạch điện
Hình 1: Sơ đồ mạch điện
3. Lập trình
Code tạo ra dạng xung như trong hình, lưu ý là tốc độ phải từ thấp đến cao, có một số HDD không đáp ứng được tầng số cao, lúc đó xảy ra hiện tượng HDD không xoay mà sẻ dừng hẳn, kèm theo tiếng rít.
Hình 2: Xung điều khiển động cơ
byte phase1 = 2; byte phase2 = 3; byte phase3 = 4; byte led = 1; byte Button = PB0; boolean reading = 0; unsigned int stepLength = 40000; unsigned int minStepLength = 1400; // tầng số khi HDD max tốc độ unsigned int steps = 5; void setup() { pinMode(led, OUTPUT); pinMode(phase1, OUTPUT); pinMode(phase2, OUTPUT); pinMode(phase3, OUTPUT); pinMode(Button, INPUT); digitalWrite(led, LOW); } void loop() { if(digitalRead(Button) == 0) reading = 1; if (reading == 1) { switchStep(1); switchStep(2); switchStep(3); if(stepLength > minStepLength) stepLength = stepLength - steps; else stepLength = minStepLength; if (stepLength < 39950) { digitalWrite(led, HIGH); steps = 400; } if (stepLength < 20000) { digitalWrite(led, LOW); steps = 100; } if (stepLength < 4000) steps = 2; if (stepLength < 1600) digitalWrite(led, HIGH); } } void switchStep(byte stage) { switch(stage) { case 1: digitalWrite(phase1, HIGH); digitalWrite(phase2, LOW); digitalWrite(phase3, LOW); myDelay(stepLength); break; case 2: digitalWrite(phase1, LOW); digitalWrite(phase2, HIGH); digitalWrite(phase3, LOW); myDelay(stepLength); break; default: digitalWrite(phase1, LOW); digitalWrite(phase2, LOW); digitalWrite(phase3, HIGH); myDelay(stepLength); break; } } void myDelay(unsigned int p) { if (p > 16380) delay (p / 1000); else delayMicroseconds(p); }
4. Video
Trong video mình có dán luôn giấy ráp (giấy nhám) làm dùng cụ mài, tiếc là mình không quay khi đang mài thử cho mọi người xem.
Các bạn cứ làm thử, cảm giác cái gì mình làm là thấy đã à.
5. File mạch in
Các bạn in theo tỉ lệ 1:1 nhé !
1. Mặt dưới
Mặt đồng:
http://www.mediafire.com/download/s9h1vg0kr4d1v9l/Attiny13_run_HDD_motor_01.PDF (mirror)
2. Mặt trên
Mặt nhựa:
http://www.mediafire.com/download/ggfu93cg73y25ci/Attiny13_run_HDD_motor.PDF (mirror)
5. Nạp chương trình
Các bạn nạp chường trình bằng Arduino IDE Classic theo hướng dẫn tại bài viết Bài 2: Attiny13 - Trợ thủ đắc lực của Arduino - Lập trình nó? hoặc nạp trên cloud với Codebender theo hướng dẫn tại bài viết Lập trình ATtiny13 với Codebender
Chúc các bạn thành công !