Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen

Komponenten und Zubehör

Komponente Menge
Arduino UNO 1
HC-05 Bluetooth-Modul (oder HC-06) 1
Kamera OV7670 (ohne FIFO, 20-polig) 1
Unique TFT Shield für Arduino (3,5″, 320×240, 65k Farben, Touch, microSD, RTC, BT-Stecker, Kamera-Stecker) 1

Über das Projekt

Heutzutage hat jedes Smartphone eine Kamera. Mit Arduino und Bluetooth lassen sich Daten austauschen – aber Bilder? Der Arduino UNO ist zu langsam für große Datenmengen. Die Lösung: Ein spezielles TFT-Shield, das die „schwere“ Bildverarbeitung (JPEG-Encoding/Decoding, Kamera-Interface) übernimmt. Der Arduino fungiert nur als Steuerzentrale und Datendurchreiche.

Besonderheiten des Unique TFT Shield

Benötigte Komponenten

Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen

Hardware: Arduino UNO, Unique TFT Shield, 6–12 V Netzteil (>600 mA), OV7670 Kamera, HC-05/HC-06 Bluetooth, Android-Smartphone.

WICHTIG: USB liefert max. 500 mA – nicht genug für Shield + Kamera. Externes Netzteil (6–12 V) zwingend erforderlich!

Software: Arduino IDE, Library für Unique TFT Shield (GitHub), APK für Android (ArduinoTFT.apk).

Vorbereitung

Software (PC)

  1. Arduino IDE installieren (arduino.cc).
  2. YATFT-Library herunterladen, entpacken in libraries-Ordner.
  3. Arduino UNO ohne Shield per USB flashen (Bluetooth-Modul vorher abziehen!):

Sketch ArduinoBluetoothCamera.ino + Header ov7670_regs.h hochladen.

/**********************************************************************/
#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, last_mode = 0, start_capt = 0;
uint16_t err;

void setup() {
  Serial.begin(115200);
  tft.begin(); tft.SetColor(BRIGHTRED); tft.ClearDevice();
}

void loop() {
  if (Serial.available()) {
    uint8_t temp = Serial.read();
    switch (temp) {
      case 0x10: // Single Photo Senden
        mode = 1; start_capt = 1;
        if (last_mode != mode && last_mode != 2) {
          tft.begin(); tft.SetRGB();
          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 Photo Senden
        mode = 2; start_capt = 2;
        if (last_mode != mode && last_mode != 1) {
          tft.begin(); tft.SetRGB();
          cam.CamInit(&OV7670_QVGA[0][0]);
          cam.CamVideoPreview(0, 0, 1, true);
          codec.JPEGInit(); codec.JPEGSetRegs(IMG_SizeX, IMG_SizeY);
        }
        break;
      case 0x30: // Single Photo Empfangen
        mode = 3; start_capt = 3;
        if (last_mode != mode && last_mode != 4) { tft.begin(); tft.SetYUV(); }
        break;
      case 0x40: // Continuous Photo Empfangen
        mode = 4; start_capt = 4;
        if (last_mode != mode && last_mode != 3) { tft.begin(); tft.SetYUV(); }
        break;
    }
  }

  if (mode == 1) { if (start_capt == 1) { start_capt = 0; last_mode = mode; mode = 0; CamCapture(); } }
  else if (mode == 2) {
    while (1) {
      uint8_t temp = Serial.read();
      if (start_capt == 2) start_capt = 0;
      if (temp == 0x21) { start_capt = 0; last_mode = mode; mode = 0; break; }
      if (CamCapture()) continue;
    }
  }
  else if (mode == 3) {
    if (start_capt == 3) {
      start_capt = 0; last_mode = mode; mode = 0;
      Serial.print("!");
      srl.JPEGReadFromSerial(&jpeg_decode, 0, 0, GetMaxX()+1, GetMaxY()+1, 32000);
    }
  }
  else if (mode == 4) {
    uint8_t temp = Serial.read();
    while (1) {
      if (start_capt == 4) start_capt = 0;
      if (temp == 0x41) { start_capt = 0; last_mode = mode; mode = 0; break; }
      Serial.print("!");
      srl.JPEGReadFromSerial(&jpeg_decode, 0, 0, GetMaxX()+1, GetMaxY()+1, 32000);
    }
  }
}

uint8_t CamCapture(void) {
  uint8_t temp = 0xff, temp_last = 0;
  bool is_header = false;
  uint32_t 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) { 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)) break;
  }
  is_header = false;
  return 0;
}

ov7670_regs.h enthält die Register-Initialisierung für VGA (640×480) und QVGA (320×240) Modus.

Android

ArduinoTFT.apk installieren, Bluetooth- & Kamerazugriff erlauben. Update 07/2020: App funktioniert erst nach Erteilung der Kameraberechtigung.

Quellcode der App: ArduinoTFT.zip.h → umbenennen in .zip → entpacken.

Bluetooth-Modul konfigurieren

Baudrate auf 115200 setzen: AT+UART=115200,0,0. Anleitung z. B. Instructables.

ACHTUNG: Bluetooth-Modul nutzt Debug-Port (Pins 0/1) des Arduino UNO. Vor dem Flashen Bluetooth-Modul abziehen, danach wieder aufstecken!

Aufbau

  1. Arduino UNO + TFT-Shield verbinden.
  2. OV7670 Kamera in 20-poligen Stecker des Shields stecken (ggf. gewinkelter Adapter).
  3. HC-05/HC-06 in 4-poligen „Bluetooth“-Stecker des Shields stecken.
  4. 6–12 V Netzteil an Arduino UNO anschließen.

Nach Einschalten leuchtet der Bildschirm rot – Bereitschaft für Android-Befehle.

Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen

Demonstration

Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen

Android-App Bedienung:

  1. App ArduinoTFT starten, Handy querhalten.
  2. Bluetooth aktivieren, Modul (HC-06) verbinden.
  3. Zwei Fenster + vier Buttons erscheinen:
    • Rechts oben: Handy-Kamera-Vorschau
    • Links groß: Empfangenes/gesendetes Bild
  4. Buttons:
    • Einzelbild Handy → Arduino
    • Kontinuierlich Handy → Arduino
    • Einzelbild Arduino → Handy
    • Kontinuierlich Arduino → Handy

Bildgröße: 320×240 Pixel (2–5 kB JPEG). Demo-Video im Originalprojekt.

Code / Library

YATFT Library: github.com/YATFT/YATFT

3D-Druck-Teile & Gehäuse

Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen
Arduino Bluetooth Camera (ABC): Smartphone per Bluetooth verbinden & Bilder aufnehmen

Weiterführende Artikel des Autors:

  1. Unique TFT Shield für Arduino Uno – Start
  2. Unique Arduino TFT Shield – OV7670 Cam
  3. TFT Shield für Arduino Nano – Start
  4. Fotos & RGB-Video auf TFT SPI Display
  5. Smartphone-Steuerung 4WD Roboter-Auto per Bluetooth

Update 01.04.2021: Aktualisierte Library für Shield-Serie (2 Shields + 2 Breakout-Boards) mit Unterstützung für MegaAVR & ESP32: github.com/Ekaburg/EkaTFT

Herstellungsprozess

  1. Entwicklung und Design moderner Kameras
  2. Kameraobjektive verstehen: Design, Geschichte und zukünftige Innovationen
  3. BrickPi Bookreader: Kindle-Lesen automatisieren mit Raspberry Pi und LEGO Mindstorms
  4. Bluetooth-gesteuerter Raspberry Pi Roboter mit Audio-Feedback bauen
  5. Bluetooth-gesteuerter Arduino Motorisierter Kameraschlitten für kinematische Aufnahmen
  6. LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung
  7. Sprachgesteuerte Haushaltsgeräte: Bluetooth-Steuerung mit Google Assistant
  8. Tragbares Überwachungs-Roboter-System mit Raspberry Pi & Android-App
  9. Fortschrittliches Sturz-Erkennungssystem mit Arduino, Windows IoT & Azure Cloud
  10. Glühlampe per Arduino Uno, Relais & Android-App fernsteuern