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

801S Vibration Sensor vibration module โมดูลตรวจจับความสันไหวปรับความไวได้

801S Vibration Sensor vibration module โมดูลตรวจจับความสันไหวปรับความไวได้

Vibration Sensor Module ใช้เซนเซอร์เบอร์ 801S ในการตรวจจับความเคลื่อนไหว

คุณภาพสูง ใช้ไฟเลี้ยง3-5V

สามารถปรับความไวได้ ให้สัญญาณanalog และ digital ใช้กับงานตรวจจับ เช่น อุปกร์ป้องกันขโมย,บอร์ดล็อกแบบอิเล็กทรอนิกส์ 
,อุปกรณ์ตรจจับความสั่นไหว






ตัวอย่างการใช้งาน

เซนเซอร์ -> Arduino

+5V -> 5V

Gnd -> Gnd

Output -> A0

 ตัวอย่าง Code

void setup() {

  // initialize serial communication at 9600 bits per second:

  Serial.begin(9600);

}

// the loop routine runs over and over again forever:

void loop() {

  // read the input on analog pin 0:

  int sensorValue = analogRead(A0);

  // print out the value you read:

  Serial.println(sensorValue);

  delay(1000);        // delay in between reads for stability

}

 ตัวอย่าง VDO

https://www.youtube.com/watch?v=7FkL_tyRbQA



อ้างอิง

www.myarduino.net/product/34/801s-vibration-sensor-vibration-module-โมดูลตรวจจับความสันไหวปรับความไวได้

Dust Sensor (ตรวจจับควันและฝุ่นละออง)

Dust Sensor (ตรวจจับควันและฝุ่นละออง) 

Dust Sensor ตรวจจับควันและฝุ่นละออง (GP2Y1010AU0F)

Dust Sensor เป็น Sensor ใช้สำหรับตรวจจับควันและฝุ่นละอองในอากาศ ค่าที่ได้ออกมาเป็น Analog 1-1023 ลักษณะการทำงานคือ Sensor จะส่งแสงเลเซอร์ ไปกระทบกับตัวรับ และให้อากาศผ่านในช่อง หากการรับแสงมีน้อยแสดงว่าฝุ่นละออกเยอะ หากมีการรับแสงได้มากแสดงว่าฝุ่นละอองน้อย สามารถวัด ควันธูป แป้ง ฝุ่น ได้ นำไปประยุคใช้กับ Air purifier, Air conditioner, Air monitor


ข้อมูลเพิ่มเติม 
  • datasheets : https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf
ตัวอย่าง Code
int measurePin = A1;
int ledPower = 12;
int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;
int voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
int totalvoMeasured = 0;
float totaldustDensity = 0;

#include <Arduino.h>
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   2000

TM1637Display display(CLK, DIO);

void setup()

{

  Serial.begin(9600);
  pinMode(ledPower,OUTPUT);
 display.setBrightness(0xF);
 uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };
 display.setSegments(data);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
}



void loop()

{

for (int i=1; i <= 10; i++){

  digitalWrite(ledPower,LOW); // power on the LED
  delayMicroseconds(samplingTime);
  voMeasured = analogRead(measurePin); // read the dust value
  delayMicroseconds(deltaTime);
  digitalWrite(ledPower,HIGH); // turn the LED off
  delayMicroseconds(sleepTime);

  calcVoltage = voMeasured * (3.3 / 1024);

/*  if(voMeasured<=85){       //ตั้งค่า
  voMeasured = 0;
  }
  else{
    voMeasured = voMeasured-85;
  }*/

  voMeasured = map(voMeasured, 80, 418, 0, 100);

if(voMeasured<=0){
    voMeasured = 0;
  }
  
  dustDensity = 0.17 * calcVoltage - 0.1;
  totalvoMeasured = voMeasured+totalvoMeasured;
  totaldustDensity = dustDensity+totaldustDensity;
  delay(100);

  totalvoMeasured = totalvoMeasured/10;
  totaldustDensity = totaldustDensity/10;
  Serial.print("Raw Signal Value (0-100): ");
  Serial.print(totalvoMeasured);
  Serial.print(" - Dust Density: ");
  Serial.println(totaldustDensity);

  uint8_t segto;
  display.showNumberDec(totalvoMeasured);     //แสดง ใน 7 segment
  delay(500);

  if(totalvoMeasured <= 40){
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    }
  else if (totalvoMeasured <= 60){
    digitalWrite(4, HIGH);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    }
  else if (totalvoMeasured <= 80){
    digitalWrite(4, LOW);
    digitalWrite(5, HIGH);
    digitalWrite(6, LOW);
    }
  else{
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, HIGH);
    }

  
  totalvoMeasured = 0;
  totaldustDensity = 0;
  delay(500); 


}

 

อ้างอิง

https://www.9arduino.com/product/145/dust-sensor-ตรวจจับควันและฝุ่นละออง-gp2y1010au0f

การใช้งาน โมดูลวัดระยะทาง

การใช้งาน โมดูลวัดระยะทาง Ultrasonic Module Distance Measuring Transducer Sensor กับ Arduino


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


วิธีการต่อขา ใช้งาน โมดูลวัดระยะทาง Ultrasonic Module Distance Measuring Transducer Sensor กับ Arduino

  • Vcc - 5v
  • Gnd - Gnd
  • Trig - 13
  • Echo - 12
ตัวอย่างโคด Arduino ใช้งาน โมดูลวัดระยะทาง Ultrasonic Module Distance Measuring Transducer Sensor
const int pingPin = 13;
    int inPin = 12;

     
    void setup() {
      Serial.begin(9600);
    }
     
    void loop()
    {
      long duration, cm;
     
      pinMode(pingPin, OUTPUT);
     

      digitalWrite(pingPin, LOW);
      delayMicroseconds(2);
      digitalWrite(pingPin, HIGH);
      delayMicroseconds(5);
      digitalWrite(pingPin, LOW);
      pinMode(inPin, INPUT);
      duration = pulseIn(inPin, HIGH);

      cm = microsecondsToCentimeters(duration);

      Serial.print(cm);
      Serial.print("cm");
      Serial.println();     
      delay(100);
    }
     
    long microsecondsToCentimeters(long microseconds)
    {
      // The speed of sound is 340 m/s or 29 microseconds per centimeter.
      // The ping travels out and back, so to find the distance of the
      // object we take half of the distance travelled.
      return microseconds / 29 / 2;
    }

อ้างอิง

https://www.arduinoall.com/article/13/การใช้งาน-โมดูลวัดระยะทาง-ultrasonic-module-distance-measuring-transducer-sensor-กับ-arduino-ภายใน-3-นาที
PIR เซนเซอร์ตรวจจับความเคลื่อนไหว Motion Sensor Module

ตรวจจับความเคลื่อนไหวจากความร้อน เมื่อมีคนเดินผ่านก็จะจับค่าความร้อนที่เปลี่ยนแปลง แล้วส่งค่าสัญญาณมีไฟ ออกมา ในกรณีที่ไม่มีการเปลี่ยนแปลงส่งค่าไม่มีไฟ ออกมา เราสามารถนำค่านี้ไปสั่งควบคุม Arduino ได้ สามารถปรับเวลาหน่วงเวลาในการตรวจจับครั้งต่อไปได้ ปรับระยะทางการตรวจจับได้ 3-7 เมตร มีช่องให้ต่อ LDR เพิ่ม เพื่อให้ทำงานตรวจจับแค่ตอนกลางคืน

รายละเอียด PIR เซนเซอร์ตรวจจับความเคลื่อนไหว Motion Sensor Module


  • Dimension: 3.2cm x 2.4cm x 1.8cm (approx)
  • Infrared sensor with control circuit board
  • The sensitivity and holding time can be adjusted
  • Working Voltage Range: DC 3V- 5V
  • Current drain:<60uA
  • Voltage Output: High/Low level signal:3.3V TTL output
  • Detection distance: 3--7M(can be adjusted)
  • Detection range: <140°
  • Delay time: 5-200S(can be adjusted, default 5s +-3%)
  • Blockade time: 2.5 S (default)
  • Trigger: L: Non-repeatable trigger  H: Repeat Trigger (default)
  • Work temperature:-20-+80°C
  • Trigger Method: L unrepeatable trigger / H repeatable trigger

ตัวอย่างโคด Code Arduino PIR Motion Sensor Module


int ledPin= 13;
int inputPin= 3;

void setup(){
  pinMode(ledPin, OUTPUT);
  pinMode(inputPin, INPUT);
}

void loop(){
  int valuedigitalRead(inputPin);

  if (value == HIGH)
  {
    digitalWrite(ledPin, HIGH);
    delay(1000) ;
  }

  else
  {
    digitalWrite(ledPin, LOW);
  }
}

อ้างอิง

 https://www.arduinoall.com/product/29/pir-เซนเซอร์ตรวจจับความเคลื่อนไหว-motion-sensor-module

การเชื่อมต่อ RC Servo Motor เข้ากับบอร์ด Arduino

ตัวอย่างการเชื่อมต่อ RC Servo Motor เข้ากับบอร์ด Arduino
08
อุปกรณ์ RC Servo Motor ที่ใช้ในบทความ :  EFDV245 Futaba S3003 Servo Motor
โค้ดตัวอย่างการควบคุมตำแหน่ง RC Servo Motor
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <Servo.h>
Servo myservo;  
void setup()
{
  myservo.attach(9);
}
void loop()
{       myservo.write(0);
        delay(1000);     
        myservo.write(90);
        delay(1000);     
        myservo.write(180);
        delay(1000);                    
}

ผลการทำงานของโค้ด

09
myservo.write(0); 
delay(1000);
Servo Motor จะหมุนไปที่ตำแหน่ง 0 องศา และ หยุดเป็นเวลา 1 วินาที 
10
myservo.write(90); 
delay(1000);
Servo Motor จะหมุนไปที่ตำแหน่ง 90 องศา และ หยุดเป็นเวลา 1 วินาที
11
myservo.write(90); 
delay(1000);
Servo Motor จะหมุนไปที่ตำแหน่ง 180 องศา และ หยุดเป็นเวลา 1 วินาที
จากนั้นจะหมุนกลับไปที่ตำแหน่ง 0 องศา และวนรอบไปเช่นนี้เรื่อยๆ
โค้ดตัวอย่างการควบคุมตำแหน่ง RC Servo Motor แบบ Sweep
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <Servo.h>
Servo myservo;        //create servo object to control a servo
                              // a maximum of eight servo objects can be created
int pos = 0;             // variable to store the servo position
void setup(){
       myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
 
void loop(){
       for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
      {
            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>=1; 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
      }
}
ผลการทำงานของโค้ด
for(pos = 0; pos < 180; pos += 1){
myservo.write(pos);
delay(15);
}
            ลูป for กำหนดให้ค่า pos มีค่าเท่ากับ 0 และทุกๆ การทำงานคำสั่งภายใน for loop ค่า pos จะเพิ่มค่าขึ้น 1 ค่า จนจนถึง 180 ก็จะหลุดออกจาก loop
           ภายใน loop for คำสั่ง myservo.write(pos); ก็คือการกำหนดให้ Servo Motor หมุนไปยังตำแหน่ง มุมตามค่าในตัวแปร pos และหน่วงเวลา 15ms ด้วยคำสั่ง delay(15); ดังนั้น Servo Motor จะค่อยๆ หมุนอย่างช้าๆ จากตำแหน่ง 0 องศาไปที่ 180 องศา
for(pos = 180; pos>=1; pos-=1) 

myservo.write(pos);
delay(15); 
}
           ใน loop for ที่สองนี้จะทำงานเช่นเดียวกับใน loop for แรกเพียงแต่เปลี่ยนค่าเริ่มต้นจาก 180 เป็น 0 และลดลงค่าลง 1 ค่าทุกๆ การทำงาน 1 รอบ ส่งผลให้ Servo Motor จะหมุนจากตำแหน่งมุม 180 องศา ไปยังมุม 0 องศาอย่างช้าๆ 
           !!! ทดลองเพิ่มค่าในคำสั่ง delay() ให้มากขึ้นจะพบว่า Servo Motor จะหมุนช้าลงและในทางกลับกันหากลดค่าใน delay() ลงจะพบว่า Servo Motor จะหมุนเร็วขึ้น
ตัวอย่างการควบคุมตำแหน่ง RC Servo Motor โดยใช้ Potentiometer
13
โค้ดตัวอย่างการควบคุมตำแหน่ง RC Servo Motor โดยใช้ Potentiometer
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
 
  
 
void setup(){
         myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop(){
         val = analogRead(potpin); // reads the value of the potentiometer (value // between 0 and 1023)
         val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value
                                                        // between 0 and 180)
         myservo.write(val); // sets the servo position according to the
                                      // scaled value
         delay(15); // waits for the servo to get there
}
ผลการทำงานของโค้ด
val = analogRead(potpin); 
           อ่านค่า Analog จาก Potentiometer ที่ต่ออยู่ที่ขา A0 เก็บไว้ในตัวแปร val
val = map(val, 0, 1023, 0, 179);
           เนื่องจาก ADC ภายใน Arduino เป็น ADC ขนาด 10-bit จึงอ่านค่า Analog ได้ตั้งแต่ 0 – 1023 แต่ RC Servo Motor สามารถหมุนได้เพียงแค่ 1-180 องศา จึงต้องใช้ Function map เพื่อทำการสเกลค่าลงจาก 0-1023 เป็น 0-179 แล้วนำไปเก็บไว้ในตัวแปร val 
myservo.write(val);
           เมื่อสเกลค่า จาก 0-1023 ลงเหลือ 0-179 แล้วก็นำมาสั่งให้ Servo Motor หมุนไปยังตำแหน่งในค่าตัวแปร val
delay(15); 
           หน่วงเวลา 15 ms
ผลของการทำงานทำให้สามารถปรับตำแหน่งองศาของ Servo Motor ได้โดยการหมุนปรับค่า Potentiometer
Continuous Rotation Servo
14
           Continuous Rotation Servo คือ RC Servo Motor แบบที่สามารถหมุนได้ 360 องศา ส่วนประกอบภายนอกนั้นจะมีหน้าตาคล้ายกับ RC Servo Motor แบบที่หมุนได้ 180 องศา เพียงแต่จะมี Potentiometer เพื่อใช้สำหรับปรับ ตำแหน่ง Center Stop Adjust ของตัว Servo 
           ลักษณะการใช้งาน RC Servo Motor ชนิดนี้จะแตกต่างจากการใช้งาน RC Servo Motor แบบ 180 องศาตรงที่ Servo ชนิดนี้จะใช้ความกว้างของสัญญาณพัลซ์ในการกำหนดความเร็วและทิศทางในการหมุน ไม่ได้ใช้เพื่อกำหนดมุมจึงไม่สามารถกำหนดให้ Motor หมุนไปยังตำแหน่งมุมต่างๆ ตามความต้องการได้ สัญญาณความกว้างของพัลซ์ที่ใช้ควบคุมจะอยู่ในช่วง 1000-2000 us แต่จะมีความแตกในความหมายของแต่ละความกว้างของพัลซ์ดังนี้
           ความกว้าง 1000 us หมายถึงการหมุนไปทางซ้ายด้วยความเร็วสูงสุดที่ Servo Motor จะหมุนได้ 
15
            ความกว้าง 1500 us หมายถึงการสั่งให้ Servo Motor หยุดหมุน
16
            ความกว้าง 2000 us หมายถึงการหมุนไปทางขวาด้วยความเร็วสูงสุดที่ Servo Motor จะหมุนได้
17
การ Calibrate Center Stop
            ในการใช้งาน Continuous Rotation Servo เมื่อซื้อมาใหม่หรือใช้งานไปสักระยะหนึ่งจุด Center Stop อาจมีการคลาดเคลื่อนได้ ซึ่งแม้เราสั่งให้สัญญาณพัลซ์มีความกว้างเท่ากับ 1500 us ไป Continuous rotation servo ก็จะไม่หยุดหมุน เราจึงต้องปรับตั้งค่า Center Stop ดังนี้ 
- ต่อ Continuous rotation servo เข้ากับ Arduino
18
- เขียนโปรแกรมจ่ายความกว้างพัลซ์ 1500 us ให้กับ Servo Motor
#include <Servo.h>
Servo myServo;
void setup() {
          myServo.attach(9);
          myServo.writeMicroseconds(1500); // Stop 
}
- เมื่อรันโปรแกรมจ่ายความกว้างพัลซ์ 1500 us แล้ว Servo Motor ไม่หยุดหมุน ให้ใช้ไขควงขนาดเล็กหมุนปรับ Center Stop Adjust จน Servo Motor หยุดหมุน

19
การควบคุม Continuous Rotation Servo โดยใช้ Potentiometer ปรับความเร็วและทิศทางการหมุน
20
โค้ดตัวอย่างการควบคุม Continuous Rotation Servo โดยใช้ Potentiometer
?
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup(){
          myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop(){
          val = analogRead(potpin); // reads the value of the potentiometer (value // between 0 and 1023)
          val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value // between 0 and 180)
          myservo.write(val); // sets the servo position according to the scaled value
          delay(15); // waits for the servo to get there
}
!!! โค้ดเหมือนกับตัวอย่าง RC Servo Motor โดยใช้ Potentiometer แต่ผลการทำงานจะแตกต่างกัน
ผลการทำงานของ Code
val = analogRead(potpin); 
          อ่านค่า Analog จาก Potentiometer ที่ต่ออยู่ที่ขา A0 เก็บไว้ในตัวแปร val
val = map(val, 0, 1023, 0, 179);
          เนื่องจาก ADC ภายใน Arduino เป็น ADC ขนาด 10-bit จึงอ่านค่า Analog ได้ตั้งแต่ 0-1023 แต่ Continuous Rotation Servo รับค่าได้ในช่วง 1-180 จึงต้องใช้ Function map เพื่อสเกลค่าจาก 0-1023 เป็น 0-179 แล้วนำไปเก็บไว้ในตัวแปร val
myservo.write(val);
          เมื่อสเกลค่า จาก 0-1023 ลงเหลือ 0-179 แล้วก็นำมาสั่งให้ Servo Motor หมุนในความเร็วและ ทิศทางตามค่าความกว้างของพัลซ์ที่จ่ายออกไป
delay(15); 
          หน่วงเวลา 15 ms
          ผลของการทำงานในโค้ดนี้จะเห็นได้ว่า หากปรับ Potentiometer ไปทางด้านใดด้านหนึ่งจนสุด Continuous Rotation Servo จะหมุนในทิศทางหนึ่งด้วยความเร็วสูงสุดและเมื่อเราค่อยๆ ปรับ Potentiometer กลับมาให้มาอยู่ในตำแหน่งกึ่งกลาง Servo Motor จะค่อยหมุนช้าลงแต่ยังหมุนในทิศทางเดิม และจะหยุดสนิทหากเราปรับ Potentiometer มาที่ตำแหน่งกึ่งกลางพอดี เมื่อปรับ Potentiometer เกินกว่า ครึ่งหนึ่งในทิศตรงกันข้าม Servo Motor จะเปลี่ยนทิศการหมุน แต่จะหมุนอย่างช้าๆ และจะค่อยๆหมุนเร็วขึ้นเมื่อเราปรับ Potentiometer มากขึ้น

อ้างอิง
http:// www.thaieasyelec.com/article-wiki/review-product-article/บทความตัวอย่างการควบคุม-rc-servo-motor-ด้วย-arduino.html