วันพุธที่ 28 สิงหาคม พ.ศ. 2556

Raspberry Pi and Webcam to Apache Serv

เริ่มต้นใช้งานกับบอร์ด Raspberry Pi

การติดตั้งระบบปฏิบัติการลงบน SDCard
ในการใช้งาน Raspberry Pi เหมือนกับการใช้งานคอมพิวเตอร์ทั่วไป ต้องติดตั้งระบบปฏิบัติการลงบน SDCard ซึ่งควรมีขนาดความจุตั้งแต่ 2 GB ขึ้นไป สามารถดาวน์โหลดระบบปฏิบัติการสำหรับ Raspberry Pi ได้ที่ http://www.raspberrypi.org/downloads ในบทความนี้ผู้เขียนใช้ OS-Image จากลิงค์ http://downloads.raspberrypi.org/images/raspbian/2012-12-16-wheezy-raspbian/2012-12-16-wheezy-raspbian.zip

การเขียน OS-Image ลงใน SDCard

การเขียน OS-Image ลงใน SDCard ถ้าใช้ระบบปฏิบัติการ Windows ให้ดาวน์โหลดโปรแกรม Win 32 Disk Imager ได้จากลิงค์
http://ie.archive.ubuntu.com/download.sourceforge.net/pub/sourceforge/w/project/project/wi/win32diskimager/Archive/

การเชื่อมต่ออุปกรณ์ฮาร์ดแวร์
เชื่อมต่อ Raspberry Pi เข้ากับ LAN เพื่อต่ออินเตอร์เน็ต และจ่ายไฟ 5V ให้กับบอร์ด Raspberry Pi ดังภาพต่อไปนี้
        

                    รูปที่ 1 การเชื่อมต่อสายแลน,SD Card และ แหล่งจ่ายไฟ 5 V ให้กับบอร์ด Raspberry

ชื่อผู้เข้าใช้ระบบที่มาพร้อมกับ OS-Image
USERNAME : pi
PASSWORD : raspberry

การรีโมทเข้าไปยังเครื่อง Raspberry Pi ด้วย SSH

                   รูปที่ 2 แสดงภาพโปรแกรม SecureCRT เพื่อเชื่อมเข้าไปยังเครื่อง Raspberry Pi

การเชื่อมต่อไปยังเครื่อง Raspberry Pi ด้วย SSH ผ่าน Mac OS X Terminal

        

    รูปที่ 3 เป็นการแสดงภาพการเข้าใช้งานคอนโซบอร์ด Raspberry Pi ภายใน Terminal ของ Mac OS X

·        บอร์ด Raspberry Pi + Raspbian OS สามารถเชื่อมต่อกับกล้อง USB webcam ได้
ขั้นตอนการลงโปรแกรม Stream เพื่อที่จะบันทึกภาพจากกล้องเว็บแคมผ่านบอร์ด Raspberry
1.       เชื่อมต่อ WebCam เข้ากับ Raspberry PI ดังภาพต่อไปนี้

 

 รูปที่ 4 แสดงการต่อเชื่อมระหว่าง Raspberry PI กับ Webcam

2. ขั้นตอนการติดตั้ง streamer ใช้คำสั่งดังนี้
$ sudo apt-get install streamer

3.. ขั้นตอนการบันทึกภาพนิ่ง ใช้คำสั่งต่อไปนี้
$ sudo streamer -c /dev/video0 -o /var/www/outputfile.jpeg
เมื่อ outputfile.jpeg คือ การถ่ายภาพผ่านเว็บแคมและบันทึกในไฟล์ outputfile.jpeg ท่านสามารถตั้งชื่อไฟล์ได้ตามที่ต้องการ

·        สามารถดึงภาพมาเก็บในฐานข้อมูล (ในตัวเอง ถ้าทำเป็น server) หรือ ส่งไปข้อมูลภาพ (.jpg) ไปเก็บในเครื่อง server อื่นในเครือข่ายได้

โดยเราได้ใช้ Apache เป็นทำหน้าที่เป็นเว็บเซิร์ฟเวอร์ ซึ่งพัฒนามาจาก  HTTPD Web Server โดย Apache จะทำหน้าที่ในการจัดเก็บ Homepage และส่ง Homepage ไปยัง Browser ที่มีการเรียกเข้า ยัง Web server ที่เก็บ HomePage นั้นอยู่ โดยเรานำมาใช้กับการส่งรูปที่ได้จากการถ่ายจากเว็บแคมไปยังเซิร์ฟเวอร์โดยเริ่มที่ขั้นตอนการลง Apache Server ดังต่อไปนี้
ขั้นการติดตั้ง Apache ใช้คำสั่งดังต่อไปนี้
$ sudo apt-get install apache2

ขั้นการติดตั้ง Php5 ใช้คำสั่งดังต่อไปนี้
$ sudo apt-get install php5

ขั้นการติดตั้ง libapache2 ทำงานร่วมกับ php ใช้คำสั่งดังต่อไปนี้
$ sudo apt-get install libapache2-mod-php5

ขั้นการเปิดให้บริการเว็บเซิร์ฟเวอร์ใช้คำสั่งดังต่อไปนี้
$ sudo /etc/init.d/apache2 restart




              รูปที่ 5,6,7 แสดงภาพถ่ายที่ได้จากกล้องเว็บแคมและควบคุมถ่ายภาพด้วย Raspberry PI

หมายเหตุ นอกจากการถ่ายภาพนิ่งแล้ว โปรแกรม Streamer สามารถถ่ายภาพวิดีโอได้อีกด้วย สามารถบันทึกวิดีโอด้วยคำสั่งต่อไปนี้
$ streamer -t 0:0:2 -c //dev/video0 -f rgb24 -r 3 -o /var/www/outputfile.avi





·        บอร์ด Arduino นั้นเชื่อมต่อกับบอร์ด Raspberry Pi (ผ่าน USB-to-serial)


กำลังศึกษาการเชื่อมต่อระหว่างบอร์ด Arduino เชื่อมต่อกับบอร์ด Raspberry Pi (ผ่าน USB-to-serial) ซึ่งทำการศึกษาโดยอ้างอิงจากเว็บไซต์ raspberry-pi-th.blogspot.com โดยจะเริ่มลงมือทดลองขั้นตอนนี้หลังจากส่งรายงานความก้าวหน้า Mini-Project ครั้งที่ 1

Reference :

4.       PDF “ESL_RPi_Quick_Start [2013-05-14]” ของ ท่านอาจารย์ ดร.เรวัต ศิริโภคาภิรมย์

วันพฤหัสบดีที่ 15 สิงหาคม พ.ศ. 2556

การทดลอง

วงจร







1. ทดสอบตัว Panasonic PIR (Passive Infrared) Motion Sensor

เมื่อ Motion Senser ทำการ detect ไม่ได้เอาต์พุตของตัว PIR ก็จะเป็น LOW และ LED ก็จะดับ

เมื่อ Motion Senser ทำการ detect ได้เอาต์พุตของตัว PIR ก็จะเป็น HIGH และ LED ก็จะติด
วิดีโอการทดสอบ Motion Senser



โค้ด Arduino ที่ใช้ใจการทดสอบตัว Motion Senser

int ledPin = 13;        // choose the pin for the LED
int inputPin = 2;       // choose the input pin (for PIR sensor)
int val = 0;            // variable for reading the pin status
int state = 0;

void setup() {
  pinMode(ledPin, OUTPUT);    // declare LED as output
  pinMode(inputPin, INPUT);   // declare sensor as input
  Serial.begin(9600);
}

void loop(){
  val = digitalRead(inputPin);   // read input value
  switch(state){
  case 0:
    digitalWrite( ledPin, LOW );
    if( val == HIGH ){           // Motion Detected!
      state = 1;
      Serial.println("Motion detected!");
    }
    break;
  case 1:
    digitalWrite( ledPin, HIGH );
    if( val == LOW ){            // Motion Ended!
      state = 0;
      Serial.println("Motion ended!");
    }
    break;
  }
}
--------------------------------------------------------------------------------------------------- 

2. ทดสอบ Servo Motor

 
 รูปการทดลอง Servo กับ Arduino

วิดีโอการทดสอบ Servo Motor


โค้ด Arduino ที่ใช้ใจการทดสอบตัว Servo Motor

#include <Servo.h>

Servo servoMotor;
int outVal = 0;
boolean check = false;

void setup(){
  servoMotor.attach(9);
  Serial.begin( 9600 );
}

void loop(){
  if( outVal >= 180 ){
    check = true;
  }
  if( outVal <= 0 ){
    check = false;
  }
  servoMotor.write( outVal );
  delay( 1000 );
  if( check == false ){
    outVal += 30 ;
  }
  if( check == true ){
    outVal -= 30;
  }
}

--------------------------------------------------------------------------------------------------- 
3. เมื่อนำส่วนของ PIR Motion Sensor และ Servo Motor มารวมกัน





วิดีโอแสดงการทำงาน

โค้ดการทดลอง

#include <Servo.h>

Servo servoMotor;
int ledPin = 13;                // choose the pin for the LED
int inputPin = 2;               // choose the input pin (for PIR sensor)
int val = 0;                    // variable for reading the pin status
int state = 0;                  // state machine S0, S1
int a = 0;
int b = 0;

void setup() {
  servoMotor.attach(9);
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input
  Serial.begin(9600);
}

void loop(){
  val = digitalRead(inputPin);       //read input value from PIR Motion Sensor
 
  switch(state){

  case 0:
    digitalWrite( ledPin, LOW );     // set LED ON
    dont_Move( );                  // don't move
    if( val == LOW ){               // Motion Detected!
      state = 1;                     // go to state S1;
      Serial.println("D");
    }
    break;

  case 1:
    digitalWrite( ledPin, HIGH );    // set LED OFF
    if( a%2 == 0 ){
      b = 15;
    }
    else{
      b = 165;
    }
    servo_move(b);                   // start move servo
    a++ ;                        
    if( val == HIGH ){                // Motion Ended!
      a = 0;
      state = 0;                     // return to state S0;
      Serial.println("E");
    }
    break;

  }

}


//fucntion move servo moto
void servo_move(int val){
  int i = 0;
  boolean check = false;
  int outVal = val;
  while( i < 5 ){
    if( outVal >= 165 ){
      check = true;
    }
    if( outVal <= 15 ){
      check = false;
    }
    servoMotor.write( outVal );
    delay( 500 );
    if( check == false ){
      outVal += 30 ;
    }
    if( check == true ){
      outVal -= 30;
    }
    i++;
  }
}


//fucntion stop servo motor
void dont_Move( ){
  servoMotor.write( 15 );
}

------------------------------------------------------------------------------------------------------------ 

ศึกษาอุปการณ์ต่างๆ

1. PIR (Passive Infrared) Motion Sensor
Type
  ที่เราใช้จะเป็นแบบ 
  • 10 m detection type
  • สีขาว

Input-Output

Wiring Diagram



Timing chart
  •  Digital output


  •   Analog output

DETECTION PERFORMANCE
------------------------------------------------------------------
2. Servo Motor 
INCLUDES:
  • One S3003 standard servo with preinstalled round servo horn FUTM0031
  • Four brass eyelets
  • Four Black rectangular rubber grommets (FUTM2348)
  • Four servo mount screws
  • One servo wheel 1-3/8" (35mm) in diameter
  • One X-shape servo arm 1.5" (38mm) across
  • One star shaped arm 1-1/4" (32mm) across
  • Nylon gears
SPECS:
  • Speed: 0.23 sec/60° @ 4.8V
  • 0.19 sec/60° @ 6V
  • Torque: 44 oz-in (3.2 kg-cm) @ 4.8V
  • 57 oz-in (4.1 kg-cm) @ 6V
  • Dimensions: 1.6" x 0.8 x 1.4" (40 x 20 x 36mm) w/o output shaft
  • Weight: 1.3oz (37g)
  • Connector: "J" type with approx. 5" lead
 แหล่งที่มา :
------------------------------------------------------------------
3. Raspberry Pi and Arduino Connected


หัวข้อโปรเจค

indoor camera surveillance system with motion detection
ระบบกล้องบันทึกภาพอัตโนมัติพร้อมตรวจจับการเคลื่อนไหวของบุคคลในอาคาร


  • บอร์ด  Raspberry Pi + Raspbian OS
  • สามารถเชื่อมต่อกับกล้อง USB webcam ได้
  • สามารถดึงภาพมาเก็บในฐานข้อมูล (ในตัวเอง ถ้าทำเป็น server) หรือ ส่งไปข้อมูลภาพ (.jpg)ไปเก็บในเครื่อง server อื่นในเครือข่ายได้
  • ได้กำหนดให้การบันทึกภาพเกิดขึ้นเมื่อตรวจจับการเคลื่อนไหวของคนในอาคาร (ใช้เซนเซอร์ชนิดที่เรียกว่า PIR Motion sensor) โดยเชื่อมต่อกับบอร์ด Arduino
  • บอร์ด Arduino นั้นเชื่อมต่อกับบอร์ด Raspberry Pi (ผ่าน USB-to-serial)
  • และเมื่อตรวจจับความเคลื่อนไหวได้ จะส่งข้อมูลไปแจ้งให้ Raspberry Pi ซึ่งอยู่ในเครือข่าย LAN เดียวกัน
  • ทำการบันทึกภาพลงในฐานข้อมูล (ก่อนหน้า ขณะนั้น และหลังจากนั้น เช่น 5 รูป ทุกๆ 1 วินาที) + วัน-เวลา (timestamp)
  • นอกจากนั้น กล้อง webcam จะต้องติดตั้งอยู่บน R/C servo (ควบคุมการหมุนด้วย Arduino)
  • เมื่อตรวจจับการเคลื่อนไหวได้ จะต้องหมุนกล้องอัตโนมัติ เพื่อทำให้รูปภาพจากหลายมุม (อย่างน้อย 3 มุม)
  • ข้อมูลภาพสามารถดูผ่านเว็บได้ เช่น ระบุช่วงเวลา เพื่อเรียกดูรูปภาพย้อนหลัง (ถ้ามีการบันทึกในช่วงดังกล่าวเกิดขึ้น)

Mini-Project

Mini-Project : 010123009 Embidded System Design

Instructor : Dr.Rawat Siripokapirom
Topic : Indoor Camera Surveillance System with Motion Detection

Member Of Group
1. นาย เจนณรงค์ ชินพรหม 54-010126-2007-4
2. นาย ชัยดิษฐ์ แช่มคำ 54-010126-2009-1
3. นาย ธีรพงศ์ ปานบุญยืน 54-010126-2013-9