วันพุธที่ 22 กุมภาพันธ์ พ.ศ. 2560

NRF24L01 Module โมดูลสื่อสารไร้สาย NRF24L01 ความถี่ 2.4G ร่วมกับ Arduino

 NRF24L01 Module โมดูลสื่อสารไร้สาย NRF24L01 ความถี่ 2.4G  ร่วมกับ Arduino

 

 วิธี ใช้งาน NRF24L01 Module โมดูลสื่อสารไร้สาย NRF24L01 ความถี่ 2.4G  ร่วมกับ Arduino

โมดูล NRF24L01 เป็นโมดูลนสือสารไร้สาย ที่สามารถเขียนโปรแกรมให้เป็นได้ ทั้งตัวรับและตัวส่ง สามารถใช้กับ Arduino ได้หลาย ๆ ตัวพร้อมกัน มีความเร็ว 2.4G จึงสื่อสารได้รวดเร็วและไม่ต้องการเสาอากาศที่ยาว มีขนาดเล็กสะดวกในการต่อใช้งาน สามารถประยุกต์ใช้งานได้หลายอย่างเช่น ใช้เป็นอุปกรณ์ส่งข้อมูลของเซนเซอร์อัตโนมัติสำหรับควบคุม อุณหภูมิ ความชื้น การแจ้งเตือนต่าง ๆ ควบคุมและติดตามหุ่นยนต์ Robot Control and Monitoring ได้ในระยะ 15-500 เมตร โมดูลนี้ใช้ชิฟ  nRF24L01+ m ทำงานด้วยความเร็วสูง High-speed SPI interface ใช้พลังงานต่ำ รองรับการทำงานร่วมกับ Arduino และมีเสาอากาศมาให้ในตัว ในราคาแค่ไม่กี่บาท ดูราคาอุปกรณ์ คลิกที่นี่




โมดูล NRF24L01 ใช้งานง่าย แต่หลายคนไม่รู้จะเริ่มต้นใช้งานที่ตรงไหนอย่างไร ดูโคดจากหลาย ๆ ตัวอย่างแล้วก็ซับซ้อน ArduinoAll จึงเอาตัวอย่าง วิธีใช้งาน NRF24L01 มาแนะนำ ให้สามารถใช้งานได้ทันที ง่ายเหมือนต้มมาม่า

ข้อมูลอุปกรณ์ NRF24L01 ที่น่าจะรู้ แต่ถ้าไม่รู้เรื่องก็เป็นไร เราไม่ได้ใช้ทั้งหมด

ข้อควรระวัง โมดูล NRF24L01 นี้ใช้ไฟเลี้ยง 3.3V ดังนั้นห้ามต่อกับไฟ 5V เด็ดขาด  !!!

ตัวอย่างการใช้งาน  NRF24L01 Module โมดูลสื่อสารไร้สาย NRF24L01 ความถี่ 2.4G ร่วมกับ Arduino
ดาวน์โหลดไลบารีโมดูล NRF24L01  ดาวน์โหลดตัวอย่าง NRF24L01
หลังจากดาวน์โหลดและติดตั้งโมดูล NRF24L01 เรียบร้อยแล้ว ก็มาถึงตัวอย่างโคดและการต่อใช้งาน
ต่อขาโมดูล nRF24L01 กับ Arduino uno ดังนี้
  • Vcc-3.3V
  • Gnd - Gnd
  • CSN - 7
  • CE - 8
  • MOSI - 11
  • SCK - 13
  • MISO - 12
 
สำหรับการต่อขาโมดูล nRF24L01 กับ Arduino Mega ดังนี้
  • Vcc-3.3V
  • Gnd - Gnd
  • CSN - 7
  • CE - 8
  • MOSI - 51
  • SCK - 52
  • MISO - 50

ตัวอย่างนี้จะส่งข้อความคำว่า "Welcome ArduinoAll" ไปยังส่วนของตัวรับ
การทำงานจะมี 2 ส่วนคือ ภาคส่ง กับภาครับ

โคด NRF24L01 ส่วนของการทำงานภาคส่ง
#include <SPI.h>
#include <nRF24L01p.h>

nRF24L01p transmitter(7,8);//CSN,CE

void setup(){
delay(150);
Serial.begin(115200);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
transmitter.channel(90); // ตั้งช่องความถี่ให้ตรงกัน
transmitter.TXaddress("ALL"); // ตั้งชื่อตำแหน่งให้ตรงกัน ชื่อตั้งได้สูงสุด 5 ตัวอักษร
transmitter.init();
}

String message;

void loop(){
 transmitter.txPL("Welcome ArduinoAll"); // ค่าที่ต้องการส่ง
transmitter.send(FAST); // สั่งให้ส่งออกไป
delay(1000);
}








โคด NRF24L01 ส่วนของการทำงานภาครับ
#include <SPI.h>
#include <nRF24L01p.h>

nRF24L01p receiver(7,8);//CSN,CE

void setup(){
delay(150);
Serial.begin(115200);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
receiver.channel(90);  // ตั้งช่องความถี่ให้ตรงกัน
receiver.RXaddress("ALL");  // ตั้งชื่อตำแห่นงให้ตรงกัน ชื่อตั้งได้สูงสุด 5 ตัวอักษร
receiver.init();
}

String message;

void loop(){
if(receiver.available()){
 receiver.read(); // สั่งให้เริ่มอ่าน
receiver.rxPL(message); // สั่งใหอ่านเก็บไว้ที่ตัวแปร
Serial.println(message);
message="";
}
}

โคดคำสั่งรับ/ส่ง ไม่ยากเลย นอกจากนี้ในไลบารียังมีตัวอย่างการใช้งานอีกหลายแบบให้ได้ลองเล่นกัน
สำหรับกรณีที่ต้องการต้นทุนต่ำ สามารถใช้เพียงแค่ atmega8 + nRF24L01+ ถ่านกระดุม ก็สามารถใช้งานเป็นตัวรับส่งสัญญาณ RF ความถี่ 2.4 GHz ได้แล้ว
 
ผลทดสอบระยะการทำงานของ NRF24L01 ด้วย Arduino

GSM Module SIM800L Arduino ส่ง SMS โทรเข้า โทรออก

GSM Module SIM800L Arduino ส่ง SMS โทรเข้า โทรออก 


 

สอน วิธี ใช้งาน GSM Module SIM800L Arduino พร้อมโคด ตัวอย่าง Arduino SIM800L ใช้ได้ภายใน 3 นาที


SIM800L Module SIM800L GPRS Module
บอร์ด SIM800L Module นี้มีขนาดเล็กที่สุดในโลก มาพร้อมเสาอากาศให้ 2 ชิ้นพร้อมใช้งานกับ micro sim   โม ดูล SIM800L Module สำหรับใช้ในการรับส่ง SMS โทรศัพท์หาเบอร์ที่ต้องการ เชื่อมต่ออินเตอร์เน็ตและอื่น ๆ ได้เหมือนบอร์ด GSM รุ่นใหญ่ ๆ เลย แต่ไม่สามารถคุยได้ เพราะตัดขาลำโพงกับไมค์ออก จึงเหมาะกับงานเฉพาะด้านที่ต้องการความคุ้มค่า การใช้งานไลบารีเหมือน SIM900 มีไลบารีมาให้พร้อมใช้งาน การต่อขาใช้เพียง 2 เส้นคือ RX และ TX ใช้ไฟที่ 3.7-4.2 โวลต์กระแสสูงสุด 2A ถ้าบอร์ด Arduino ที่ใช้ไฟจาก usb อาจจะกระแสไม่พอ ต้องต่อไฟเพิ่ม ทำงานทันทีที่จ่ายไฟ มี LED แสดงผลสัญญาณ ถ้าจับสัญญาณโทรศัพท์ได้จะกระพริบช้า ๆ แต่ถ้าจับไม่ได้จะกระพริบถี่ ๆ
บอร์ด SIM800L Module สามารถ ต่อกับ Battery Li-ion ได้โดยตรง แต่ถ้าไปใช้กับไฟเลี้ยง 5V   จะต้องต่ออนุกรมกับ Diode 1N4001 (หรือเบอร์อื่นๆ) ร่วมกับตัวเก็บประจุตามรูป เพื่อปรับระดับแรงดันไฟฟ้าลงให้เหมาะสม


 
ข้อมูล SIM800L Module SIM800L GPRS Module
  • Operating voltage: 3.7 ~ 4.2V (peak current 2A, please be prepared to handle)
  • Module size: 2.2cmx1.8cm
  • TTL serial port can be used with a direct link to the microcontroller. No need MAX232
  • Power on the module automatically boot automatically search network
  • Onboard signal lights (with signal flash slowly, no signal flash quickly)
  • The world's smallest size, absolutely no smaller than this GSM module.
  • ข้อมูล DataSheet SIM800L
 


โมดูลนี้ใช้กับไลบารี SIM900 ได้ โดย ดาวน์โหลดจากที่นี่ GSMSIM900

วิธีการต่อใช้งาน
  • TX - 2
  • RX - 3
  • VCC - 3.4-4.4V หรือไฟ 5V จากบอร์ด Arduino ผ่านไดโอด
  • Gnd - Gnd
การใส่ SIM ใส่ตามช่องที่มีสัญลักษณ์รูป SIM

*** โมดูลนี้แนะนำใช้ไฟ 4.0V สามารถจ่ายกระแสสูงสุด 2A แหล่งจ่ายไฟแนะนำ โมดูลเรกูเลต 2596

ก็อปปีโคดตัวอย่างนี้ แล้วดูผมลัพธ์ที่ SerialMonitor
#include "SIM900.h"
#include "SoftwareSerial.h"
//#include "inetGSM.h"
//#include "sms.h"
//#include "call.h"

//To change pins for Software Serial, use the two lines in GSM.cpp.

//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.

//Simple sketch to communicate with SIM900 through AT commands.

//InetGSM inet;
//CallGSM call;
//SMSGSM sms;

int numdata;
char inSerial[40];
int i=0;


void setup()
{
     //Serial connection.
     Serial.begin(9600);
     Serial.println("GSM Shield testing.");
     //Start configuration of shield with baudrate.
     //For http uses is raccomanded to use 4800 or slower.
     if (gsm.begin(9600))
          Serial.println("\nstatus=READY");
     else Serial.println("\nstatus=IDLE");
};

void loop()
{
     //Read for new byte on serial hardware,
     //and write them on NewSoftSerial.
     serialhwread();
     //Read for new byte on NewSoftSerial.
     serialswread();
};

void serialhwread()
{
     i=0;
     if (Serial.available() > 0) {
          while (Serial.available() > 0) {
               inSerial[i]=(Serial.read());
               delay(10);
               i++;
          }

          inSerial[i]='\0';
          if(!strcmp(inSerial,"/END")) {
               Serial.println("_");
               inSerial[0]=0x1a;
               inSerial[1]='\0';
               gsm.SimpleWriteln(inSerial);
          }
          //Send a saved AT command using serial port.
          if(!strcmp(inSerial,"TEST")) {
               Serial.println("SIGNAL QUALITY");
               gsm.SimpleWriteln("AT+CSQ");
          } else {
               Serial.println(inSerial);
               gsm.SimpleWriteln(inSerial);
          }
          inSerial[0]='\0';
     }
}

void serialswread()
{
     gsm.SimpleRead();
}

1. ทดสอบการส่ง SMS
2. ทดสอบการโทรออก
3. ทดสอบการรับสาย

หมายเหตุ บอร์ดนี้ใช้กระแสสูงสุด 2A ทำให้บางครั้งอาจพบปัญหาที่ปกติใช้ได้แล้วอยู่ ๆ ใช้ไม่ได้ เพราะกระแสไม่ถึงครับ




 เพียงเท่านี้เราก็สามารถใช้งาน SIM800L ได้แล้ว สำหรับการใช้งานเพิ่มเติม สามารถทำงานได้แบบ SIM900 ในบทความนี้ คลิกที่นี่

Ethernet Shield W5100 กับ Arduino

Ethernet Shield W5100 กับ Arduino 


ถ้าต้องการให้ Arduino สามารถติดต่อกับเครือข่าย หรือเชื่อมต่อกับอินเตอร์เน็ตได้ เพื่อที่จะได้สะดวกในการควบคุมและติดตามอุปกรณ์ต่าง ๆ เช่น การดึงค่าเซนเซอร์ต่าง ๆ ที่เราติดตั้งไว้ มาดูบนโทรศัพท์มือถือ หรือการเปิดปิดเครื่องใช้ไฟฟ้าผ่านทางอินเตอร์เน็ต เพียงแค่เสียบ Ethernet Shield W5100 ตัวนี้ลงไป ก็สามารถเชื่อมต่อ Arduino กับโลกกว้างภายนอกผ่านทาง Ethernet หรือ Internet ได้แล้ว
บอร์ด Module Ethernet Shield W5100 นี้ใช้งานง่าย เพียงแค่เสียบลงบนตัวบอร์ด Arduino Uno ก็สามารถใช้งานได้แล้ว มีช่องเสียบ SD Card มาให้ด้วยสะดวกในการบันทึกข้อมูลจำนวนมาก ๆ ลงบน SD Card มีไลบารีมาตรฐานมาให้พร้อมใช้งาน

สำหรับวิธีการใช้งาน
เสียบ Ethernet Shield W5100 ลงบนบอร์ด Arduino Uno จากนั้นเสียบสายแลนที่มีอินเตอร์เน็ต (สำหรับใช้ดึงข้อมูลจากอินเตอร์เน็ต) เข้ากับตัวบอร์ด Ethernet Shield W5100
การทดลองเล่น ขั้นที่ 1 ลองหา IP ของบอร์ด Module Ethernet Shield W5100 

หา IP ของบอร์ด Ethernet Shield W5100 ที่เราใช้งานก่อน  ในตัวอย่างนี้จะพบว่า IP คือ 192.168.0.4
วิธีการง่าย ๆ เพียงแค่ก็อปแล้ววาง โคดนี้ลงไปแล้วรัน ก็จะเห็นค่า IP ที่เราใช้อยู่ออกมา
#include "SPI.h"
#include "Ethernet.h"


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte server[] = { 173,194,126,119 }; // www.google.co.th

EthernetClient client;

void setup()
{
Serial.begin(9600);
if(Ethernet.begin(mac) == 0) { // start ethernet using mac & DHCP
Serial.println("Failed to configure Ethernet using DHCP");
while(true) // no point in carrying on, so stay in endless loop:
;
}
delay(1000); // give the Ethernet shield a second to initialize

Serial.print("This IP address: ");
IPAddress myIPAddress = Ethernet.localIP();
Serial.print(myIPAddress);
if(client.connect(server, 80)>0) {
Serial.println(" connected");
client.println("GET /search?q=arduino HTTP/1.0");
client.println();
} else {
Serial.println("connection failed");
}
}

void loop()
{
if (client.available()) {
char c = client.read();
// uncomment the next line to show all the received characters 
// Serial.print(c);
}

if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;)
;
}
}
การทดลองเล่น ขั้นที่ 2 ทำโปรแกรม เปิด/ปิด ไฟ ผ่านอินเตอร์เน็ต
โดยตัวอย่างนี้จะใช้ LED ต่อกับขา 5 ของบอร์ด Arduino Uno จากนั้นอัพโหลดโคดนี้ลงไป

จากนั้น เปิดหน้าเว็บขึ้นมาแล้วพิมพ์ไปที่ ip ของ Arduino Ethernet ของเรา เช่นของผม IP คือ 192.168.0.4 ก็จะพบกับหน้าเว็บควบคุม เปิด/ปิด LED ผ่านทางอินเตอร์เน็ตได้แล้ว

การทดลองแบบที่ 3 ทดสอบอ่านค่าจาก Arduino แล้วนำมาแสดงบน internet ผ่านทาง Ethernet Shield Module W5100
ก็อปโคดนี้ลงไป จากนั้นเข้าไปที่ ip ของ arduino เรา ตัวอย่างนี้ ip ที่แจกมาคือ 192.168.0.4 ก็จะสามารถนำค่าจากบอร์ด arduino ไปแสดงบนหน้าเว็บได้แล้ว


โมดูลนี้มี SD Card มาให้ด้วย เราสามารถบันทึกข้อมูล ค่าต่าง ๆ ลงใน SD Card เพื่อแสดงผลผ่านทาง ethernet/internet ได้ โดยวิธีใช้ SD Card ดูได้จากตัวอย่างนี้ครับ https://www.arduinoall.com/b/9

สำหรับการใช้งาน Ethernet Shield w5100 จริง ๆ มีมากมาย อาจจะใช้ร่วมกับ php , ajax , jquery , bootstrap เพื่อให้ใช้งานได้อย่างหลากหลายและยื้ดหยุ่น หรืออาจจะลองหาตัวอย่างใน google ก็มีแบบสำเร็จรูป ให้เลือกใช้งาน หวังว่าบทความนี้คงจะพอให้เห็นภาพการใช้งาน Ethernet Shield และคงช่วยให้เริ่มต้นได้อย่างรวดเร็วนะครับ ขอบคุณครับ

RFID Module อ่านค่า Tag ด้วย Arduino

RFID Module อ่านค่า Tag ด้วย Arduino 

ระบบ RFID เป็นระบบที่ใช้ระบุตัวตน โดยใช้แทกเป็นตัวบอก ID ระบบ RFID ประกอบด้วย
1. TAG 
2. เครื่องอ่านหรือ Reader
3. SoftWare ที่ใช้ควบคุม
RFID ที่นิยมใช้กันมี 3 ย่านความถี่ แต่ละความถี่ก็มีข้อดีข้อเสียแตกต่างกัน จึงต้องเลือกใช้ให้เหมาะกับงาน 
  • ความถี่ต่ำ หรือ LF ความถี่ 125Khz มีระยะการอ่านที่ไกล้ ส่งข้อมูลได้ช้า แต่ทะลุทลวงสิ่งกีดขวางได้ดี
  • ความถี่สูง หรือ HF ความถี่ 13.5Mhz มีระยะการอ่านที่ไกลกว่า LF ส่งข้อมูลได้ไกลกว่า สามารถทะลุทลวงสิ่งกีดขวางได้ดี ความถี่่นี้จึงเป็นที่นิยมใช้งานกันมากที่สุด
  • ความถี่สูงยิ่ง หรือ UHF ความถี่ในช่วง 860 to 960 Mhz ส่งข้อมูลได้รวดเร็วและได้ไกลหลายเมตร ข้อด้อยคือทะลุทลวงสิ่งกีดขวางได้ไม่ค่อยดี
การเลือกใช้แทกและเครื่องอ่าน จะต้องเป็นความถี่เดียวกันถึงจะสามารถอ่านข้อมูลร่วมกันได้ ในโมดูล RFID Module นี้เลือกใช้ RFID ย่านความถี่ HF 13.5Mhz ซึ่งเป็นที่นิยมใช้ในงานทั่วมากที่สุด มีราคาไม่แพงมีประสิทธิภาพการทำงานดี
การใช้งาน RFID Module ร่วมกับ Arduino
การใช้งาน RFID Module สามารถใช้ร่วมกับ Arduino ได้เป็นอย่างดี เพราะมีไลบารีที่ทำมาสำหรับ Arduino เรียบร้อยแล้ว เขียนไม่กี่บรรทัดก็สามารถอ่านข้อมูลจาก TAG ได้แล้ว
การต่อใช้งาน โมดูล RFID Module ร่วมกับ Arduino
ต่อตามนี้
  • MOSI - 11
  • MISO - 12
  • SCK - 13
  • NSS - 10
  • RST - 9
  • VCC - 3.3V
  • GND - GND
หรือถ้าบนบอร์ดเขียนอีกแบบ
  • SDA - 10
  • SCK - 13
  • MOSI - 11
  • MISO - 12
  • IRQ  - ไม่ต้องต่อ
  • GND - GND
  • RST - 9
  • 3.3V - 3.3V
1. ดาวน์โหลด ไลบารี RFID สำหรับ Arduino คลิกที่นี่2. ก็อปทั้งโพลเดอร์ไปไว้ที่ Documents\Arduino\libraries
3. เปิดโปรแกรมตัวอย่าง หรือ ก็อปปีโคด Arduino RFID Code จากที่นี่
โคดไม่กี่บรรทัด แค่ก็อปปี้วางก็สามารถอ่านค่า TAG RFID ออกมาประยุกต์ใช้งานได้ตามที่ต้องการแล้ว