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

ตัวอย่าง Arduino​ ทฤษฎี​ สป.4

      สอนวิธีใช้งาน Arduino วัดอุณหภูมิและความชื้น ด้วยเซนเซอร์ DHT22 / DTH21 / DHT11
         Arduino สามารถใช้งานเป็นอุปกรณ์เซนเซอร์ ความชื้นและอุณหภูมิ สำหรับประยุกต์ใช้กับงานตามต้องการได้ เช่น ระบบควบคุมอุณหภูมิความชื้นในโรงเพาะเห็น ระบบควบคุมอัตโนมัติ หรือจะใช้ทำเป็นเซนเซอร์เล็ก ๆ สำหรับมอนิเตอร์อุณหภูมิความชื้นในสถานที่ต่าง ๆ การใช้งานเซนเซอร์อุณหภูมิและความชื้นร่วมกับ Arduino สามารถทำได้โดยง่าย เพราะมีไลบารีมาให้พร้อมใช้งาน เพียงแค่ก็อปไปวางก็สามารถดึงค่าอุณหภูมิและความชื้นออกมาได้แล้ว
ในตัวอย่างนี้ ใช้เซนเซอร์่วัดความชื้นและอุณหภูมิ DHT22 ร่วมกับ Arduino 
การต่อวงจร DHT11 / DHT22 กับ Arduino ต่อตามรูปนี้
สำหรับการต่อวงจร DHT21 กับ Arduino ต่อตามนี้
  • สายสีดำ -> Gnd
  • สายสีแดง -> 5 Vcc
  • สายสีเหลือง -> 2 (สาย ข้อมูล)
  • ต่อ R 4.7K คร่อมสายสีแดงกับสายสีเหลือง

         การเขียนโคด Arduino เพื่ออ่านค่าความชื้นและอุณหภูมิจากเซนเซอร์ DHT22
     **เขียนโคดโปรแกรมตามนี้ (ก็อปวาง)
#include "DHT.h"

DHT dht;

void setup()
{
  Serial.begin(9600);
  Serial.println();
  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");

  dht.setup(2); // data pin 2
}

void loop()
{
  delay(dht.getMinimumSamplingPeriod());

  float humidity = dht.getHumidity(); // ดึงค่าความชื้น
  float temperature = dht.getTemperature(); // ดึงค่าอุณหภูมิ

  Serial.print(dht.getStatusString());
  Serial.print("\t");
  Serial.print(humidity, 1);
  Serial.print("\t\t");
  Serial.print(temperature, 1);
  Serial.print("\t\t");
  Serial.println(dht.toFahrenheit(temperature), 1);
}


3. เปิดดูผลลัพธ์ที่หน้าจอ Serial Monitor ก็จะพบว่าเราสามารถดึงค่าอุณหภูมิ ความชื้น
จากเซนเซอร์ DHT22 / DHT21 / DHT11 โดยใช้ Arduino ออกมาใช้งานได้แล้ว

อ้างอิงhttps://www.arduinoall.com

ปฏิบัติที่​ 8

โปรแกรม​

int led  = 10;                 
void setup()
{
Serial.begin(9600);
pinMode(led,OUTPUT);
}
void loop()
{
 int x,y ;
 x = analogRead (A0);
 y = map (x,0,1023,0,255);
 Serial.print("x = "); Serial.print(x);
 Serial.print("y = "); Serial.print(y);
 analogWrite(led,y);
}
คำอธบาย
จะมีตัวเลขขึ้นตามที่เรากำหนดใน  y = map ตัวเลขจะเพิ่มมากน้อยขึ้นอยู่กับการปรับตัวต้านทาน

ปฏิบัติที่​ 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);

อธิบายการทำงาน
 เมื่อปรับค่าตัวต้านทานตัวเลขจะเพิ่มขึ้นหรือลดลงตามการปรับตัวต้านทาน

ปฏิบัติที่​ ​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 x=digitalRead(0);
int y=digitalRead(1);
if(x==0)
{
digitalWrite(9, HIGH);
lcd.setCursor(0,1);
lcd.print("Mottor1");
digitalWrite(9, LOW);
}
if(y==0)
{
digitalWrite(8, HIGH);
lcd.setCursor(0,1);
lcd.print("Mottor2");
digitalWrite(8, LOW);
}

}
คำอธิบาย
กดสวิตช์ตัวที่​ 1​ มอเตอร์หมุน​ LCD.​ ขึ้นคำว่า​ Mottor1
กดสวิตช์ตัวที่​ 2​ มอเตอร์หมุน​ LCD.​ ขึ้นคำว่า​ Mottor2

ตัวอย่าง Arduino​ ทฤษฎี​ สป.3

            การใช้งาน Android ควบคุม Relay ผ่าน Bluetooth HC-05 


อุปกรณ์
1. Arduino UNO R3
2. Relay Module 4 CH
3. Bluetooth HC-05 (Slave Mode) หรือ HC-06 ตามที่หาได้ครับ
4. หลอดไฟบ้าน 220VA

         การต่อสาย Android ควบคุม Relay ผ่าน Bluetooth HC-05

android-relay-bluetooth-arduino


     Source Code


#include <SoftwareSerial.h>


SoftwareSerial mySerial(10, 11); //Pin10 RX , Pin 11 TX connected to–> Bluetooth TX,RX

#define relay1 2

#define relay2 3

#define relay3 4

#define relay4 5

char val;

void setup() {

pinMode(relay1,OUTPUT);

pinMode(relay2,OUTPUT);

pinMode(relay3,OUTPUT);

pinMode(relay4,OUTPUT);

digitalWrite(relay1,HIGH);

digitalWrite(relay2,HIGH);

digitalWrite(relay3,HIGH);

digitalWrite(relay4,HIGH);

mySerial.begin(9600);

Serial.begin(9600);

}

void loop() {

//cek data serial from bluetooth android App

if( mySerial.available() >0 ) {

val = mySerial.read();

Serial.println(val);

}
if( val == ‘1’ ) {

digitalWrite(relay1,LOW); }

else if( val == ‘2’ ) {

digitalWrite(relay2,LOW); }

else if( val == ‘3’ ) {

digitalWrite(relay3,LOW); }

else if( val == ‘4’ ) {

digitalWrite(relay4,LOW); }

//relay all on

else if( val == ‘9’ ) {

digitalWrite(relay1,LOW);

digitalWrite(relay2,LOW);

digitalWrite(relay3,LOW);

digitalWrite(relay4,LOW);

}
//relay is off

else if( val == ‘A’ ) {

digitalWrite(relay1,HIGH); }

else if( val == ‘B’ ) {

digitalWrite(relay2,HIGH); }

else if( val == ‘C’ ) {

digitalWrite(relay3,HIGH); }

else if( val == ‘D’ ) {

digitalWrite(relay4,HIGH); }

//relay all off

else if( val == ‘I’ ) {

digitalWrite(relay1,HIGH);

digitalWrite(relay2,HIGH);

digitalWrite(relay3,HIGH);

digitalWrite(relay4,HIGH);

}

}

อ้างอิง​ http://arduinoprojects.in.th

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

ตัวอย่าง​Arduino​ ทฤษฎี​ สป.2

       Arduino การควบคุม LED ผ่าน Serial

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

ฮาร์แวร์

Arduino LED Control

 

   จากโค้ด ได้กำหนดให้ LED1 2 และ 3 เป็น Pin 13 11 และ 10 ตามลำดับ หากกำหนดในโค้ดเป็น Pin อื่นต้องเปลี่ยน Pin ด้วย ส่วน R 220Ω ใส่ไว้เพื่อป้องกันไม่ให้ LED ขาดเนื่องจากกระแสไหลเกิน

ซอฟแวร์

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/* LED Control with Serial port */
 
int LED1_Pin = 13;
int LED2_Pin = 12;
int LED3_Pin = 11;
String SerialGET = "";
 
void setup() {
 Serial.begin(9600);
 pinMode(LED1_Pin, OUTPUT);
 pinMode(LED2_Pin, OUTPUT);
 pinMode(LED3_Pin, OUTPUT);
}
 
void loop(){
 while (Serial.available()) {
 char c = Serial.read();
 if (c == '\n') {
 /* You code chk */
 Serial.println(SerialGET);
 if (SerialGET.indexOf("LED1-ON") >= 0)
 digitalWrite(LED1_Pin, HIGH);
 else if (SerialGET.indexOf("LED1-OFF") >= 0)
 digitalWrite(LED1_Pin, LOW);
 if (SerialGET.indexOf("LED2-ON") >= 0)
 digitalWrite(LED2_Pin, HIGH);
 else if (SerialGET.indexOf("LED2-OFF") >= 0)
 digitalWrite(LED2_Pin, LOW);
 if (SerialGET.indexOf("LED3-ON") >= 0)
 digitalWrite(LED3_Pin, HIGH);
 else if (SerialGET.indexOf("LED3-OFF") >= 0)
 digitalWrite(LED3_Pin, LOW);
 
 SerialGET = "";
 }else
 SerialGET += c;
 }
}

     ก่อนอื่น ต้องทราบหลักการรับข้อมูลจาก Serial ก่อน

     การรับข้อมูลมาจาก Serial จะรับมาทีละตัวอักษรผ่านคำสั่ง Serial.read() หลักการคือการวนลูปเพื่อเก็บทุกตัวอักษรที่ได้จากคำสั่ง Serial.read() โดยนำไปเก็บไว้ในตัวแปรชนิดสตริง เพื่อง่ายต่อการนำไปใช้งาน หลักการตรวจว่ารับข้อมูลมาครบหรือยัง คือการตรวจหา \n คือการกด Enter การส่งข้อมูลผ่าน Serial จะต้องมีการกดปุ่ม Enter ทุกครั้ง เมื่อตรวจหา \n เจอ นั่นหมายความว่าข้อมูลได้รับมาครบเรียบร้อยแล้ว แล้วจึงนำข้อมูลมาประมวลผลต่อได้เลย

อ้างอิงhttp://www.elec-za.com/arduino