V2_00.rst 9.37 KB
Newer Older
Clement Remi's avatar
Clement Remi committed
********************************************
Clement Remi's avatar
Clement Remi committed
OhmPi V 2.00 (64 electrodes and 12V)
Clement Remi's avatar
Clement Remi committed
******************************************** 
Clement Remi's avatar
Clement Remi committed

.. 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.**


Clement Remi's avatar
Clement Remi committed

.. figure:: image_ohmpi_2.jpg
Clement Remi's avatar
Clement Remi committed
	   :width: 400px
	   :align: center
Clement Remi's avatar
Clement Remi committed
	   :height: 350px
	   :alt: Ohmpi 2
	   :figclass: align-center
Clement Remi's avatar
Clement Remi committed

Clement Remi's avatar
Clement Remi committed
.. 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
Clement Remi's avatar
Clement Remi committed
	 
	 2. 4 multiplexer cards
	 
	 3. A box 
Clement Remi's avatar
Clement Remi committed

The philosophy of Ohmpi 2 
==========================
Clement Remi's avatar
Clement Remi committed

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 all its experience and wishes to improve and offer a more and more robust tool to the community.Ohmpi V2.00 is a completely different version from the previous one. 
Clement Remi's avatar
Clement Remi committed
We will stop the development on the previous version, to dedicate our efforts on this new version.
	
=============================================================================================================================================================
Clement Remi's avatar
Clement Remi committed

Clement Remi's avatar
Clement Remi committed
 
Clement Remi's avatar
Clement Remi committed
Technical data
Clement Remi's avatar
Clement Remi committed
==============
Clement Remi's avatar
Clement Remi committed
+-------------------------------+-----------------------+-----------+-----------------------+-----------+
| **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        |
Clement Remi's avatar
Clement Remi committed
+-------------------------------+-----------------------+-----------+-----------------------+-----------+
Ohmpi 2 step by step
====================
.. toctree:: 
   Ohmpi_V2_00/V2_00_step_01
   Ohmpi_V2_00/V2_00_step_02
Clement Remi's avatar
Clement Remi committed
   Ohmpi_V2_00/V2_00_step_03
Remi Clement's avatar
Remi Clement committed
   Ohmpi_V2_00/V2_00_step_04



Interfaces and applications
============================

Different interfaces can be used to communicated with the OhmPi.

**Web interface**

The raspberrypi of the OhmPi is used as a Wifi Access Point (AP) and run
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 sequence, change parameters, run 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 configure, 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.
	   
     
     Contact resistance check.
	   


**Python interface**

By importing the `OhmPi` class from the ohmpi.py, one can controle the OhmPi using interactive IPython.
Typically, it involves using the Thonny on the Raspberry Pi or the Terminal. Once 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   
Interface to communicate with the Pi designed for the Internet of Things (IoT). This interface enable to control a network of OhmPi remotely through an MQTT broker. An example of MQTT broker that can be used is `Mosquitto <https://mosquitto.org/>`_. Commands are received by ohmpi.py script and 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",
    "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 same sequence multiple times (nb_meas).

  {
    "cmd_id": "3fzxv121UITwGjWYgcz4Yw",
    "cmd": "run_multiple_sequences",
  }
  
.. code-block:: json
  :caption: Interrupt current acquisition.

  {
    "cmd_id": "3fzxv121UITwGjWYgcz4xw",
    "cmd": "update_settings",
  }