วันพฤหัสบดีที่ 10 มีนาคม พ.ศ. 2559

[IOT] สอนสร้าง "Smart Home" ด้วย NodeMCU V2 [Part 5]

สวัสดีครับ ในที่สุดก็มาถึง Part 5 แล้วครับ 555+

ขอโทษที่ Part นี้ออกช้า เพราะพอดีผมมีธุระนิดหน่อย เลยไม่มีเวลาเขียนครับ
สำหรับ Part นี้ก็ เราก็จะมาการใช้ NETPIE กันจริงๆจังๆแล้วครับ จบ Part นี้ไป
อุปกรณ์ของเราก็จะสามารถสั่งงานผ่านเว็บได้แล้วครับ ที่เหลือก็แค่เอาไปประกอบ
เข้ากับตัวถังสวิชต์และเดินระบบสายไฟกันนิดหน่อยครับ ^_^ ถ้าพร้อมแล้วก็ ลุยกันเลยครับ

CHAPTER 3 : เริ่มต้นใช้งาน NETPIE

หลังจากที่เราได้ทำความรู้จักกับ NETPIE ตามที่ผมเกริ่นนำไปใน Part 1 ไปแล้วนะครับ 
ทีนี้เราก็จะมาเริ่มใช้งานกันเลย ถ้าพร้อมแล้วก็ เข้าไปที่เว็บนี้เลยครับ



STEP 1: สมัครสมาชิคเว็บ NETPIE


พอเราเข้าไปที่เว็บ NETPIE ก็จะเจอหน้าแรกของเว็บครับ ให้กดที่ปุ่ม SIGN UP FREE ด้านบนเลยครับ


จากนั้นจะมาที่หน้าการสมัครครับ ก็ให้กรอกข้อมูลของเราลงไปครับ


หลังจากใส่ข้อมูลเรียบร้อยและกด SIGN UP แล้ว จะขึ้นแบบนี้ที่ด้านบนครับ


เพียงเท่านี้การสมัครสมาชิคก็เสร็จสิ้นแล้วครับ สามารถไปล๊อกอินเข้าระบบกันได้เลย

รหัสผ่าน จะถูกส่งมาทาง SMS เข้าโทรศัพท์เรา 
ตามเบอร์โทรที่เรากรอกไปตอนสมัครนะครับ

ต่อไปก็ กดที่ LOG IN ข้างบนครับ


กรอก Username และ Password (ที่เราได้รับทาง SMS) เข้าไป
แล้วกด LOGIN ครับผม


เท่านี้ก็ล๊อกอินเข้ามาในระบบแล้วครับ ^_^ พร้อมสำหรับขั้นตอนต่อไป


STEP 2: แอพพลิเคชั่น เกียร์ และคีย์

ที่นี้ก็จะมาถึง การสร้าง Application (แอพพลิเคชั่น) กันนะครับ Application ที่เราจะสร้างในตอนนี้ 
ไม่ใช่ App แบบในโทรศัพท์แบบพวก Facebook, Camera 360, B612 อะไรแบบนี้นะครับ
แต่เป็น สิ่งที่เหมือนเป็นตัวแทนของระบบของเรา ครับ (เช่น "ระบบสมาร์ทโฮมในบ้านของเซเรฟ") 
ในระบบของเราก็จะสามารถ เพิ่มอุปกรณ์เข้าไปได้ โดยอุปกรณ์ของเรานั้นจะถูกเรียกว่า Gear
(ซึ่งอุปกรณ์ที่ว่านั้นก็อย่างเช่น ตัว NodeMCU ที่เรากำลังจะทำเป็นตัวควบคุมสวิชต์ไฟอยู่ตอนนี้ 
หรือพวกบอร์ดอื่นๆที่มีการต่อเซนเซอร์สำหรับส่งข้อมูลค่าต่างๆ เช่นอุณหภูมิและความชื้น เป็นต้นครับ) 
ใน  Application หนึ่งอาจจะมีหลายๆ อุปกรณ์ (หลายๆ Gear ก็ได้) และแต่ละ Gear ภายในระบบเดียวกัน
(ภายใน Application เดียวกัน) ก็จะสามารถสื่อสารกันเองระหว่างอุปกรณ์ได้ครับผม

ซึ่ง NETPIE เปิดให้เราสามารถใช้งานฟรีได้ถึง 
100 อุปกรณ์เลยครับ!!!
 (ขอขอบคุณ NECTEC และ สวทช. อีกครั้งครับสำหรับโอกาสดีๆแบบนี้)

และแต่ละอุปกรณ์ (แต่ละ Gear) ก็จะมี Key เป็นของตัวเองครับ ซึ่ง Key นี้ก็จะเป็นเหมือน
สิ่งที่ใช้ระบุตัวตนของอุปกรณ์เราครับ (คล้ายๆกับเลขบัตรประจำตัวประชาชน) ครับ 
แต่ละ Gear ก็จะมี Key เป็นของตัวเอง และก็จะไม่เหมือนกับของ Gear อื่นๆครับ

สรุปคำศัพท์สำคัญ:

APPLICATION = ตัวแทนของระบบที่มีอุปกรณ์ซึ่งติดต่อกันแบบ IoT ของเราครับ
GEAR = อุปกรณ์ที่อยู่ในระบบของเราครับ เช่นอุปกรณ์ NodeMCU V2 ตัวที่เรากำลังทำอยู่
KEY = รหัสที่ใช้ในการระบุตัวตน(คล้ายๆรหัสประจำตัว) ของอุปกรณ์ (ของ Gear แต่ละตัว) 

อธิบายแบบนี้ไปก็คงอาจจะไม่เข้าใจมาก TT เอาเป็นว่า มาสร้างกันเลยแล้วกันนะครับ

ขั้นแรกก็ กดที่ APPLICATION ตรงนี้เลยครับ


ต่อไปเราก็จะมาที่หน้า APPLICATION MANAGEMENT (การจัดการแอพพลิเคชัน) ครับ 
ก็จะแสดงข้อมูลจำนวน Application ที่เราสร้างไว้ และจำนวนอุปกรณ์ (Gear) ในระบบของเราครับ
(ตอนนี้ยังไม่มีอะไรซักอย่างครับ 555+) ก็ให้เริ่มสร้าง Application โดยกดตรงปุ่ม [+] ตามในภาพครับ


ใส่ชื่อ Application ของเราครับ เช่นในที่นี้ของผมตั้งเป็น ZerefSmartHome ครับ


จากนั้นเราก็จะได้ Application ของเราแล้วครับ โดยที่ชื่อที่เราตั้งเข้าไป จะเป็น APP ID
ของ Application เรานะครับ (จะได้นำไปใส่ในโค้ดครับ) ทีนี้ต่อไปเราก็จะมาสร้าง Key กันครับ
กดที่ปุ่ม [+] ตามในรูปเลยครับ


จากนั้นก็จะปรากฏหน้าต่างสำหรับการสร้าง Key ขึ้นมาครับ ก็ให้ทำการตั้งชื่อให้อุปกรณ์ของเราครับ
เช่นของผม ตั้งชื่อเป็น SmartNode1 (ประมาณว่ากล่องสวิชต์เปิดปิดไฟของเราชื่อ SmartNode ตัวที่ 1)
แล้วก็ทำการเลือก Type ให้เป็น Session Key จากนั้นก็กด CREATE เลยครับ


จากนั้นเราก็จะได้ Key สำหรับไว้ให้อุปกรณ์ของเราเอาไปใช้ในการสื่อสารแล้วครับ


ทีนี้ก็ให้กดที่ Key ที่สร้างไว้นะครับ ก็จะปรากฏข้อมูล Key ขึ้นมาครับ
หากจะเปลี่ยนชื่อของอุปกรณ์ ก็พิพม์ชื่อใหม่ด้านบน แล้วก็กดปุ่ม RENAME ครับ


ข้อมูลที่เราจะนำไปใช้ก็จะมี Key กับ Secret นะครับ ก็อบไปไว้ในไฟล์ Notepad 
แล้วเซฟไว้ก่อนเลยก็ได้ครับ เวลาจะนำมาใช้จะได้ง่าย
ทีนี้ต่อไปก็จะมาว่ากันเรื่องของโค้ดแล้วครับ ^_^

Key และ Secret เป็นสิ่งที่ไม่ควรเปิดเผยให้บุคคลอื่นนำไปใช้นะครับ เนื่องจากมันสามารถ
นำไปทำอะไรก็ได้ อาจมีผู้ไม่หวังดี หรือผู้ประสงค์ร้ายนำไปใช้ในทางที่ผิดได้ครับ
 ซึ่งจะเป็นผลเสียกับเราครับผม ให้ระมัดระวังเรื่องการเปิดเผย Key ด้วยนะครับ
(Key ที่ผมสร้างเป็นตัวอย่างนี้จะผมถูกลบทิ้งด้วยนะครับ เพื่อไม่ผู้ใดให้นำไปใช้งานได้อีก)

STEP 3: การเตรียม Code ฝั่ง Arduino

ทีนี้ก็จะกลับมาว่ากันที่เรื่องของโค้ด และ Arduino กันนะครับ โดยโค้ดทั้งหมดของเรานั้น
จะมีความคล้ายคลึงกับโปรเจค IoT ที่ NETPIE ได้ทำไว้แล้ว นั่นคือ Project SMART PLUG ครับ
โดยเราจะใช้โค้ดทั้งหมดของโปรเจคนี้กับอุปกรณ์ของเราครับผม ซึ่งสามารถเข้าไปดูได้ที่ลิงค์นี้ครับ


ซึ่งจะเห็นได้ว่า มีโค้ดอยู่ 2 ชุดครับ โดยจะมีโค้ดฝั่ง Arduino และโค้ดฝั่ง HTML5 ครับ

โค้ดฝั่ง Arduino: เป็นโค้ดที่จะถูกโหลดลงไปในอุปกรณ์ครับ จะเป็นโค้ดที่ทำหน้าที่ส่ง/รับ 
คำสั่งและสั่งให้อุปกรณ์ทำงานครับ (จะมีการใช้คำสั่งจาก Part 4 ในโค้ดนี้ครับ)

โค้ดฝั่ง HTML5: สำหรับโค้ดนี้ จะเป็นโค้ดที่ใช้ในการสร้างไฟล์เว็บเพจ เพื่อใช้เป็นส่วนติดต่อ (อินเตอร์เฟส) กับเราครับ คือจะเป็นโค้ดสำหรับหน้าเว็บที่จะมีสวิชต์ให้เราเอานิ้วจิ้มบนจอมือถือ
เพื่อส่งคำสั่งไปหา NodeMCU แล้วให้โค้ดฝั่ง Arduino รับไปสั่งการรีเลย์นั่นเองครับ

Microgear Library (สำหรับ Arduino)

ในโค้ดของ NETPIE นั้นจะมีการ Include Library ซึ่งจะเป็นการเพิ่มคำสั่งพิเศษเฉพาะของ NETPIE
เข้าไปเพื่อให้ Arduio สามารถใช้คำสั่งพิเศษเฉพาะของ NETPIE ได้ครับ ดังนั้นเราจึงต้องทำการติดตั้ง
Library ของ Microgear ก่อนครับ


เข้าไปแล้วกดที่ Download ZIP ตรงนี้นะครับ


เมื่อดาวน์โหลดเสร็จแล้วก็ทำการเปิดไฟล์ แล้วทำการแตกเอาโฟลเดอร์ 
microgear-esp8266-arduino-master ไปวางไว้ในโฟล์เดอร์ Libraries ของ Arduino เลยครับ


เพียงเท่านี้ก็เสร็จสิ้นแล้วนะครับ กับการติดตั้ง Microgear Library ของ Arduino ครับ






วันจันทร์ที่ 7 มีนาคม พ.ศ. 2559

[IOT] สอนสร้าง "Smart Home" ด้วย NodeMCU V2 [Part 4]


กลับมาพบกันอีกครั้งนะครับ ตอนนี้ก็ถึง Part 4 แล้ว ^_^

สำหรับพาร์ทนี้นะครับ เราก็จะมาเขียนโปรแกรมคำสั่งสำหรับ Smart Home ของเรา 
เพื่อที่จะได้นำไปใช้ต่อกับ NETPIE ครับ ซึ่ง Part นี้ผมก็คิดว่า ท่านผู้อ่านคงจะมีประสบการณ์
ในการเขียนโปรแกรมที่แตกต่างกันนะครับ ซึ่งผมก็จะพยายามอธิบายให้เข้าใจที่สุดแล้วกันนะครับ

สำหรับใครที่ยังไม่ได้เตรียมซอฟต์แวร์เพื่อการเขียนโปรแกรมให้ NodeMCU V2
ให้ศึกษาวิธีการจาก Part 2 นะครับ คลิ๊กเลยครับ

CHAPTER 3 : เริ่มต้นเขียนโปรแกรมคำสั่ง

สำหรับส่วนนี้ก็จะเกี่ยวกับ การเขียนโปรแกรมคำสั่งในโปรแกรม Arduino IDE 
ที่เราได้เตรียมไว้ตอน Part 2 นะครับ ถ้าพร้อมแล้วก็มาศึกษากันเลยครับ

STEP 1: พื้นฐานโปรแกรม Arduino


เมื่อเราเข้าสู่ Arduino ก็จะพบกับหน้าตาโปรแกรมแบบนี้นะครับ (เวอร์ชั่นอื่นอาจจะไม่เหมือนกันนะครับ) โดยที่ในส่วนสำหรับเขียนโปรแกรม จะมี void (ในที่นี้ขอเรียกว่า "ชุดคำสั่ง") อยู่ 2 void ครับ 
เพื่อความดูง่าย ผมขอเคาะบรรทัดใหม่ให้เป็นแบบนี้นะครับ



void setup() ชุดคำสั่งนี้เป็นชุดคำสั่งแรกที่จะทำงานครับ ทุกโค้ดที่อยู่ภายในวงเล็บปีกกาของชุดคำสั่งนี้ จะถูกดำเนินการไปทีละบรรทัดครับ ชุดคำสั่งนี้จะทำงานเพียงรอบเดียวนะครับ 

void loop() หลังจากทำชุดคำสั่งทั้งหมดของ void setup() เสร็จแล้ว ก็จะมาทำคำสั่งต่างๆ ภายในวงเล็บปีกกาของชุดคำสั่งนี้ครับ โดยจะทำงานวนไปเรื่อยๆไม่รู้จบ (ทำงานเป็น loop) ครับผม

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

STEP 2: คำสั่งต่างๆที่จะใช้งาน

ทีนี้ เราก็จะมาทำความรู้จักกับ คำสั่งหลักๆ ที่เราจะใช้ในการเขียนโปรแกรมกันนะครับ 

คำสั่ง pinMode( หมายเลขขา , โหมด );

เป็นคำสั่งที่ใช้ในกำหนดโหมดการทำงานของขาพอร์ต Digital ครับ ส่วนใหญ่ทำงานอยู่ใน void setup()
ว่าจะให้เป็นขาที่ใช้รับสัญญาณลอจิคเข้า (เป็น Input) หรือเป็นขาที่ส่งสัญญาณลอจิคออก (เป็น Output)
ซึ่งจะเป็นขาเข้าหรือขาออกนั้น ขึ้นอยู่กับการใช้งานร่วมกับอุปกรณ์ที่เรานำมาต่อกับขานั้นๆครับ

ในบอร์ดตระกูล Arduino จะใช้การพิมพ์ขาแบบ 1 , 2 , 3 , 4 ....
แต่ใน NodeMCU V2 จะใช้การพิมพ์ขาแบบ D1 , D2 , D3 , D4 .... 
ส่วนโหมด จะมีพิมพ์ INPUT กับ OUTPUT ครับ

ตัวอย่างการใช้งาน เช่น
1.ผมต่อเซนเซอร์วัดอุณหภูมิเข้าที่ขา 4 ของ Arduino UNO ต้องใช้คำสั่ง

pinMode( 4 , INPUT );

เพราะขานี้ จะถูกใช้เป็นขาที่รับสัญญาณลอจิคที่เซนเซอร์ส่งมา เพื่อนำไปประมวลผลต่อครับ

2.ผมต่อรีเลย์เข้ากับขา 6 ของ NodeMCU V2 ต้องใช้คำสั่ง

pinMode( D6 , OUTPUT );

เพราะขานี้ จะถูกใช้เป็นขาที่ใช้ส่งสัญญาณลอจิค เพื่อไปสั่งการรีเลย์ครับผม

จะเห็นได้ว่าไม่ยากเลยครับ แต่ให้เข้าใจว่าระหว่าง Arduino กับ NodeMCU V2 
จะมีการพิมพ์หมายเลขขาแตกต่างกันแค่นั้นเองครับผม คาดว่าน่าจะพอเข้าใจการใช้
คำสั่ง pinMode นี้กันแล้วนะครับ ^_^ ต่อไปก็...

คำสั่ง digitalWrite( หมายเลขขา , สถานะ );

เป็นคำสั่งที่ใช้ในการทำให้ขาพอร์ต Digital ที่เราสั่ง มีสถานะตามที่เราต้องการครับ โดยมี 2 สถานะ
คือ High กับ Low ซึ่ง High คือ มีไฟ ครับ หากสั่งให้ขาใดเป็น High ที่ขานั้นก็จะมีไฟสัญญาณลอจิค
ที่แรงดัน 5 โวลท์ (สำหรับ Arduino ส่วนใหญ่) หรือ 3.3v (สำหรับ NodeMCU V2 ของเรา) 
ส่วนสถานะ Low คือ ไม่มีไฟ ครับ หากสั่งเป็น Low ที่ขานั้นจะมีแรงดันเป็น 0 โวลท์ (ไม่มีไฟ) ครับผม

ตัวอย่างการใช้งาน เช่น ผมจะสั่งให้รีเลย์ ซึ่งต่อกับ NodeMCU V2 อยู่ที่ขา 6 ทำงาน 
หลังจากผมใช้คำสั่ง pinMode เพื่อกำหนดให้ขา D6 เป็นแบบ Output ใน void setup ไปแล้ว
ก็จะใช้คำสั่งนี้ครับ

digitalWrite( D6 , LOW );

การสั่งด้วยคำสั่งนี้จะทำให้ที่ขา D6 มีแรงดันไฟที่ 0v (ไม่มีไฟ) ครับ ซึ่งจะปล่อยทำให้รีเลย์ทำงาน 
(สถานะนี้ รีเลย์จะดึงขา C ไปต่อกับขา NO ครับผม)

และคำสั่งที่จะทำให้รีเลย์ (ตัวเดิม) หยุดทำงาน ก็คือคำสั่งนี้ครับ

digitalWrite( D6 , HIGH );

การสั่งด้วยคำสั่งนี้จะทำให้ที่ขา D6 มีแรงดันไฟที่ 3.3v (มีไฟ) ครับ ซึ่งจะไปทำให้รีเลย์หยุดทำงาน 
(สถานะนี้ รีเลย์จะปล่อยให้ขา C กลับไปต่อกับขา NC ครับ)
(อาจจะดูสวนทางกับความคิดนิดๆนะครับ ผมเองก็ไม่เข้าใจเขาเหมือนกันครับ 555+)

ต่อไปก็จะเป็นการหน่วงเวลาครับ โดยจะใช้คำสั่งนี้ครับ

คำสั่ง delay( เวลาในหน่วยมิลลิวินาที );

คำสั่งนี้เป็นคำสั่งที่ใช้ในการรอเวลาครับ โดยโปรแกรมจะรอให้เวลาผ่านไปโดยไม่ทำอะไร
ตามเวลาที่กำหนดครับ โดยมีหน่วยของเวลาเป็น มิลลิวินาที (ms) นะครับ 
เช่น 1 วินาทีก็จะเท่ากับ 1000 มิลลิวินาทีครับ 0.5 วิ ก็จะเท่ากับ 500 ms ครับผม

ตัวอย่างการใช้คำสั่ง

จากคำสั่งข้างบน ผมต้องการให้รีเลย์ทำงานเป็นเวลา 5 วินาที แล้วหยุดการทำงาน 
โดยใช้ร่วมกับคำสั่ง digitalWrite ข้างบนนะครับ จะเป็นอย่างงี้ครับ

digitalWrite( D6 , LOW );
delay(5000);
digitalWrite( D6 , HIGH );

จากการใช้คำสั่ง 3 บรรทัดข้างบนนี้ ผลที่ได้คือ รีเลย์จะเริ่มการทำงาน 
แล้วจะรอเวลา 5 วินาที แล้วรีเลย์ก็จะหยุดทำงานครับ

สำหรับลำโพงเปียโซของเรา จะมีเสียงดังเมื่อสัญญาณลอจิคเป็น Low 
และจะหยุดส่งเสียงเมื่อสัญญาณลอจิคเป็น High นะครับ (ใช้สถานะเหมือนของรีเลย์ครับ)

เพียงแค่ 3 คำสั่งนี้ก็เพียงพอให้อุปกรณ์ของเราทำงานได้แล้วครับ คำสั่งที่เหลือในโค้ดของ NETPIE
เราจะไม่เข้าไปยุ่งวุ่นวายอะไรกับเขานะครับ 555+ เราเพียงแต่จะสร้างชุดคำสั่งของเราไปผสม
กับโค้ดของเขาเฉยๆ ครับ สำหรับคำสั่งอื่นๆนอกเหนือจากนี้ก็ให้ไปศึกษากันเองนะครับ (อ้าว = =" 55+) 
สำหรับใครทีเซียนแล้วบทความในช่วงนี้ก็คงน่าเบื่อนิดๆนะครับ เพราะมันก็เบสิคอีกตามเคยครับผม TT

ทีนี้ก็จะมาที่ การสร้างโค้ดทดสอบกันนะครับ โดยโค้ดทดสอบของผมจะสั่งให้รีเลย์ทำงาน
เป็นเวลา 3 วินาที และหยุดทำงานไป 3 วินาที หลังจากนั้นก็ให้ลำโพงเปียโซดังขึ้น 3 วินาที
แล้วก็ดับไปเป็นเวลา 3 วินาที แล้วก็จะวนคำสั่งกลับไปเริ่มที่รีเลย์ทำงาน 3 วิใหม่อีกครั้ง
วนไปวนมาเรื่อยๆครับ สำหรับโค้ดก็ตามนี้เลยนะครับ....


อันนี้สำหรับคนที่ขี้เกียจพิมพ์นะครับ


ก๊อบไปวางใน Arduino แล้วก็ เสียบสาย + กดอัพโหลด 
แล้วดูผลลัพธ์ของโปรแกรมได้เลยครับผม ^_^


ผลลัพธ์ของโปรแกรมครับ



ขอโทษนะครับ ผมอาจจะเขียน Part นี้ได้ไม่ดีเท่าไหร่ TT ขนาดตัวเองยังอ่านไม่รู้เรื่องเลย
ข้อมูลผิดอะไรตรงไหนยังไงรบกวนแจ้งด้วยนะครับ จะได้ทำการแก้ไขให้ถูกต้องครับผม
สำหรับวันนี้ใน Part 4 นี้ก็ขอจบไว้เพียงเท่านี้ก่อนนะครับ 
พบกันใหม่ใน Part 5: การใช้ NETPIE Microgear ครับ...




วันอาทิตย์ที่ 6 มีนาคม พ.ศ. 2559

[IOT] สอนสร้าง "Smart Home" ด้วย NodeMCU V2 [Part 3]

สวัสดีครับ มาพบกันอีกครั้งใน Part ที่ 3 แล้วนะครับ 
หลังจากที่ Part ที่แล้วเราได้ทำการเตรียมซอฟท์แวร์กันเรียบร้อยแล้ว
คราวนี้ต่อไปจะเป็นการเตรียมฮาร์ดแวร์กันบ้างละครับ

เช่นเดิมนะครับ บอกไว้ก่อนเลยว่า Part นี้ เหมาะสำหรับผู้เริ่มต้นจริงๆครับ เพราะจะเป็นกล่าวถึงการต่อนั่นต่อนี้ธรรมดาไม่มีอะไรมากมายนะครับ สำหรับคนที่เซียนแล้ว ก็ให้รอ Part ต่อไปนะครับ 555+

CHAPTER 2 : เตรียมฮาร์ดแวร์ และการต่อวงจร

สำหรับส่วนนี้ก็จะเกี่ยวกับ การต่อวงจรต่างๆนะครับ ซึ่งในที่นี้ ผมจะขอใช้ NodeMCU Motor Shield 
เพื่อให้การต่อพอร์ตต่างๆง่ายขึ้น และไม่ต้องใช้ โพรโตบอร์ดครับ ซึ่งอาจจะดูขี่ช้างจับตั๊กแตนไปบ้าง
แต่มันจะทำให้การทำงานของเราง่ายขึ้นครับผม ^_^ ถ้าพร้อมแล้วก็ จับ NodeMCU เสียบลงไปเลยครับ

วันเสาร์ที่ 5 มีนาคม พ.ศ. 2559

[IOT] สอนสร้าง "Smart Home" ด้วย NodeMCU V2 [Part 2]

สวัสดีค้าบบบบ ขอโทษที่ทำให้รอนานนะครับ 

สำหรับวันนี้ Part 2 ก็มาแล้วครับผม 

แต่ขอสปอยล์ไว้ก่อนเลยว่า Part นี้ เหมาะสำหรับผู้เริ่มต้นจริงๆครับ เพราะจะเป็นกล่าวถึงการ Set-up สภาพแวดล้อมเพื่อโปรแกรม NodeMCU V.2 ครับ

สำหรับใครที่ทำเก่งแล้วก็ดูพอผ่านๆ แล้วก็รอ Part ต่อไปได้เลยนะครับ
เพราะ Part นี้ เบสิคเอฟรี่ติงจิงกาเบลมากจริงๆครับ T_T

ก็ตามชื่อบทความแหละครับ ว่าเป็นการ "สอนสร้าง" ฉะนั้นขั้นตอนต่อไปนี้อาจจะง่ายจนน่าเบื่อไปหน่อย
แต่ผมก็จะยังคงขัดใจนำเสนอให้ท่านอย่างมีความสุขครับ 55555+

CHAPTER 1 : เตรียมซอฟต์แวร์ กับเริ่มต้นใช้ NodeMCU V.2

เอาหละครับ ในการสร้างระบบนี้ สำหรับสิ่งแรกที่เราต้องทำ คือการเริ่มต้นการใช้งาน "NodeMCU V2" 
ซึ่งใน Part นี้ผมจะแบ่งออกเป็นสองส่วนนะครับ คือ การเตรียมซอฟต์แวร์ และ การเตรียมฮาร์ดแวร์
ตอนนี้จะพูดถึงการเตรียมซอฟต์แวร์กันนะครับ เนื่องจาก เราต้องสร้างสภาพแวดล้อมในคอมพิวเตอร์ของเรา
ให้พร้อมสำหรับการโปรแกรมเจ้า NodeMCU V.2 ให้ทำงานได้ ซึ่งอุปกรณ์ที่ต้องใช้ในขั้นตอนนี้ได้แก่
NodeMCU V.2 และ สาย Micro USB สำหรับอัพโหลดโปรแกรมลงบนบอร์ดครับ

[IOT] สอนสร้าง "Smart Home" ด้วย NodeMCU V2 [Part 1]

Smart Home [Part 1] : เกริ่นนำกันก่อนครับ ^_^


สวัสดีครับ ผมเซเรฟ พบวันนี้มาพบกันในเรื่องของ IoT (Internet of Things) นะครับ
เนื่องจากผมเองเพิ่งจะผ่านพ้นช่วงเวลาแห่งมัธยมปลายไปเมื่อไม่กี่วันที่ผ่านมา
วันนี้ จะขอเริ่มการเขียนบทความในซีรีย์...

Zeref's Tartaros Project:

"Smart Home"
(ระบบควบคุมเครื่องใช้ไฟฟ้าในบ้านผ่านอินเตอร์เน็ต)

ก่อนอื่นต้องขอขอบคุณ NECTEC และ สวทช. (NSTDA) สำหรับบริการแพลตฟอร์ม
"NETPIE" ซึ่งเป็นสิ่งดีๆที่มอบให้คนทั่วไปได้เข้าไปใช้เพื่อการศึกษาและพัฒนา IoT 
เพื่อความก้าวหน้าของเทคโนโลยีในบ้านเราครับผม >>> Link

ที่มา: netpie.io

สำหรับบทความซีรีย์นี้ ผมจะเน้นไปที่การปฏิบัติและลงมือทำเลยนะครับ เหมาะสำหรับ
คนที่เข้าใจแล้วว่า IoT คืออะไรและทำงานยังไง แต่ผมจะพยายามลงลิ้งค์ไว้เป็นจุดๆนะครับ
สำหรับคนที่ยังไม่รู้ สามารถกดเข้าไปอ่านได้ระหว่างทางครับ โดยผมจะพยายามเขียนบทความ
ให้เป็นขั้นตอนละเอียด เน้นให้สามารถเข้าใจได้ง่าย และทำตามได้ในทุกขั้นตอนอย่างสบายๆ ครับ

วันพฤหัสบดีที่ 3 มีนาคม พ.ศ. 2559

[Arduino] PWM คืออะไร???

ว่ากันด้วยเรื่องของ PWM (Pulse Width Modulation)


PWM หมายถึง Pulse Width Modulation เป็นเทคนิคที่ Arduino ใช้ในการควบคุมวงจร
และ เขียนค่าแบบอะนาล๊อก (Analog) ด้วยพอร์ตดิจิตัล (Digital) 

คือ โดยปกติแล้ว พอร์ตดิจิตัล จะสามารถมีได้แค่ 2 สถานะ คือ HIGH (5 โวล์ท) กับ LOW (0 โวล์ท)
เท่านั้น จึงทำให้สร้างค่าสัญญาณลอจิคได้เพียง เปิดหรือปิด (1 หรือ 0 , มีไฟหรือไม่มีไฟ) แค่นั้น
ซึ่งการใช้เทคนิค PWM นั้น จะเป็นการทำให้พอร์ตดิจิตัล สามารถเขียนค่าได้มากกว่า HIGH หรือ LOW
โดย ทำให้สามารถเขียนค่าเป็นแบบอะนาล๊อกได้ (อาจเป็น 0-255 หรือ 0-1023) โดยวิธีการนั้น
จะใช้การปรับสถานะของสัญญาณลอจิค HIGH / LOW สลับกันไปมาด้วยคาบเวลาหนึ่งๆ 
โดยค่าที่ได้นั้นจะขึ้นอยู่กับ สัดส่วนเวลาของสัญญาณในช่วงเวลาที่มีสถานะเป็น HIGH
กับช่วงเวลาที่เป็น LOW โดย ช่วงเวลาทั้งหมดที่สัญญาณมีสถานะเป็น HIGH นั้นเราจะเรียกว่าเป็น 

"ความกว้าง Pulse (Pulse Width)"


โดยสัญญาณพัลส์ เมื่อเทียบ % ของช่วงเวลาที่เป็น HIGH (หรือก็คือ % ของ Pulse Width)
กับ % ของคาบเวลา (Period) ของพัลส์ลูกนั้นๆ เราจะเรียกว่า Duty Cycle ครับ
เพื่อความเข้าใจสามารถดูได้จากตัวอย่างด้านล่างครับ

(คลิ๊กที่รูปภาพเพื่อดูภาพขนาดเต็ม)



การใช้งานใน Arduino

สำหรับการใช้งานใน Arduino นั้น ต้องรู้ก่อนว่า 
บอร์ดของเรานั้นรองรับเทคนิค PWM ที่พอร์ตใดบ้าง 
ซึ่งจาก Datasheet ที่ผมรวมรวมมา จะเป็นดังนี้ครับ

Arduino Nano = พอร์ต 3 , 5 , 6 , 9 , 10 และ 11
Arduino UNO R3 = พอร์ต 3 , 5 , 6 , 9 , 10 และ 11
Arduino MEGA 2560 R3 = ตั้งแต่พอร์ต 2 ถึงพอร์ต 13


ส่วนใหญ่แล้ว การใช้ PWM ใน Arduino ที่สามารถพบเห็นได้บ่อยที่สุด 
คือการนำไปใช้ในการ ควบคุมความเร็วมอเตอร์ ผ่านชุดไดรว์ (Motor Driver) เช่น L298N ครับ
L298N Dual H-Bridge Motor Driver


วันพุธที่ 2 มีนาคม พ.ศ. 2559

[Robot] การใช้ชุดขับมอเตอร์ L298N Dual H-Bridge Motor Controller

ชุดขับมอเตอร์ L298N Dual H-Bridge Motor Controller


สำหรับ หุ่นยนต์ (Robot) แล้ว สิ่งที่เป็นพลังขับเคลื่อนหลักให้กับหุ่นยนต์นั้น
ก็คงจะไม่พ้น มอเตอร์ ซึ่งต้องการการควบคุม จาก ชุดไดรว์มอเตอร์ (Motor Driver)
ที่จะมาควบคุม ทั้ง ทิศทาง และ ความเร็ว ของมอเตอร์ของเรา ซึ่งในวันนี้ จะมาพูดถึง

"L298N Dual H-Bridge Motor Controller"

การใช้งาน :


L298N เป็นชุดขับมอเตอร์ชนิด H-Bridge ซึ่งส่วนใหญ่จะถูกนำไปใช้ในการควบคุมทิศทาง 

และความเร็วของมอเตอร์ ซึ่งสามารถควบคุมมอเตอร์ได้ทั้งหมด 2 Channel



หลักการทำงาน:



วงจร H-Bridge ของ L298N จะขับกระแสเข้ามอเตอร์ ตามขั้วที่กำหนดด้วยลอจิคเพื่อควบคุมทิศทาง 
ส่วนความเร็วของมอเตอร์นั้นจะถูกควบคุมด้วย สัญญาณ (PWM Pulse Width Modulation) 
ซึ่งต้องมีการปรับความถี่ให้เหมาะสมกับมอเตอร์ที่จะใช้ด้วยนะครับ

Picture of Getting to know your L298N Dual H-Bridge Motor Controller module:

ขาต่างๆ:


Out 1: ช่องต่อขั้วไฟของมอเตอร์ A
Out 2: ช่องต่อขั้วไฟของมอเตอร์ A
Out 3: ช่องต่อขั้วไฟของมอเตอร์ B
Out 4: ช่องต่อขั้วไฟของมอเตอร์ B

12V: ช่องจ่ายไฟเลี้ยงมอเตอร์ 12V (ต่อได้ตั้งแต่ 5V ถึง 35V)
GND: ช่องต่อไฟลบ (Ground) 
5V: ช่องจ่ายไฟเลี้ยงมอเตอร์ 5V (หากมีการต่อไฟเลี้ยงที่ช่อง 12V แล้ว 
ช่องนี้จะทำหน้าที่จ่ายไฟออก เป็น 5V Output 
สามารถต่อไฟจากช่องนี้ไปเลี้ยงบอร์ด Arduino ได้

ENA: ช่องต่อสัญญาณ PWM สำหรับมอเตอร์ A 
IN1: ช่องต่อสัญญาณลอจิคเพื่อควบคุมทิศทางของมอเตอร์ A
IN2: ช่องต่อสัญญาณลอจิคเพื่อควบคุมทิศทางของมอเตอร์ A
IN3: ช่องต่อสัญญาณลอจิคเพื่อควบคุมทิศทางของมอเตอร์ B
IN4: ช่องต่อสัญญาณลอจิคเพื่อควบคุมทิศทางของมอเตอร์ B
ENB: ช่องต่อสัญญาณ PWM สำหรับมอเตอร์ B 

สเปกทางเทคนิค:


Dual H bridge Drive Chip : L298N
แรงดันสัญญาณลอจิค : 5V Drive voltage: 5V-35V
กระแสของสัญญาณลอจิค : 0-36mA 
กระแสขับมอเตอร์ : สูงสุดที่ 2A (เมื่อใช้มอเตอร์เดียว) 
กำลังไฟฟ้าสูงสุด : 25W
ขนาด : 43 x 43 x 26 มิลลิเมตร
น้ำหนัก : 26 กรัม
*มี Power Supply 5V ในตัว สามารถจ่ายไฟออกจากช่อง 5V (เพื่อจ่ายให้บอร์ด Arduino) ได้
เมื่อต่อไฟเลี้ยงเข้าที่ช่อง 12V

การต่อเข้าใช้งานกับ Arduino:


ในการต่อกับ Arduino นั้น ขา IN1,IN2,IN3 และ IN4 นั้น สามารถต่อกับพอร์ต Digital ใดๆก็ได้
เนื่องจาก 4 ขานี้ จะใช้ในการควบคุมสัญญาณลอจิคบอกทิศทางให้กับมอเตอร์ ส่วน ENA และ ENB นั้น
จำเป็นที่จะต้องต่อกับพอร์ต Digital ที่รองรับ PWM เนื่องจากจะต้องใช้สัญญาณ PWM ในการควบคุมความเร็วของมอเตอร์



การสั่งงานมอเตอร์เบื้องต้น:


ในการสั่งงาน L298N ให้ควบคุมมอเตอร์นั้น มีหลักการพื้นฐานง่ายๆ ดังนี้
ผมจะแบ่งขาออกเป็น 2 กลุ่ม ดังนี้
ENA IN1 IN2 และ IN3 IN4 ENB

ENA ใช้สำหรับควบคุมความเร็วมอเตอร์ A
ใช้คำสั่ง analogWrite( พอร์ตที่ต่อขา ENA , ความเร็วมอเตอร์ 0-255 );
IN1,IN2 ใช้ควบคุมทิศทางของมอเตอร์ A
ใช้คำสั่ง digitalWrite( พอร์ตที่ต่อขา IN1, IN2  สถานะ HIGH , LOW );

ENB ใช้สำหรับควบคุมความเร็วมอเตอร์ B
ใช้คำสั่ง analogWrite( พอร์ตที่ต่อขา ENB ความเร็วมอเตอร์ 0-255 );
IN3,IN4 ใช้ควบคุมทิศทางของมอเตอร์ B
ใช้คำสั่ง digitalWrite( พอร์ตที่ต่อขา IN3, IN4  สถานะ HIGH , LOW );

การใช้ค่าในการควบคุมมอเตอร์ต่างๆ จะเป็นไปตามตารางด้านล่างนี้นะครับ

ตารางการทำงาน มอเตอร์ A
ENAIN1IN2คำอธิบาย
0
N/A
N/A
มอเตอร์ A ไม่ทำงาน
0
LOW
LOW
มอเตอร์ A หยุดการทำงานแบบหมุนอิสระ (แบบไม่เบรค)
0-255
LOW
HIGH
มอเตอร์ A ทำงานและหมุนกลับหลังด้วยความเร็วที่ ENA
0-255
HIGH
LOW
มอเตอร์ A ทำงานและหมุนเดินหน้าด้วยความเร็วที่ ENA
0
HIGH
HIGH
มอเตอร์ A หยุดการทำงานแบบทันที (แบบเบรค)

ตารางการทำงาน มอเตอร์ B
ENAIN1IN2คำอธิบาย
0N/AN/Aมอเตอร์ B ไม่ทำงาน
0LOWLOWมอเตอร์ B หยุดการทำงานแบบหมุนอิสระ (แบบไม่เบรค)
0-255LOWHIGHมอเตอร์ B ทำงานและหมุนกลับหลังด้วยความเร็วที่ ENB
0-255HIGHLOWมอเตอร์ B ทำงานและหมุนเดินหน้าด้วยความเร็วที่ ENB
0HIGHHIGHมอเตอร์ B หยุดการทำงานแบบทันที (แบบเบรค)