FishCam: A low-cost open source autonomous camera for aquatic research

Graphical abstract

external buzzer circuit connected via the GPIO pins can produce an acoustic signal on-demand to time synchronize the video data from the FishCam with data from other audio recording instruments deployed in the vicinity.

Mechanical design
The frame holding all the electronics of the FishCam is made out of consumer-grade items (identified by letters in Fig. 2) that are typically found at local hardware stores or from popular online retailers. The main components are eight 8-32 aluminum threaded rods (D, E) bolted to three 4" separator disks (C) and a 3" Â 3.75" Â 0.08" clear acrylic sheet (B). The six short rods (E) serve as holders for the D-cell batteries (5), while the two longer rods (D) extend up to the tip of the camera lens (1) to hold the acrylic sheet (B) and support the weight of the FishCam when placed upside down without damaging the camera sensor. Rubber padding (A) is added at the end of each of these rods to avoid scratching the front-view window of the FishCam pressure housing. The acrylic sheet (B) holds all the electronics using silicon M3 mounts and is secured to the rods (D) with small zip ties. The separator disks (C), cut from virgin-grade PVC vinyl ceiling tiles, have spring connectors and wires glued on one side to connect each D-cell stack in parallel. The 4" diameter of the disks fit seven D-cell stacks and maintain stability of the internal frame inside the pressure housing. A laminated plastic sheet wrapped around the battery pack and secured with electrical tape holds the batteries in place. The Raspberry Pi, WittyPi and voltage regulator are placed on one side of the acrylic sheet (Fig. 2c), while the PCB board with the buzzer circuit is placed on the opposite side (Fig. 2d). The sheet is perforated at several places to allow wires to connect components from both sides.
The internal frame with all the electronics is inserted in a pressure housing in order to be deployed in an aquatic environment. Two possible pressure housing designs (one homemade and the other commercially available) were tested and their key components are identified by letters in Fig. 3. The first pressure housing (F) is made of Schedule 40 PVC pipe and based on [15] but with a longer tube. This housing is inexpensive ($100 USD), made of readily available parts, and was pressure tested to water depths of at least 30 m (50 psi). The second pressure housing (G) is assembled from components available from Blue Robotics. It is rated to 100 m depth, costs $260 USD, and has five watertight openings on the end-cap to accommodate external connections. Both housings have a front-view window on one end (K, Fig. 3b) for the camera and an internal diameter of 4", which allows a snug fit with the internal FishCam frame.
Both pressure housings are fitted with two 4" Â 4" Â 2" ABS Tee fittings cut in half along the 4" section (I) and held together with three stainless steel collars (J). A 1-1/2" PVC union fitting (H) is cemented to the 2" end of the tee fittings via a small section of 1-1/2" PVC pipe and a 2" to 1-1/2" bushing. This allows the FishCam to be easily attached/detached vertically or horizontally on any structure made out of 1-1/2" PVC pipe. The angle of the FishCam can easily be adjusted by loosening and tightening the screw of the PVC union fittings. Fig. 3c shows an example of a simple PVC frame design to deploy the FishCam on the seabed.

Software
The FishCam is programmed via the Linux operating system (OS) of the Raspberry Pi. We used the Linux distribution Raspbian Buster with desktop [16], which has minimal software already installed, leaving more storage space for video data on the microSD card. In the initial setup of the OS, only the necessary software is installed manually. Once deployed, the FishCam runs the OS headless (i.e. without the graphical interface) to minimize computational overhead.
The duty cycle of the FishCam is controlled via the WittyPi. Upon initial installation of the WittyPi board on the Raspberry Pi, the scheduling software is installed following the user manual from the manufacturer [17]. The duty cycle is defined in a text file describing the start time and duration of each ON and OFF sequence. In all our field tests, because no external lights were used, the FishCam was put in sleep mode during night time to save battery life. To avoid having data gaps due to potential OS malfunctions (freezing), the FishCam was set to reboot every 4 h. Duty cycle sequences can be customized to fit multiple research purposes. Before deployment, the Real Time Clock of the WittyPi must be synchronized with the Raspberry Pi clock using the manufacturer's interface. The WittyPi mini has no external battery but powers the Real Time Clock using a supercapacitor which can only remember the time for 17 h without external power. As a consequence, the duty cycle programmed on the Witty Pi mini should not have an OFF time greater than 17 h.
Operational mode settings and acquisition of data from the camera sensor are controlled in Python using the welldocumented picamera library [18]. Many camera settings can be adjusted, including, but not limited to, resolution, frame rate, exposure and ISO. In all our field tests, the camera was set to record video on 5-min h264 files at 10 frames per second (maximum rate available: 30 frames per second) with a resolution of 1600 Â 1200 pixels at ISO 400. While the mjpeg video format is also available, here we chose the h264 format as it generates smaller files and requires less GPU resources. The python script runs automatically once the OS starts using a job scheduler (i.e. Crontab). The buzzer circuit is also activated via Python using the library RPi.GPIO [19] and emits a short sequence of beeps when the OS starts and video data acquisition has successfully begun. In the field, not hearing the buzzer sequence after turning ON the FishCam indicates an issue with the data acquisition. Buzzer sequences are customizable, so that instruments can be differentiated acoustically if several Fish-Cams are deployed at the same location. The buzzer circuit can be turned off if not required. Wireless access to the FishCam is possible by activating the WiFi card of the Raspberry Pi and enabling SSH connections to the OS. Freely available phone applications such as RaspController [20] can be used to configure or monitor the FishCam in the field (e.g. synchronize the Real Time Clock, preview or live stream of video data being acquired, monitor CPU usage, etc.).   Fig. 4). 2. Solder the micro JST male connector (P11) to the battery port of the Witty Pi (P5), circled in red bellow (Fig. 5).

Design files summary
3. There are two switches on the Witty Pi board. Ensure that the switch Default is ON and D-Load is OFF. 4. Take four silicon mounts (P10) and insert them through each mounting hole of the Raspberry Pi (Fig. 6). 5. Take four more silicon mounts (P10) and screw them on top of the ones installed in step 4. Stack the Witty Pi on top of the Raspberry Pi via the male header (P4), and screw four silicon nuts on top of each mount to secure the two boards together (Fig. 7). 6. Solder the two terminal blocks (included with the regulator) to the input and output ports of the voltage regulator (P8, Fig. 8). 7. Cut and strip both ends of a red and a black wire (P12) about 10 cm long each. Solder one end of each wire to the micro JST female connector (P11). Ensure the red and black wires are connected to the JST connector in such a way that once the female connector is connected to the Witty Pi (via the male connector soldered in step 2), the red and black wires correspond to positive and negative ports of the Witty Pi. Connect the other end of the cables to the output of the voltage regulator via the terminal block ( Fig. 9). Ensure the red and black wires are connected to the positive and negative outputs of the voltage regulator, respectively. Attach four silicon mounts (P10) to the mounting holes of the voltage regulator ( Fig. 10). 8. Connect the voltage regulator (P8) to the Witty Pi (P5), using the micro JST connectors. Solder the Molex connector (P13), and the ON/OFF rocker switch (P2) to two wires going to the input block connector of the voltage regulator ( Fig. 10). 9. Cut a small piece of plastic edge protector (P14) and drill two holes in it to attach the camera sensor (P7). Attach the camera sensor to the plastic edge protector with nylon screws and nuts (P10). Connect the ribbon cable (P6) to the camera sensor (P7, Fig. 11).

Buzzer circuit
The buzzer circuit is composed of a piezo alarm, a resistor, a transistor, and a 9 V battery (Fig. 12). The circuit is connected to the pins GPIO-8 and Ground of the Raspberry Pi. The transistor acts as a switch that connects/disconnects the 9 V battery to the piezzo alarm. When the GPIO-8 logic pin is turned ON via a Python script, a voltage of 3.3 V from the Rapsberry Pi is delivered to the base of the transistor which closes the circuit and consequently turns ON the piezzo alarm. The Python script controlling the buzzer circuit is described in Section 6.6. The steps to assemble the buzzer circuit are: 1. Place and solder the electronic components P16, P17, and P20 on a 3.          cable of the camera sensor. The four pairs of yellow circles indicate holes that are used to attach the mounting plate to the aluminum rods of the internal frame (horizontal grey lines) using small cable ties (P32).
1. With a utility knife, cut a mounting plate of dimensions 7.5 cm Â 9.5 cm out of the clear acrylic sheet (P22). 2. With a marker pen, mark on the mounting plate the locations of the ON/OFF switch and all of the holes. 3. Drill all the holes on the mounting plate with a drill and cut the rectangle of the switch with utility knife. 4. Tie a short elastic band through the holes indicated by the orange/yellow circles. (Fig. 15). 5. Temporarily disconnect all wires of the electronic components from the terminal blocks. 6. Attach the buzzer circuit and the 9 V battery holder on the bottom side of the mounting plate with the silicon screws (P10). 7. Attach the voltage regulator, the camera sensor (via the camera holder) and the Raspberry Pi on the top side of the mounting plate using the silicon screws (P10). The camera sensor should be placed such that the ribbon cable connector is on the top side of the mounting plate. 8. Connect the free end of the ribbon cable of the camera to the camera port of the Raspberry Pi. The cable must go underneath the Raspberry Pi and be held down by the elastic band. 9. Glue the ON/OFF switch to the mounting plate. 10. Reconnect all the wires to their respective terminal blocks (Fig. 16).

Building the internal frame
The internal frame holds the battery pack and the electronic components in the 4" diameter tube of the pressure housing. The steps to assemble the internal frame are as follows.
1. Draw a disc of diameter 4" on the PVC vinyl tile (P30) and cut it out with a utility knife (Fig. 17).  2. Use sand paper to smooth the edges of the disc (Fig. 18). Ensure it fits perfectly into the tube of the pressure housing (i.e. a 4" diameter tube). 3. Place seven D-cell batteries perfectly centered on top of the disk. Place eight nails (or screws) between the D-cell batteries (Fig. 19).  4. Gently tap on the nails with a hammer to leave a mark on the disk. Remove the batteries and nails, and drill holes at each mark on the disk. These holes will be used for holding the rods. The two holes indicated with the green circles will be for the longer rods extending up to the front-view window of the pressure housing. Drill two additional holes (indicated in red in Fig. 20 and referred to as ''wire holes" in the following steps) large enough to fit seven wires (Fig. 20).   5. Repeat steps 1-4 twice to obtain three disks. The first disk, referred to as ''positive disk", will hold all the positive (+) battery connectors (P21 plates). The second disk, referred to as ''negative disk", will hold all the negative (À) battery connectors (P21 springs). The third disk, referred to as ''connector-free disk", will serve as a structural component and will not have any connectors attached to it. The connector-free disk should not have any wire holes drilled into it (i.e. red-labeled holes in Fig. 20). 6. Solder red wires to the seven positive battery connectors (P21 plates), glue them to the positive disk, and pass the free end of the wires through one of the wire holes (Fig. 21). The red wires should be $ 40 cm long. 7. Repeat step 6, but this time using black wires and the negative battery connectors (P21 springs) on the negative disk.
For one of the central rods, the washers, lock-washers and nuts should only be used on the external side of the disk, so it can be easily removed when installing the D-cell batteries. The longer 40 cm rods should be in the outside holes (depicted in green in Fig. 20) and the short ones should be in the central holes. Pass the red wires of the positive disk through the second wire hole, then slide the disk through the rods and stack it on top of the connector-free disk (Fig. 23).  10. Slide the negative disk through the rods with the spring connectors facing the plate connectors of the positive disk, and secure it to the rods using the washers (P24), lock-washers (P26) and nuts (P25) on both sides. As for the positive disk, one of the central rods should have washers, lock-washers and nuts on one side only to be able to remove the rod easily when installing the D-cell batteries. Use four D-cell batteries between the centrals rods to ensure the distance between the positive and negative disks is appropriate (i.e. long enough to fit four D-cell batteries, but short enough to maintain the D-cell batteries tightly in place). Finally, pass the red wires from the positive disk through the remaining wire hole of the negative disk (Fig. 24). 11. Solder the free end of the red and black wires to the Molex battery connector (P13, Fig. 25). 12. Cut a small piece of metal hanger strap (P31), bend it as a finger handle and attach it to the outside of the connectorfree disk with the washers (P24), lock-washers (P26) and nuts (P25, Fig. 26). 13. Slide the mounting plate with the electronics through the rods (Fig. 27). 14. Secure the mounting plate to the rods with four small cable ties (P32) and connect the board to the battery pack with the Molex battery connectors (P13, Fig. 28). 15. Add a nut (P25), lock-washer (P25), and cap nut (P27) to the end of the two long rods and cover the cap nut with a screw protector (P28, Fig. 29). 16. The inside of the FishCam is now assembled (Fig. 30).

Building the pressure housing and external attachment
All the instructions to build the custom PVC housing are in the supplementary material of Bergshoeff et al. [15]. The offthe-shelf 4" pressure housing can easily be ordered from the Blue Robotics website (https://bluerobotics.com/store/water tight-enclosures/4-series/wte4-asm-r1/).
The external attachment for the FishCam is assembled as follows.
3. (a) Cut a small piece of 1-1/2" PVC pipe (P38) and attach it to the PVC union fitting (P37) using PVC cement. (b) Attach the PVC union to the tee fitting using PVC cement (Fig. 33). 4. Repeat steps 1-3.        5. Place the two halves of tee fittings on either side of the pressure housing and secure with three adjustable stainless steel collars (P39, Fig. 34).

Installing the D-cell batteries
This section describes the steps to install the D-cell batteries in the FishCam.   5. Slide the plastic sheet slightly up and insert the second row of batteries. Repeat this process for the third and fourth rows of batteries. 6. Hold the plastic sheet tightly around the battery pack with your hand and use electrical tape to keep it in place. At this point the batteries should be well secured in place (Fig. 36). 7. Measure the voltage of each 4-battery stack with a voltmeter. All stacks should have the same voltage value.

Operation instructions
This section describes how to set the FishCam to start recording when it is powered ON and how to adjust the video settings (frame rate, ISO, resolution, etc). For these instructions, you need to have the FishCam started and have access to the FishCam OS either directly via a mouse, keyboard and monitor, or remotely via an SSH connection (see Section 6.7.3).

Installing the software suite
Setting up the software requires both a computer and the FishCam. It is assumed here that the computer uses a recent version of the Microsoft Windows operating system (OS). Using a computer with a different OS is possible but is not documented here. It is also assumed that a Wifi connection with access to the internet is available. Steps 1-6 are performed on the Windows computer, and steps 7-14 are performed on the FishCam itself. For all these steps, it is recommended to power the FishCam via the power USB port of the Raspberry Pi using an external power supply (i.e. not the D-cell battery pack).
1. Take the microSD card (P9) and connect it to your computer. 2. Use free software such as SD Card Formatter to format the microSD card. org/downloads/raspbian/). 4. Copy the Raspbian image to the microSD card using free software such as Win32 Disk Imager. 5. Once Raspbian is installed on the microSD card it will appear on the computer as two separate drives boot and rootfs.
On the boot drive, open the file config.txt with a text editor (e.g. Notepad) and add the line dtoverlay = pi3-disable-bt at the end of the file. Save and close the text editor. This step turns off the Bluetooth capabilities of the Raspberry Pi to save power. Ignore this step if you need to use the Bluetooth. 6. Eject the microSD card from the computer and insert it in the FishCam's Raspberry Pi. 7. Connect a mouse, keyboard and monitor to the Raspberry Pi and turn the power on. This step will require a micro-USB to USB adapter, a USB hub, and a mini-HDMI to HDMI adapter. The Raspberry Pi will boot and the graphical interface of Raspbian will appear on the monitor. 8. Upon the first start, a window will appear with instructions to configure the OS. Follow all the instructions to set up the country, password, wifi connection, and updates. 9. If not already done, connect to your Wifi network using the Wifi icon at the top right of the screen. 10. Open a terminal window and type the following commands: (a) Ensure the OS is up to date: sudo apt-get update sudo apt-get upgrade (g) Select Finish to exit raspi-config. 13. At this point all the necessary software are installed. 14. Optional: shut down the Raspberry Pi, take the microSD card out and connect it to your computer. Use free software such as Win32 Disk Imager to take an image of the microSD card with all the software installed. The image file created may be used to set up another FishCam without having to go through all the installation steps described above.

Automatic start of the recordings
The crontab job scheduler is used to start acquiring video when the FishCam is powered ON (i.e. rebooted). Open a terminal window and type the following commands: 1. Edit the job schedule by typing: crontab -e 2. The first time you run crontab you will be prompted to select an editor. Choose Nano by pressing Enter.

Once the schedule is open in Nano:
(a) Scroll down with the down-arrow key to the bottom of the document and type @ reboot sh/home/pi/Desktop/FishCam/script/camStartup.sh & (b) Save the changes by pressing CTRL + O, then press Enter to confirm. (c) Exit Nano by pressing CTRL + X. 4. Verify that the schedule has been saved: crontab -l 5. Close terminal

FishCam ID
If you are using several FishCams, it may be useful to assign a unique ID to each of them. This ID will be used at the beginning of the filename of each video being recorded. To modify the FishCam ID: 1. Go to the folder /home/pi/Desktop/FishCam/script/ 2. Open the file FishCamID.config with a text editor. 3. Type the FishCam ID, save, and close the text editor. By default FishCam ID is set to FishCam01.

Camera settings
All the camera settings are defined in the python script captureVideo.py located in the folder /home/pi/Desktop/Fish Cam/script/. To change the settings, open the script captureVideo.py with a text editor and adjust the parameters defined in the function initVideoSettings(). For more information about the different parameters, refer to the documentation of the picamera library (https://picamera.readthedocs.io). 3. The duty cycles are now activated and the FishCam will start to turn ON and OFF based on the schedule defined.
Note: The witty Pi mini cannot remember the time (RTC) without power for more than 17 h. Consequently, the time synchronization and schedules should be defined no more than 17 h before the deployment of the FishCam.

Configuring the buzzer
The beeping sequence of the buzzer can be defined by editing the file /home/pi/Desktop/FishCam/script/runBuzzer.py with a text editor. The five parameters below can be adjusted:

Accessing the FishCam wirelessly
While connecting the FishCam to a keyboard, mouse and monitor is needed at the start to install the required software, it is not a necessity thereafter. Changing the configuration and operating the FishCam can be done wirelessly via a mobile  device or a regular computer. The easiest way to do this is to create a local network by turning a cell phone into a Wifi hotspot. This works equally well on Android or Apple devices, but the steps to follow using the Android 9 OS on a LG G6 phone are given here.  6. Once connected to the FishCam, you can browse through the folders and files via the File Manager menu, open a terminal window via the menu Shell SSH, and monitor the FishCam resources via the menu Cpu, RAM, Disk monitoring (Fig. 40). 7. Through the File Manager, it is possible to monitor that everything is working properly by verifying that video files are being recorded in the folder/home/pi/Desktop/FishCam/data/, verify their size, and read the logs to ensure all processes started properly and that there are no errors (Fig. 41).

Controlling the FishCam from a computer
The FishCam can also be accessed wirelessly from a computer. While there are several ways to do this, here we provide instructions using a Wi-fi hotspot (Section 6.7.1).
1. Turn ON the Wi-fi hotspot on your cell phone. 2. Connect to the Wi-fi hotspot on your computer. 3. Turn ON the FishCam. 4. On your cell phone go into the System menu, then Network & internet, Tethering, and Wi-fi hotspot. 5. After a moment the FishCam should appear in the ''Connected Devices" section. Note the FishCam's IP address. 6. On your computer, use a SFTP client such as FileZilla to connect to the FishCam and browse through the folders and files.
You will need to connect using the FishCam's IP address, username (i.e. ''pi"), password (the one defined in Section 6.1) and using the port 22. 7. On your computer, use an SSH client such as Putty to access the terminal console of the FishCam. You will also need to connect using the FishCam's IP address, username, password, use port 22 and an SSH connection type.

Downloading data from the FishCam
The fastest way to download the data from the FishCam is to take the microSD card out, connect it to a computer, and copy the data and logs folders to the computer. It is also possible to connect wirelessly to the FishCam from a computer and transfer the data via SFTP client software (see Section 6.7.3). It is recommended to download both the data folder, which contains all the video files, and the logs folder, which contains information about the start time of the buzzer sequences and any errors that may have occurred during the data acquisition.

Pre-deployment checklist
In order to minimize failures, it is recommended to go through the following steps before deploying the FishCam in the field. D-cell batteries at least 1.4 V. All wires properly connected and undamaged. Camera ribbon connector properly attached/not loose. Camera lens clean and free of debris. Buzzer's 9 V battery connected. O-rings of the pressure housing clean and greased with silicon lubricant. Front-view window clean. Time on the FishCam clock is correct (check with the command ''date" in an SSH terminal). RTC of the WittyPi is synchronized and ON/OFF schedule is operational. Buzzer rang after power turned ON. Files recording properly (check number of files recorded, file sizes and logs via SSH).

Validation and characterization
Three FishCams were built and deployed at five sites on the east coast of Vancouver Island, Canada, from January to December, 2019, as part of the Fish Sound Project [14]. A total of ten deployments were conducted at water depths of 8-12 m ( Table 1). One of the FishCams (FC-00) did not have enough ballast and was dragged by strong currents. It was found 6 months (180 days) later on a beach $50 km away from its original deployment location. The electronic components were all intact and operational upon retrieval. However, the front-view window of the pressure housing was heavily scratched, which made this unit unusable for further deployments. The other two FishCams (FC-01 and FC-02) were deployed multiple times for durations of 8 to 14 days. In these deployments, the FishCams were attached either horizontally to the PVC frame shown in Fig. 3c near the seabed (e.g. Fig. 42a,d), or vertically to a larger PVC frame at 3 m above the seabed (e.g. Fig. 42b,c). For all deployments, the FishCams were configured to record video files during daylight hours only, at 10 frames per second  and at a resolution of 1600 Â 1200 pixels. The minimum and maximum duration of video recordings collected per deployment were 80 h (Armstrong Point) and 212 h (Mill Bay), respectively, with an average (AE standard error) of 124 AE 11.6 h. This variability is largely due to variations in water visibility. Video files are compressed by the camera board during acquisition, which results in smaller file sizes in low-light environments and larger files in bright and clear conditions. The sixth deployment at Mill Bay occurred during a phytoplankton bloom (Fig. 42d), which resulted in poor light conditions and consequently smaller video files. In all cases (except the first deployment), the FishCams were still powered and running when retrieved, but their memory cards were full, indicating that even after 14 days, they were not battery limited, but memory limited. Using larger memory cards would increase the maximum deployment duration and/or the quality of video data collected. The resolution of the FishCam videos acquired during the ten deployments allowed us to successfully count and identify fish swimming in the field of view of the camera, and to observe inter-and intra-specific behaviors (Fig. 42). The sequence of 3 kHz tones emitted by the buzzer inside the FishCam pressure housings was loud enough to be detected by hydrophones located 3 m away, and provided successful synchronization of video and audio data (Fig. 43, Supplementary Multimedia Component 1). The FishCam is an autonomous camera system that allows video and still images to be captured underwater over longer time periods than most camera systems currently available on the market. The design is simple, easy to build, and inexpensive (<500 USD). It has been used successfully in the field to non-intrusively observe fish in their natural habitat. Thanks to the flexibility of the Raspberry Pi board, the design is versatile and can easily be extended to fulfill specific needs such as, adding external lights or sensors (e.g. pressure, temperature). Both homemade and commercial pressure housings worked properly. The buzzer circuit was used successfully to synchronize the video data with acoustic data collected by nearby recorders. With the current design, the FishCam can record up to a maximum of 212 h of videos over a period of 14 days. The camera sensor used here is inexpensive and has a resolution appropriate for the water depths tested in the field (12 m).
The limitation of recording duration is due to the memory storage (200 GB) rather than the battery life of the FishCam. The storage size of microSD cards available on the market is increasing constantly and the cards are becoming less expensive. Therefore, it is expected that in the very near future, a larger microSD card could be used in the FishCam at no extra cost, overcoming current memory restrictions. Storing data on an external USB drive instead of on the microSD card has been tested in previous iterations of the FishCam, but was found to draw more power and consequently reduce the recording time. It was also found to be less reliable in the field since the USB connection can easily be damaged or disconnected due to the vibrations of the boat during transport, thereby compromising data collection. The supercapacitor used in the WittyPi can keep track of time without power for a maximum of 17 h, which restricts the maximum OFF time of the FishCam duty cycle. This can be overcome by connecting a 3 V button battery to the WittyPi board as indicated in the user manual from the manufacturer. During an early deployment, a small amount of water was found in the homemade PVC housing upon retrieval. This was addressed by reinforcing the seal of the front-view window with additional epoxy. Care should be taken when building the PVC pressure housing as small imperfections in this process can potentially lead to failure of the housing (the ready-made housing from Blue Robotics is more expensive but less prone to failure). Deploying the FishCam at deeper depths would require external lights or a more expensive camera sensor. Both pressure housing designs used for the FishCam worked as intended in the field. While the homemade PVC design from [15] is less expensive, the commercial housing from Blue Robotics is more reliable and versatile, allowing more external connectors and sensors. Due to the light weight of the FishCam and its PVC frame, it is important to add enough ballast during deployment to limit risks of losing the instrument with strong currents. All components of the FishCam were purchased in small quantities; larger orders of components could further reduce the cost of the FishCam. Such an approach is used successfully in other open-source projects such as the AudioMoth acoustic recorder [21]. Future developments of the FishCam could include the addition of an external piezzo transducer to emit more complex sounds directly in the water that could be used, for example, in animal behavioral response studies. One or more hydrophones could also be added to the FishCam using Raspberry Pi compatible sound acquisition boards [22]. The FishCam could find applications in a wide range of aquatic research. Many marine ecology research studies use baited remote underwater video (BRUV) to record fish diversity, abundance, and behaviour [1]. Many of these BRUVs typically have an autonomy of fewer than 10 h [23,24]. A FishCam could be used in BRUV studies to expand the duration and spatial coverage of the monitoring effort. FishCams deployed in pairs could potentially be used as stereo-video systems for accurate fish size measurements [25,26], although this may require the use of a different lens.
Advances in technology, along with the increasing popularity of open-source systems and software, allow researchers to build sophisticated research instruments at lower costs. These innovations can then be made accessible to a much broader demographic. Through this approach, new instruments are becoming available to the marine research community to monitor underwater environments over longer periods of time, over greater spatial scales, and at a minimal cost. Advanced electronic components, such as those used in the FishCam, become not only more accessible to the research community, but also to the general public. This encourages citizen science initiatives that have the potential to improve and expand ongoing research by scientists [27]. Our vision for the FishCam is to have applications in education, citizen science and ecological research. The FishCam could be built by students to teach them the basics of electronics, programming and environmental science, and be used in deployments by citizen scientists (e.g. recreational divers) and students, to acquire data to be analyzed by researchers to address ecologically-important questions. Such an approach offers a unique opportunity to engage with students and local communities to learn new skills that contribute directly to real-world research and conservation [28][29][30].

Summary
Capabilities of the FishCam: Maximum video capacity of 212 h over a period of 14 days. Duty cycles fully customizable. Acquisition of videos and/or pictures. Large field of view (110°). Wireless access and configuration. Possibility to add external sensors. Inexpensive and easy to build.

Limitations of the FishCam:
Needs additional external lights for deployment in deep water. Basic electronics skills required (i.e., soldering).

Human and animal rights
Not applicable.

Declaration of Competing Interest
The authors declare that they have no known competing financial interests or personal relationships that could have appeared to influence the work reported in this paper.