วันพุธที่ 9 มกราคม พ.ศ. 2562

ทฤษฎี สป.4


ทฤษฎี สป.4

Nodemcu esp8266 Arduino IDE 

เปิดปิดไฟผ่าน Website



อุปกรณ์ที่ต้องเตรียม
  1. Nodemcu esp8266 เวอร์ชั่นอะไรก็ได้
  2. สาย Jumper 
  3. หลอดไฟ LED (ในตัวอย่างนี้พี่ใช้หลอดไฟ LED สามารถใช้ Relay มาต่อเพื่อควบคุมไฟ DC AC ได้เหมือนกันครับ)
  4. คอมพิวเตอร์ที่ลงโปรแกรม Arduino IDE และ ติดตั้งบอร์ด Nodemcu หากน้องๆยังไม่ติดตั้ง คลิก
  5. ระบบเครื่อข่าย Lan มี Wifi 




Code Arduino IDE
#include <ESP8266WiFi.h>
const char* ssid = "9arduino";
const char* password = "tv357911itv";
int ledPin1 = D1; // ขา D1
int ledPin2 = D2; // ขา D2
int ledPin3 = D3; // ขา D3
int ledPin4 = D4; // ขา D4
int ch1 = 0;
int ch2 = 0;
int ch3 = 0;
int ch4 = 0;
WiFiServer server(80);
void setup() {
  Serial.begin(9600);
  delay(100);
  // ประกาศขา เป็น Output
  pinMode(ledPin1, OUTPUT);  
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  // เริ่มต้น ให้ Logic ตำแหน่งขาเป็น LOW
  digitalWrite(ledPin1, HIGH);   
  digitalWrite(ledPin2, HIGH);
  digitalWrite(ledPin3, HIGH);
  digitalWrite(ledPin4, HIGH);
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  // Start the server
  server.begin();
  Serial.println("Server started");
  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
}
void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  // Wait until the client sends some data
  Serial.println("new client");
  while (!client.available()) {
    delay(1);
  }
  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
  // Match the request
    // รับ Link ช่อง 1 
  if (request.indexOf("/LED1=ON") != -1) {
    digitalWrite(ledPin1, LOW);
    ch1 = 1;
  }
  if (request.indexOf("/LED1=OFF") != -1) {
    digitalWrite(ledPin1, HIGH);
    ch1 = 0;
  }
  // รับ Link ช่อง 2
  if (request.indexOf("/LED2=ON") != -1) {
    digitalWrite(ledPin2, LOW);
    ch2 = 1;
  }
  if (request.indexOf("/LED2=OFF") != -1) {
    digitalWrite(ledPin2, HIGH);
    ch2 = 0;
  }
    // รับ Link ช่อง 3
  if (request.indexOf("/LED3=ON") != -1) {
    digitalWrite(ledPin3, LOW);
    ch3 = 1;
  }
  if (request.indexOf("/LED3=OFF") != -1) {
    digitalWrite(ledPin3, HIGH);
    ch3 = 0;
  }
    // รับ Link ช่อง 4
  if (request.indexOf("/LED4=ON") != -1) {
    digitalWrite(ledPin4, LOW);
    ch4 = 1;
  }
  if (request.indexOf("/LED4=OFF") != -1) {
    digitalWrite(ledPin4, HIGH);
    ch4 = 0;
  }
  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); // do not forget this one
  client.println("");
  client.println("");
  client.print("Led pin D1 : ");
  if (ch1 == 1) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.print("
Led pin D2 : ");
  if (ch2 == 1) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.print("
Led pin D3 : ");
  if (ch3 == 1) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.print("
Led pin D4 : ");
  if (ch4 == 1) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.println("

");
client.println("CH1 <a href=\"/LED1=ON\"\"><button> On </button></a><a href=\"/LED1=OFF\"\"><button> OFF </button></a><br>");  
client.println("CH2 <a href=\"/LED2=ON\"\"><button> On </button></a><a href=\"/LED2=OFF\"\"><button> OFF </button></a><br>"); 
client.println("CH3 <a href=\"/LED3=ON\"\"><button> On </button></a><a href=\"/LED3=OFF\"\"><button> OFF </button></a><br>");
client.println("CH4 <a href=\"/LED4=ON\"\"><button> On </button></a><a href=\"/LED4=OFF\"\"><button> OFF </button></a><br>");
  client.println("");
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}




 โปรแกรมจะแสดง IP ให้เข้าไปยัง URL ที่โปรแกรมแจ้งแสดงออกมาครับ จากภาพคือเว็บ http://192.168.1.37/

ก็จะสามารถเปิดปิดไฟได้ตามที่ต้องการ


อ้างอิง ttps://www.google.com/

วันอังคารที่ 8 มกราคม พ.ศ. 2562

ปฏิบัติ สป.6



ปฏิบัติ สป.6



โค้ด

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() 
 {
 pinMode (0, INPUT);
 pinMode (1, INPUT);
 pinMode (8, OUTPUT);
 pinMode (9, OUTPUT);
 lcd.begin(16, 2);
 }

void loop() 
  {
  int re=digitalRead (0);
  int le=digitalRead (1);
  if (re==0)
  { digitalWrite (8, HIGH);
  delay(500);
  lcd.setCursor(0, 1);
  lcd. print(" Motor1 ");
  digitalWrite (8, LOW);
  }
  if  (le==0){
    digitalWrite (9, HIGH);
    delay (500);
    lcd.setCursor (0, 1);
    lcd.print (" Motor2 ");
  }
}

คำอธิบาย
เมื่อกดสวิตช์ที่ 1 จะแสดงคำว่า MOTOR1 แสดงที่บนLCD1
เมื่อกดสวิตช์ที่ 2 จะแสดงคำว่า MOTOR2 แสดงที่บนLCD1

ปฏิบัติ สป.7


ปฏิบัติ สป.7


โค้ด

#include <LedControl.h>
LedControl lc=LedControl (5,7,6,1);
 void show4digit (int num)
{
  int seg1,seg2,seg3,seg4;
  seg1 = ((num%1000)%100)%10;
  seg2 = ((num%1000)%100)/10;
  seg3 = (num%1000)/100;
  seg4 = num/1000;
   lc.setDigit (0,0,seg1,false);
   if (num>=10)
   lc.setDigit(0,1,seg2,false);
   if (num>=100)
   lc.setDigit(0,2,seg3,false);
   if (num>=1000)
   lc.setDigit(0,3,seg4,false);
   delay(300); 
}
  void setup()
{
  Serial.begin(9600);
  lc.shutdown(0,false);
  lc.setIntensity(0,5);
  lc.clearDisplay(0);
}
  void loop()
{
  int num;
  num = analogRead(A0);
  Serial.print("analogRead=") ;Serial.println(num);
  lc.clearDisplay(0);

  show4digit(num);

คำอธิบาย 
ตัวเลขจะเพิ่มขึ้นหรือลดลงขึ้นอยู่กับตัวต้านทาน จะส่งผลให้มีตัวเลขแสดงขึ้นบน 7 segment

วันพุธที่ 21 พฤศจิกายน พ.ศ. 2561

ทฤษฎี สป.3

การใช้

Arduino เปิดปิดประตู 


ทฤษฎี​ สป.ที่3








       Servo เป็นมอเตอร์ทีสามารถ กำหนดองศาการหมุนได้อย่างแม่นยำ การใช้งานยกตัวอย่างเช่น
เครื่องบินบังคับ จะใช ้servo ในการควบคุมหลังเพื่อบังคับเลี้ยวหรือการเปลี่ยนเพดานบิน Servo มีทั้งแบบ หมุนได ้180 องศา และ 360 องศานั้นหมายถึง หมุนได ้1 รอบ Servo ใช ้สายไฟ 3 เส้นในการควบคุม สีนํ้าตาล เป็น สาย GND สีแดง เป็น VบCC และ สีเหลือง Signal Servo ขนาดเล็ก ใช้ไฟเลี้ยง 5 V สำหรับ สาย signal จะควบคุมดว้ ย PWM ﴾Pulse width modulation﴿ ใช้ความกว้างของสัญญาณนาฬิกา ในการสั่งงาน ให้หมุนไปในทิศทางองศา


ใน Arduino สังเกตที่ digital pin 0–13 ใน pin ที่ 9 10 และ 11 มีสัญลักษณ์ ~ หมายถึง pin นั้น สามารถ ส่งสัญญาณแบบ PWM ได ้ซึ่ง สามารถใช้ควบคุม servo ได ้
ใน Arduino มี library สำหรับควบคุม servo สำเร็จรูปอยู่แลว้ อยู่ใน Arduino IDE > File > Example > Servo
ขอยกตัวอย่างจาก Sweep ตัวไฟล์อยู่ใน Arduino IDE > File > Example > Servo > Sweep













#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9);
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos ‐= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable ‘pos’
delay(15); // waits 15ms for the servo to reach the position
}
}
#include <Servo.h> คือการเรียกใช ้librarly เพื่อควบคุม servo ﴾การเขียนโค้ด ตัว พิมพ์เล็กกับพิมพ์ใหญ่ ไม่ใช่ตัวอักษรเดียวกัน﴿
Servo myservo; คือการประกาศตัวแปร ชื่อ myservo ซึ่งเป็นตัวแปรประเภท Servo จากใน librarly Servo.h
แค่ ตัว compiler ฉลาดพอทีจะเติมใหเ้ราอัตโนมัติ﴿
int pos = 0; ประกาศตัวแปรชื่อ pos มีค่าเท่ากับ 0 เป็นตัวแปรประเภท int
ในทีนี้การ setup สั่งใหตั้วแปร myservo attach pin 9 หรือก็คือ กำหนด pin ส่งสัญญาณ pwm เพื่อควบคุม servo เป็น pin 9 เมื่อ เราเรียกใช้myservo ครั้งต่อไป มันจะส่งสัญญาณออกไปที่ pin 9
อัตโนมัติ เราไม่จำเป็นต้อง attach ซ้ำๆถ้าในภาษา ของ network ก็คือการ binding
ใน loop มี for loop อยู่ รูปแบบของ for loop คือ ในทีนี้เรากำหนดให ้pos เป็น 0 เมื่อเริ่ม loop และ จะทำงานไปเรื่อยๆ เมื่อ pos มีค่าน้อยกว่า หรือเท่ากับ 180 ใน แต่ละครั้งทีทำงาน ค่าของ pos จะเพิ่มขึ้นทีละ 1 ใน loop
เราสั่งให้ myservo write ตัวแปร pos write คือการส่งสัญญาณ ออกไป ส่วนค่าทีสั่งออกไป คือ pos
มีค่าเป็น ตาม for loop ในครั้งแรก มีค่าเป็น 0 หมายถึง สั่งให้ servo หมุนไปตำแหน่ง 0 วนไปเรื่อยๆจนถึง 180
delay﴾15﴿; หมายถึงให้หยุดพัก 15 มิลลิ วินาที ก่อนทำงานต่อ ทีต้องมี delay เพราะบางครั้ง
โปรแกรมทำงานเร็วเกินไป จนอุปกรณ์ตัวอื่นตามไม่ทัน
for loop ที่ 2 คือการสั่ง ให้servo หมุนจาก 180 กลับไป ที่ 0 เหมือนเดิม

วันจันทร์ที่ 19 พฤศจิกายน พ.ศ. 2561

ทฤษฎี สป.2


 ควบคุมมอเตอร์ให้หมุนได้ทั้งซ้าย-ขวา
 โดยไม่ต้องการคุมความเร็วรอบ

ทฤษฎี​ สป.ที่2

16   17

มอเตอร์หมุนขวา   มอเตอร์หมุนซ้าย 
          จากวงจรนี้ เราจะเห็นได้ว่าในการจะควบคุมให้มอเตอร์หมุนไปกลับ หรือ ซ้าย-ขวา นั้นจะต้องใช้ Relay 2 ตัวในการควบคุม วิธีการต่อวงจรเป็นดังนี้ 
• นำขั้ว + ของมอเตอร์ต่อเข้ากับขา COM ของรีเลย์ตัวที่ 1
• นำขั้ว – ของมอเตอร์ต่อเข้ากับขา COM ของรีเลย์ตัวที่ 2
• นำขา NC ของรีเลย์ทั้ง 2 ตัว ต่อเข้ากับไฟลบ (GND)
• นำขา NO ของรีเลย์ทั้ง 2 ตัว ต่อเข้ากับไฟบวก (+5VDC)
วิธีต่อใช้งานจริงตามภาพด้านล่างนี้ โดยมีอุปกรณ์ดังนี้ Arduino + Relay Module + DC Motor

18
ภาพแสดงการต่อใช้งาน Arduino + Relay Module + Motor

19

           หลักการการทำงานคือ มีบอร์ด Arduino UNO R3 ในการรับข้อมูลจากคอมพิวเตอร์สื่อสารผ่านพอร์ต Serial แล้วนำค่าที่ได้ไปตรวจสอบว่าตรงกับค่าที่กำหนดไว้หรือไม่ ถ้าตรงกันก็สั่งให้ Relay ทำงานตามที่เราต้องการ  

ตัวอย่างโค้ดโปรแกรม
#define R 13 //กำหนดขาที่นำไปต่อกับรีเลย์
#define L 12
char test ; //สร้างตัวแปรไว้สำหรับรอรับข้อมูล
void setup() 
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
pinMode(R, OUTPUT); // กำหนดโหมดให้เป็น Output
pinMode(L, OUTPUT);
}
void loop() // run over and over
{
if (Serial.available()) // ตรวจสอบว่ามีข้อมูลเข้ามาหรือไม่
test = Serial.read();
else if (test == '1') // ถ้าข้อมูลที่เข้ามาคือ 1, 2, 3 ให้ทำงานตามที่กำหนด
{
digitalWrite(R, HIGH);
digitalWrite(L, LOW);
else if (test == '2')
{
digitalWrite(L, HIGH);
digitalWrite(R, LOW);
}
else if (test == '3')
{
digitalWrite(L, LOW);
digitalWrite(R, LOW);
}
}


ขั้นตอนการทดสอบ
1. ดาวน์โหลดโปรแกรมสำหรับส่งข้อมูลผ่าน Serial (ในบทความนี้ใช้โปรแกรม Terminal.exe
2. เปิดโปรแกรม Arduino นำโค้ดตัวอย่างด้านบน ไปรันและอัพโหลดไปยัง Arduino UNO R3
3. เปิดโปรแกรม Terminal.exe เลือก Com Port และกำหนดความเร็วในการรับส่งข้อมูล จากนั้นกดปุ่ม Connect 

20

4. ทำการส่งข้อมูลให้ Arduino โดยพิมพ์ข้อความลงในช่องด้านล่างของโปรแกรม
a. ข้อมูลที่กำหนดไว้คือ 1 = หมุนขวา, 2 = หมุนซ้าย, 3 = หยุดหมุน

อ้างอิง


ทฤษฎี สป.1



ควบคุมการปิด-เปิด
เครื่องใช้ไฟฟ้ากระแสสลับ 220 VAC 


ทฤษฎี​ สป.ที่1



วิธีการเชื่อมต่อ
สำหรับอุปกรณ์ที่ใช้ไฟฟ้ากระแสสลับ (AC)
• ต่อไฟเส้นที่ 1 จากแหล่งจ่ายไฟไปยังอุปกรณ์ที่ขั้วลบ (ถ้ามีแจ้งไว้ ถ้าไม่มีก็ใช้ขั้วใดก็ได้)
• ต่อไฟเส้นที่ 2 จากแหล่งจ่ายไฟเข้าขา NO ของรีเลย์
• ต่อสายจากขา COM ของรีเลย์ไปยังอุปกรณ์ไฟฟ้าขั้วที่เหลือ
สำหรับอุปกรณ์ที่ใช้ไฟฟ้ากระแสตรง (DC)
• ต่อไฟลบหรือ GND ไปยังอุปกณ์ไฟฟ้าเข้าที่ขั้วลบหรือ GND
• ต่อไฟบวกหรือ VCC ไปยังขา NO ของรีเลย์
• ต่อสายจากขา COM ของรีเลย์ไฟยังอุปกรณ์ไฟฟ้าที่ขั้วบวก


         ในการทดสอบนี้ เราจะใช้บอร์ดคอนโทรลเลอร์ Arduino UNO R3 หลักการการทำงานมีดังนี้ รับข้อมูลจากคอมพิวเตอร์สื่อสารผ่านพอร์ต Serial แล้วนำข้อมูลที่ได้ไปตรวจสอบว่าตรงกับค่าที่กำหนดไว้หรือไม่ ถ้าตรงก็สั่งให้รีเลย์ทำงานตามที่เราต้องการ

ตัวอย่างโค้ดโปรแกรม

#define Lamp1 12 //กำหนดขาที่นำไปต่อกับรีเลย์
char test ; //สร้างตัวแปรไว้สำหรับรองรับ
void setup() 
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
pinMode(Lamp1, OUTPUT); //กำหนดโหมดให้เป็น Output
}
void loop() // run over and over
{
if (Serial.available()) // ตรวจสอบว่ามีข้อมูลเข้ามาหรือไม่
test = Serial.read();
else if (test == '1') //ถ้าข้อมูลที่เข้ามาคือ 1 , 3 ให้ทำงานตามที่กำหนด
{
digitalWrite(Lamp1, HIGH);
}
else if (test == '3')
{
digitalWrite(Lamp1, LOW);
}
}
ขั้นตอนการทดสอบ
1. ดาวน์โหลดโปรแกรมสำหรับส่งข้อมูลผ่าน Serial (ในบทความนี้ใช้โปรแกรม Terminal.exe
2. เปิดโปรแกรม Arduino นำโค้ดตัวอย่างด้านบนไปรันและอัพโหลดไปยัง Arduino UNO R3
3. เปิดโปรแกรม Terminal.exe เลือก Com Port และกำหนดความเร็วในการรับส่งข้อมูล จากนั้นกดปุ่ม Connect

24

4. ทำการส่งข้อมูลให้ Arduino โดยพิมพ์ข้อความลงในช่องด้านล่างของโปรแกรม
a. ข้อมูลที่กำหนดไว้คือ 1 = เปิดไฟ, 3 = ปิดไฟ

25

เเหล่งอ้างอิง

มินิโปรเจค

โปรเจค Arduino เปิด ปิดไฟ AC 220V ด้วยเสียง เปิดปิดไฟ AC 220V ด้วยเสียง          เรียนรู้วิธีควบคุม  Arduino  ด้วยเซ็นเซอร์เส...