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)

Komponen dan persediaan

Arduino UNO
× 1
Modul Bluetooth HC-05
× 1
Kamera OV7670
× 1
Pelindung TFT Arduino
× 1

Tentang proyek ini

Hari ini Anda hampir tidak dapat mengejutkan siapa pun dengan ponsel dengan kamera, gadget nirkabel, dan kemajuan teknis lainnya. Berkat platform Arduino, jutaan orang telah menemukan dunia elektronik dan pemrograman yang indah. 100.500 instruksi ditulis tentang cara bertukar data antara ponsel dan Arduino melalui bluetooth... Apa yang saya bicarakan? Ya. Saya ingin bertukar data antara ponsel di Android dan Arduino UNO melalui bluetooth dalam 100, 501 kali. Tapi saya ingin mengirimkan bukan hanya sekumpulan karakter dan angka, tapi juga gambar.

Seseorang akan mengatakan bahwa ini tidak mungkin, Arduino terlalu lambat untuk memproses data dalam jumlah besar dengan kecepatan yang baik. Dan dia akan benar sekali. Dan bagaimana jika sedikit bantuan Arduino - untuk mentransfer semua kerja "keras" di pundak perangkat lain? Dan ada perangkat seperti itu!

Ini adalah perisai TFT unik untuk Arduino. Informasi tentang logo ini ada di artikel ini:artikel 1, artikel 2 Dalam tutorial ini, saya akan menunjukkan bagaimana Anda dapat menghubungkan melalui bluetooth antara Arduino dan ponsel Android, mendapatkan gambar dari kamera OV7670 di Arduino UNO dan mentransfernya ke ponsel Android. Kemudian, sebaliknya, transfer gambar (gambar dari kamera) dari ponsel Android ke Arduino UNO dan tampilkan di layar pelindung TFT yang unik.

Sebuah aplikasi khusus ditulis untuk ponsel Android.

Karakteristik singkat dari pelindung TFT:

  • Ukuran diagonal 3,5 ",
  • Resolusi 320x240,
  • Jumlah warna 65536 (16-bit),
  • Layar sentuh resistif (pengontrol XPT2046),
  • 5 tombol,
  • IC RTC DS1307 dengan baterai lithium 3V CR1220,
  • Slot untuk menghubungkan kartu micro SD,
  • Konektor 4-pin (2,54 mm) untuk menghubungkan modul Bluetooth HC-05 (-06), modul WiFi ESP8286.
  • Konektor 20-pin (2,54 mm) untuk kamera (OV7670).

Daftar Komponen yang Dibutuhkan

Perangkat Keras :

  • Arduino UNO;
  • Pelindung TFT unik;
  • Adaptor daya AC-DC 6-12 volt,>600mA;
  • Kamera OV7670;
  • Modul Bluetooth HC-06 (HC-05);
  • Ponsel Android.

Perhatian:Perlu (!) Untuk menggunakan adaptor daya 6-12 volt untuk mengoperasikan pelindung TFT, karena arus maksimum 500 mA dari USB tidak cukup untuk pengoperasian normal.

Perangkat Lunak :

  • IDE Arduino;
  • Perpustakaan untuk perisai TFT Unik;
  • File APK untuk ponsel Android.

Mempersiapkan

Perangkat Lunak

Semua sketsa demonstrasi ditulis di lingkungan Arduino IDE, oleh karena itu pada awalnya perlu menginstal Arduino IDE - https://www.arduino.cc/en/main/software.Kemudian Anda perlu menginstal perpustakaan untuk perisai TFT - github.com/YATFT/YATFT (unduh library dan ekstrak ke folder "libraries" di direktori Arduino IDE).

Setelah menginstal Arduino IDE, Anda harus memprogram board Arduino UNO. Untuk kesederhanaan, saya sarankan untuk menginstalnya secara terpisah, tanpa pelindung TFT. Untuk ini:

  • Hubungkan kabel USB ke papan Arduino UNO;
  • Jalankan Arduino IDE di komputer;
  • Pilih port yang sesuai yang terhubung dengan Arduino UNO;
  • Unduh ArduinoBluetoothCamera.ino sketsa demo (dan file ov7670_regs.h untuk init kamera);
  • Klik tombol Unggah .

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

ArduinoBluetoothCamera.ino sketsa:

/****************************************** **************************** PERANGKAT LUNAK DAN DOKUMENTASI DISEDIAKAN "SEBAGAIMANA ADANYA" TANPA JAMINAN* APAPUN, BAIK TERSURAT MAUPUN TERSIRAT, TERMASUK TANPA PEMBATASAN, SETIAP* JAMINAN DAPAT DIPERDAGANGKAN, HUKUM, NON-PELANGGARAN DAN KESESUAIAN UNTUK TUJUAN TERTENTU*. DALAM KEADAAN APA PUN PENULIS ATAU PEMBERI LISENSINYA* TIDAK BERTANGGUNG JAWAB ATAU WAJIB BERDASARKAN KONTRAK, KELALAIAN, TANGGUNG JAWAB YANG KETAT,* KONTRIBUSI, PELANGGARAN JAMINAN, ATAU TEORI SAMA HUKUM LAINNYA* TIDAK TERMASUK KERUSAKAN LANGSUNG ATAU TIDAK LANGSUNG* KERUSAKAN KHUSUS, TIDAK LANGSUNG, HUKUM ATAU KONSEKUENSIAL,* KEHILANGAN KEUNTUNGAN ATAU KEHILANGAN DATA, BIAYA PENGADAAN BARANG PENGGANTI,* TEKNOLOGI, JASA, ATAU KLAIM APA PUN OLEH PIHAK KETIGA (TERMASUK TETAPI TIDAK TERBATAS) .************************************************* **********************/#include #include #include #include #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 240uint8_t mode =0 last_umodeint8_t 0;uint8_t start_capt =0;uint16_t err;void setup(){ // menginisialisasi port serial Serial.begin(115200); // inisialisasi tampilan tft.begin(); tft.SetColor(MERAH); tft.ClearDevice();}void loop(){ // letakkan kode utama Anda di sini, untuk dijalankan berulang kali:if (Serial.available()) { uint8_t temp =Serial.read(); switch (temp) { case 0x10:// Kirim mode Foto tunggal =1; start_capt =1; if (mode_terakhir !=mode &&mode_terakhir !=2) { tft.begin(); tft.SetRGB(); // Beralih ke mode RGB cam.CamInit(&OV7670_QVGA[0][0]); cam.CamVideoPreview(0, 0, 1, benar); codec.JPEGInit(); codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY); penundaan (1000); } merusak; case 0x20:// Pengiriman terus menerus Mode foto =2; start_capt =2; if (mode_terakhir !=mode &&mode_terakhir !=1) { tft.begin(); tft.SetRGB(); // Beralih ke mode RGB cam.CamInit(&OV7670_QVGA[0][0]); cam.CamVideoPreview(0, 0, 1, benar); codec.JPEGInit(); codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY); } merusak; case 0x30:// Menerima mode Foto tunggal =3; start_capt =3; if (mode_terakhir !=mode &&mode_terakhir !=4) { tft.begin(); tft.SetYUV(); // Beralih ke mode YUV } istirahat; case 0x40:// Terus menerus menerima mode Foto =4; start_capt =4; if (mode_terakhir !=mode &&mode_terakhir !=3) { tft.begin(); tft.SetYUV(); // Beralih ke mode YUV } istirahat; default:istirahat; } } if (mode ==1) // Kirim satu Foto { if (start_capt ==1) { start_capt =0; last_mode =mode; modus =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) // Berhenti ? { start_capt =0; last_mode =mode; modus =0; merusak; } jika (CamCapture()) melanjutkan; } } else if (mode ==3) // Terima satu Foto { if (start_capt ==3) { //Mulai pengambilan start_capt =0; last_mode =mode; modus =0; Serial.print("!"); srl.JPEGReadFromSerial(&jpeg_decode, // struktur decode jpeg 0, // x0 (kiri) 0, // y0 (atas) GetMaxX()+1, // x1 (kanan) GetMaxY()+1, // y1 (bawah ) 32000); // ukuran gambar maksimal } } else if (mode ==4) // Terus menerus menerima Foto { uint8_t temp =Serial.read(); while (1) { if (start_capt ==4) { //Start capture start_capt =0; } if (temp ==0x41) // Berhenti ? { start_capt =0; last_mode =mode; modus =0; merusak; } Serial.print("!"); srl.JPEGReadFromSerial(&jpeg_decode, // struktur decode jpeg 0, // x0 (kiri) 0, // y0 (atas) GetMaxX()+1, // x1 (kanan) GetMaxY()+1, // y1 (bawah ) 32000); // ukuran gambar maksimal } }}uint8_t CamCapture(void){ uint8_t temp =0xff, temp_last =0; bool is_header =salah; panjang uint32_t =0; panjang =codec.JPEGStart(); uint32_t en_jpeg_address =ifc.rdReg32(0x414)<<2; int k =0; if ((panjang>=0x5FFFF) | (panjang ==0)) { start_capt =2; kembali 1; } temp =ifc.GetMem(en_jpeg_address+k); k++; panjang --; while ( panjang-- ) { temp_last =suhu; 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) ) //Jika menemukan akhir ,break while, break; } is_header =salah; kembali 0;} 

OV7670_regs.h:

#ifndef OV7670_REGS_H#define OV7670_REGS_Hconst uint8_t OV7670_VGA[][2] PROGMEM ={ { 1, 0x42}, // Ukuran byte, Alamat (ID) { 640/16, 480/16}, // Ukuran X, Ukuran Y {0b01000010, 0b000000100}, // 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}, // Ukuran byte, Alamat (ID) { 320/16, 240/16}, // Ukuran X, Ukuran Y {0b01000010, 0b000000100}, // 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

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

Perbarui 26/05/2020 !

Saya menambahkan kode sumber ArduinoTFT.apk. DENGAN ADANYA! Unduh ArduinoTFT.zip.h

, ganti namanya menjadi ArduinoTFT.zip dan buka ritsleting. Menikmati!

Perbarui 25/07/2020 !

"Hai, saya memiliki masalah yang sama dengan Aplikasi Android yang tidak berfungsi. Selesai setelah mengizinkan Aplikasi untuk mengakses di kamera ponsel cerdas. Itu saja. Sampai jumpa" (c)

Modul Bluetooth

Penting untuk mengatur nilai tukar 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 membutuhkan jumlah RAM yang lebih besar). Petunjuk lebih rinci tentang cara mengatur nilai tukar 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 memprogram Arduino UNO (lengkap dengan modul Bluetooth) harus melepaskan modul Bluetooth. Dan setelah pemrograman, atur kembali (!)

Perakitan

Perakitan perangkat cukup sederhana:

  • Hubungkan bersama Arduino UNO dan TFT-shield;
  • Hubungkan kamera OV7670 ke konektor 20-pin pada pelindung TFT pelindung (terkadang saya menggunakan konektor 18-20 pin bersudut dengan pitch 2,54 mm sebagai adaptor);
  • Hubungkan modul Bluetooth HC-06 (HC-05) ke konektor 4-pin dengan tulisan "Bluetooth" pada pelindung TFT;
  • Hubungkan adaptor daya 6-12V ke input daya pada board Arduino UNO.

Setelah menyalakan daya, layar pelindung TFT akan berubah menjadi merah. Ini berarti kesediaan untuk menerima perintah dari ponsel Android.

Demonstrasi

Lakukan operasi berikut di ponsel Android:

  • Luncurkan ArduinoTFT aplikasi di ponsel Android;
  • Putar ponsel dalam posisi horizontal;
  • Aktifkan koneksi Bluetooth, pilih modul Bluetooth yang terdeteksi (HC-06);

Dua jendela dan empat tombol akan muncul di layar:

  • Jendela kanan atas adalah jendela jendela bidik kamera ponsel;
  • Jendela kiri besar - gambar yang diterima atau dikirim.

Fungsi tombol:

  • Mentransfer satu gambar dari ponsel Android ke Arduino;
  • Transfer gambar terus menerus dari ponsel Android ke Arduino;
  • Mentransfer satu gambar dari Arduino ke ponsel Android;
  • Transfer gambar terus menerus dari Arduino ke ponsel Android.

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

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

Terima kasih telah menonton!

Artikel sebelumnya:

1) Perisai TFT Unik untuk Arduino Uno - Mulai,

2) Perisai TFT Arduino Unik - Kamera OV7670.

Artikel selanjutnya:

3) Pelindung TFT untuk Arduino Nano - Mulai,

4) Foto dan video RGB pada layar TFT SPI.

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

Pembaruan 01.04.2021:

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

Kode

Perpustakaan untuk pelindung TFT
http://github.com/YATFT/YATFT

Suku cadang dan penutup khusus

Bereksperimenlah dengan OV7670 dan TV remote control Bereksperimen dengan kamera OV7670 dan remote control TV

Proses manufaktur

  1. Kamera
  2. Lensa Kamera
  3. BrickPi Bookreader
  4. Robot Raspberry Pi dikendalikan melalui Bluetooth
  5. Penggeser Kamera Bermotor yang Dikendalikan Bluetooth Arduino
  6. Arduino dengan Bluetooth untuk Mengontrol LED!
  7. Peralatan yang Dikendalikan Suara Bluetooth dengan OK Google
  8. Kamera Pengawasan Jarak Jauh Seluler
  9. Sistem deteksi jatuh berdasarkan Arduino, Windows dan Azure
  10. Arduino Uno + Perangkat Listrik (Bulb) + Ponsel Android