Time Lapse for Flashforge Adventurer 3 3D Printer with an Android Smartphone
How and Why This Project Started
During my recent vacation, I wanted to explore how well OpenAI ChatGPT could assist in software implementation. Despite having many years of experience in embedded software development (especially in C), I had no knowledge of Android Studio, Kotlin, Gradle, and Android development. Additionally, I was unfamiliar with how G-code works for 3D printers. I decided to take on the challenge and see if I could create a functional application with the assistance of ChatGPT. Surprisingly, it worked!
Applications and Scripts
Main Application for Android Smartphone
- Implemented in Android Studio with Kotlin
- Integrated FFmpeg for video generation and OpenCV for image processing
Python Script to Patch G-code of 3D Printer
How to Use
- The application monitors the camera preview and detects when the printer bed reaches the front of the printer.
- This is achieved through a simple threshold of the average intensity of the bottom part of the image. When the black printer bed arrives at the front, the intensity decreases to a level below a set threshold.
- The Python script patches the G-code to bring the printer bed to the front after each layer is printed. The camera head is positioned on the back and right of the printer.
- To generate the video, press the “volume down” button on the smartphone and wait.
- Captured pictures are stored in separate directories under the DCIM directory on the smartphone, allowing video compilation outside the smartphone for additional processing possibilities.
See the first video: YouTube Link
Description of Main Module
CameraActivity class is the main activity of the TimeLapser Android application, responsible for camera preview, picture capturing, video compilation, and bed arrival detection. Below is a breakdown of its structure and functionality.
Dependencies and Imports
The activity imports necessary Android and third-party libraries, including OpenCV and FFmpeg.
timeStampvid: String – Timestamp used for naming video files.
camera: Camera – Represents the device camera.
surfaceView: SurfaceView – Provides a dedicated drawing surface for the camera preview.
surfaceHolder: SurfaceHolder – Manages the surface of
grayImageView: ImageView – Displays grayscale images.
rgba: Mat – OpenCV matrix for RGBA color space.
gray: Mat – OpenCV matrix for grayscale images.
logTextView: TextView – Displays log messages.
ffmpeg: FFmpeg – Manages FFmpeg functionality.
cameraPermissionCode: Int – Permission code for camera access.
pictureNumber: Int – Tracks the number of captured pictures.
lastTriggerTime: Long – Records the timestamp of the last trigger event.
triggerAvailable: Boolean – Flag indicating if a trigger event is available.
debounceTime1: Long – Configurable debounce time for trigger events.
debounceTime2: Long – Configurable debounce time for preventing rapid triggers.
videoProcOngoing: Boolean – Flag indicating if video compilation is in progress.
- Initializes OpenCV.
- Sets up UI elements and permissions.
- Initializes timestamp and starts camera preview.
- Handles volume key events for picture capturing and video compilation.
- Compiles images into a video using FFmpeg.
- Uses coroutine for asynchronous execution.
- Generates the output path for the compiled video.
- Captures a picture using the camera.
savePictureand restarts the camera preview.
- Saves the captured picture asynchronously.
savePictureAsyncon the main thread.
- Creates and returns the output file for saved pictures.
- Initializes and starts the camera preview.
- Configures camera parameters, preview size, and focus modes.
- Sets touch focus listener on the
- Sets the preview callback for frame processing.
- Sets the display orientation of the camera based on device rotation.
- Stops and releases the camera preview.
- Sets the camera’s focus mode and zoom level.
- Handles touch events for setting the focus area.
- Uses camera parameters to set focus areas and metering areas.
- Calls auto focus to apply changes.
- Converts touch coordinates to camera coordinates.
- Calculates a focus area rectangle.
- Configures the camera preview size based on desired dimensions.
- Finds the closest supported preview size to the desired size.
- Initializes OpenCV matrices