วันอังคารที่ 16 สิงหาคม พ.ศ. 2559

โปรแกรม Voltage Drop THW (android)

โปรแกรมคำนวณแรงดันตก หน่วยเป็น V และ %
สาย THW


หาค่า VD จาก
ขนาดสาย
ระบบแรงดัน 1 เฟส และ 3 เฟส
การเดินสาย
ความยาวสาย
กระแส
P.F.

Download from play store
https://play.google.com/store/apps/details?id=appinventor.ai_test.voltagedrop

วันอังคารที่ 9 สิงหาคม พ.ศ. 2559

โปรแกรม คำนวณออกแบบ Switching Power Supply (Android)

คำนวณการออกแบบ เพาเวอร์ซัพพลาย แบบสวิตซ์ชิ่ง
ออกแบบ Buck converter
ออกแบบ Boost converter
ออกแบบ Buck - Boost converter

ออกแบบหาค่า L
หาค่าC
หาค่า ดิวตี้ไซเคิ้ล
หาค่า M(D)
หาค่า กระแส


Download


วันเสาร์ที่ 6 สิงหาคม พ.ศ. 2559

Switching DC to DC converter

วงจร Dc to DC Converter แบบ switching
แปลงไฟกระแสตรง เป็น กระแสตรง แบบ switching
โดยการเพิ่มหรือลดแรงดัน 
1.วงจร Buck converter
วงจรลดแรงดัน ใช้ในการลดแรงดันลงมา เช่น ใช้ในงาน solar cell งานแบตเตอรี่ยานยนต์ เครื่องบิน เรือ ฯลฯ เพื่อลดแรงดัน DC ที่มาจากแหล่งอื่นๆให้ได้เท่ากับระดับแบตเตอรี่ คือ 12V-13.8V

2.วงจร Boost converter
วงจรเพิ่มแรงดันใช้ในการเพิ่มแรงดันจากแรงดัน battery 12V ให้เป็นแรงดันพิกัดของมอเตอร์กระแสตรงต่างๆเพื่อเพิ่มความเร็ว และแรงบิด

3.วงจร Buck - Boost converter




ข้อดีของวงจร switching หรือในการใช้ความถี่ในการเปิดปิดสวิตซ์ เมื่อเปรียบเทียบกับแบบ linear



1.ในกรณีงานระบบไฟฟ้า กำลังไฟเยอะๆ เช่น solar cell หลาย 100w ขึ้นไป ประสิทธิภาพสูงกว่า สามารถได้พลังงานออกมามากกว่าแบบ linear ในกรณี input เท่ากัน
2.ขนาดโดยรวมเล็ก น้ำหนักเบา ความร้อนต่ำ เนื่องจากพลังงานส่วนเกินที่เปลี่ยนไปเป็นพลังงานความร้อนน้อยกว่า จึงทำให้เกิดความร้อนน้อย และ อุปกรณ์ไม่ต้องทนความร้อนมากทำให้มีขนาดเล็กกว่า




ข้อเสีย
1.แบบ switching ราคาแพงเนื่องจากวงจรมีความซับซ้อนกว่าอาจต้องใช้วงจร Feedback ป้อนกลับมาเปรียบเทียบ เพื่อตรวจสอบแรงดันไฟฟ้าที่ออกไปว่าตรงกับความต้องการหรือไม่ หากมากไปหรือน้อยไปอาจเพิ่มวงจรการควบคุมเข้าไปอีก หากไม่ป้อนกลับแล้วแรงดันเกินมาก อุปกรณ์เสียหาย หากแรงดันน้อยมาก อุปกรณ์ก็ไม่ทำงาน เมื่อเทียบกับแบบ linear แล้ววงจร linear อาจใช้แค่ IC ตัวเดียว
2.noise หรือสัญญาณรบกวนสูง อาจทำให้เกิดฮาร์มอนิกส์ ขึ้นในระบบไฟฟ้า


3.ควรมีวงจร isolate แยกออกจากระบบเมนไฟฟ้า


วันจันทร์ที่ 1 สิงหาคม พ.ศ. 2559

DIY แขนกล จากฟิวเจอร์บอร์ด

แขนกล Robotic arm จาก ฟิวเจอร์บอร์ด
ใช้ R ปรับค่าได้ ควบคุม servo 2 ตัว
ใช้ สวิตซ์ 2 ตัวควบคุม servo 1 ตัว



ภาพการต่อวงจร


สวิตซ์ในคลิปผมพูดต่อแบบ Active high แต่ในcode และวงจร จะเป็นแบบ Active low


Code Arduino
#include "Servo.h"

int ServoPina = 2; // กำหนดต่อ Servo a ไว้ที่ขา D2
int ServoPinb = 4; // กำหนดต่อ Servo b ไว้ที่ขา D4
int ServoPinc = 6; // กำหนดต่อ Servo c ไว้ที่ขา D6

Servo MicroServoa; // สร้าง servo object เพื่อควบคุม servo มอเตอร์ a
Servo MicroServob; // สร้าง servo object เพื่อควบคุม servo มอเตอร์ b
Servo MicroServoc; // สร้าง servo object เพื่อควบคุม servo มอเตอร์ c

int potpina = 0;  // ใช้ analog pin 0 เพื่อต่อกับ potentiometer a
int potpinb = 1;  // ใช้ analog pin 1 เพื่อต่อกับ potentiometer b


int vala;  // กำหนดตัวแปร vala เพื่ออ่านค่า analog pin
int valb;  // กำหนดตัวแปร valb เพื่ออ่านค่า analog pin
int valc;  // กำหนดตัวแปร valc เพื่ออ่านค่า analog pin

void setup() {
  MicroServoa.attach(ServoPina); //ประกาศ servo a ใช้สัญญาณจาก ServoPina (pin 2)
  MicroServob.attach(ServoPinb); //ประกาศ servo b ใช้สัญญาณจาก ServoPina (pin 4)
  MicroServoc.attach(ServoPinc); //ประกาศ servo a ใช้สัญญาณจาก ServoPina (pin 6)

  pinMode(8,INPUT_PULLUP);     //ประกาศให้ pin 8 เป็น digital inuput แบบ pull up
  pinMode(9,INPUT_PULLUP);     //ประกาศให้ pin 9 เป็น digital inuput แบบ pull up  
}

void loop() {
  vala = analogRead(potpina);            // อ่านค่าตัวต้านทานปรับค่าได้ potentiometer (โดยมีค่าระหว่าง 0 และ 1023)
  vala = map(vala, 0, 1023, 0, 180);     // แปลงค่าที่ได้ให้ใช้กับ servo motor (โดยมีค่าระหว่าง 0 และ 180)
  MicroServoa.write(vala);               // เซท servo motor ให้เป็นตำแหน่งตามค่าที่ได้
  delay(15);                             // หน่วงเวลาเพื่อให้ servo หมุนไปที่ตำแหน่งนั้น

  valb = analogRead(potpinb);            // อ่านค่าตัวต้านทานปรับค่าได้ potentiometer (โดยมีค่าระหว่าง 0 และ 1023)
  valb = map(valb, 0, 1023, 0, 180);     // แปลงค่าที่ได้ให้ใช้กับ servo motor (โดยมีค่าระหว่าง 0 และ 180)
  MicroServob.write(valb);               // เซท servo motor ให้เป็นตำแหน่งตามค่าที่ได้
  delay(15);                             // หน่วงเวลาเพื่อให้ servo หมุนไปที่ตำแหน่งนั้น


int buttonStatea;
buttonStatea = digitalRead(8);           // ให้ buttonStatea อ่านค่า ดิจิตอลจาก pin 8
  if (buttonStatea == LOW)               // ถ้าสถานะ pin 8 เป็น low
   valc = valc+1;                        // ให้ valc เพิ่มค่า 1
   MicroServoc.write(valc);              // เซท servo motor ให้เป็นตำแหน่งตามค่าที่ได้
   delay(15);                             // หน่วงเวลาเพื่อให้ servo หมุนไปที่ตำแหน่งนั้น
   
int buttonStateb;
buttonStateb = digitalRead(9);          // ให้ buttonStatea อ่านค่า ดิจิตอลจาก pin 9
  if (buttonStateb == LOW)              // ถ้าสถานะ pin 9 เป็น low
   valc = valc-1;                       // ให้ valc ลดค่าลง 1
   MicroServoc.write(valc);             // เซท servo motor ให้เป็นตำแหน่งตามค่าที่ได้
   delay(15);                             // หน่วงเวลาเพื่อให้ servo หมุนไปที่ตำแหน่งนั้น
}


Remark: ทดลองวงจรควบคุม servo 1 ตัว โดยใช้ R ปรับค่าได้  
Code Arduino

#include "Servo.h"

int ServoPin = 2; // กำหนดต่อ Servo ไว้ที่ขา D2

Servo MicroServo;
int potpin = 0;  // ต่อ R ปรับค่าได้ที่ขา อนาล็อก ขา 0
int val;  // variable to read the value from the analog pin

void setup() {
  MicroServo.attach(ServoPin);
}

void loop() {
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  MicroServo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}