Dog Trainer
===========

A device that allows dogs to speak. Click on the picture to see the video with the `dog-trainer` in action

[![dog-trainer-photo](assets/dog-trainer-photo.png)](https://peertube.virtonline.eu/w/hjq33b6N4GuXWMe45GYTtA)

Hardware
--------
- Raspberry pi (any version with an USB port) e.g. [Raspberry Pi Model B+](https://hackerboards.com/board/raspberry-pi-foundation-raspberry-pi-model-b-plus)

- Buttons connected to the Raspberry pi GPIO as shown in the schema to debounce noisy contacts  
![dog-trainer-schema](assets/dog-trainer-schema.png)

- USB speaker with a microphone e.g. [Jabra Speak 410](https://www.jabra.com/_/media/Jabra_VXi_Product-Documentation/Jabra-SPEAK-410-Series/technical-specifications/RevB/Jabra-Speak-410-Techsheet-A4-290420-Web.pdf) or [Codec Zero](https://www.raspberrypi.com/products/codec-zero/)

- for the `Codec Zero` make follwoing changes
> `sudo nano /boot/config.txt`  
`#dtparam=audio=on`  
`dtoverlay=rpi-codeczero`

- microSD card 8GB

- USB power supply 5V 500mA

Operating system
----------------
Install [Raspberry Pi Imager](https://www.raspberrypi.com/news/raspberry-pi-imager-imaging-utility/) into your notebook. Launch it and choose `Raspberry Pi OS Lite` to write into the microSD card

Power on the `Raspberry Pi` and finish the installation process. Log into its console using either:
- ethernet/wifi from your notebook: `ssh pi@raspberrypi`
- connected keyboard and monitor
- serial port

Prerequisites
------------
Once you are logged into the `Raspberry pi` console update your system
> `sudo apt update`  
`sudo apt upgrade`

Install `git`. It will be used to download the `dog-trainer` 
> `sudo apt install -y git`

Recordings must be edited a little bit therefore some audio processing tool is needed. Install `ffmpeg` which will do the job  
> `sudo apt install -y ffmpeg`

How to install
--------------

Clone the `dog-trainer` source code into your home directory
> `cd`  
`git clone https://gitea.virtonline.eu/2HoursProject/dog-trainer.git --depth 1`

Go into the newly created directory
> `cd ~/dog-trainer`

Configuration
-------------

Check your Raspberry pi board pin layout and make sure your buttons GPIOs match `PINS = [17, 22, 27]` from `dog-trainer.py`
> `pinout`

Try using default audio device for playback and recording. Edit `dog-trainer.py` and activate `PLAY_DEVICE="default"` and `REC_DEVICE="default"`
> `nano dog-trainer.py`

Skip to the next section `Run it!`. If either playback or recording does not work check your sound cards
> `aplay -L | grep ^hw:CARD=`  
`arecord -L | grep ^hw:CARD=`

Put your sound device name `"hw:Zero"` or `"hw:USB"` into the ALSA config file
> `nano .asoundrc`

Install the ALSA config file
> `mv .asoundrc ~/`

Run it!
-------

Just run
> `python3 dog-trainer.py`

Pres `Ctrl+c` to exit

Make it a service to automaticaly start and run in the backgroud
------------------------------------------------------

If your `$HOME` directory is other then `/home/pi` then modify the systemd service file
> `sed -i "s#/home/pi#$HOME#g" dog-trainer.service`

If your username and group is other then `pi` and `pi` then also run
> `sed -i "s#User=pi#User=$USER#" dog-trainer.service`  
`sed -i "s#Group=pi#Group=$(id -gn)#" dog-trainer.service`

> `sed -i "s#User=pi#User=$USER#" sound-init.service`  
`sed -i "s#Group=pi#Group=$(id -gn)#" sound-init.service`

Install the systemd service files
> `sudo mv dog-trainer.service /etc/systemd/system/`  
`sudo mv sound-init.service /etc/systemd/system/`

Reload systemd manager configuration
> `systemctl daemon-reload`

Enable the `dog-trainer` service at boot time and also run it
> `systemctl enable --now dog-trainer`

If it does not work check logs
> `journalctl -f -u dog-trainer`

Set volume for playback and recording 
-------------------------------------

Launch soundcard mixer
> `alsamixer`

Press F6 to select a soundcard. Find your USB sound device in the list e.g. `Jabra Speak 410 USB`. Press F4 and use up/down arrow keys to set recording volume and repeat also for the playback (F3). Make sure it is not muted. Press (m) to toggle mute. Press ESC to exit.

To preserve audio setting after the boot run
> `sudo alsactl store`