Arduino kết hợp với Camera RS232 PTC06, Cảm biến chuyển động PIR và Module đọc/ghi thẻ nhớ Micro SD.
1. Giới thiệu:
Đề tài: Nghiên cứu và thiết kế thi công mạch điều khiển Camera giám sát bằng Arduino.
Đây cũng là đề tài mình nghiên cứu đồ án môn học, mặc dù không thành công lắm, nhưng vẫn chia sẽ cho mọi người.
***Nhược điểm: Camera chụp ảnh mờ, chứ mô hình hoạt động khá tốt.
2. Thực hiện thôi nào:
Bước 1: Kết nối phần cứng như sơ đồ nguyên lí.
Bước 2: Thư viện hỗ trợ: Các thư viện bên dưới tùy phiên bản IDE có phiên bản sẽ có sẵn, có phiên bản sẽ không có. Nếu không có các bạn tìm trên google và tải xuống thêm vào.
1. Softwareserial
2. Newsoftwareserial
3. SD
4. SPI
Tải thư viện hỗ trợ cho Camera RS232 PTC06 theo link bên dưới:
http://www.mediafire.com/file/tfnpzimuxjst0y6/Adafruit-VC0706-Serial-Camera-Library-master.zip
Bước 3: Copy đoạn code mẫu sau dán vào IDE.
Bươc 4: Biên dịch chương trình và đổ xuống phần cứng chạy thực nghiệm.
***Chú ý: Nếu Arduino không nhận Camera trên Serial Port máy tính, thì chỉnh lại thư viện trong Cpp.
***Lưu đồ giải thuật:
CODE:
#include <Adafruit_VC0706.h>
#include <SPI.h>
#include <SD.h>
#include <SoftwareSerial.h>
#define chipSelect 10
SoftwareSerial cameraconnection = SoftwareSerial(2, 3); // 2-tx and 3-rx
Adafruit_VC0706 cam = Adafruit_VC0706(&cameraconnection);
void setup() {
pinMode(8,INPUT_PULLUP);
pinMode(6,OUTPUT);
#if !defined(SOFTWARE_SPI)
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
if(chipSelect != 53) pinMode(53, OUTPUT); // CS trên Mega
#else
if(chipSelect != 10) pinMode(10, OUTPUT); // CS trên UNO
#endif
#endif
Serial.begin(9600);
Serial.println("Kiểm tra Camera chụp!");
// Tìm kiếm thẻ nhớ, nếu thẻ tồn tại có thể khởi tạo
if (!SD.begin(chipSelect)) {
Serial.println("Thẻ hỏng hoặc không tồn tại");
// Nếu thẻ hỏng thì dừng lại
return;
}
}
void loop() {
if ( digitalRead (8) > 0 )
{
digitalWrite(6,HIGH);
// Thử tìm Camera
if (cam.begin()) {
Serial.println("Tìm kiếm Camera:");
} else {
Serial.println("Không tìm được Camera?");
return;
}
// In thông tin của Camera
char *reply = cam.getVersion();
if (reply == 0) {
Serial.print("Phiên bản hỏng");
} else {
Serial.println("-----------------");
Serial.print(reply);
Serial.println("-----------------");
}
// Đặt kích thước hình ảnh 640x480, 320x240 hoặc 160x120
// Kích thước ảnh càng lớn tốn nhiều thời gian truyền tệp
//cam.setImageSize(VC0706_640x480); // Lớn nhất
//cam.setImageSize(VC0706_320x240); // Trung bình
cam.setImageSize(VC0706_160x120); // Nhỏ
// Đọc kích thước ảnh từ Camera
uint8_t imgsize = cam.getImageSize();
Serial.print("Kích thước ảnh: ");
if (imgsize == VC0706_640x480) Serial.println("640x480");
if (imgsize == VC0706_320x240) Serial.println("320x240");
if (imgsize == VC0706_160x120) Serial.println("160x120");
Serial.println("Chụp trong...");
delay(250);
if (! cam.takePicture())
Serial.println("Chụp hỏng!");
else
Serial.println("Ảnh đã được chụp!");
// Tạo một hình ảnh với tên theo mẫu IMAGExx.JPG
char filename[13];
strcpy(filename, "IMAGE00.JPG");
for (int i = 0; i < 100; i++) {
filename[5] = '0' + i/10;
filename[6] = '0' + i%10;
// Tạo nếu không tồn tại, không mở hiện tại, viết, đồng bộ sau khi viết
if (! SD.exists(filename)) {
break;
}
}
// Mở file để viết
File imgFile = SD.open(filename, FILE_WRITE);
// Nhận kích thước hình ảnh đã chụp
uint16_t jpglen = cam.frameLength();
Serial.print("Đang lưu...");
Serial.print(jpglen, DEC);
Serial.print(" byte image.");
int32_t time = millis();
// Đọc tất cả dữ liệu
byte wCount = 0; // Đang đếm
while (jpglen > 0) {
// Đọc 64 byte ở một thời điểm
uint8_t *buffer;
uint8_t bytesToRead = min(64, jpglen); // Thay đổi từ 32 đến 64 cho một tốc độ nhưng có thể không làm việc với tất cả các thiết lập!
buffer = cam.readPicture(bytesToRead);
imgFile.write(buffer, bytesToRead);
if(++wCount >= 64) {
Serial.print('.');
wCount = 0;
}
//Serial.print("Read "); Serial.print(bytesToRead, DEC); Serial.println(" bytes");
jpglen -= bytesToRead;
}
imgFile.close();
digitalWrite(6, LOW);
time = millis() - time;
Serial.println("Xong!");
Serial.print(time);
Serial.println(" ms.");// Chụp tốn thời gian bao nhiêu mili giây
}
}
//mail: tranduylinhvlute@gmail.com
Chúc các bạn thành công.