Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar

Komponen dan Perlengkapan

Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Arduino UNO
×1
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Modul Bluetooth HC-05
×1
Kamera OV7670
×1
TFT shield Arduino
×1

Tentang Proyek Ini

Kini sulit untuk mengejutkan siapa pun dengan ponsel dengan kamera, perangkat nirkabel, dan kemajuan teknis lainnya. Berkat platform Arduino, jutaan orang telah menemukan dunia elektronika dan pemrograman yang luar biasa. 100, 500 instruksi ditulis tentang cara bertukar data antara ponsel dan Arduino melalui bluetooth... Dari apa yang saya bicara? Ya. Saya ingin bertukar data antara ponsel Android dan Arduino UNO melalui bluetooth sebanyak 100, 501 kali. Tapi saya ingin mentransfer bukan sekadar sekumpulan karakter dan angka, tetapi gambar.

Seseorang akan mengatakan ini mustahil, Arduino terlalu lambat untuk memproses sejumlah besar data dengan kecepatan baik. Dan dia akan benar sekali. Dan bagaimana jika sedikit membantu Arduino - untuk mentransfer semua pekerjaan "berat" ke bahu perangkat lain? Dan ada perangkat seperti itu!

Ini adalah TFT shield unik untuk Arduino. Informasi tentang logo ini ada dalam artikel ini: artikel 1, artikel 2 Dalam tutorial ini, saya akan menunjukkan bagaimana Anda dapat terhubung melalui bluetooth antara Arduino dan ponsel Android, mendapatkan gambar dari kamera OV7670 pada Arduino UNO dan mentransfernya ke ponsel Android. Lalu, sebaliknya, mentransfer gambar (gambar dari kamera) dari ponsel Android ke Arduino UNO dan menampilkannya pada layar TFT shield unik ini.

Aplikasi khusus ditulis untuk ponsel Android.

Karakteristik singkat TFT shield:

Daftar Komponen yang Diperlukan

Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar

Hardware:

Perhatian: Diperlukan (!) adapter daya 6-12 volt untuk mengoperasikan TFT shield, karena arus maksimum 500 mA dari USB tidak cukup untuk operasi normal.

Perangkat lunak:

Persiapan

Perangkat lunak

Semua sketsa demonstrasi ditulis di lingkungan Arduino IDE, jadi di awal diperlukan untuk menginstal Arduino IDE - https://www.arduino.cc/en/main/software. Lalu Anda perlu menginstal library untuk TFT shield - github.com/YATFT/YATFT (unduh library dan ekstrak ke dalam folder "libraries" di direktori Arduino IDE).

Setelah menginstal Arduino IDE, Anda harus memrogram papan Arduino UNO. Untuk kesederhanaan, saya merekomendasikan memflashnya secara terpisah, tanpa TFT shield. Untuk ini:

Jika papan Arduino UNO berhasil diprogram, Anda dapat melanjutkan ke langkah berikutnya.

Sketsa ArduinoBluetoothCamera.ino:

/********************************************************************** * SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF * ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY * WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL AUTHOR OR ITS LICENSORS BE * LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, * CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY * DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO * ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, * LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, * TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT * NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. ***********************************************************************/ #include <YATFT.h> #include <util/yacam.h> #include <util/yacodec.h> #include <util/yasrl.h> #include "ov7670_regs.h" JPEG_DECODE jpeg_decode; YATFT tft(0); INTRFC ifc; CAM cam; CODEC codec; SRL srl; #define IMG_SizeX 320 #define IMG_SizeY 240 uint8_t mode = 0; uint8_t last_mode = 0; uint8_t start_capt = 0; uint16_t err; void setup() { // initialize the serial port Serial.begin(115200); // initialize the display tft.begin(); tft.SetColor(BRIGHTRED); tft.ClearDevice(); } void loop() { // put your main code here, to run repeatedly: if (Serial.available()) { uint8_t temp = Serial.read(); switch (temp) { case 0x10: // Send single Photo mode = 1; start_capt = 1; if (last_mode != mode && last_mode != 2) { tft.begin(); tft.SetRGB(); // Switch to RGB mode cam.CamInit(&OV7670_QVGA[0][0]); cam.CamVideoPreview(0, 0, 1, true); codec.JPEGInit(); codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY); delay(1000); } break; case 0x20: // Continuous send Photo mode = 2; start_capt = 2; if (last_mode != mode && last_mode != 1) { tft.begin(); tft.SetRGB(); // Switch to RGB mode cam.CamInit(&OV7670_QVGA[0][0]); cam.CamVideoPreview(0, 0, 1, true); codec.JPEGInit(); codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY); } break; case 0x30: // Receive single Photo mode = 3; start_capt = 3; if (last_mode != mode && last_mode != 4) { tft.begin(); tft.SetYUV(); // Switch to YUV mode } break; case 0x40: // Continuous receive Photo mode = 4; start_capt = 4; if (last_mode != mode && last_mode != 3) { tft.begin(); tft.SetYUV(); // Switch to YUV mode } break; default: break; } } if (mode == 1) // Send single Photo { if (start_capt == 1) { start_capt = 0; last_mode = mode; mode = 0; CamCapture(); } } else if (mode == 2) // Continuous send Photo { while (1) { uint8_t temp = Serial.read(); if (start_capt == 2) { start_capt = 0; } if (temp == 0x21) // Stop ? { start_capt = 0; last_mode = mode; mode = 0; break; } if (CamCapture()) continue; } } else if (mode == 3) // Receive single Photo { if (start_capt == 3) { //Start capture start_capt = 0; last_mode = mode; mode = 0; Serial.print("!"); srl.JPEGReadFromSerial(&jpeg_decode, // jpeg decode structure 0, // x0 (left) 0, // y0 (top) GetMaxX()+1, // x1 (right) GetMaxY()+1, // y1 (bottom) 32000); // max image size } } else if (mode == 4) // Continuous receive Photo { uint8_t temp = Serial.read(); while (1) { if (start_capt == 4) { //Start capture start_capt = 0; } if (temp == 0x41) // Stop ? { start_capt = 0; last_mode = mode; mode = 0; break; } Serial.print("!"); srl.JPEGReadFromSerial(&jpeg_decode, // jpeg decode structure 0, // x0 (left) 0, // y0 (top) GetMaxX()+1, // x1 (right) GetMaxY()+1, // y1 (bottom) 32000); // max image size } } } uint8_t CamCapture(void) { uint8_t temp = 0xff, temp_last = 0; bool is_header = false; uint32_t length = 0; length = codec.JPEGStart(); uint32_t en_jpeg_address = ifc.rdReg32(0x414)<<2; int k = 0; if ((length >= 0x5FFFF) | (length == 0)) { start_capt = 2; return 1; } temp = ifc.GetMem(en_jpeg_address+k); k++; length --; while ( length-- ) { temp_last = temp; temp = ifc.GetMem(en_jpeg_address+k); k++; if (is_header == true) { Serial.write(temp); } else if ((temp == 0xD8) & (temp_last == 0xFF)) { is_header = true; Serial.write(temp_last); Serial.write(temp); } if ( (temp == 0xD9) && (temp_last == 0xFF) ) //If find the end ,break while, break; } is_header = false; return 0; } 

File OV7670_regs.h:

#ifndef OV7670_REGS_H #define OV7670_REGS_H const uint8_t OV7670_VGA[][2] PROGMEM = { { 1, 0x42}, // Size of byte, Address (ID) { 640/16, 480/16}, // Size X, Size Y {0b01000010, 0b00000100}, // Reset_Enable_N, 7|6|5|4|3|Vsync Invert|Hsync Invert|0 {0x3a, 0x0C}, {0x40, 0xC0}, {0x12, 0x00}, {0x0c, 0x00}, {0x3e, 0x00}, {0x70, 0x3A}, {0x71, 0x35}, {0x72, 0x11}, {0x73, 0xF0}, {0xa2, 0x02}, {0x11, 0x80}, {0x7a, 0x18}, {0x7b, 0x02}, {0x7c, 0x07}, {0x7d, 0x1F}, {0x7e, 0x49}, {0x7f, 0x5A}, {0x80, 0x6A}, {0x81, 0x79}, {0x82, 0x87}, {0x83, 0x94}, {0x84, 0x9F}, {0x85, 0xAF}, {0x86, 0xBB}, {0x87, 0xCF}, {0x88, 0xEE}, {0x89, 0xEE}, {0x13, 0xE0}, {0x00, 0x00}, {0x10, 0x00}, {0x0d, 0x00}, {0x24, 0x98}, {0x25, 0x63}, {0x26, 0xD3}, {0x2a, 0x00}, {0x2b, 0x00}, {0x2d, 0x00}, {0x13, 0xe5}, {0x13, 0xe7}, {0x1e, 0x30}, {0x74, 0x60}, {0x01, 0x80}, {0x02, 0x80}, {0x15, 0x10}, {0x4f, 0x40}, {0x50, 0x34}, {0x51, 0x0C}, {0x52, 0x17}, {0x53, 0x29}, {0x54, 0x40}, {0x57, 0x80}, {0x58, 0x1e}, {0x41, 0x10}, {0x75, 0x60}, {0x76, 0x50}, {0x77, 0x48}, {0x3d, 0x92}, {0x3b, 0x00}, {0x04, 0x00}, {0xff, 0xff}, }; const uint8_t OV7670_QVGA[][2] PROGMEM = { { 1, 0x42}, // Size of byte, Address (ID) { 320/16, 240/16}, // Size X, Size Y {0b01000010, 0b00000100}, // Reset_Enable_N, 7|6|5|4|3|Vsync Invert|Hsync Invert|0 {0x3a, 0x0C}, {0x40, 0xC0}, {0x12, 0x10}, {0x0c, 0x00}, {0x3e, 0x00}, {0x70, 0x3A}, {0x71, 0x35}, {0x72, 0x11}, {0x73, 0xF0}, {0xa2, 0x02}, {0x11, 0x80}, {0x7a, 0x18}, {0x7b, 0x02}, {0x7c, 0x07}, {0x7d, 0x1F}, {0x7e, 0x49}, {0x7f, 0x5A}, {0x80, 0x6A}, {0x81, 0x79}, {0x82, 0x87}, {0x83, 0x94}, {0x84, 0x9F}, {0x85, 0xAF}, {0x86, 0xBB}, {0x87, 0xCF}, {0x88, 0xEE}, {0x89, 0xEE}, {0x13, 0xE0}, {0x00, 0x00}, {0x10, 0x00}, {0x0d, 0x00}, {0x24, 0x98}, {0x25, 0x63}, {0x26, 0xD3}, {0x2a, 0x00}, {0x2b, 0x00}, {0x2d, 0x00}, {0x13, 0xe5}, {0x13, 0xe7}, {0x1e, 0x30}, {0x74, 0x60}, {0x01, 0x80}, {0x02, 0x80}, {0x15, 0x10}, {0x4f, 0x40}, {0x50, 0x34}, {0x51, 0x0C}, {0x52, 0x17}, {0x53, 0x29}, {0x54, 0x40}, {0x57, 0x80}, {0x58, 0x1e}, {0x41, 0x10}, {0x75, 0x60}, {0x76, 0x50}, {0x77, 0x48}, {0x3d, 0x92}, {0x3b, 0x00}, {0x04, 0x00}, {0xff, 0xff}, }; #endif 

Android

Pada ponsel Android, Anda perlu menginstal ArduinoTFT.apk. Izinkan aplikasi untuk menggunakan Bluetooth dan Kamera.

Update 05/26/2020!

Saya menambahkan sourcecode ArduinoTFT.apk. AS IS! Unduh ArduinoTFT.zip.h

, ganti nama menjadi ArduinoTFT.zip dan ekstrak. Nikmati!

Update 07/25/2020!

"Hi, i had the same problem with the Android App wich doesn't work. Solved after authorized the App to access at the smartphone camera. That's it. Bye" (c)

Modul Bluetooth

Diperlukan untuk menetapkan tingkat pertukaran dalam modul Bluetooth menjadi 115200 (perintah "AT+UART=115200, 0, 0"). Ini adalah kecepatan optimal di mana Arduino UNO berhasil menerima dan memproses data. (Secara teoritis, Anda dapat meningkatkan kecepatan, mengoptimalkan penerimaan dan pemrosesan data, tetapi ini memerlukan jumlah RAM yang lebih besar). Instruksi lebih rinci tentang cara menetapkan tingkat pertukaran dapat ditemukan di Internet, misalnya di sini: https://www.instructables.com/id/Communication-Bluetooth-Module-With-HC-05-HC-06/ .

(!) Harap dicatat bahwa modul Bluetooth terhubung ke port debug Arduino UNO. Jadi, saat bekerja dengan bluetooth, port debug tidak tersedia. Dan sebelum memrogram Arduino UNO (dengan modul Bluetooth), harus memutuskan koneksi modul Bluetooth. Dan setelah pemrograman, atur kembali (!)

Rangkaian

Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar

Rangkaian perangkat ini cukup sederhana:

Setelah menyala, layar TFT shield akan berwarna merah. Ini berarti siap menerima perintah dari ponsel Android.

Demonstrasi

Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar
Kamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar

Lakukan operasi berikut pada ponsel Android:

Dua jendela dan empat tombol akan muncul di layar:

Fungsi tombol:

Ukuran gambar adalah 320x240 piksel (2-5 kB). Bab ini memiliki video demo.

Jika Anda menyukai artikel saya, saya akan mengapresiasi penilaian Anda. Mungkin ini akan memberi saya motivasi untuk artikel baru. :-)

Terima kasih sudah menonton!

Artikel sebelumnya:

1) TFT Shield Unik untuk Arduino Uno - Mulai,

2) TFT Shield Unik Arduino - OV7670 Cam.

Artikel selanjutnya:

3) TFT shield untuk Arduino Nano - Mulai,

4) Foto dan video RGB pada layar TFT SPI.

5) Kontrol Robot Car 4WD melalui Bluetooth dengan Smartphone.

Update 01.04.2021:

Halo lagi! Ada library yang diperbarui untuk serangkaian layar, yang saat ini terdiri dari dua shield dan dua papan breakout. Sketsa dikompilasi tergantung pada versi yang dipilih (dari 1 hingga 4) dan jenis mikrokontroler (MegaAVR atau ESP-32). Ditambahkan foto, contoh. Informasi lebih lanjut dapat ditemukan di https://github.com/Ekaburg/EkaTFT.

Kode

Library untuk TFT shield

https://github.com/YATFT/YATFT

Bagian dan Kotak Pelindung Khusus

Eksperimen dengan OV7670 dan pengendali TV jarak jauhKamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar

Eksperimen dengan kamera OV7670 dan pengendali TV jarak jauhKamera Bluetooth Arduino (ABC): Hubungkan Ponsel Anda melalui Bluetooth untuk Mengambil Gambar

Proses manufaktur

  1. Evolusi dan Desain Kamera Modern
  2. Memahami Lensa Kamera: Desain, Sejarah, dan Inovasi Masa Depan
  3. BrickPi Bookreader: Otomatisasi Pembacaan Kindle dengan Raspberry Pi dan LEGO Mindstorms
  4. Membuat Robot Raspberry Pi yang Dikontrol Bluetooth dengan Umpan Balik Suara
  5. Slider Kamera Motoris Arduino dengan Bluetooth untuk Gambar Sinematik Halus
  6. Kontrol LED melalui Bluetooth dengan Arduino – Panduan DIY Sederhana
  7. Peralatan Rumah Tangga Diaktifkan Suara: Kontrol Bluetooth dengan Google Assistant
  8. Sistem Kamera Pengawasan Jarak Jauh Portabel
  9. Sistem Deteksi Jatuh Canggih dengan Arduino, Windows IoT, dan Azure Cloud
  10. Kendali Jarak Jauh Lampu dengan Arduino Uno, Relay, dan Aplikasi Android