From ee7bed934489764d364aa643cdb131262bdbfb24 Mon Sep 17 00:00:00 2001 From: Petr Malanik Date: Mon, 23 Jan 2023 21:16:06 +0100 Subject: [PATCH] Camera_driver: add Readme and example of captured image of FC --- resources/Camera_driver/Readme.md | 20 ++++++++++++++++++++ resources/Camera_driver/example_image.jpeg | Bin 0 -> 14344 bytes 2 files changed, 20 insertions(+) create mode 100644 resources/Camera_driver/Readme.md create mode 100644 resources/Camera_driver/example_image.jpeg diff --git a/resources/Camera_driver/Readme.md b/resources/Camera_driver/Readme.md new file mode 100644 index 0000000..380e6a6 --- /dev/null +++ b/resources/Camera_driver/Readme.md @@ -0,0 +1,20 @@ +# Camera driver support package + +Example implementation of camera driver and export of images from OV2640 camera. +Data from camera are read from camera into MCU memory and the transmitted via CLI UART and RS-485 +New image is captured every 2-3 seconds, format is JPEG and resolution 320x240 pixels. +If frame is broken (image cannot be open, JPeg corrupted) first frame must be cached, + +## Image capture on computer +- Connect Serial adapter to CLI of FC +- Connect OV2640 to camera port of FC +- Power up FC from stable power source +- Reroute serial line into file `(stty raw; cat > received.jpeg) < /dev/ttyUSB0` + - replace interface name +- Wait for image capture (until red LED change state) +- Open image or edit it in okteta + +## Example image +Image of FC taken by OV2640 connected to same FC + +![](example_image.jpeg) diff --git a/resources/Camera_driver/example_image.jpeg b/resources/Camera_driver/example_image.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9c1a96f52ba3e024d1544ada0a15ff7d37ab3e0f GIT binary patch literal 14344 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 Gf&T_BF=~$h literal 0 HcmV?d00001