diff --git a/Proposition interface.pdf b/Proposition interface.pdf deleted file mode 100644 index 30b8a7cb770b79647dc64f4d7f88edef50f88c09..0000000000000000000000000000000000000000 Binary files a/Proposition interface.pdf and /dev/null differ diff --git a/architecture.pdf b/architecture.pdf deleted file mode 100644 index 9c53a687468d97f5f0494d70b9e4fbf0cb3b9887..0000000000000000000000000000000000000000 Binary files a/architecture.pdf and /dev/null differ diff --git a/compressed_sized_timed_rotating_logger.py b/compressed_sized_timed_rotating_handler.py similarity index 100% rename from compressed_sized_timed_rotating_logger.py rename to compressed_sized_timed_rotating_handler.py diff --git a/config.py b/config.py index 8e206ce110071c5c746a4f832744e857f583184a..ad391ca92cd33b96ee0938f5f85cabad45e41f8c 100644 --- a/config.py +++ b/config.py @@ -4,29 +4,28 @@ from utils import get_platform from paho.mqtt.client import MQTTv31 _, on_pi = get_platform() -ohmpi_id = '0001' -# mqtt_broker = 'localhost' -mqtt_broker = 'localhost' if on_pi else 'mg3d-dev.umons.ac.be' - +# DEFINE THE ID OF YOUR OhmPi +ohmpi_id = '0001' if on_pi else 'XXXX' +# DEFINE YOUR MQTT BROKER (DEFAULT: 'localhost') +mqtt_broker = 'localhost' if on_pi else 'NAME_YOUR_BROKER_WHEN_IN_SIMULATION_MODE_HERE' +# DEFINE THE SUFFIX TO ADD TO YOUR LOGS FILES logging_suffix = '' + # OhmPi configuration OHMPI_CONFIG = { 'id': ohmpi_id, # Unique identifier of the OhmPi board (string) 'R_shunt': 2, # Shunt resistance in Ohms 'Imax': 4800 / 50 / 2, # Maximum current 'coef_p2': 2.50, # slope for current conversion for ADS.P2, measurement in V/V - # 'coef_p3': 2.50, # slope for current conversion for ADS.P3, measurement in V/V - # 'offset_p2': 0, - # 'offset_p3': 0, 'nb_samples': 2, # Max value 10 # was named integer before... 'version': 2, # Is this still needed? 'max_elec': 64, - 'board_addresses': {'A': 0x73, 'B': 0x72, 'M': 0x71, 'N': 0x70}, - # def. {'A': 0x76, 'B': 0x71, 'M': 0x74, 'N': 0x70} - 'settings': 'ohmpi_settings.json', + 'board_addresses': {'A': 0x73, 'B': 0x72, 'M': 0x71, 'N': 0x70}, # CHECK IF YOUR BOARDS HAVE THESE ADDRESSES + 'settings': 'ohmpi_settings.json', # INSERT YOUR FAVORITE SETTINGS FILE HERE 'board_version': '22.10' } # TODO: add a dictionary with INA models and associated gain values +# SET THE LOGGING LEVELS, MQTT BROKERS AND MQTT OPTIONS ACCORDING TO YOUR NEEDS # Execution logging configuration EXEC_LOGGING_CONFIG = { 'logging_level': logging.INFO, @@ -50,9 +49,9 @@ DATA_LOGGING_CONFIG = { 'interval': 1 } -# State of Health logging configuration +# State of Health logging configuration (For a future release) SOH_LOGGING_CONFIG = { - 'logging_level' : logging.INFO, + 'logging_level': logging.INFO, 'logging_to_console': True, 'file_name': 'soh.log', 'max_bytes': 16777216, diff --git a/doc/source/Ohmpi.rst b/doc/source/Ohmpi.rst index 5dc33c6fa160aa850d35190f4efe2c95210c3db9..9a579123c44ef3752365092644b405367eb6a3ad 100644 --- a/doc/source/Ohmpi.rst +++ b/doc/source/Ohmpi.rst @@ -2,26 +2,26 @@ OhmPi project *************** - .. image:: logo_ohmpi.JPG - :width: 250 px - :align: center - :height: 180 px - :alt: Logo OhmPi + .. image:: logo_ohmpi.JPG + :width: 250 px + :align: center + :height: 180 px + :alt: Logo OhmPi | **Authors:** ------------ -| Rémi CLEMENT,Vivien DUBOIS,Nicolas Forquet, INRAE, REVERSAAL, Villeurbanne, France +| Rémi CLEMENT, Vivien DUBOIS, Nicolas Forquet, INRAE, REVERSAAL, Villeurbanne, France | Yannick FARGIER, GERS-RRO, Univ Gustave Eiffel, IFSTTAR, Lyon, France | Hélène GUYARD, IGE Grenoble, Université Grenoble Alpes, Grenoble, France -| Olivier Kaufmann, Université de Mons, Mons, Belgium -| Guillaume Banchy, ILVO, Merelbeke, Belgium| +| Olivier KAUFMANN, Arnaud WATELET, Université de Mons, Mons, Belgium +| Guillaume BLANCHY, ILVO, Merelbeke, Belgium| -**Parteners:** --------------- +**Partners:** +------------- .. table:: :align: center @@ -49,7 +49,7 @@ OhmPi project ------------------- .. warning:: - **Ohmpi is a participative project open to all, it requires skills in electronics and to respect the safety rules. Ohmpi must be assembled in a professional context and by people competent in electronics. The Ohmpi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The Ohmpi team cannot be held responsible if the equipment does not work after assembly. You may redistribute and modify this documentation and make products using it under the terms of the CERN-OHL-P v2 (https:/cern.ch/cern-ohl). This documentation is distributed WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE. Please see the CERN-OHL-P v2 for applicable conditions ** + **OhmPi is a participative project open to all, it requires skills in electronics and to respect the safety rules. OhmPi must be assembled in a professional context and by people competent in electronics. The OhmPi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OhmPi. The OhmPi team cannot be held responsible if the equipment does not work after assembly. You may redistribute and modify this documentation and make products using it under the terms of the CERN-OHL-P v2 (https:/cern.ch/cern-ohl). This documentation is distributed WITHOUT ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING OF MERCHANTABILITY, SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE. Please see the CERN-OHL-P v2 for applicable conditions ** @@ -60,10 +60,10 @@ This documentation presents the development of a low-cost, open hardware \ resistivity meter to provide the scientific community with a robust \ and flexible tool for small-scale experiments. Called OhmPi, this basic resistivity meter\ features current injection and measurement functions associated with a multiplexer \ -that allows performing automatic measurements with up to 32 electrodes.\ +that allows performing automatic measurements with up to 64 electrodes.\ OhmPi's philosophy is to provide a fully open source and open hardware tool\ to the near surface scientific community. .. note:: - Everyone willing to get involved is welcome in the OhmPi Project!. + Anyone who wants to get involved is welcome to join the OhmPi project! diff --git a/doc/source/Ohmpi_V2_00/V2_00_step_01.rst b/doc/source/Ohmpi_V2023/V2023_step_01.rst similarity index 59% rename from doc/source/Ohmpi_V2_00/V2_00_step_01.rst rename to doc/source/Ohmpi_V2023/V2023_step_01.rst index 86aac30cc692f352de9cb8c815e98151c20aecb5..83d9ae5feef6d5431e324848f52fd1534a1a0fbd 100644 --- a/doc/source/Ohmpi_V2_00/V2_00_step_01.rst +++ b/doc/source/Ohmpi_V2023/V2023_step_01.rst @@ -2,7 +2,7 @@ ******************************************* .. warning:: - **Ohmpi is a participative project open to all, it requires skills in electronics and to respect the safety rules. Ohmpi must be assembled in a professional context and by people competent in electronics. The Ohmpi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The Ohmpi team cannot be held responsible if the equipment does not work after assembly.** + **OhmPi is a participative project open to all, it requires skills in electronics and to respect the safety rules. OhmPi must be assembled in a professional context and by people competent in electronics. The OhmPi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The OhmPi team cannot be held responsible if the equipment does not work after assembly.** @@ -27,31 +27,31 @@ The first step is to start up the Raspberry Pi board, including installation of an OS (operating system). For this step, the installation instructions are well described on the Raspberry website -1. Watch the vidéo `how to set up your raspberry Pi <https://www.youtube.com/watch?v=wjWZhV1v3Pk>`_. +1. Watch the video `how to set up your raspberry Pi <https://www.youtube.com/watch?v=wjWZhV1v3Pk>`_. 2. The authors recommend installing the latest stable and complete version of Raspberry Pi OS (Previously called Raspbian) by using Raspberry Pi Imager. 3. or you can visit this `website <https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up>`. .. note:: - All the development tests were performed on Raspberry Pi 3 Model B, we used the following version of Raspbian: - - .. figure:: step_n_1/raspbian_version.jpg - :width: 800px - :align: center - :height: 400px - :alt: alternate text - :figclass: align-center + All the development tests were performed on Raspberry Pi 3 Model B, we used the following version of Raspbian: + + .. figure:: step_n_1/raspbian_version.jpg + :width: 800px + :align: center + :height: 400px + :alt: alternate text + :figclass: align-center .. warning:: - Once the OS has been installed, **1-wire, spi and GPIO remote option** must be deactivated and **I2C option** must be activated via the Raspbian GUI settings menu. Failure to carry out this task may cause damage to the relay shield cards during measurements. + Once the OS has been installed, **1-wire, spi and GPIO remote option** must be deactivated and **I2C option** must be activated via the Raspbian GUI settings menu. Failure to carry out this task may cause damage to the relay shield cards during measurements. -**PART B:** Virtual Environnement and packages -=============================================== +**PART B:** Virtual Environment and packages +============================================ A virtual environment is a way to have multiple, parallel instances of the Python interpreter, each with different package sets and different configurations. Each virtual environment contains a discrete copy of the Python interpreter, including copies of its support utilities. It also protects your system in case of problems with the packages. @@ -59,98 +59,98 @@ Each virtual environment contains a discrete copy of the Python interpreter, inc All dependencies are specified in requirements.txt .. note:: - All instructions below should be typed in the terminal + All instructions below should be typed in the terminal It is first necessary to ensure that the libatlas-base-dev library is installed: .. code-block:: python - - sudo apt-get install libatlas-base-dev + + sudo apt-get install libatlas-base-dev We strongly recommend users to create a virtual environment to run the code and installed all required dependencies. It can be done either in a directory gathering all virtual environments used on the computer or within the ohmpy directory. Create the virtual environment: .. code-block:: python - - python3 -m venv ohmpy + + python3 -m venv ohmpy Activate it using the following command: .. code-block:: python - - source ohmpy/bin/activate + + source ohmpy/bin/activate Install packages within the virtual environment. Installing the following package should be sufficient to meet dependencies: .. code-block:: python export CFLAGS=-fcommon - sudo pip install RPi.GPIO adafruit-blinka numpy pandas adafruit-circuitpython-ads1x15 adafruit-circuitpython-tca9548a adafruit-circuitpython-mcp230xx gpiozero + sudo pip install RPi.GPIO adafruit-blinka numpy pandas adafruit-circuitpython-ads1x15 adafruit-circuitpython-tca9548a adafruit-circuitpython-mcp230xx gpiozero Check that requirements are met using .. code-block:: python - - pip list + + pip list You should run you code within the virtual environment to leave the virtual environment simply type: .. code-block:: python - - deactivate + + deactivate -**PART C:** Activate virtual environnement on Thonny (Python IDE) (on Rapberry Pi) +**PART C:** Activate virtual environment on Thonny (Python IDE) (on Raspberry Pi) ==================================================================================== If you decided to use a virtual environment, it is necessary to setup Thonny Python IDE the first time you use it. -1- Run the Thonny Python IDE software, Click on raspebrry acces **menu > programming> Thonny pythonIDE** +1- Run the Thonny Python IDE software, Click on raspberry access **menu > programming> Thonny pythonIDE** -2- Thonny's interface opens, Python runs on the Root (Python 3.7.3 (/usr/bin/python3)) +2- Thonny opens, Python runs on the root (Python 3.7.3 (/usr/bin/python3)) .. figure:: step_n_1/thonny_first_interface.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center 3-Click on **Run>select interpreter**, a new window opens click on interpret .. figure:: step_n_1/thonny_option.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center -4-On the new open windows select **alternative Pyhton3 or virtual environnement** +4-On the new open windows select **alternative Python3 or virtual environment** .. figure:: step_n_1/thonny_interpreter.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center - + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center + 5- New buttons appeared, selected **"locate another python executable "** 6- A new window opens, find the folder where there is the python 3 file in the virtual environment folder previously created **/home/pi/ohmpi/bin/python3**. -7- In the **known interpreter** tab the path of the virtual environnementshould appear +7- In the **known interpreter** tab the path of the virtual environment should appear .. figure:: step_n_1/thonny_interpreter_folder.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center 8- Close the window by clicking on **ok**. -9- Close thonny to save modifications +9- Close Thonny to save modifications diff --git a/doc/source/Ohmpi_V2_00/V2_00_step_02.rst b/doc/source/Ohmpi_V2023/V2023_step_02.rst similarity index 92% rename from doc/source/Ohmpi_V2_00/V2_00_step_02.rst rename to doc/source/Ohmpi_V2023/V2023_step_02.rst index cbbb1daac53e11f97254da3f558aff20f43340db..48a50e641bc400606df1fae8d96610e123627bd6 100644 --- a/doc/source/Ohmpi_V2_00/V2_00_step_02.rst +++ b/doc/source/Ohmpi_V2023/V2023_step_02.rst @@ -3,11 +3,11 @@ **************************************************** .. warning:: - **Ohmpi is a participative project open to all, it requires skills in electronics and to respect the safety rules. Ohmpi must be assembled in a professional context and by people competent in electronics. The Ohmpi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The Ohmpi team cannot be held responsible if the equipment does not work after assembly.** + **Ohmpi is a participative project open to all, it requires skills in electronics and to respect the safety rules. OhmPi must be assembled in a professional context and by people competent in electronics. The OhmPi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The OhmPi team cannot be held responsible if the equipment does not work after assembly.** -**PART A** Assembly of measurement board +**PART A** Assembly of the measurement board ====================================================== @@ -15,17 +15,17 @@ Required components ---------------------------------------------------- .. figure:: step_n_2/a/00_mes_board_components.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center .. csv-table:: List of components - :file: step_n_2/a/Mesure_board_list_2_xx.csv + :file: step_n_2/a/measure_board_list_2_xx.csv :widths: 30, 70, 70, 70, 70, 35, 35 :header-rows: 1 @@ -33,11 +33,11 @@ Description ------------------ .. figure:: step_n_2/a/schema_measurement_board.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center Figure shows the general schematics for the electronic measurement board developed. We have developed a complete "plug and play" measurement board. To measure electrical resistivity with Raspberry Pi. @@ -54,7 +54,7 @@ which allows to realize precise current measurement around a shunt resistor. The +--------+------------------------------------------------------------+ | | .. image:: step_n_2/a/01_mes_board.jpg | | 1 +------------------------------------------------------------+ - | | Installation of female header, 1 by10 pins, for ADS1115 | + | | Installation of female header, 1 by 10 pins, for ADS1115 | | | | +--------+------------------------------------------------------------+ @@ -113,7 +113,7 @@ which allows to realize precise current measurement around a shunt resistor. The +--------+------------------------------------------------------------+ | | .. image:: step_n_2/a/07_mes_board.jpg | |7 +------------------------------------------------------------+ - | | Four screw terminals for 12V inpout et 5V outpout | + | | Four screw terminals for 12V inpout et 5V output | | | | +--------+------------------------------------------------------------+ @@ -158,8 +158,8 @@ which allows to realize precise current measurement around a shunt resistor. The +---------+------------------------------------------------------------+ .. warning:: - - In this version, We used a shunt resistor of 2 ohms, which limits the current measurement to 48 mA. If the current is higher than this value, you just have to decrease the value of the shunt resistor.Change the shunt value in the code. + + In this version, We used a shunt resistor of 2 ohms, which limits the current measurement to 48 mA. If the current is higher than this value, you just have to decrease the value of the shunt resistor.Change the shunt value in the code. @@ -188,7 +188,7 @@ which allows to realize precise current measurement around a shunt resistor. The +---------+------------------------------------------------------------+ | | .. image:: step_n_2/a/14_mes_board.jpg | |14 +------------------------------------------------------------+ - | | 1 Mohms resistors | + | | 1 MOhm resistors | | | | +---------+------------------------------------------------------------+ @@ -198,7 +198,7 @@ which allows to realize precise current measurement around a shunt resistor. The +---------+------------------------------------------------------------+ | | .. image:: step_n_2/a/15_mes_board.jpg | |15 +------------------------------------------------------------+ - | | Soldering tow 1 Kohms resistors | + | | Soldering tow 1 kOhm resistors | | | | +---------+------------------------------------------------------------+ @@ -208,7 +208,7 @@ which allows to realize precise current measurement around a shunt resistor. The +---------+------------------------------------------------------------+ | | .. image:: step_n_2/a/16_mes_board.jpg | |16 +------------------------------------------------------------+ - | | Soldering tow 1.5Kohms resistors | + | | Soldering two 1.5 kOhm resistors | | | | +---------+------------------------------------------------------------+ .. table:: @@ -217,7 +217,7 @@ which allows to realize precise current measurement around a shunt resistor. The +---------+------------------------------------------------------------+ | | .. image:: step_n_2/a/17_mes_board.jpg | |17 +------------------------------------------------------------+ - | | Soldering tow 1.5Kohms resistors | + | | Soldering two 1.5 kOhms resistors | | | | +---------+------------------------------------------------------------+ @@ -267,7 +267,7 @@ which allows to realize precise current measurement around a shunt resistor. The +---------+------------------------------------------------------------+ | | .. image:: step_n_2/a/22_mes_board.jpg | |22 +------------------------------------------------------------+ - | | Mounting LM158 operational amplificator | + | | Mounting LM158 operational amplifier | | | | +---------+------------------------------------------------------------+ @@ -341,7 +341,7 @@ which allows to realize precise current measurement around a shunt resistor. The +--------+------------------------------------------------------------+ | | .. image:: step_n_2/b/003.jpg | |4 +------------------------------------------------------------+ - | | Mounting the Ohmpi's measurement board on the Raspberry Pi | + | | Mounting the OhmPi's measurement board on the Raspberry Pi | | | | +--------+------------------------------------------------------------+ @@ -351,7 +351,7 @@ which allows to realize precise current measurement around a shunt resistor. The +--------+------------------------------------------------------------+ | | .. image:: step_n_2/b/004.jpg | |5 +------------------------------------------------------------+ - | | Mounting the Ohmpi's measurement board on the Raspberry Pi | + | | Mounting the OhmPi's measurement board on the Raspberry Pi | | | | +--------+------------------------------------------------------------+ @@ -373,7 +373,7 @@ which allows to realize precise current measurement around a shunt resistor. The .. code-block:: python - i2cdetect -y 1 + i2cdetect -y 1 .. table:: :align: center @@ -388,8 +388,8 @@ which allows to realize precise current measurement around a shunt resistor. The Setting up an equivalent electronic circuit, for this you will need: - * 4 1kohm resistor (R2) - * 1 220 ohm resistor (R1) + * 4 1kOhm resistor (R2) + * 1 220 Ohm resistor (R1) * 1 small padboard * Spool of solder @@ -460,7 +460,7 @@ Setting up an equivalent electronic circuit, for this you will need: +--------+------------------------------------------------------------+ | | .. image:: step_n_2/c/thonny_first_interface.jpg | |7 +------------------------------------------------------------+ - | | Run Tonny Interpreter | + | | Run the Thonny Interpreter | | | | +--------+------------------------------------------------------------+ @@ -472,5 +472,5 @@ Setting up an equivalent electronic circuit, for this you will need: | | .. image:: step_n_2/c/20211206_144334.jpg | |7 +------------------------------------------------------------+ | | Run Ohmpi_4elec.py, if everything works you should | - | | get the following result (220 ohm) | + | | get the following result (220 Ohm) | +--------+------------------------------------------------------------+ diff --git a/doc/source/Ohmpi_V2_00/V2_00_step_03.rst b/doc/source/Ohmpi_V2023/V2023_step_03.rst similarity index 90% rename from doc/source/Ohmpi_V2_00/V2_00_step_03.rst rename to doc/source/Ohmpi_V2023/V2023_step_03.rst index 352276d8e697ac2f7d5b471abb95d5f21ca9357c..c6c4e47265a5f6b4d447cfe005725d2355baa863 100644 --- a/doc/source/Ohmpi_V2_00/V2_00_step_03.rst +++ b/doc/source/Ohmpi_V2023/V2023_step_03.rst @@ -1,7 +1,7 @@ .. warning:: - **Ohmpi is a participative project open to all, it requires skills in electronics and to respect the safety rules. Ohmpi must be assembled in a professional context and by people competent in electronics. The Ohmpi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The Ohmpi team cannot be held responsible if the equipment does not work after assembly.** + **OhmPi is a participative project open to all, it requires skills in electronics and to respect the safety rules. OhmPi must be assembled in a professional context and by people competent in electronics. The OhmPi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The OhmPi team cannot be held responsible if the equipment does not work after assembly.** @@ -9,10 +9,10 @@ **************************************************** The multiplexing of the channels is a mechanical multiplexing based on OMRON's manufacturing relays (G5LE-1-VD 12 VDC). Each relay is combined with a ZVN4206A power MOFSET. The raspberry has only 30 GPIOs, which is not enough to activate all the 64 electrodes, which represent 512 GPIOs. -We used gpio expender I2C (MCP23017). We have associated these components with an I2C muliplexer of type type TCA9548A from adafruit. +We used gpio expander I2C (MCP23017). We have associated these components with an I2C multiplexer of type type TCA9548A from adafruit. This combination allows to go up to 512 GPIOs and up to 128 electrodes. Each card has its own digital address between 0X70 and 0X77. -In the following presentation for an Ohmpi 64 electrodes, we will use the addresses 0X70 for channel A, 0X71 for channel B, 0X72 for channel M and 0X73 for channel N. -0X73 for the N channel. 4 MUX board will be needed to multiplex an Ohmpi 64 electrodes. +In the following presentation for an OhmPi 64 electrodes, we will use the addresses 0X70 for channel A, 0X71 for channel B, 0X72 for channel M and 0X73 for channel N. +0X73 for the N channel. 4 MUX board will be needed to multiplex an OhmPi 64 electrodes. **PART A** Assembly of MUX board ====================================================== @@ -21,12 +21,12 @@ In the following presentation for an Ohmpi 64 electrodes, we will use the addres Required components ---------------------------------------------------- -.. figure:: step_n_3/a/MUX_board_componement.jpg - :width: 600px - :align: center - :height: 650px - :alt: alternate text - :figclass: align-center +.. figure:: step_n_3/a/MUX_board_components.jpg + :width: 600px + :align: center + :height: 650px + :alt: alternate text + :figclass: align-center .. csv-table:: List of components @@ -51,7 +51,7 @@ Required components +--------+------------------------------------------------------------+ | | .. image:: step_n_3/a/MUX_01.jpg | | 2 +------------------------------------------------------------+ - | |Installation of the 100 Kohm resistors | + | |Installation of the 100 kOhm resistors | | | | +--------+------------------------------------------------------------+ @@ -61,7 +61,7 @@ Required components +--------+------------------------------------------------------------+ | | .. image:: step_n_3/a/MUX_02.jpg | | 3 +------------------------------------------------------------+ - | |Installation of the mosfet ZVN4206A | + | |Installation of the MOSFET ZVN4206A | | | | +--------+------------------------------------------------------------+ @@ -72,7 +72,7 @@ Required components +--------+------------------------------------------------------------+ | | .. image:: step_n_3/a/MUX_03.jpg | | 4 +------------------------------------------------------------+ - | |Installation of the diode-1n4007 | + | |Installation of the diode 1N4007 | | | | +--------+------------------------------------------------------------+ @@ -147,12 +147,12 @@ Required components +--------+------------------------------------------------------------+ .. note:: - This step must be duplicated 4 times for every Mux card. + This step must be duplicated 4 times for every Mux card. **PART B** MUX board address ====================================================== -To build an ohmpi it is necessary to have 4 MUX boards, with 4 different addresses. It is therefore necessary to identify each board, by assigning an address, which will be allocated in the Ohmpi code. +To build an ohmpi it is necessary to have 4 MUX boards, with 4 different addresses. It is therefore necessary to identify each board, by assigning an address, which will be allocated in the OhmPi code. We present here the addresses selected by default. For the A electrode board, we suggest addressing it with address 0x70: @@ -251,16 +251,16 @@ The first thing to do is to prepare a 50 cm long flat wire with two 6-poles conn +--------+------------------------------------------------------------+ | | .. image:: step_n_3/c/20220124_143105.jpg | | 3 +------------------------------------------------------------+ - | |Connect the cables for the 12V power supply to the MUX board| + | |Connect the 12V power supply cables to the MUX board | | |without powering the board. | +--------+------------------------------------------------------------+ +--------+------------------------------------------------------------+ | | .. image:: step_n_3/c/20220207_154111.jpg | | 4 +------------------------------------------------------------+ - | |Connect the 12V power supply screw terminal of the mux board| - | |to the 12V screw terminal power supply of the measurement | - | |board. | + | |Connect the 12V power supply screw terminal of the mux | + | |board to the 12V screw terminal power supply of the | + | |measurement board. | +--------+------------------------------------------------------------+ +--------+------------------------------------------------------------+ @@ -277,7 +277,7 @@ Run the terminal and write: .. code-block:: python - i2cdetect -y 1 + i2cdetect -y 1 Three addresses should appear, including the address of the MUX board you have selected. This implies that your board has been detected. diff --git a/doc/source/Ohmpi_V2_00/V2_00_step_04.rst b/doc/source/Ohmpi_V2023/V2023_step_04.rst similarity index 94% rename from doc/source/Ohmpi_V2_00/V2_00_step_04.rst rename to doc/source/Ohmpi_V2023/V2023_step_04.rst index eea88949b5f9b548cb0c7460c8291e3eee26d689..d7d17b4a2b28006aa3a41fe607c6a7a628556188 100644 --- a/doc/source/Ohmpi_V2_00/V2_00_step_04.rst +++ b/doc/source/Ohmpi_V2023/V2023_step_04.rst @@ -1,13 +1,13 @@ .. warning:: - **Ohmpi is a participative project open to all, it requires skills in electronics and to respect the safety rules. Ohmpi must be assembled in a professional context and by people competent in electronics. The Ohmpi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The Ohmpi team cannot be held responsible if the equipment does not work after assembly.** + **OhmPi is a participative project open to all, it requires skills in electronics and to respect the safety rules. OhmPi must be assembled in a professional context and by people competent in electronics. The OhmPi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The OhmPi team cannot be held responsible if the equipment does not work after assembly.** -**STEP n°4:** assemble Ohmpi +**STEP n°4:** assemble the OhmPi **************************************************** .. table:: @@ -27,9 +27,9 @@ | | .. image:: step_n_4/step_4_2.jpg | | 2 +------------------------------------------------------------+ | |Crimp the ribbon cable on the corresponding idc connector | - | |with a suitable clamp. Pay attention to the direction of the| - | |cables. Unbalanced IDC connector. The ribbon cable must be | - | |perpendicular to the connector. | + | |with a suitable clamp. Pay attention to the direction of | + | |the cables. Unbalanced IDC connector. The ribbon cable must | + | |be perpendicular to the connector. | +--------+------------------------------------------------------------+ .. table:: @@ -68,7 +68,7 @@ +--------+------------------------------------------------------------+ | | .. image:: step_n_4/step_4_6.jpg | | 6 +------------------------------------------------------------+ - | |Position 9 spacers above the MUX board, and 9 spacers below.| + | |Position 9 spacers above the MUX board, and 9 spacers below | | | | + +------------------------------------------------------------+ | | .. image:: step_n_4/step_4_7.jpg | @@ -131,8 +131,8 @@ | 11+------------------------------------------------------------+ | |Cut a red wire and a black wire of 10 cm length. Strip and | | |tin the wires at the ends. Mount the red wire on the 12V | - | |input and the black wire on the GND input on the right screw| - | |terminal. | + | |input and the black wire on the GND input on the right | + | |screw terminal. | +--------+------------------------------------------------------------+ .. table:: @@ -201,9 +201,9 @@ | | .. image:: step_n_4/step_4_18.jpg | | 17+------------------------------------------------------------+ | |Cut a 50 cm long wire "here purple" (Color not relevant but | - | |to be defined). Strip and tin the wire at its ends. Position| - | |the wire on the input B of the screw terminal of the | - | |multiplexing board B. | + | |to be defined). Strip and tin the wire at its ends. | + | |Position the wire on the input B of the screw terminal of | + | |the multiplexing board B. | +--------+------------------------------------------------------------+ @@ -228,7 +228,7 @@ | |it is necessary to position 5 different spacers (here nylon | | |screw hex spacers) in between the “M†board and the “N†MUX | | |Board (as shown on the photograph). Refer to the following | - | |photographs for more details on the assembly of the spacers.| + | |photographs for more details on the assembly of the spacers | +--------+------------------------------------------------------------+ @@ -354,8 +354,8 @@ | |the pre-positioned spacers. Note that LEDs are present on | | |this measurement board with an associated resistance simply | | |for testing purposes (do not consider this temporary | - | |modification of the board). Same for the orange wire present| - | |on the board. | + | |modification of the board). Same for the orange wire | + | |present on the board. | +--------+------------------------------------------------------------+ @@ -451,10 +451,10 @@ +--------+------------------------------------------------------------+ | | .. image:: step_n_4/step_4_40.jpg | | 39+------------------------------------------------------------+ - | |Connect the red and black cables of board A to a 12V battery| - | |or other laboratory power supply delivering a 12V-DC | + | |Connect the red and black cables of board A to a 12V | + | |battery or other laboratory power supply delivering a 12VDC | | |voltage. | - | |Enjoy 😊 | + | |Enjoy 😊 | +--------+------------------------------------------------------------+ diff --git a/doc/source/Ohmpi_V2_00/step_n_1/raspbian_version.jpg b/doc/source/Ohmpi_V2023/step_n_1/raspbian_version.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_1/raspbian_version.jpg rename to doc/source/Ohmpi_V2023/step_n_1/raspbian_version.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_1/schema_measurement_board.jpg b/doc/source/Ohmpi_V2023/step_n_1/schema_measurement_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_1/schema_measurement_board.jpg rename to doc/source/Ohmpi_V2023/step_n_1/schema_measurement_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_1/thonny_first_interface.jpg b/doc/source/Ohmpi_V2023/step_n_1/thonny_first_interface.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_1/thonny_first_interface.jpg rename to doc/source/Ohmpi_V2023/step_n_1/thonny_first_interface.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_1/thonny_interpreter.jpg b/doc/source/Ohmpi_V2023/step_n_1/thonny_interpreter.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_1/thonny_interpreter.jpg rename to doc/source/Ohmpi_V2023/step_n_1/thonny_interpreter.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_1/thonny_interpreter_folder.jpg b/doc/source/Ohmpi_V2023/step_n_1/thonny_interpreter_folder.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_1/thonny_interpreter_folder.jpg rename to doc/source/Ohmpi_V2023/step_n_1/thonny_interpreter_folder.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_1/thonny_option.jpg b/doc/source/Ohmpi_V2023/step_n_1/thonny_option.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_1/thonny_option.jpg rename to doc/source/Ohmpi_V2023/step_n_1/thonny_option.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/00_mes_board_components.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/00_mes_board_components.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/00_mes_board_components.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/00_mes_board_components.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/00_mes_board_components.jpg.gsr2 b/doc/source/Ohmpi_V2023/step_n_2/a/00_mes_board_components.jpg.gsr2 similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/00_mes_board_components.jpg.gsr2 rename to doc/source/Ohmpi_V2023/step_n_2/a/00_mes_board_components.jpg.gsr2 diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/01_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/01_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/01_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/01_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/02_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/02_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/02_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/02_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/03_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/03_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/03_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/03_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/04_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/04_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/04_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/04_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/05_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/05_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/05_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/05_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/06_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/06_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/06_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/06_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/07_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/07_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/07_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/07_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/08_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/08_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/08_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/08_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/09_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/09_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/09_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/09_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/0_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/0_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/0_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/0_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/10_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/10_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/10_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/10_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/11_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/11_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/11_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/11_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/12_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/12_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/12_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/12_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/13_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/13_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/13_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/13_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/14_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/14_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/14_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/14_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/15_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/15_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/15_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/15_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/16_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/16_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/16_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/16_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/17_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/17_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/17_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/17_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/18_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/18_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/18_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/18_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/19_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/19_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/19_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/19_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/20_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/20_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/20_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/20_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/21_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/21_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/21_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/21_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/22_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/22_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/22_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/22_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/23_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/23_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/23_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/23_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/24_mes_board.jpg b/doc/source/Ohmpi_V2023/step_n_2/a/24_mes_board.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/24_mes_board.jpg rename to doc/source/Ohmpi_V2023/step_n_2/a/24_mes_board.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/list_of_components.srf b/doc/source/Ohmpi_V2023/step_n_2/a/list_of_components.srf similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/list_of_components.srf rename to doc/source/Ohmpi_V2023/step_n_2/a/list_of_components.srf diff --git a/doc/source/Ohmpi_V2_00/step_n_2/a/Mesure_board_list_2_xx.csv b/doc/source/Ohmpi_V2023/step_n_2/a/measure_board_list_2_xx.csv similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/a/Mesure_board_list_2_xx.csv rename to doc/source/Ohmpi_V2023/step_n_2/a/measure_board_list_2_xx.csv diff --git a/doc/source/Ohmpi_V2_00/step_n_2/b/001.jpg b/doc/source/Ohmpi_V2023/step_n_2/b/001.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/b/001.jpg rename to doc/source/Ohmpi_V2023/step_n_2/b/001.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/b/002.jpg b/doc/source/Ohmpi_V2023/step_n_2/b/002.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/b/002.jpg rename to doc/source/Ohmpi_V2023/step_n_2/b/002.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/b/003.jpg b/doc/source/Ohmpi_V2023/step_n_2/b/003.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/b/003.jpg rename to doc/source/Ohmpi_V2023/step_n_2/b/003.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/b/004.jpg b/doc/source/Ohmpi_V2023/step_n_2/b/004.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/b/004.jpg rename to doc/source/Ohmpi_V2023/step_n_2/b/004.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/b/005.jpg b/doc/source/Ohmpi_V2023/step_n_2/b/005.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/b/005.jpg rename to doc/source/Ohmpi_V2023/step_n_2/b/005.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/b/test_2_xx.csv b/doc/source/Ohmpi_V2023/step_n_2/b/test_2_xx.csv similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/b/test_2_xx.csv rename to doc/source/Ohmpi_V2023/step_n_2/b/test_2_xx.csv diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210904_214109.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210904_214109.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210904_214109.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210904_214109.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_121859.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_121859.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_121859.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_121859.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_121904.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_121904.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_121904.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_121904.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_121917.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_121917.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_121917.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_121917.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_121926.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_121926.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_121926.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_121926.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_121933.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_121933.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_121933.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_121933.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122447.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_122447.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122447.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_122447.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122454.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_122454.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122454.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_122454.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122546.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_122546.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122546.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_122546.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122547.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_122547.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122547.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_122547.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122603.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_122603.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122603.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_122603.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122627.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_122627.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122627.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_122627.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122801.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_122801.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122801.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_122801.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122820.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_122820.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_122820.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_122820.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_123034.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_123034.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_123034.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_123034.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_132856.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_132856.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_132856.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_132856.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20210905_210045.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20210905_210045.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20210905_210045.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20210905_210045.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20211206_144334.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20211206_144334.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20211206_144334.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20211206_144334.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/20211206_150522.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/20211206_150522.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/20211206_150522.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/20211206_150522.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/Inked20211206_150522_LI.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/Inked20211206_150522_LI.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/Inked20211206_150522_LI.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/Inked20211206_150522_LI.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/Inked20211206_150522_LI2.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/Inked20211206_150522_LI2.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/Inked20211206_150522_LI2.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/Inked20211206_150522_LI2.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/i2cdetect.png b/doc/source/Ohmpi_V2023/step_n_2/c/i2cdetect.png similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/i2cdetect.png rename to doc/source/Ohmpi_V2023/step_n_2/c/i2cdetect.png diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/ref_circuit.png b/doc/source/Ohmpi_V2023/step_n_2/c/ref_circuit.png similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/ref_circuit.png rename to doc/source/Ohmpi_V2023/step_n_2/c/ref_circuit.png diff --git a/doc/source/Ohmpi_V2_00/step_n_2/c/thonny_first_interface.jpg b/doc/source/Ohmpi_V2023/step_n_2/c/thonny_first_interface.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_2/c/thonny_first_interface.jpg rename to doc/source/Ohmpi_V2023/step_n_2/c/thonny_first_interface.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/MUX_board_list_2_xx.csv b/doc/source/Ohmpi_V2023/step_n_3/MUX_board_list_2_xx.csv similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/MUX_board_list_2_xx.csv rename to doc/source/Ohmpi_V2023/step_n_3/MUX_board_list_2_xx.csv diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_00.jpg b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_00.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_00.jpg rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_00.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_01.jpg b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_01.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_01.jpg rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_01.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_02.jpg b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_02.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_02.jpg rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_02.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_03.jpg b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_03.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_03.jpg rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_03.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_04.jpg b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_04.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_04.jpg rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_04.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_05.jpg b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_05.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_05.jpg rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_05.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_06.jpg b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_06.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_06.jpg rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_06.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_07.jpg b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_07.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_07.jpg rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_07.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_08.jpg b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_08.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_08.jpg rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_08.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_09.jpg b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_09.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_09.jpg rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_09.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_10.jpg b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_10.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_10.jpg rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_10.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_board_componement.jpg b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_board_components.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_board_componement.jpg rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_board_components.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_board_list_2_xx.csv b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_board_list_2_xx.csv similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_board_list_2_xx.csv rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_board_list_2_xx.csv diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/MUX_board_list_2_xx.xlsx b/doc/source/Ohmpi_V2023/step_n_3/a/MUX_board_list_2_xx.xlsx similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/MUX_board_list_2_xx.xlsx rename to doc/source/Ohmpi_V2023/step_n_3/a/MUX_board_list_2_xx.xlsx diff --git a/doc/source/Ohmpi_V2_00/step_n_3/a/mux_fig.gpj b/doc/source/Ohmpi_V2023/step_n_3/a/mux_fig.gpj similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/a/mux_fig.gpj rename to doc/source/Ohmpi_V2023/step_n_3/a/mux_fig.gpj diff --git a/doc/source/Ohmpi_V2_00/step_n_3/b/A_0x70-a.jpg b/doc/source/Ohmpi_V2023/step_n_3/b/A_0x70-a.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/b/A_0x70-a.jpg rename to doc/source/Ohmpi_V2023/step_n_3/b/A_0x70-a.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/b/A_0x70.jpg b/doc/source/Ohmpi_V2023/step_n_3/b/A_0x70.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/b/A_0x70.jpg rename to doc/source/Ohmpi_V2023/step_n_3/b/A_0x70.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/b/B_0x71-a.jpg b/doc/source/Ohmpi_V2023/step_n_3/b/B_0x71-a.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/b/B_0x71-a.jpg rename to doc/source/Ohmpi_V2023/step_n_3/b/B_0x71-a.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/b/B_0x71.jpg b/doc/source/Ohmpi_V2023/step_n_3/b/B_0x71.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/b/B_0x71.jpg rename to doc/source/Ohmpi_V2023/step_n_3/b/B_0x71.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/b/M_0x72-a.jpg b/doc/source/Ohmpi_V2023/step_n_3/b/M_0x72-a.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/b/M_0x72-a.jpg rename to doc/source/Ohmpi_V2023/step_n_3/b/M_0x72-a.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/b/M_0x72.jpg b/doc/source/Ohmpi_V2023/step_n_3/b/M_0x72.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/b/M_0x72.jpg rename to doc/source/Ohmpi_V2023/step_n_3/b/M_0x72.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/b/N_0x73-a.jpg b/doc/source/Ohmpi_V2023/step_n_3/b/N_0x73-a.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/b/N_0x73-a.jpg rename to doc/source/Ohmpi_V2023/step_n_3/b/N_0x73-a.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/b/N_0x73.jpg b/doc/source/Ohmpi_V2023/step_n_3/b/N_0x73.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/b/N_0x73.jpg rename to doc/source/Ohmpi_V2023/step_n_3/b/N_0x73.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/c/20211207_115706.jpg b/doc/source/Ohmpi_V2023/step_n_3/c/20211207_115706.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/c/20211207_115706.jpg rename to doc/source/Ohmpi_V2023/step_n_3/c/20211207_115706.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/c/20211207_123021.jpg b/doc/source/Ohmpi_V2023/step_n_3/c/20211207_123021.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/c/20211207_123021.jpg rename to doc/source/Ohmpi_V2023/step_n_3/c/20211207_123021.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/c/2022-01-24-150201_1920x1080_scrot.png b/doc/source/Ohmpi_V2023/step_n_3/c/2022-01-24-150201_1920x1080_scrot.png similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/c/2022-01-24-150201_1920x1080_scrot.png rename to doc/source/Ohmpi_V2023/step_n_3/c/2022-01-24-150201_1920x1080_scrot.png diff --git a/doc/source/Ohmpi_V2_00/step_n_3/c/2022-01-24-150447_1920x1080_scrot.png b/doc/source/Ohmpi_V2023/step_n_3/c/2022-01-24-150447_1920x1080_scrot.png similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/c/2022-01-24-150447_1920x1080_scrot.png rename to doc/source/Ohmpi_V2023/step_n_3/c/2022-01-24-150447_1920x1080_scrot.png diff --git a/doc/source/Ohmpi_V2_00/step_n_3/c/2022-01-24-150500_1920x1080_scrot.png b/doc/source/Ohmpi_V2023/step_n_3/c/2022-01-24-150500_1920x1080_scrot.png similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/c/2022-01-24-150500_1920x1080_scrot.png rename to doc/source/Ohmpi_V2023/step_n_3/c/2022-01-24-150500_1920x1080_scrot.png diff --git a/doc/source/Ohmpi_V2_00/step_n_3/c/20220124_103812.jpg b/doc/source/Ohmpi_V2023/step_n_3/c/20220124_103812.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/c/20220124_103812.jpg rename to doc/source/Ohmpi_V2023/step_n_3/c/20220124_103812.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/c/20220124_142929.jpg b/doc/source/Ohmpi_V2023/step_n_3/c/20220124_142929.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/c/20220124_142929.jpg rename to doc/source/Ohmpi_V2023/step_n_3/c/20220124_142929.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/c/20220124_143105.jpg b/doc/source/Ohmpi_V2023/step_n_3/c/20220124_143105.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/c/20220124_143105.jpg rename to doc/source/Ohmpi_V2023/step_n_3/c/20220124_143105.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/c/20220124_143823.jpg b/doc/source/Ohmpi_V2023/step_n_3/c/20220124_143823.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/c/20220124_143823.jpg rename to doc/source/Ohmpi_V2023/step_n_3/c/20220124_143823.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/c/20220207_154111.jpg b/doc/source/Ohmpi_V2023/step_n_3/c/20220207_154111.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/c/20220207_154111.jpg rename to doc/source/Ohmpi_V2023/step_n_3/c/20220207_154111.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_3/c/thonny_mux_test_01.png b/doc/source/Ohmpi_V2023/step_n_3/c/thonny_mux_test_01.png similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_3/c/thonny_mux_test_01.png rename to doc/source/Ohmpi_V2023/step_n_3/c/thonny_mux_test_01.png diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_1.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_1.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_1.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_1.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_10.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_10.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_10.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_10.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_11.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_11.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_11.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_11.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_12.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_12.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_12.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_12.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_13.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_13.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_13.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_13.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_14.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_14.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_14.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_14.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_15.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_15.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_15.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_15.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_16.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_16.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_16.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_16.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_17.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_17.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_17.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_17.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_18.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_18.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_18.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_18.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_19.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_19.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_19.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_19.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_2.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_2.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_2.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_2.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_20.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_20.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_20.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_20.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_21.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_21.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_21.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_21.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_22.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_22.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_22.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_22.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_23.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_23.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_23.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_23.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_24.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_24.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_24.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_24.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_25.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_25.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_25.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_25.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_26.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_26.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_26.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_26.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_27.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_27.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_27.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_27.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_28.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_28.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_28.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_28.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_29.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_29.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_29.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_29.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_3.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_3.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_3.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_3.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_30.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_30.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_30.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_30.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_31.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_31.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_31.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_31.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_32.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_32.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_32.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_32.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_33.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_33.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_33.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_33.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_34.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_34.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_34.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_34.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_35.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_35.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_35.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_35.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_36.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_36.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_36.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_36.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_37.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_37.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_37.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_37.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_38.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_38.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_38.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_38.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_39.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_39.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_39.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_39.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_4.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_4.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_4.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_4.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_40.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_40.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_40.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_40.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_5.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_5.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_5.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_5.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_6.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_6.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_6.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_6.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_7.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_7.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_7.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_7.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_8.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_8.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_8.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_8.jpg diff --git a/doc/source/Ohmpi_V2_00/step_n_4/step_4_9.jpg b/doc/source/Ohmpi_V2023/step_n_4/step_4_9.jpg similarity index 100% rename from doc/source/Ohmpi_V2_00/step_n_4/step_4_9.jpg rename to doc/source/Ohmpi_V2023/step_n_4/step_4_9.jpg diff --git a/doc/source/V1_01.rst b/doc/source/V1_01.rst index 4b1a56cf81d053c1aee9999d16280cac9891ff5c..474ea7091e8488a305cecd947b1db10e4ec4c63c 100644 --- a/doc/source/V1_01.rst +++ b/doc/source/V1_01.rst @@ -3,14 +3,14 @@ OhmPi V 1.01 (limited to 32 electrodes) ***************************************** .. warning:: - This version corresponds to the version published in the Hardware X journal. - However, we have corrected the bugs that existed on this version and explained the missing mounting points in detail below. - We invite you to refer to this document to assemble Ohmpi V1.01. - + This version corresponds to the version published in the Hardware X journal. + However, we have corrected the bugs that existed on this version and explained the missing mounting points in detail below. + We invite you to refer to this document to assemble Ohmpi V1.01. + .. warning:: - **Ohmpi is a participative project open to all, it requires skills in electronics and to respect the safety rules. Ohmpi must be assembled in a professional context and by people competent in electronics. The Ohmpi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The Ohmpi team cannot be held responsible if the equipment does not work after assembly.** + **Ohmpi is a participative project open to all, it requires skills in electronics and to respect the safety rules. Ohmpi must be assembled in a professional context and by people competent in electronics. The Ohmpi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The Ohmpi team cannot be held responsible if the equipment does not work after assembly.** - + The philosophy of Ohmpi @@ -27,7 +27,7 @@ Technical data +-------------------------------+--------------------+-----------+ |Electrodes |32 | | +-------------------------------+--------------------+-----------+ -|Operating temperature |0 to 50 |°c | +|Operating temperature |0 to 50 |°C | +-------------------------------+--------------------+-----------+ |Power consumption of CPU and |18.5 |W | |control system | | | @@ -38,13 +38,13 @@ Technical data +-------------------------------+--------------------+-----------+ |Current |0 to 50 |mA | +-------------------------------+--------------------+-----------+ -|Min pulse duration |150 |mS | +|Min pulse duration |150 |ms | +-------------------------------+--------------------+-----------+ -|Input impedance |36 |Mohm | +|Input impedance |36 |MOhm | +-------------------------------+--------------------+-----------+ |Data storage |micro SD card | | +-------------------------------+--------------------+-----------+ -|Resolution |O.O1 |ohm | +|Resolution |O.O1 |Ohm | +-------------------------------+--------------------+-----------+ Raspberry Pi configuration @@ -55,24 +55,24 @@ OS installation The first step is to start up the Raspberry Pi board, including installation of an OS (operating system). For this step, the installation instructions are well described on the Raspberry website -1. Watch the vidéo "how to set up your raspberry Pi" (https://www.youtube.com/watch?v=wjWZhV1v3Pk) +1. Watch the video "how to set up your raspberry Pi" (https://www.youtube.com/watch?v=wjWZhV1v3Pk) 2. The authors recommend installing the latest stable and complete version of Raspbian by using NOOBS (a simple-to-use operating system installer). .. note:: - All the development tests were performed on Raspberry Pi 3 Model B, we used the following version of Raspbian: - - .. figure:: raspbian_version.jpg - :width: 800px - :align: center - :height: 400px - :alt: alternate text - :figclass: align-center + All the development tests were performed on Raspberry Pi 3 Model B, we used the following version of Raspbian: + + .. figure:: raspbian_version.jpg + :width: 800px + :align: center + :height: 400px + :alt: alternate text + :figclass: align-center .. warning:: - Once the OS has been installed, **1-wire, spi and GPIO remote option** must be deactivated via the Raspbian GUI settings menu. Failure to carry out this task may cause damage to the relay shield cards during measurements. + Once the OS has been installed, **1-wire, spi and GPIO remote option** must be deactivated via the Raspbian GUI settings menu. Failure to carry out this task may cause damage to the relay shield cards during measurements. @@ -84,121 +84,121 @@ To ensure that the GPIOs are in Low position, you will need to modify the /boot/ .. code-block:: python - cd /boot/ + cd /boot/ 4. Open config.txt with GNU nano editor .. code-block:: python - sudo nano config.txt + sudo nano config.txt 5. At the end of the file write : .. code-block:: python - - gpio=8=op,dl - gpio=7=op,dl + + gpio=8=op,dl + gpio=7=op,dl 6. Press Ctrl +O to save the modifications and press enter -7. Press Ctrl +x to escap and return to the terminal +7. Press Ctrl +x to escape and return to the terminal 8. Close the terminal -Virtual Environnement and packages -================================== +Virtual Environment and packages +================================ All dependencies are specified in requirements.txt .. note:: - All instructions below should be typed in the terminal + All instructions below should be typed in the terminal It is first necessary to ensure that the libatlas-base-dev library is installed: .. code-block:: python - - sudo apt-get install libatlas-base-dev + + sudo apt-get install libatlas-base-dev We strongly recommend users to create a virtual environment to run the code and installed all required dependencies. It can be done either in a directory gathering all virtual environments used on the computer or within the ohmpy directory. Create the virtual environment: .. code-block:: python - - python3 -m venv ohmpy + + python3 -m venv ohmpy Activate it using the following command: .. code-block:: python - - source ohmpy/bin/activate + + source ohmpy/bin/activate Install packages within the virtual environment. Installing the following package should be sufficient to meet dependencies: .. code-block:: python - - pip install RPi.GPIO adafruit-blinka numpy adafruit-circuitpython-ads1x15 pandas + + pip install RPi.GPIO adafruit-blinka numpy adafruit-circuitpython-ads1x15 pandas Check that requirements are met using .. code-block:: python - - pip list + + pip list You should run you code within the virtual environment to leave the virtual environment simply type: .. code-block:: python - - deactivate + + deactivate -Activate virtual environnement on Thonny (Python IDE) (on Rapberry Pi) -======================================================================== +Activate virtual environment on Thonny (Python IDE) (on Raspberry Pi) +====================================================================== If you decided to use a virtual environment, it is necessary to setup Thonny Python IDE the first time you use it. -1- Run the Thonny Python IDE software, Click on raspebrry acces **menu > programming> Thonny pythonIDE** +1- Run the Thonny Python IDE software, Click on raspberry access **menu > programming> Thonny pythonIDE** -2- Thonny's interface opens, Python runs on the Root (Python 3.7.3 (/usr/bin/python3)) +2- Thonny opens, Python runs on the root (Python 3.7.3 (/usr/bin/python3)) .. figure:: thonny_first_interface.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center 3-Click on **Run>select interpreter**, a new window opens click on interpret .. figure:: thonny_option.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center -4-On the new open windows select **alternative Pyhton3 or virtual environnement** +4-On the new open windows select **alternative Python3 or virtual environment** .. figure:: thonny_interpreter.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center - + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center + 5- New buttons appeared, selected **"locate another python executable "** 6- A new window opens, find the folder where there is the python 3 file in the virtual environment folder previously created **/home/pi/ohmpi/bin/python3**. -7- In the **known interpreter** tab the path of the virtual environnementshould appear +7- In the **known interpreter** tab the path of the virtual environment should appear .. figure:: thonny_interpreter_folder.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center 8- Close the window by clicking on **ok**. @@ -263,41 +263,41 @@ it by following the steps described below and illustrated in the following figur * Step no. 1: test divider bridge For each measurement channel, we have installed a bridge divider, it is necessary to test with ohmmeter the value of the resistances, to adjust each coefficients (coef_p0, coef_p1, coef_p2, coef_p3) in the Ohmpi.py code.. - .. math:: - coeff po = (R1 + R2) / R1 - - .. math:: - coeff p1 = (R3 + R4) / R3 - - .. math:: - coeff p2 = (R7 + R6) / R7 - - .. math:: - coeff p3 = (R9 + R8) / R9 - - .. code-block:: python - :linenos: - :lineno-start: 36 - - """ - hardware parameters - """ - R_ref = 50 # reference resistance value in ohm - coef_p0 = 2.5 # slope for current conversion for ADS.P0, measurement in V/V - coef_p1 = 2.5 # slope for current conversion for ADS.P1, measurement in V/V - coef_p2 = 2.5 # slope for current conversion for ADS.P2, measurement in V/V - coef_p3 = 2.5 # slope for current conversion for ADS.P3, measurement in V/V - - The coefficient parameters can be adjusted in lines 40 to 43 of the ohmpi.py code. - - -* Step no. 2: installation of the 1-Kohm resistors with an accuracy of ± 1%. -* Step no. 3: installation of the 1.5-Kohm resistors with an accuracy of ± 1%. + .. math:: + coef po = (R1 + R2) / R1 + + .. math:: + coef p1 = (R3 + R4) / R3 + + .. math:: + coef p2 = (R7 + R6) / R7 + + .. math:: + coef p3 = (R9 + R8) / R9 + + .. code-block:: python + :linenos: + :lineno-start: 36 + + """ + hardware parameters + """ + R_ref = 50 # reference resistance value in ohm + coef_p0 = 2.5 # slope for current conversion for ADS.P0, measurement in V/V + coef_p1 = 2.5 # slope for current conversion for ADS.P1, measurement in V/V + coef_p2 = 2.5 # slope for current conversion for ADS.P2, measurement in V/V + coef_p3 = 2.5 # slope for current conversion for ADS.P3, measurement in V/V + + The coefficient parameters can be adjusted in lines 40 to 43 of the ohmpi.py code. + + +* Step no. 2: installation of the 1-KOhm resistors with an accuracy of ± 1%. +* Step no. 3: installation of the 1.5-KOhm resistors with an accuracy of ± 1%. * Step no. 4: installation of both the black female 1 x 10 header and the 7-blue screw terminal blocks * Step no. 5: installation of the 50-Ohm reference resistor ± 0.1%, please check the value and correct the line 39 in ohmpi.py code * Step no. 6: addition of both the ADS115 directly onto the header (pins must be plugged according to the figure) and the LM358N operational amplifiers (pay attention to the direction). -1-Kohm and 1.5-Kohm resistors apply to the divider bridge. If, for example, you prefer using a weaker +1-KOhm and 1.5-KOhm resistors apply to the divider bridge. If, for example, you prefer using a weaker or stronger power supply, it would be possible to adjust the divider bridge value by simply modifying these resistors. Once all the components have been soldered together, the measurement board can be connected to the Raspberry Pi and the battery terminal, according to Figure 9. Between the battery and the TX+ terminal of the measurement board, remember to @@ -310,7 +310,7 @@ place a fuse holder with a 1.5-A fuse for safety purposes. :alt: alternate text :figclass: align-center - Measurement circuit board assembly: a) printed circuit board, b) adding the 1-Kohm resistors ± 1%, c)adding the 1.5-Kohm resistors ± 1%, d) adding the black female 1 x 10 header and the 7-blue screw terminal block(2 pin, 3.5-mm pitch), e) adding the 50-ohm reference resistor ± 0.1%, and f) adding the ADS1115 and the LM358N low-power dual operational amplifiers + Measurement circuit board assembly: a) printed circuit board, b) adding the 1-KOhm resistors ± 1%, c)adding the 1.5-KOhm resistors ± 1%, d) adding the black female 1 x 10 header and the 7-blue screw terminal block(2 pin, 3.5-mm pitch), e) adding the 50-ohm reference resistor ± 0.1%, and f) adding the ADS1115 and the LM358N low-power dual operational amplifiers .. figure:: measurement_board-2.jpg :width: 800px @@ -366,18 +366,18 @@ to terminals B and A of the measurement board. Congratulations, you have build a 4 electrodes resistivity-meter. -Frist four electrodes resistivity mesurement -============================================ +First four electrodes resistivity measurement +============================================= Under construction ! -Describe the way to valide the first part of the instruction. +Describe the way to validate the first part of the instruction. Electrical resistivity measurement on test circuit -Multiplexer implentation -************************* +Multiplexer implementation +************************** The resistivity measurement is conducted on four terminals (A, B, M and N). The user could perform each measurement by manually plugging four electrodes into the four channel terminals. In practice, ERT requires several tens or thousands of measurements conducted on different electrode arrays. A multiplexer is therefore used to connect each channel to one of @@ -442,7 +442,7 @@ The next step consists of connecting the relay card inputs to the Raspberry Pi a | Multiplexer N |22 |10 |09 |11 |05 | +-------------------------------+----------+----------+----------+----------+---------------------+ - Connection of the GPIOs to each multiplexer + Connection of the GPIOs to each multiplexer Electrode connection @@ -474,8 +474,8 @@ This operation must be repeated for all 32 electrodes. Example of a multiplexer connection to the screw terminal for electrode no. 1. .. warning:: - The 16 channel relay cards exist in 5-V and 12-V , in the bottom figure we have 12-V cards that we will directly connect to the battery. - In case you bought 16 channel relay 5-V cards, you will need to add a DC/DC 12-V/5-V converter. You can use a STEP DOWN MODULE DC-DC (Velleman WPM404) and set the voltage to 5V with the potentiometer. + The 16 channel relay cards exist in 5-V and 12-V , in the bottom figure we have 12-V cards that we will directly connect to the battery. + In case you bought 16 channel relay 5-V cards, you will need to add a DC/DC 12-V/5-V converter. You can use a STEP DOWN MODULE DC-DC (Velleman WPM404) and set the voltage to 5V with the potentiometer. Operating instruction ************************* @@ -503,17 +503,17 @@ Electrical resistivity measurement parameters description ========================================================== .. code-block:: python - :linenos: - :lineno-start: 27 - - """ - measurement parameters - """ - nb_electrodes = 32 # maximum number of electrodes on the resistivity meter - injection_duration = 0.5 # Current injection duration in second - nbr_meas= 1 # Number of times the quadripole sequence is repeated - sequence_delay= 30 # Delay in seconds between 2 sequences - stack= 1 # repetition of the current injection for each quadripole + :linenos: + :lineno-start: 27 + + """ + measurement parameters + """ + nb_electrodes = 32 # maximum number of electrodes on the resistivity meter + injection_duration = 0.5 # Current injection duration in second + nbr_meas= 1 # Number of times the quadrupole sequence is repeated + sequence_delay= 30 # Delay in seconds between 2 sequences + stack= 1 # repetition of the current injection for each quadrupole The measurement parameters can be adjusted in lines 27 to 30 of the ohmpi.py code. diff --git a/doc/source/V1_02.rst b/doc/source/V1_02.rst index d35e3e5fce308b943aa491277241b171b600d0cb..6dad02c86ccf2e61b98712c1b419467572497792 100644 --- a/doc/source/V1_02.rst +++ b/doc/source/V1_02.rst @@ -1,22 +1,22 @@ -***************************************** +*************************************** OhmPi V 1.02 (limited to 32 electrodes) -***************************************** +*************************************** .. warning:: - **Ohmpi is a participative project open to all, it requires skills in electronics and to respect the safety rules. Ohmpi must be assembled in a professional context and by people competent in electronics. The Ohmpi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The Ohmpi team cannot be held responsible if the equipment does not work after assembly.** + **Ohmpi is a participative project open to all, it requires skills in electronics and to respect the safety rules. Ohmpi must be assembled in a professional context and by people competent in electronics. The Ohmpi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The Ohmpi team cannot be held responsible if the equipment does not work after assembly.** .. note:: - - In this version, we have improved the electronic measurement board. To upgrade from version 1.01 to 1.02, you just have to replace the measurement board by the new one proposed here. - + + In this version, we have improved the electronic measurement board. To upgrade from version 1.01 to 1.02, you just have to replace the measurement board by the new one proposed here. + The philosophy of Ohmpi -************************** +*********************** The philosophy of Ohmpi V1.01 is to offer a multi electrode resistivity meter, from a set of commercially available electronic cards it is a resistivity meter limited to 32 electrodes only. It is limited to low-current injection, but suitable for small laboratory experiments and small field time monitoring @@ -29,7 +29,7 @@ Technical data +-------------------------------+--------------------+-----------+ |Electrodes |32 | | +-------------------------------+--------------------+-----------+ -|Operating temperature |0 to 50 |°c | +|Operating temperature |0 to 50 |°C | +-------------------------------+--------------------+-----------+ |Power consumption of CPU and |18.5 |W | |control system | | | @@ -40,13 +40,13 @@ Technical data +-------------------------------+--------------------+-----------+ |Current |0 to 50 |mA | +-------------------------------+--------------------+-----------+ -|Min pulse duration |150 |mS | +|Min pulse duration |150 |ms | +-------------------------------+--------------------+-----------+ -|Input impedance |36 |Mohm | +|Input impedance |36 |MOhm | +-------------------------------+--------------------+-----------+ |Data storage |micro SD card | | +-------------------------------+--------------------+-----------+ -|Resolution |O.O1 |ohm | +|Resolution |O.O1 |Ohm | +-------------------------------+--------------------+-----------+ Raspberry Pi configuration @@ -57,24 +57,24 @@ OS installation The first step is to start up the Raspberry Pi board, including installation of an OS (operating system). For this step, the installation instructions are well described on the Raspberry website -1. Watch the vidéo "how to set up your raspberry Pi" (https://www.youtube.com/watch?v=wjWZhV1v3Pk) +1. Watch the video "how to set up your raspberry Pi" (https://www.youtube.com/watch?v=wjWZhV1v3Pk) 2. The authors recommend installing the latest stable and complete version of Raspbian by using NOOBS (a simple-to-use operating system installer). .. note:: - All the development tests were performed on Raspberry Pi 3 Model B, we used the following version of Raspbian: - - .. figure:: raspbian_version.jpg - :width: 800px - :align: center - :height: 400px - :alt: alternate text - :figclass: align-center + All the development tests were performed on Raspberry Pi 3 Model B, we used the following version of Raspbian: + + .. figure:: raspbian_version.jpg + :width: 800px + :align: center + :height: 400px + :alt: alternate text + :figclass: align-center .. warning:: - Once the OS has been installed, **1-wire, spi and GPIO remote option** must be deactivated via the Raspbian GUI settings menu. Failure to carry out this task may cause damage to the relay shield cards during measurements. + Once the OS has been installed, **1-wire, spi and GPIO remote option** must be deactivated via the Raspbian GUI settings menu. Failure to carry out this task may cause damage to the relay shield cards during measurements. @@ -86,121 +86,121 @@ To ensure that the GPIOs are in Low position, you will need to modify the /boot/ .. code-block:: python - cd /boot/ + cd /boot/ 4. Open config.txt with GNU nano editor .. code-block:: python - sudo nano config.txt + sudo nano config.txt 5. At the end of the file write : .. code-block:: python - - gpio=8=op,dl - gpio=7=op,dl + + gpio=8=op,dl + gpio=7=op,dl 6. Press Ctrl +O to save the modifications and press enter -7. Press Ctrl +x to escap and return to the terminal +7. Press Ctrl +x to escape and return to the terminal 8. Close the terminal -Virtual Environnement and packages -================================== +Virtual Environment and packages +================================ All dependencies are specified in requirements.txt .. note:: - All instructions below should be typed in the terminal + All instructions below should be typed in the terminal It is first necessary to ensure that the libatlas-base-dev library is installed: .. code-block:: python - - sudo apt-get install libatlas-base-dev + + sudo apt-get install libatlas-base-dev We strongly recommend users to create a virtual environment to run the code and installed all required dependencies. It can be done either in a directory gathering all virtual environments used on the computer or within the ohmpy directory. Create the virtual environment: .. code-block:: python - - python3 -m venv ohmpy + + python3 -m venv ohmpy Activate it using the following command: .. code-block:: python - - source ohmpy/bin/activate + + source ohmpy/bin/activate Install packages within the virtual environment. Installing the following package should be sufficient to meet dependencies: .. code-block:: python - - pip install RPi.GPIO adafruit-blinka numpy adafruit-circuitpython-ads1x15 pandas + + pip install RPi.GPIO adafruit-blinka numpy adafruit-circuitpython-ads1x15 pandas Check that requirements are met using .. code-block:: python - - pip list + + pip list You should run you code within the virtual environment to leave the virtual environment simply type: .. code-block:: python - - deactivate + + deactivate -Activate virtual environnement on Thonny (Python IDE) (on Rapberry Pi) -======================================================================== +Activate virtual environment on Thonny (Python IDE) (on Raspberry Pi) +====================================================================== If you decided to use a virtual environment, it is necessary to setup Thonny Python IDE the first time you use it. -1- Run the Thonny Python IDE software, Click on raspebrry acces **menu > programming> Thonny pythonIDE** +1- Run the Thonny Python IDE software, Click on raspberry access **menu > programming> Thonny pythonIDE** -2- Thonny's interface opens, Python runs on the Root (Python 3.7.3 (/usr/bin/python3)) +2- Thonny opens, Python runs on the root (Python 3.7.3 (/usr/bin/python3)) .. figure:: thonny_first_interface.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center 3-Click on **Run>select interpreter**, a new window opens click on interpret .. figure:: thonny_option.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center -4-On the new open windows select **alternative Pyhton3 or virtual environnement** +4-On the new open windows select **alternative Python3 or virtual environment** .. figure:: thonny_interpreter.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center - + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center + 5- New buttons appeared, selected **"locate another python executable "** 6- A new window opens, find the folder where there is the python 3 file in the virtual environment folder previously created **/home/pi/ohmpi/bin/python3**. -7- In the **known interpreter** tab the path of the virtual environnementshould appear +7- In the **known interpreter** tab the path of the virtual environment should appear .. figure:: thonny_interpreter_folder.jpg - :width: 600px - :align: center - :height: 450px - :alt: alternate text - :figclass: align-center + :width: 600px + :align: center + :height: 450px + :alt: alternate text + :figclass: align-center 8- Close the window by clicking on **ok**. @@ -248,7 +248,7 @@ A shortcut between Electrodes A and B will generate excessive currents, whose in A lithium ion battery or automobile-type lead-acid battery can deliver a strong enough current to damage the board and, as such, constitutes a potential hazard. We therefore recommend adding a 1.5-A fuse between the battery and resistor R9. In version 1.02, we have improved the electronic board of measurement. we have added a DC/DC converter to supply the operational amplifiers -(2 Traco power DC/DCconverter TRN3-1215). These converters allow to limit the suppression of the signal when the injected voltage is higher than 10V. +(2 Traco power DC/DC converter TRN3-1215). These converters allow to limit the suppression of the signal when the injected voltage is higher than 10V. We also added 4 capacitors on the +12v inputs of the fast operational amplifiers. These are decoupling capacitors (typically 100nF ceramic) between each power supply terminal and ground. The last point, we have added a four very high resistances of 10 MOhm, between the ground and the signal input on the operational amplifiers. This prevents the operational amplifiers from overheating. @@ -263,7 +263,7 @@ the signal input on the operational amplifiers. This prevents the operational am Measurement board (Ohmpi version 1.02) .. note:: - If you want to have very accurate measurements you can replace the resistors with a tolerance of 1% by resistors with a tolerance of 0.01% which will improve the measurement, but the cost will be higher. + If you want to have very accurate measurements you can replace the resistors with a tolerance of 1% by resistors with a tolerance of 0.01% which will improve the measurement, but the cost will be higher. @@ -275,44 +275,44 @@ it by following the steps described below and illustrated in the following figur * Step no. 1: test divider bridge For each measurement channel, we have installed a bridge divider, it is necessary to test with ohmmeter the value of the resistances, to adjust each coefficients (coef_p0, coef_p1, coef_p2, coef_p3) in the Ohmpi.py code.. - .. math:: - coeff po = (R1 + R2) / R1 - - .. math:: - coeff p1 = (R3 + R4) / R3 - - .. math:: - coeff p2 = (R7 + R6) / R7 - - .. math:: - coeff p3 = (R9 + R8) / R9 - - .. code-block:: python - :linenos: - :lineno-start: 36 - - """ - hardware parameters - """ - R_ref = 50 # reference resistance value in ohm - coef_p0 = 2.5 # slope for current conversion for ADS.P0, measurement in V/V - coef_p1 = 2.5 # slope for current conversion for ADS.P1, measurement in V/V - coef_p2 = 2.5 # slope for current conversion for ADS.P2, measurement in V/V - coef_p3 = 2.5 # slope for current conversion for ADS.P3, measurement in V/V - - The coefficient parameters can be adjusted in lines 40 to 43 of the ohmpi.py code. - - -* Step no. 2: installation of the 1-Kohm resistors with an accuracy of ± 1% (b-in the figure). -* Step no. 3: installation of the 1.5-Kohm resistors with an accuracy of ± 1%(C-in the figure). + .. math:: + coef po = (R1 + R2) / R1 + + .. math:: + coef p1 = (R3 + R4) / R3 + + .. math:: + coef p2 = (R7 + R6) / R7 + + .. math:: + coef p3 = (R9 + R8) / R9 + + .. code-block:: python + :linenos: + :lineno-start: 36 + + """ + hardware parameters + """ + R_ref = 50 # reference resistance value in ohm + coef_p0 = 2.5 # slope for current conversion for ADS.P0, measurement in V/V + coef_p1 = 2.5 # slope for current conversion for ADS.P1, measurement in V/V + coef_p2 = 2.5 # slope for current conversion for ADS.P2, measurement in V/V + coef_p3 = 2.5 # slope for current conversion for ADS.P3, measurement in V/V + + The coefficient parameters can be adjusted in lines 40 to 43 of the ohmpi.py code. + + +* Step no. 2: installation of the 1-KOhm resistors with an accuracy of ± 1% (b-in the figure). +* Step no. 3: installation of the 1.5-KOhm resistors with an accuracy of ± 1%(C-in the figure). * Step no. 4: installation of both the black female 1 x 10 header and the 7-blue screw terminal blocks (c-in the figure) * Step no. 5: installation of the 50-Ohm reference resistor ± 0.1%, please check the value and correct the line 39 in ohmpi.py code (d-in the figure) * Step no. 6: addition of both the ADS115 directly onto the header (pins must be plugged according to the figure) and the LM358N operational amplifiers (pay attention to the orientation) (e-in the figure). -* Step no. 7: installation of the 10-Mohm resistors with an accuracy of ± 5% (f-in the figure). +* Step no. 7: installation of the 10-MOhm resistors with an accuracy of ± 5% (f-in the figure). * Step no. 8: installation of the two DC/DC converter TRN3-1215 (h-in the figure). -* Setp no. 9: installation of the four capacitor on 100-nF/50vDC and the fuse of 10-A (h-in the figure). +* Step no. 9: installation of the four capacitor on 100-nF/50vDC and the fuse of 10-A (h-in the figure). -1-Kohm and 1.5-Kohm resistors apply to the divider bridge. If, for example, you prefer using a stronger power supply, it would be possible to adjust the divider bridge value by simply modifying these resistors. +1-KOhm and 1.5-KOhm resistors apply to the divider bridge. If, for example, you prefer using a stronger power supply, it would be possible to adjust the divider bridge value by simply modifying these resistors. Once all the components have been soldered together, the measurement board can be connected to the Raspberry Pi and the battery terminal, according to Figure 9. Between the battery and the TX+ terminal of the measurement board, remember to place a fuse holder with a 1.5-A fuse for safety purposes. @@ -324,7 +324,7 @@ place a fuse holder with a 1.5-A fuse for safety purposes. :alt: alternate text :figclass: align-center - Measurement circuit board assembly: a) printed circuit board, b) adding the 1-Kohm resistors ± 1%, c)adding the 1.5-Kohm resistors ± 1%, d) adding the black female 1 x 10 header and the 7-blue screw terminal block(2 pin, 3.5-mm pitch), e) adding the 50-ohm reference resistor ± 0.1%, and f) adding the ADS1115 and the LM358N low-power dual operational amplifiers + Measurement circuit board assembly: a) printed circuit board, b) adding the 1-KOhm resistors ± 1%, c)adding the 1.5-KOhm resistors ± 1%, d) adding the black female 1 x 10 header and the 7-blue screw terminal block(2 pin, 3.5-mm pitch), e) adding the 50-ohm reference resistor ± 0.1%, and f) adding the ADS1115 and the LM358N low-power dual operational amplifiers .. figure:: measurement_board-2-V1-02.jpg :width: 800px @@ -380,18 +380,18 @@ to terminals B and A of the measurement board. Congratulations, you have build a 4 electrodes resistivity-meter. -Frist four electrodes resistivity mesurement -============================================ +First four electrodes resistivity measurement +============================================= Under construction ! -Describe the way to valide the first part of the instruction. +Describe the way to validate the first part of the instruction. Electrical resistivity measurement on test circuit -Multiplexer implentation -************************* +Multiplexer implementation +************************** The resistivity measurement is conducted on four terminals (A, B, M and N). The user could perform each measurement by manually plugging four electrodes into the four channel terminals. In practice, ERT requires several tens or thousands of measurements conducted on different electrode arrays. A multiplexer is therefore used to connect each channel to one of @@ -456,7 +456,7 @@ The next step consists of connecting the relay card inputs to the Raspberry Pi a | Multiplexer N |22 |10 |09 |11 |05 | +-------------------------------+----------+----------+----------+----------+---------------------+ - Connection of the GPIOs to each multiplexer + Connection of the GPIOs to each multiplexer Electrode connection @@ -488,8 +488,8 @@ This operation must be repeated for all 32 electrodes. Example of a multiplexer connection to the screw terminal for electrode no. 1. .. warning:: - The 16 channel relay cards exist in 5-V and 12-V , in the bottom figure we have 12-V cards that we will directly connect to the battery. - In case you bought 16 channel relay 5-V cards, you will need to add a DC/DC 12-V/5-V converter. You can use a STEP DOWN MODULE DC-DC (Velleman WPM404) and set the voltage to 5V with the potentiometer. + The 16 channel relay cards exist in 5-V and 12-V , in the bottom figure we have 12-V cards that we will directly connect to the battery. + In case you bought 16 channel relay 5-V cards, you will need to add a DC/DC 12-V/5-V converter. You can use a STEP DOWN MODULE DC-DC (Velleman WPM404) and set the voltage to 5V with the potentiometer. Operating instruction ************************* @@ -519,16 +519,16 @@ Electrical resistivity measurement parameters description In the version 1.02, the measurement parameters are in the Jason file (ohmpi_param.json). .. code-block:: python - :linenos: - :lineno-start: 1 - - - nb_electrodes = 32 # maximum number of electrodes on the resistivity meter - injection_duration = 0.5 # Current injection duration in second - nbr_meas= 1 # Number of times the quadripole sequence is repeated - sequence_delay= 30 # Delay in seconds between 2 sequences - stack= 1 # repetition of the current injection for each quadripole - export_path= "home/pi/Desktop/measurement.csv" + :linenos: + :lineno-start: 1 + + + nb_electrodes = 32 # maximum number of electrodes on the resistivity meter + injection_duration = 0.5 # Current injection duration in second + nbr_meas= 1 # Number of times the quadrupole sequence is repeated + sequence_delay= 30 # Delay in seconds between 2 sequences + stack= 1 # repetition of the current injection for each quadrupole + export_path= "home/pi/Desktop/measurement.csv" diff --git a/doc/source/V2023.rst b/doc/source/V2023.rst new file mode 100644 index 0000000000000000000000000000000000000000..860f2a5aa431f267364213afb19abb0fdca5054b --- /dev/null +++ b/doc/source/V2023.rst @@ -0,0 +1,311 @@ +******************************************** +OhmPi V2023 (64 electrodes and 12V) +******************************************** + +.. warning:: + **OhmPi is a participative project open to all, it requires skills in electronics and to respect the safety rules. OhmPi must be assembled in a professional context and by people competent in electronics. The OhmPi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OhmPi. The OhmPi team cannot be held responsible if the equipment does not work after assembly.** + + + +.. figure:: image_ohmpi_2.jpg + :width: 400px + :align: center + :height: 350px + :alt: OhmPi V2023 + :figclass: align-center + +.. note:: + In this version, we have developed two new board types that allow the assembly of OhmPi v2023, a measurement board and a multiplexer board. + This new version is made up of: + + 1. A measurement board for four-point measurement + + 2. 4 multiplexer cards + + 3. A box + + The OhmPi V2023 software has been adapted to handle this new boards and also includes many new functionalities. + +The philosophy of OhmPi +======================== + +The philosophy of OhmPi V2023 is to offer a new DIY multi-electrode resistivity meter. It is a resistivity meter with 64 electrodes, which can be upgraded to 128 electrodes. +It is limited to low-current injection, but suitable for small laboratory experiments and small field time-lapse monitoring. +OhmPi is developed by a team that seeks to share its experience and wishes to improve and offer a more and more robust tool to the community. OhmPi 2023 is completely different version from the previous one. +We will stop the development on the version V1.0x, to dedicate our efforts on this new version. + +============================================================================================================================================================= + +Hardware +======== + +Specifications +-------------- + ++-------------------------------+-----------------------+-----------+-----------------------+-----------+ +| **Parameter** | **V1.0x** | Units | **v2023** | Units | ++===============================+=======================+===========+=======================+===========+ +|Electrodes |32 | |64 to 128 | | ++-------------------------------+-----------------------+-----------+-----------------------+-----------+ +|Operating temperature |-0 to 50 |°c |-25 to 50 |°C | ++-------------------------------+-----------------------+-----------+-----------------------+-----------+ +|Power consumption of CPU and |18.5 |W |18.5 |W | +|control system | | | | | ++-------------------------------+-----------------------+-----------+-----------------------+-----------+ +|Voltage injection |12 |V |12 |V | ++-------------------------------+-----------------------+-----------+-----------------------+-----------+ +|Battery |9 |V |12 |V | ++-------------------------------+-----------------------+-----------+-----------------------+-----------+ +|Current |0 to 40 |mA |0 to 40 |mA | ++-------------------------------+-----------------------+-----------+-----------------------+-----------+ +|Min pulse duration |150 |ms |150 |ms | ++-------------------------------+-----------------------+-----------+-----------------------+-----------+ +|Input impedance |80 |MOhm |80 |MOhm | ++-------------------------------+-----------------------+-----------+-----------------------+-----------+ +|Data storage |micro SD card | |micro SD card | | ++-------------------------------+-----------------------+-----------+-----------------------+-----------+ +|Resolution |0.01 |Ohm |0.01 |Ohm | ++-------------------------------+-----------------------+-----------+-----------------------+-----------+ + +Building an OhmPi V2023 step by step +------------------------------------ + +.. toctree:: + :maxdepth: 2 + + Ohmpi_V2023/V2023_step_01 + Ohmpi_V2023/V2023_step_02 + Ohmpi_V2023/V2023_step_03 + Ohmpi_V2023/V2023_step_04 + + +Software and operation +====================== + +System architecture +------------------- + +The OhmPi V2023 software is designed around a new architecture whose main components are summarized in the figure below. + +.. figure:: img/architecture.png + + Software architecture of OhmPi V2023. + +The general system configuration is defined in the `config.py` file covered in the `Configuration file`_ section. +The acquisition settings (i.e. injection duration, stacks...) are defined in a separate JSON file (default: ohmpi_settings.json). + +The central software component is the ohmpi.py file that contains the OhmPi class that interacts with the hardware. Other python files include utils and handlers (see the `Loggers`_ section for more details). +A communication layer (I/O interface) on top of OhmPi allows for different user interfaces depending on the use cases (see `Interfaces and applications`_). + +Loggers +------- + +Loggers have been introduced in this release. They use the excellent logging python package. +Specific handlers have been implemented for running with ohmpi.py (one for logging to an mqtt broker (see `MQTT interface`_ for more details) and one for creating zipped rotated logs on disk. + +Two loggers have been defined. The first one is dedicated to log operations execution. It is named exec_logger. The second one is dedicated to acquisition data. A third one is planned to log state of health data (SOH) in a future version. + +In the default version, logs are written to the console (print-like), stored locally in files (a zip is created after some time i.e. every day and/or when the size of the log exceeds a maximum size) and sent to an MQTT broker. Different logging levels may be defined for the different logs and handlers in the `Configuration file`_. + +Advanced users may write new handlers and edit the `setup_loggers.py` file to customize the logging mechanisms to their needs. + +Configuration file +------------------ + +The configuration of the OhmPi file `config.py` allows to configure the OhmPi. +A default version of `config.py` is provided in the repository. +This file should be edited to customize the configuration following the user's needs and preferences. + +The configuration includes setting the logging level desired for the different loggers and handlers, setting the mqtt broker(s) used for logging and control of the OhmPi and defining the options used for MQTT communication (i.e. username, password, security options...) + +One should make sure to understand the parameters before altering them. It is also recommended to keep a copy of the default configuration. + + + +Interfaces and applications +--------------------------- + +Different interfaces can be used to interact with the OhmPi. + +Available interfaces are: +- `Web interface`_ (=HTTP interface): run in bash: `bash run_http_interface.sh` +- Python API: import the OhmPi class from Python script: `from ohmpi import OhmPi` (see `Python interface`_) +- MQTT: IoT messaging through a broker (see `MQTT interface`_) + + +Web interface +............. + +This is a user friendly graphical interface for new users as well as running quick and easy acquisitions. + +The raspberrypi of the OhmPi is used as a Wifi Access Point (AP) and runs +a small webserver to serve the 'index.html' interface. Using a laptop or +a mobile phone connected to the wifi of the Raspberry Pi, one can see this +interface, upload sequences, change parameters, run a sequence and download data. + +To configure the Raspberry Pi to act as an access point and run +the webserver automatically on start, see instructions on `raspap.com <https://raspap.com/>`_ and in 'runOnStart.sh'. + +Once configured, the webserver should start by itself on start and once +connected to the Pi, the user can go to `10.3.141.1:8080 <http://10.3.141.1:8080>`_ +to access the interface. + +.. figure:: img/http-interface-pseudo-section.png + + Web interface with its interactive pseudo-section. + + +.. figure:: img/http-interface-evolution.png + + Evolution of quadrupole apparent resistivity with time. + + +.. figure:: img/http-interface-rs.png + + Contact resistance check. + + + +Python interface +................ + +This interface offers a more direct access to the software components especially well suited for testing or automation on the Raspberry Pi. + +By importing the `OhmPi` class from the ohmpi.py, one can control the OhmPi using interactive IPython. +Typically, it involves using the terminal or an Python IDE such as Thonny on the Raspberry Pi. One can also connect using +ssh and run the Python interface (see PuTTY on Windows or ssh command on macOS/Linux). + +To access the Python API, make sure the file ohmpi.py is in the same +directory as where you run the commands/script. The file ohmpi.py can +be found on the OhmPi gitlab repository. We recommend downloading the +entire repository as ohmpi.py import other .py files and default configuration +files (.json and .py). + + +.. code-block:: python + :caption: Example of using the Python API to control OhmPi + + import os + import numpy as np + import time + os.chdir("/home/pi/OhmPi") + from ohmpi import OhmPi + + ### Define object from class OhmPi + k = OhmPi() # this loads default parameters from the disk + + ### Default parameters can also be edited manually + k.settings['injection_duration'] = 0.5 # injection time in seconds + k.settings['nb_stack'] = 1 # one stack is two half-cycles + k.settings['nbr_meas'] = 1 # number of time the sequence is repeated + + ### Update settings if needed + k.update_settings({"injection_duration":0.2}) + + ### Set or load sequence + k.sequence = np.array([[1,2,3,4]]) # set numpy array of shape (n,4) + # k.set_sequence('1 2 3 4\n2 3 4 5') # call function set_sequence and pass a string + # k.load_sequence('ABMN.txt') # load sequence from a local file + + ### Run contact resistance check + k.rs_check() + + ### Run sequence (synchronously - it will wait that all + # sequence is measured before returning the prompt + k.run_sequence() + # k.run_sequence_async() # sequence is run in a separate thread and the prompt returns immediately + # time.sleep(2) + # k.interrupt() # kill the asynchron sequence + + ### Run multiple sequences at given time interval + k.settings['nb_meas'] = 3 # run sequence three times + k.settings['sequence_delay'] = 100 # every 100 s + k.run_multiple_sequences() # asynchron + # k.interrupt() # kill the asynchron sequence + + ### Single measurement can also be taken with + k.switch_mux_on([1, 4, 2, 3]) + k.run_measurement() # use default acquisition parameters + k.switch_mux_off([1, 4, 2, 3]) # don't forget this! risk of short-circuit + + ### Custom or adaptative argument, see help(k.run_measurement) + k.run_measurement(nb_stack=4, # do 4 stacks (8 half-cycles) + injection_duration=2, # inject for 2 seconds + autogain=True) # adapt gain of ADS to get good resolution + + + +MQTT interface +.............. + +This is an interface designed for an advanced remote usage of the OhmPi such as remote automation, data consumption by multiple processes and interaction with other sensors in the scope of a monitoring. It is based on the MQTT protocol, designed for the Internet of Things (IoT), to interact with the OhmPi. + +This option allows interacting remotely with a single OhmPi, a network of OhmPis, as well as auxiliary instruments and sensors. The communication is based on a publish/subscribe approach and involves a MQTT broker. + +An example of MQTT broker that can be used is `Mosquitto <https://mosquitto.org/>`_. Depending on the monitoring needs, an MQTT broker can be set up locally on the Raspberry Pi, on a local network or any remote server reachable through the net. A local Mosquitto broker can be set up and enabled to run as a service on the OhmPi using the bash script install_local_mqtt_broker.sh. + +MQTT messages include logging messages from the OhmPi and commands sent to the OhmPi. These messages can be examined easily using a third party software such as `MQTT Explorer <http://mqtt-explorer.com/>`_. + +Commands send on the broker are received by the ohmpi.py script that runs on the OhmPi (make sure ohmpi.py starts on reboot) and further processed. +MQTT commands are sent in JSON format following the Python API with kwargs as illustrated below: + +.. code-block:: json + :caption: Updating acquisition settings. + + { + "cmd_id": "3fzxv121UITwGjWYgcz4xw", + "cmd": "update_settings", Depending on the experiment needs, MQTT brokers can be set up locally on the Raspberry Pi or on a local or remote server. + "kwargs": { + "config": { + "nb_meas": 2, + "nb_electrodes": 10, + "nb_stack": 2, + "injection_duration": 2, + "sequence_delay": 100 + } + } + } + + +.. code-block:: json + :caption: Check contact resistances + + { + "cmd_id": "3fzxv121UITwGjWYgcz4xw", + "cmd": "rs_check", + } + +.. code-block:: json + :caption: Running a sequence. + + { + "cmd_id": "3fzxv121UITwGjWYgcz4Yw", + "cmd": "run_sequence", + } + +.. code-block:: json + :caption: Running same sequence multiple times (nb_meas). + + { + "cmd_id": "3fzxv121UITwGjWYgcz4Yw", + "cmd": "run_multiple_sequences", + } + +.. code-block:: json + :caption: Interrupt current acquisition. + + { + "cmd_id": "3fzxv121UITwGjWYgcz4xw", + "cmd": "interrupt", + } + +Custom processing of messages and tailor-made dashboards for monitoring experiments may be designed using a browser-based flow editor such as `Node-red <http://mqtt-explorer.com/>`_. +This may help designing complex IoT experiments and monitoring systems in which OhmPi is a component. + +An example of a simple flow incorporating execution commands and data outputs from OhmPi can be found in the OhmPi examples. + +.. figure:: img/node-red-flow.png + + Example flow in node-red to interact with an OhmPi. + +For more documentation dedicated to node-red, please refer to the Node-red `cookbooks <https://cookbook.nodered.org/>`_. diff --git a/doc/source/V2_00.rst b/doc/source/V2_00.rst deleted file mode 100644 index a5f7bedcc41be52ada39374dbe635d338cae494c..0000000000000000000000000000000000000000 --- a/doc/source/V2_00.rst +++ /dev/null @@ -1,246 +0,0 @@ -******************************************** -OhmPi V 2.00 (64 electrodes and 12V) -******************************************** - -.. warning:: - **Ohmpi is a participative project open to all, it requires skills in electronics and to respect the safety rules. Ohmpi must be assembled in a professional context and by people competent in electronics. The Ohmpi team cannot be held responsible for any material or human damage which would be associated with the use or the assembly of OHMPI. The Ohmpi team cannot be held responsible if the equipment does not work after assembly.** - - - -.. figure:: image_ohmpi_2.jpg - :width: 400px - :align: center - :height: 350px - :alt: Ohmpi 2 - :figclass: align-center - -.. note:: - In this version, we have developed two new board types that allow the assembly of Ohmpi v2.00, a measurement board and a multiplexer board. - This new version is made up of: - - 1. A measurement board for four-point measurement - - 2. 4 multiplexer cards - - 3. A box - -The philosophy of Ohmpi 2 -========================== - -The philosophy of Ohmpi V2.00 is to offer a new DIY multielectrode resistivity meter. It is a resistivity meter with 64 electrodes, which can be upgraded to 128 electrodes. -It is limited to low-current injection, but suitable for small laboratory experiments and small field time-lapse monitoring. -Ohmpi is developed by a team that seeks to share its experience and wishes to improve and offer a more and more robust tool to the community. Ohmpi V2.00 is completely different version from the previous one. -We will stop the development on the previous version, to dedicate our efforts on this new version. - -============================================================================================================================================================= - - -Technical data -============== - -+-------------------------------+-----------------------+-----------+-----------------------+-----------+ -| **Parameter** | **Specifications V1** | Units | **Specifications v2** | Units | -+===============================+=======================+===========+=======================+===========+ -|Electrodes |32 | |64 to 128 | | -+-------------------------------+-----------------------+-----------+-----------------------+-----------+ -|Operating temperature |-0 to 50 |°c |-25 to 50 |°c | -+-------------------------------+-----------------------+-----------+-----------------------+-----------+ -|Power consumption of CPU and |18.5 |W |18.5 |W | -|control system | | | | | -+-------------------------------+-----------------------+-----------+-----------------------+-----------+ -|Voltage injection |12 |V |12 |V | -+-------------------------------+-----------------------+-----------+-----------------------+-----------+ -|Battery |9 |V |12 |V | -+-------------------------------+-----------------------+-----------+-----------------------+-----------+ -|Current |0 to 40 |mA |0 to 40 |mA | -+-------------------------------+-----------------------+-----------+-----------------------+-----------+ -|Min pulse duration |150 |mS |150 |ms | -+-------------------------------+-----------------------+-----------+-----------------------+-----------+ -|Input impedance |80 |Mohm |80 |MOhm | -+-------------------------------+-----------------------+-----------+-----------------------+-----------+ -|Data storage |micro SD card | |micro SD card | | -+-------------------------------+-----------------------+-----------+-----------------------+-----------+ -|Resolution |0.01 |ohm |0.01 |Ohm | -+-------------------------------+-----------------------+-----------+-----------------------+-----------+ - -Ohmpi 2 step by step -==================== - -.. toctree:: - :maxdepth: 2 - - Ohmpi_V2_00/V2_00_step_01 - Ohmpi_V2_00/V2_00_step_02 - Ohmpi_V2_00/V2_00_step_03 - Ohmpi_V2_00/V2_00_step_04 - - - -Interfaces and applications -============================ - -Different interfaces can be used to communicated with the OhmPi. - -.. figure:: img/interfaces.png - - Usable interfaces to control an OhmPi. - - -Available interfaces: -- Web interface (=HTTP interface): run in bash: `bash run_http_interface.sh` -- Python API: import the OhmPi class from Python script: `from ohmpi import OhmPi` -- MQTT broker (see interface below) - - -**Web interface** - -The raspberrypi of the OhmPi is used as a Wifi Access Point (AP) and runs -a small webserver to serve the 'index.html' interface. Using a laptop or -a mobile phone connected to the wifi of the Raspberry Pi, one can see this -interface, upload sequences, change parameters, run a sequence and download data. - -To configure the Raspberry Pi to act as an access point and run -the webserver automatically on start, see instructions on `raspap.com <https://raspap.com/>`_ and in 'runOnStart.sh'. - -Once configured, the webserver should start by itself on start and once -connected to the Pi, the user can go to `10.3.141.1:8080 <http://10.3.141.1:8080>`_ -to access the interface. - -.. figure:: img/http-interface-pseudo-section.png - - Web interface with its interactive pseudo-section. - - -.. figure:: img/http-interface-evolution.png - - Evolution of quadrupole apparent resistivity with time. - - -.. figure:: img/http-interface-rs.png - - Contact resistance check. - - - -**Python interface** - -By importing the `OhmPi` class from the ohmpi.py, one can control the OhmPi using interactive IPython. -Typically, it involves using the terminal or an Python IDE such as Thonny on the Raspberry Pi. One can also connect using -ssh and run the Python interface (see PuTTY on Windows or ssh command on macOS/Linux). - -To access the Python API, make sure the file ohmpi.py is in the same -directory as where you run the commands/script. The file ohmpi.py can -be found on the OhmPi gitlab repository. We recommend downloading the -entire repository as ohmpi.py import other .py files and default configuration -files (.json and .py). - - -.. code-block:: python - :caption: Example of using the Python API to control OhmPi - - import os - import numpy as np - import time - os.chdir("/home/pi/OhmPi") - from ohmpi import OhmPi - - ### Define object from class OhmPi - k = OhmPi() # this load default parameters from the disk - - ### Default parameters can also be edited manually - k.settings['injection_duration'] = 0.5 # injection time in seconds - k.settings['nb_stack'] = 1 # one stack is two half-cycles - k.settings['nbr_meas'] = 1 # number of time the sequence is repeated - - ### Update settings if needed - k.update_settings({"injection_duration":0.2}) - - ### Set or load sequence - k.sequence = np.array([[1,2,3,4]]) # set numpy array of shape (n,4) - # k.set_sequence('1 2 3 4\n2 3 4 5') # call function set_sequence and pass a string - # k.load_sequence('ABMN.txt') # load sequence from a local file - - ### Run contact resistance check - k.rs_check() - - ### Run sequence (synchronously - it will wait that all - # sequence is measured before returning the prompt - k.run_sequence() - # k.run_sequence_async() # sequence is run in a separate thread and the prompt returns immediately - # time.sleep(2) - # k.interrupt() # kill the asynchrone sequence - - ### Run multiple sequences at given time interval - k.settings['nb_meas'] = 3 # run sequence three times - k.settings['sequence_delay'] = 100 # every 100 s - k.run_multiple_sequences() # asynchrone - # k.interrupt() # kill the asynchrone sequence - - ### Single measurement can also be taken with - k.switch_mux_on([1, 4, 2, 3]) - k.run_measurement() # use default acquisition parameters - k.switch_mux_off([1, 4, 2, 3]) # don't forget this! risk of short-circuit - - ### Custom or adaptative argument, see help(k.run_measurement) - k.run_measurement(nb_stack=4, # do 4 stacks (8 half-cycles) - injection_duration=2, # inject for 2 seconds - autogain=True) # adapt gain of ADS to get good resolution - - - -***MQTT interface*** - -Interface to communicate with the Pi designed for the Internet of Things (IoT). This interface allows to control a single OhmPi, a network of OhmPis, as well as auxilliary instruments remotely through an MQTT broker. An example of MQTT broker that can be used is `Mosquitto <https://mosquitto.org/>`_. Depending on the experiment needs, an MQTT broker can be set up locally on the Raspberry Pi, or on a local or remote server. Commands are received by ohmpi.py script via the mqtt_interface.py script and further processed. All commands are sent in JSON format following the Python API with args and kwargs: - -.. code-block:: json - :caption: Updating acquisition settings. - - { - "cmd_id": "3fzxv121UITwGjWYgcz4xw", - "cmd": "update_settings", Depending on the experiment needs, MQTT brokers can be set up locally on the Raspberry Pi or on a local or remote server. - "kwargs": { - "config": { - "nb_meas": 2, - "nb_electrodes": 10, - "nb_stack": 2, - "injection_duration": 2, - "sequence_delay": 100 - } - } - } - - -.. code-block:: json - :caption: Check contact resistances - - { - "cmd_id": "3fzxv121UITwGjWYgcz4xw", - "cmd": "rs_check", - } - -.. code-block:: json - :caption: Running a sequence. - - { - "cmd_id": "3fzxv121UITwGjWYgcz4Yw", - "cmd": "run_sequence", - } - -.. code-block:: json - :caption: Running same sequence multiple times (nb_meas). - - { - "cmd_id": "3fzxv121UITwGjWYgcz4Yw", - "cmd": "run_multiple_sequences", - } - -.. code-block:: json - :caption: Interrupt current acquisition. - - { - "cmd_id": "3fzxv121UITwGjWYgcz4xw", - "cmd": "interrupt", - } - -A local Mosquitto broker can be set up and enabled to run as a service on the OhmPi using the bash script install_local_mqtt_broker.sh. -The mqtt messages can be interfaced easily using the third party software `MQTT Explorer <http://mqtt-explorer.com/>`_. They can also form part of a browser-based flow editor such as `Node-red <http://mqtt-explorer.com/>`_ which can help desinging more complex IoT experiments and monitoring systems in which OhmPi is a component. An example of a simple flow incorporating execution commands and data outputs from OhmPi can be found in the OhmPi examples. For more documentation dedicated to node-red, please refer to the Node-red `cookbooks <https://cookbook.nodered.org/>`_. diff --git a/doc/source/img/interfaces.png b/doc/source/img/architecture.png similarity index 100% rename from doc/source/img/interfaces.png rename to doc/source/img/architecture.png diff --git a/doc/source/img/node-red-flow.png b/doc/source/img/node-red-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8d83a0d0e1c4635782c9918041d12bbc050e32 Binary files /dev/null and b/doc/source/img/node-red-flow.png differ diff --git a/doc/source/index.rst b/doc/source/index.rst index 4e5b60a15d429aea7c42e87c6194f521790721cb..c86d40c84ecb51a4ee02b101f7a570a269f2fe1c 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -3,8 +3,8 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -OHMPI: Open source and open hardware resitivity-meter -===================================================== +OHMPI: Open source and open hardware resistivity-meter +====================================================== @@ -13,13 +13,13 @@ OHMPI: Open source and open hardware resitivity-meter :Release: |release| :Date: |today| :Date start: July 2016 - :Authors: **Rémi CLEMENT, Nicolas FORQUET, Yannick FARGIER, Vivien DUBOIS, Hélène GUYARD, Olivier KAUFMANN, Guillaume Blanchy** + :Authors: **Rémi CLEMENT, Nicolas FORQUET, Yannick FARGIER, Vivien DUBOIS, Hélène GUYARD, Olivier KAUFMANN, Guillaume Blanchy, Arnaud WATLET** :Target: users, researchers and developers :status: some mature, some in progress .. topic:: OhmPi Document Center - * OhmPi offcial documents + * OhmPi official documents * Release guidelines * General tutorials diff --git a/logging_setup.py b/logging_setup.py index b80d01fcca272dc652418df4e520314e2769ee29..5c2543b2a815af84bb4a1b62f1a77fd9a457d3c0 100644 --- a/logging_setup.py +++ b/logging_setup.py @@ -3,8 +3,8 @@ from config import EXEC_LOGGING_CONFIG, DATA_LOGGING_CONFIG, MQTT_LOGGING_CONFIG from os import path, mkdir, statvfs from time import gmtime import logging -from mqtt_logger import MQTTHandler -from compressed_sized_timed_rotating_logger import CompressedSizedTimedRotatingFileHandler +from mqtt_handler import MQTTHandler +from compressed_sized_timed_rotating_handler import CompressedSizedTimedRotatingFileHandler import sys from termcolor import colored diff --git a/mqtt_logger.py b/mqtt_handler.py similarity index 98% rename from mqtt_logger.py rename to mqtt_handler.py index c497907318e776c9166003e541d59afed2b5514d..e68a3e92ce26a52cd321b76db3c912bc20812f54 100644 --- a/mqtt_logger.py +++ b/mqtt_handler.py @@ -58,4 +58,4 @@ class MQTTHandler(logging.Handler): will=self.will, auth=self.auth, tls=self.tls, protocol=self.protocol, transport=self.transport) except Exception as e: - pass # TODO log in exec ? + pass # TODO log in exec ? diff --git a/ohmpi.py b/ohmpi.py index a296f3421aa50222b93fbd836ce5ecec50b86542..53ec36eada91fdf8bba1b8270b1c0ad5020435c9 100644 --- a/ohmpi.py +++ b/ohmpi.py @@ -213,11 +213,12 @@ class OhmPi(object): Parameters ---------- - cmd_id filename : str filename to save the last measurement dataframe last_measurement : dict Last measurement taken in the form of a python dictionary + cmd_id : str, optional + Unique command identifier """ last_measurement = deepcopy(last_measurement) if 'fulldata' in last_measurement: @@ -434,7 +435,7 @@ class OhmPi(object): self.exec_logger.debug(f'Setting gain to {gain}') return gain - def get_data(self, survey_names=[], cmd_id=None): + def get_data(self, survey_names=None, cmd_id=None): """Get available data. Parameters @@ -443,19 +444,23 @@ class OhmPi(object): List of filenames already available from the html interface. So their content won't be returned again. Only files not in the list will be read. + cmd_id : str, optional + Unique command identifier """ # get all .csv file in data folder + if survey_names is None: + survey_names = [] fnames = [fname for fname in os.listdir('data/') if fname[-4:] == '.csv'] ddic = {} if cmd_id is None: cmd_id = 'unknown' for fname in fnames: if ((fname != 'readme.txt') - and ('_rs' not in fname) - and (fname.replace('.csv', '') not in survey_names)): + and ('_rs' not in fname) + and (fname.replace('.csv', '') not in survey_names)): try: data = np.loadtxt('data/' + fname, delimiter=',', - skiprows=1, usecols=(1,2,3,4,8)) + skiprows=1, usecols=(1, 2, 3, 4, 8)) data = data[None, :] if len(data.shape) == 1 else data ddic[fname.replace('.csv', '')] = { 'a': data[:, 0].astype(int).tolist(), @@ -471,7 +476,13 @@ class OhmPi(object): return ddic def interrupt(self, cmd_id=None): - """Interrupts the acquisition. """ + """Interrupts the acquisition + + Parameters + ---------- + cmd_id : str, optional + Unique command identifier + """ self.status = 'stopping' if self.thread is not None: self.thread.join() @@ -485,10 +496,11 @@ class OhmPi(object): Parameters ---------- - cmd_id filename : str Path of the .csv or .txt file with A, B, M and N electrodes. Electrode index start at 1. + cmd_id : str, optional + Unique command identifier Returns ------- @@ -597,10 +609,16 @@ class OhmPi(object): reply = json.dumps(reply) self.exec_logger.debug(f'Execution report: {reply}') - @staticmethod def quit(self, cmd_id=None): - """Quits OhmPi""" + """Quits OhmPi + Parameters + ---------- + cmd_id : str, optional + Unique command identifier + """ + + self.exec_logger.debug(f'Quitting ohmpi.py following command {cmd_id}') exit() def _read_hardware_config(self): @@ -623,15 +641,32 @@ class OhmPi(object): warnings.warn('This function is deprecated. Use load_sequence instead.', DeprecationWarning) self.load_sequence(**kwargs) - def remove_data(self, **kwargs): - """Remove all data in the data/ folder. + def remove_data(self, cmd_id=None): + """Remove all data in the data folder + + Parameters + ---------- + cmd_id : str, optional + Unique command identifier """ + self.exec_logger.debug(f'Removing all data following command {cmd_id}') shutil.rmtree('data') os.mkdir('data') def restart(self, cmd_id=None): - self.exec_logger.info('Restarting pi...') - os.system('reboot') + """Restarts the Raspberry Pi + + Parameters + ---------- + cmd_id : str, optional + Unique command identifier + """ + + if self.on_pi: + self.exec_logger.info(f'Restarting pi following command {cmd_id}...') + os.system('reboot') + else: + self.exec_logger.warning('Not on Raspberry Pi, skipping reboot...') def run_measurement(self, quad=None, nb_stack=None, injection_duration=None, autogain=True, strategy='constant', tx_volt=5, best_tx_injtime=0.1, @@ -663,8 +698,8 @@ class OhmPi(object): measurement will be taken and values will be NaN. best_tx_injtime : float, optional (V3.0 only) Injection time in seconds used for finding the best voltage. - cmd_id : - + cmd_id : str, optional + Unique command identifier """ self.exec_logger.debug('Starting measurement') self.exec_logger.debug('Waiting for data') @@ -925,8 +960,8 @@ class OhmPi(object): Parameters ---------- - cmd_id : - + cmd_id : str, optional + Unique command identifier sequence_delay : int, optional Number of seconds at which the sequence must be started from each others. nb_meas : int, optional @@ -966,6 +1001,11 @@ class OhmPi(object): def run_sequence(self, cmd_id=None, **kwargs): """Runs sequence synchronously (=blocking on main thread). Additional arguments are passed to run_measurement(). + + Parameters + ---------- + cmd_id : str, optional + Unique command identifier """ self.status = 'running' self.exec_logger.debug(f'Status: {self.status}') @@ -1022,9 +1062,10 @@ class OhmPi(object): """Runs the sequence in a separate thread. Can be stopped by 'OhmPi.interrupt()'. Additional arguments are passed to run_measurement(). - Parameters - ---------- - cmd_id: + Parameters + ---------- + cmd_id : str, optional + Unique command identifier """ def func(): @@ -1034,8 +1075,16 @@ class OhmPi(object): self.thread.start() self.status = 'idle' - def rs_check(self, tx_volt=12, cmd_id=None): - """Checks contact resistances""" + def rs_check(self, tx_volt=12., cmd_id=None): + """Checks contact resistances + + Parameters + ---------- + tx_volt : float + Voltage of the injection + cmd_id : str, optional + Unique command identifier + """ # create custom sequence where MN == AB # we only check the electrodes which are in the sequence (not all might be connected) if self.sequence is None or not self.use_mux: @@ -1109,6 +1158,15 @@ class OhmPi(object): # # TODO or we offer the possibility in 'run_measurement' to have rs_check each time? def set_sequence(self, sequence=None, cmd_id=None): + """Sets the sequence to acquire + + Parameters + ---------- + sequence : list, str + sequence of quadrupoles + cmd_id: str, optional + Unique command identifier + """ try: self.sequence = np.array(sequence).astype(int) # self.sequence = np.loadtxt(StringIO(sequence)).astype('uint32') @@ -1170,7 +1228,8 @@ class OhmPi(object): Parameters ---------- - cmd_id + cmd_id : str, optional + Unique command identifier quadrupole : list of 4 int List of 4 integers representing the electrode numbers. """ @@ -1188,7 +1247,8 @@ class OhmPi(object): Parameters ---------- - cmd_id + cmd_id : str, optional + Unique command identifier quadrupole : list of 4 int List of 4 integers representing the electrode numbers. """ @@ -1214,18 +1274,18 @@ class OhmPi(object): tca = adafruit_tca9548a.TCA9548A(self.i2c, address) # ask use some details on how to proceed - a = input(' if vous want try 1 channel choose 1, if you want try all channel choose 2!') + a = input('If you want try 1 channel choose 1, if you want try all channels choose 2!') if a == '1': - print("run channel by channel test") - electrode = int(input('Choose your electrode number (integer):')) + print('run channel by channel test') + electrode = int(input('Choose your electrode number (integer):')) electrodes = [electrode] elif a == '2': electrodes = range(1, 65) else: - print ("Wrong choice !") - return - - # run the test + print('Wrong choice !') + return + + # run the test for electrode_nr in electrodes: # find I2C address of the electrode and corresponding relay # considering that one MCP23017 can cover 16 electrodes @@ -1239,15 +1299,21 @@ class OhmPi(object): # activate relay for given time mcp2.get_pin(relay_nr - 1).value = True - print('electrode:', electrode_nr, ' activated...', end='', flush=True) - time.sleep(activation_time) + print('electrode:', electrode_nr, ' activated...', end='', flush=True) + time.sleep(activation_time) mcp2.get_pin(relay_nr - 1).value = False - print(' deactivated' ) - time.sleep(activation_time) + print(' deactivated') + time.sleep(activation_time) print('Test finished.') def reset_mux(self, cmd_id=None): - """Switches off all multiplexer relays.""" + """Switches off all multiplexer relays. + + Parameters + ---------- + cmd_id : str, optional + Unique command identifier + """ if self.on_pi and self.use_mux: roles = ['A', 'B', 'M', 'N'] for i in range(0, 4): @@ -1276,9 +1342,10 @@ class OhmPi(object): Parameters ---------- - cmd_id settings : str, dict Path to the .json settings file or dictionary of settings. + cmd_id : str, optional + Unique command identifier """ status = False if settings is not None: @@ -1291,7 +1358,7 @@ class OhmPi(object): self.settings.update(dic) self.exec_logger.debug('Acquisition parameters updated: ' + str(self.settings)) status = True - except Exception as e: # noqa + except Exception as e: # noqa self.exec_logger.warning('Unable to update settings.') status = False else: