diff --git a/sphinx/build/html/page0.html b/public/Ohmpi.html similarity index 90% rename from sphinx/build/html/page0.html rename to public/Ohmpi.html index 33eb46c1ab3cc34624528b1889314bd8005114f5..4efb23ca3d4bc504cd65d567a6565eb8cc5e17b1 100644 --- a/sphinx/build/html/page0.html +++ b/public/Ohmpi.html @@ -7,7 +7,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Premiere page — Ohmpi: open hardware resistivity-meter documentation</title> + <title>OhmPi project — Ohmpi: open hardware resistivity-meter documentation</title> @@ -37,7 +37,7 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> - <link rel="next" title="OhmPi V 1.01 (limited to 32 electrodes)" href="page1.html" /> + <link rel="next" title="OhmPi V 1.01 (limited to 32 electrodes)" href="V1_01.html" /> <link rel="prev" title="OHMPI: Open source and open hardware resitivity-meter" href="index.html" /> </head> @@ -84,16 +84,16 @@ <ul class="current"> -<li class="toctree-l1 current"><a class="current reference internal" href="#">Premiere page</a><ul> -<li class="toctree-l2"><a class="reference internal" href="#ohmpi-project"><strong>OhmPi project</strong></a><ul> +<li class="toctree-l1 current"><a class="current reference internal" href="#">OhmPi project</a><ul> +<li class="toctree-l2"><a class="reference internal" href="#partenaires"><strong>Partenaires</strong></a><ul> <li class="toctree-l3"><a class="reference internal" href="#citing-ohmpi"><strong>Citing OhmPi</strong></a></li> <li class="toctree-l3"><a class="reference internal" href="#introduction-to-ohmpi"><strong>Introduction to OhmPi</strong></a></li> </ul> </li> </ul> </li> -<li class="toctree-l1"><a class="reference internal" href="page1.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> -<li class="toctree-l1"><a class="reference internal" href="page2.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_01.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_02.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> </ul> @@ -140,13 +140,13 @@ <li><a href="index.html" class="icon icon-home"></a> »</li> - <li>Premiere page</li> + <li>OhmPi project</li> <li class="wy-breadcrumbs-aside"> - <a href="_sources/page0.rst.txt" rel="nofollow"> View page source</a> + <a href="_sources/Ohmpi.rst.txt" rel="nofollow"> View page source</a> </li> @@ -159,10 +159,10 @@ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> - <div class="section" id="premiere-page"> -<h1>Premiere page<a class="headerlink" href="#premiere-page" title="Permalink to this headline">¶</a></h1> -<div class="section" id="ohmpi-project"> -<h2><strong>OhmPi project</strong><a class="headerlink" href="#ohmpi-project" title="Permalink to this headline">¶</a></h2> + <div class="section" id="ohmpi-project"> +<h1>OhmPi project<a class="headerlink" href="#ohmpi-project" title="Permalink to this headline">¶</a></h1> +<div class="section" id="partenaires"> +<h2><strong>Partenaires</strong><a class="headerlink" href="#partenaires" title="Permalink to this headline">¶</a></h2> <a class="reference internal image-reference" href="_images/logo_ohmpi.JPG"><img alt="Logo OhmPi" class="align-center" src="_images/logo_ohmpi.JPG" style="width: 350px; height: 250px;" /></a> <p>Authors:</p> <div class="line-block"> @@ -220,7 +220,7 @@ to the near surface scientific community.</p> <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> - <a href="page1.html" class="btn btn-neutral float-right" title="OhmPi V 1.01 (limited to 32 electrodes)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + <a href="V1_01.html" class="btn btn-neutral float-right" title="OhmPi V 1.01 (limited to 32 electrodes)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> <a href="index.html" class="btn btn-neutral float-left" title="OHMPI: Open source and open hardware resitivity-meter" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> diff --git a/sphinx/build/html/page1.html b/public/V1_01.html similarity index 98% rename from sphinx/build/html/page1.html rename to public/V1_01.html index ac80a9112c4fbff450dfb9ac5416b5a525ba6bca..d7df85db1ca68819766e510a7cf83526c9950235 100644 --- a/sphinx/build/html/page1.html +++ b/public/V1_01.html @@ -37,8 +37,8 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> - <link rel="next" title="OhmPi V 1.02 (limited to 32 electrodes)" href="page2.html" /> - <link rel="prev" title="Premiere page" href="page0.html" /> + <link rel="next" title="OhmPi V 1.02 (limited to 32 electrodes)" href="V1_02.html" /> + <link rel="prev" title="OhmPi project" href="Ohmpi.html" /> </head> <body class="wy-body-for-nav"> @@ -84,7 +84,7 @@ <ul class="current"> -<li class="toctree-l1"><a class="reference internal" href="page0.html">Premiere page</a></li> +<li class="toctree-l1"><a class="reference internal" href="Ohmpi.html">OhmPi project</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">OhmPi V 1.01 (limited to 32 electrodes)</a><ul> <li class="toctree-l2"><a class="reference internal" href="#the-philosophy-of-ohmpi">The philosophy of Ohmpi</a></li> <li class="toctree-l2"><a class="reference internal" href="#technical-data">Technical data</a></li> @@ -115,7 +115,7 @@ <li class="toctree-l2"><a class="reference internal" href="#complete-list-of-components">Complete list of components</a></li> </ul> </li> -<li class="toctree-l1"><a class="reference internal" href="page2.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_02.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> </ul> @@ -168,7 +168,7 @@ <li class="wy-breadcrumbs-aside"> - <a href="_sources/page1.rst.txt" rel="nofollow"> View page source</a> + <a href="_sources/V1_01.rst.txt" rel="nofollow"> View page source</a> </li> @@ -834,10 +834,10 @@ are displayed on the screen. A measurement file is automatically created and nam <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> - <a href="page2.html" class="btn btn-neutral float-right" title="OhmPi V 1.02 (limited to 32 electrodes)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + <a href="V1_02.html" class="btn btn-neutral float-right" title="OhmPi V 1.02 (limited to 32 electrodes)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> - <a href="page0.html" class="btn btn-neutral float-left" title="Premiere page" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + <a href="Ohmpi.html" class="btn btn-neutral float-left" title="OhmPi project" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> </div> diff --git a/sphinx/build/html/page2.html b/public/V1_02.html similarity index 99% rename from sphinx/build/html/page2.html rename to public/V1_02.html index 77852b184b2ad7b5911ce89050e71272d2c1f3aa..69f5cc21c795fbb42e94ea8671f63d7ed3070b39 100644 --- a/sphinx/build/html/page2.html +++ b/public/V1_02.html @@ -37,7 +37,7 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> - <link rel="prev" title="OhmPi V 1.01 (limited to 32 electrodes)" href="page1.html" /> + <link rel="prev" title="OhmPi V 1.01 (limited to 32 electrodes)" href="V1_01.html" /> </head> <body class="wy-body-for-nav"> @@ -83,8 +83,8 @@ <ul class="current"> -<li class="toctree-l1"><a class="reference internal" href="page0.html">Premiere page</a></li> -<li class="toctree-l1"><a class="reference internal" href="page1.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="Ohmpi.html">OhmPi project</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_01.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">OhmPi V 1.02 (limited to 32 electrodes)</a><ul> <li class="toctree-l2"><a class="reference internal" href="#the-philosophy-of-ohmpi">The philosophy of Ohmpi</a></li> <li class="toctree-l2"><a class="reference internal" href="#technical-data">Technical data</a></li> @@ -167,7 +167,7 @@ <li class="wy-breadcrumbs-aside"> - <a href="_sources/page2.rst.txt" rel="nofollow"> View page source</a> + <a href="_sources/V1_02.rst.txt" rel="nofollow"> View page source</a> </li> @@ -846,7 +846,7 @@ are displayed on the screen. A measurement file is automatically created and nam <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> - <a href="page1.html" class="btn btn-neutral float-left" title="OhmPi V 1.01 (limited to 32 electrodes)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + <a href="V1_01.html" class="btn btn-neutral float-left" title="OhmPi V 1.01 (limited to 32 electrodes)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> </div> diff --git a/public/_images/schema_measurement_board.png b/public/_images/schema_measurement_board.png deleted file mode 100644 index d8ec4ca8a058dbac280b4fda3a88c7ddae922d83..0000000000000000000000000000000000000000 Binary files a/public/_images/schema_measurement_board.png and /dev/null differ diff --git a/sphinx/source/page0.rst b/public/_sources/Ohmpi.rst.txt similarity index 98% rename from sphinx/source/page0.rst rename to public/_sources/Ohmpi.rst.txt index 7dbbea4ef493009ae39140c0fa5d6e7e6e0cc0a0..c50a70c58038212b8f0492f27f9186e781cd8cb0 100644 --- a/sphinx/source/page0.rst +++ b/public/_sources/Ohmpi.rst.txt @@ -1,8 +1,8 @@ *************** -Premiere page +OhmPi project *************** -**OhmPi project** +**Partenaires** ************************* .. image:: logo_ohmpi.JPG diff --git a/public/_sources/page1.rst.txt b/public/_sources/V1_01.rst.txt similarity index 100% rename from public/_sources/page1.rst.txt rename to public/_sources/V1_01.rst.txt diff --git a/public/_sources/page2.rst.txt b/public/_sources/V1_02.rst.txt similarity index 100% rename from public/_sources/page2.rst.txt rename to public/_sources/V1_02.rst.txt diff --git a/public/_sources/index.rst.txt b/public/_sources/index.rst.txt index a212b187733229b40bd0b3da911ff433541f75ce..d2aaf8480ab6fda2b9f2e7a78f644653b80ef947 100644 --- a/public/_sources/index.rst.txt +++ b/public/_sources/index.rst.txt @@ -31,9 +31,9 @@ Contents: .. toctree:: :maxdepth: 2 - page0 - page1 - page2 + Ohmpi + V1_01 + V1_02 diff --git a/public/_sources/old/page2.rst.txt b/public/_sources/old/page2.rst.txt deleted file mode 100644 index 9bfa4a4d394135fd5f27261223b085463a6ed1d6..0000000000000000000000000000000000000000 --- a/public/_sources/old/page2.rst.txt +++ /dev/null @@ -1,492 +0,0 @@ -***************************************** -OhmPi V 1.02 (limited to 32 electrodes) -***************************************** - -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 - - -Technical data -*************** -+-------------------------------+--------------------+-----------+ -| **Parameter** | **Specifications** | Units | -+-------------------------------+--------------------+-----------+ -|Electrodes |32 | | -+-------------------------------+--------------------+-----------+ -|Operating temperature |0 to 50 |°c | -+-------------------------------+--------------------+-----------+ -|Power consumption of CPU and |18.5 |W | -|control system | | | -+-------------------------------+--------------------+-----------+ -|Voltage injection |12 |V | -+-------------------------------+--------------------+-----------+ -|Battery |12 |V | -+-------------------------------+--------------------+-----------+ -|Current |0 to 50 |mA | -+-------------------------------+--------------------+-----------+ -|Min pulse duration |150 |mS | -+-------------------------------+--------------------+-----------+ -|Input impedance |36 |Mohm | -+-------------------------------+--------------------+-----------+ -|Data storage |micro SD card | | -+-------------------------------+--------------------+-----------+ -|Resolution |O.O1 |ohm | -+-------------------------------+--------------------+-----------+ - -Raspberry Pi configuration -****************************************** -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) - -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 - - - -.. 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. - - - - -3. When the relays are connected to the GPIO, make sure that all the GPIOs are in the low position when the raspberry starts up. If not, the relays will activate unexpectedly. -To ensure that the GPIOs are in Low position, you will need to modify the /boot/config.txt file. - - Run the terminal, and write - - .. code-block:: python - - cd /boot/ - -4. Open config.txt with GNU nano editor - - .. code-block:: python - - sudo nano config.txt - -5. At the end of the file write : - - .. code-block:: python - - 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 -8. Close the terminal - - - -Virtual Environnement and packages -================================== - -All dependencies are specified in requirements.txt - -.. note:: - 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 - -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 - -Activate it using the following command: - -.. code-block:: python - - 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 - -Check that requirements are met using - -.. code-block:: python - - pip list - -You should run you code within the virtual environment -to leave the virtual environment simply type: - -.. code-block:: python - - deactivate - - -Activate virtual environnement on Thonny (Python IDE) (on Rapberry 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** - -2- Thonny's interface 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 - -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 - -4-On the new open windows select **alternative Pyhton3 or virtual environnement** - -.. figure:: thonny_interpreter.jpg - :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 - -.. figure:: thonny_interpreter_folder.jpg - :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 - - -Assembly of the measuring/current injection cards, and connection with the Raspberry Pi -***************************************************************************************** - -Electrical resistivity measurements board -========================================== - -a) Description ------------------------------ - -To measure electrical resistivity with Raspberry Pi, an ADS1115 was introduced, as proposed by Florsch [7]. The ADS1115 -is a 16-bit ADC (Analog-to-Digital Converter), with an adaptable gain. Its value has been set at 2/3 in this study. The -input signal value could lie between - to + 6.114 V. The ADS1115 is mounted on a board adapted from an in-house design. -Figure 5 shows the general diagram for the electronic measurement board developed. This figure also displays the test -circuit used to test the board in the laboratory, which mimics the behavior of a soil subjected to current injection. -In this test circuit, resistance R11 represents the soil resistance. -Soil resistance R11 is connected to electrodes A and B for the current injection. Resistors R10 and R12 constitute -the contact resistances between soil and electrodes; they are typically made of stainless steel. The battery, which -allows for direct current injection, is connected in series with resistors R10, R11 and R12. In this part of the board, -resistance R9 has been added to measure the current flowing between electrodes A and B. This resistance value has been -set at 50 ohms in order to ensure: -• a precise resistance, -• a resistance less than the sum of resistors R10, R11 and R12; indeed, R10 and R12 generally lie between 100 and 5,000 ohms. -To measure the current intensity between A and B, the electrical potential difference at the pole of the reference resistor (R9) -is measured. The intensity (in mA) is calculated by inserting the resulting value into the following: ? -To measure the potential difference needed to measure current intensity, the ADS 1115 is connected to the ground of the circuit. -In our case, the ground reference is electrode B. The analog inputs A1 and A0 of the ADS1115 are connected to each pole of the -reference resistor (R9). In order to increase input impedance and adapt the signal gain, tracking amplifiers have been included -and completed by a divider bridge (R5, R8, R6 and R7) located between the two amplifiers. The resistance of the divider bridge -ensures that the signal remains between 0 and 5 V, in accordance with the ADS1115 signal gain. To measure the potential difference, -the M and N electrodes are connected to analog inputs A2 and A3 of the ADS 1115. Between the ADC and the electrodes, two tracking -amplifiers and a divider bridge have been positioned so as to obtain a potential lying within the 0-5 V range at the analog input of the ADS 1115. -Let's note that the potential difference value would equal the potential measured with ADS1115 multiplied by the voltage reduction -value of the divider bridge (see Section 5.2). Despite the use of high-resolution resistance (i.e. accurate to within 1%), it is -still necessary to calibrate the divider bridge using a precision voltmeter. For this purpose, the input and output potentials -of the divider bridge must be measured using an equivalent circuit for various electrical potential values. These values serve -to calculate the gain. With this electronic board, it is possible to measure the potential and intensity without disturbing the -electric field in the ground, with the total input impedance value being estimated at 36 mega-ohms. -A shortcut between Electrodes A and B will generate excessive currents, whose intensities depend on the type of battery used. -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. - -.. note:: - Last update: - - 1- The board has been slightly modified, we have added a decoupling capacitor at the input of the Operational Amplifiers (AOP) channels, to ensure a good performance of the AOPs (100nF/ 50VDC). - - 2- On each input of the AOP signals, we have also added a 10 MOhms resistor, so that the inputs take the value of the ground when the system does not measure and thus limit the overheating of the AOP. - - 3- To make sure that the signal is not skimmed, we have added a power supply of 24V on the AOPs, these are the TRN3-1211 components. - - -.. figure:: schema_measurement_board1_02.png - :width: 800px - :align: center - :height: 400px - :alt: alternate text - :figclass: align-center - - Measurement board updated from the version 1.01 presented in clement et al 2020 - -b) Implementation --------------------------------- -The measurement board must be printed using the PCB file (Source file repository), with components soldered onto -it by following the steps described below and illustrated in the following figure : - -* 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: 31 - - """ - 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 31 to 35 of the ohmpi.py code. - - -* Step no. 2: installation of the 1-Kohm resistors with an accuracy of ± 0.1% (following figure-b). -* Step no. 3: installation of the 1.5-Kohm resistors with an accuracy of ± 0.1% (following figure-c). -* Step no. 4: installation of both the black female 1 x 10 header and the 7-blue screw terminal blocks (following figure-d) -* Step no. 5: installation of the 50-Ohm reference resistor ± 0.1%, please check the value with ohmmeter and correct in the jason file (ohmpi_param.json),(following figure-e). -* 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) (following figure-f). -* Step no. 7: installation of the 10-Mohm resistors -* Step no. 8: addition of the DC/DC converter (TRN3-1211) -* Step no. 9: adding 10nF capacitor and fuse (1.5A-littlefuse ref: 0253001.V) - -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 -place a fuse holder with a 1.5-A fuse for safety purposes. - -.. figure:: measurement_board1-02.jpg - :width: 800px - :align: center - :height: 700px - :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 - -.. figure:: measurement_board-2-V1-02.jpg - :width: 800px - :align: center - :height: 700px - :alt: alternate text - :figclass: align-center - - Measurement board installation with Raspberry Pi - -Current injection board -======================= - -To carry out the electrical resistivity measurement, the first step consists of injecting current into the ground. -In our case, a simple 12-V lead-acid battery is used to create an electrical potential difference that results -in current circulating into the ground. The current is injected through electrodes A and B (see Fig. 2). This -injection is controlled via a 4-channel relay module board connected to the Raspberry Pi. The mechanical relay -module board is shown in Figure 4. Relays 1 and 2 serve to switch on the current source. The common contacts -of relays 1 and 2 are connected to the positive and negative battery poles, respectively. The normally open -contacts of both relays are connected to the common contacts of relays 3 and 4. Relays 1 and 2 are connected -to the GPIO 7 on the Raspberry Pi and therefore activate simultaneously. The role of relays 3 and 4 is to reverse -the polarity at electrodes A and B. Thus, when relays 3 and 4 are energized by the GPIO 8 in the open position, -the positive battery pole is connected to electrode A and the negative pole to electrode B. When not energized, -they remain in the normally closed position. This set-up offers a simple and robust solution to inject current. - -.. figure:: current_board.jpg - :width: 800px - :align: center - :height: 400px - :alt: alternate text - :figclass: align-center - - Wiring of the 4-channel relay module board for current injection management - - -Frist four electrodes resistivity mesurement -============================================ - - -Under construction describe the way vlide the first part of the instruction. -Electrical resistivity measurement on test circuit - - -Multiplexer implentation -************************* -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 -the 32 electrodes stuck into the ground, all of which are connected to the data logger. - - -We will describe below how to assemble the four multiplexers (MUX), one per terminal. A multiplexer consists of 2 relay -modules with 16 channels each. On the first board, on each MUX, 15 relays out of the 16 available will be used. Please note that the suggested -configuration enables making smaller multiplexers (8 or 16 electrodes only). On the other hand, if you prefer upping to 64 electrodes, -which is entirely possible, a GPIO channel multiplier will have to be used. -To prepare the multiplexer, the channels of the two relay boards must be connected according to the wiring diagram shown below. - -.. figure:: multiplexer_implementation.jpg - :width: 800px - :align: center - :height: 400px - :alt: alternate text - :figclass: align-center - - Schematic diagram of the wiring of two 16-channel relay shields - - -For this purpose, 0.5-mm² cables with end caps are used and their length adjusted for each connection in order to produce a clean assembly. -The length was adjusted so that the distance between the two points to be connected could be directly measured on the board once they had -been assembled one above the other, in adding an extra 3 cm. The wires at the ends need to be stripped and the end caps added. -As a final step, connect the cables to the correct connectors. This operation must be repeated in order to carry out all the wiring shown in Figure below. - -Once the operation has been completed, the 16 control pins of each 16-channel relay shield card must be prepared. Each card actually contains 16 input channels -for activating each relay (Fig. 12). However, we will be activating several relays with a single GPIO (to limit the number of GPIOs used on Raspberry Pi, -see Section 2.4). To execute this step, it will be necessary to follow the protocol presented in Figure. - - .. figure:: connection.jpg - :width: 800px - :align: center - :height: 400px - :alt: alternate text - :figclass: align-center - - Connection to the 16-channel relay shield - -For the 16-channel relay shield no. 1, these steps must be followed: -* Position a test circuit with 10 horizontal and 10 vertical holes on the pins of the 16-channel relay shield board. -* Follow the diagram and solder the pins as shown in Fig. -* Lastly, solder 0.5-mm² wires 1 m in length to the test circuit. - -For relay shield no. 2, follow the same procedure, but solder all the pins together (d-e-f). -This same operation must be repeated for the other three multiplexers as well. -The next step consists of connecting the relay card inputs to the Raspberry Pi according to Table 5 for all four multiplexers. - - -+-------------------------------+-------------------------------------------+---------------------+ -| |Relay shield n°1 |Relay Shield n°2 | -| +----------+----------+----------+----------+---------------------+ -| |Pin 1 |Pin 2-3 |Pin 4-7 |Pin 8-16 |Pin 1- 16 | -+-------------------------------+----------+----------+----------+----------+---------------------+ -| Multiplexer A |12 |16 |20 |21 |26 | -+-------------------------------+----------+----------+----------+----------+---------------------+ -| Multiplexer B |18 |23 |24 |25 |19 | -+-------------------------------+----------+----------+----------+----------+---------------------+ -| Multiplexer M |06 |13 |04 |17 |27 | -+-------------------------------+----------+----------+----------+----------+---------------------+ -| Multiplexer N |22 |10 |09 |11 |05 | -+-------------------------------+----------+----------+----------+----------+---------------------+ - - Connection of the GPIOs to each multiplexer - - -Electrode connection -************************* -At this point, all that remains is to connect the electrodes of each multiplexer to a terminal block (Fig. 13). In our set-up, screw terminals assembled on a din rail were used. -According to the chosen multiplexer configuration, all the relays of each multiplexer will be connected to an electrode and, consequently, each electrode will have four incoming -connections. Instead of having four cables connecting an electrode terminal to each multiplexer, we recommend using the cable assembly shown in the following Figure. - -.. figure:: cable.jpg - :width: 800px - :align: center - :height: 300px - :alt: alternate text - :figclass: align-center - -the next figure provides an example of multiplexer relay connections for electrode no. 1: this electrode of multiplexer MUX A must be connected to electrode no. 1 of MUX B. Moreover, electrode no. 1 of MUX B -must be connected to electrode no. 1 of MUX N, which in turn must be connected to electrode no. 1 of MUX M. Lastly, electrode no. 1 of MUX M is connected to the terminal block. -This operation must be repeated for all 32 electrodes. - -.. figure:: electrode_cable.jpg - :width: 800px - :align: center - :height: 800px - :alt: alternate text - :figclass: align-center - -Operating instruction -************************* - -Preliminary procedure (Only for the initial operation) -====================================================== -The open source code must be downloaded at the Open Science Framework source file repository for this manuscript (https://osf.io/dzwb4/) -or at the following Gitlab repository address: https://gitlab.irstea.fr/reversaal/OhmPi. The code must be then unzipped into a selected folder (e.g. OhmPi-master). A “readme†file -is proposed in the directory to assist with installation of the software and required python packages. It is strongly recommended to create a python virtual environment for installing -the required packages and running the code. - - -Startup procedure -================== -As an initial operating instruction, the 12-V battery must be disconnected before any hardware handling. Ensure that the battery is charged at full capacity. Plug all the electrodes (32 or fewer) -into the screw terminals. The Raspberry Pi must be plugged into a computer screen, with a mouse and keyboard accessed remotely. The Raspberry Pi must then be plugged into the power supply -(for laboratory measurements) or a power bank (5V - 2A for field measurements). At this point, you'll need to access the Raspbian operating system. Inside the previously created folder “ohmPiâ€, -the protocol file “ABMN.txt†must be created or modified; this file contains all quadrupole ABMN numeration (an example is proposed with the source code). Some input parameters of the main “ohmpi.py†-function may be adjusted/optimized depending on the measurement attributes. For example, both the current injection duration and number of stacks can be adjusted. At this point, the 12-V battery can be -plugged into the hardware; the "ohmpi.py" source code must be run within a python3 environment (or a virtual environment if one has been created) either in the terminal or using Thonny. You should now -hear the characteristic sound of a relay switching as a result of electrode permutation. After each quadrupole measurement, the potential difference as well as the current intensity and resistance -are displayed on the screen. A measurement file is automatically created and named "measure.csv"; it will be placed in the same folder. - -Electrical resistivity measurement parameters description -========================================================== - -.. code-block:: python - :linenos: - :lineno-start: 2 - - 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 - -The measurement parameters can be adjusted in lines 2 to 7 of the ohmpi_param.json file. - -complete list of componements -========================================================== - - diff --git a/public/_static/background_b01.png b/public/_static/background_b01.png deleted file mode 100644 index 353f26dde0803aa172c23e21ef6ac068e1253bc8..0000000000000000000000000000000000000000 Binary files a/public/_static/background_b01.png and /dev/null differ diff --git a/public/_static/bizstyle.css b/public/_static/bizstyle.css deleted file mode 100644 index def9cedc5dbfb46c1c8b8b95c40289ecea8869b4..0000000000000000000000000000000000000000 --- a/public/_static/bizstyle.css +++ /dev/null @@ -1,506 +0,0 @@ -/* - * bizstyle.css_t - * ~~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- business style theme. - * - * :copyright: Copyright 2011-2014 by Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', - 'Verdana', sans-serif; - font-size: 14px; - letter-spacing: -0.01em; - line-height: 150%; - text-align: center; - background-color: white; - background-image: url(background_b01.png); - color: black; - padding: 0; - border-right: 1px solid #336699; - border-left: 1px solid #336699; - - margin: 0px 40px 0px 40px; -} - -div.document { - background-color: white; - text-align: left; - background-repeat: repeat-x; - - -moz-box-shadow: 2px 2px 5px #000; - -webkit-box-shadow: 2px 2px 5px #000; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 240px; - border-left: 1px solid #ccc; -} - -div.body { - margin: 0; - padding: 0.5em 20px 20px 20px; -} -div.bodywrapper { - margin: 0 0 0 calc(210px + 30px); -} - -div.related { - font-size: 1em; - - -moz-box-shadow: 2px 2px 5px #000; - -webkit-box-shadow: 2px 2px 5px #000; -} - -div.related ul { - background-color: #336699; - height: 100%; - overflow: hidden; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -div.related ul li { - color: white; - margin: 0; - padding: 0; - height: 2em; - float: left; -} - -div.related ul li.right { - float: right; - margin-right: 5px; -} - -div.related ul li a { - margin: 0; - padding: 0 5px 0 5px; - line-height: 1.75em; - color: #fff; -} - -div.related ul li a:hover { - color: #fff; - text-decoration: underline; -} - -div.sphinxsidebarwrapper { - padding: 0; -} - -div.sphinxsidebar { - padding: 0.5em 12px 12px 12px; - width: 210px; - font-size: 1em; - text-align: left; -} - -div.sphinxsidebar h3, div.sphinxsidebar h4 { - margin: 1em 0 0.5em 0; - font-size: 1em; - padding: 0.1em 0 0.1em 0.5em; - color: white; - border: 1px solid #336699; - background-color: #336699; -} - -div.sphinxsidebar h3 a { - color: white; -} - -div.sphinxsidebar ul { - padding-left: 1.5em; - margin-top: 7px; - padding: 0; - line-height: 130%; -} - -div.sphinxsidebar ul ul { - margin-left: 20px; -} - -div.sphinxsidebar input { - border: 1px solid #336699; -} - -div.footer { - background-color: white; - color: #336699; - padding: 3px 8px 3px 0; - clear: both; - font-size: 0.8em; - text-align: right; - border-bottom: 1px solid #336699; - - -moz-box-shadow: 2px 2px 5px #000; - -webkit-box-shadow: 2px 2px 5px #000; -} - -div.footer a { - color: #336699; - text-decoration: underline; -} - -/* -- body styles ----------------------------------------------------------- */ - -p { - margin: 0.8em 0 0.5em 0; -} - -a { - color: #336699; - text-decoration: none; -} - -a:hover { - color: #336699; - text-decoration: underline; -} - -div.body a { - text-decoration: underline; -} - -h1, h2, h3 { - color: #336699; -} - -h1 { - margin: 0; - padding: 0.7em 0 0.3em 0; - font-size: 1.5em; -} - -h2 { - margin: 1.3em 0 0.2em 0; - font-size: 1.35em; - padding-bottom: .5em; - border-bottom: 1px solid #336699; -} - -h3 { - margin: 1em 0 -0.3em 0; - font-size: 1.2em; - padding-bottom: .3em; - border-bottom: 1px solid #CCCCCC; -} - -div.body h1 a, div.body h2 a, div.body h3 a, -div.body h4 a, div.body h5 a, div.body h6 a { - color: black!important; -} - -h1 a.anchor, h2 a.anchor, h3 a.anchor, -h4 a.anchor, h5 a.anchor, h6 a.anchor { - display: none; - margin: 0 0 0 0.3em; - padding: 0 0.2em 0 0.2em; - color: #aaa!important; -} - -h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, -h5:hover a.anchor, h6:hover a.anchor { - display: inline; -} - -h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover, -h5 a.anchor:hover, h6 a.anchor:hover { - color: #777; - background-color: #eee; -} - -a.headerlink { - color: #c60f0f!important; - font-size: 1em; - margin-left: 6px; - padding: 0 4px 0 4px; - text-decoration: none!important; -} - -a.headerlink:hover { - background-color: #ccc; - color: white!important; -} - -cite, code, tt { - font-family: 'Consolas', 'Deja Vu Sans Mono', - 'Bitstream Vera Sans Mono', monospace; - font-size: 0.95em; - letter-spacing: 0.01em; -} - -code { - background-color: #F2F2F2; - border-bottom: 1px solid #ddd; - color: #333; -} - -code.descname, code.descclassname, code.xref { - border: 0; -} - -hr { - border: 1px solid #abc; - margin: 2em; -} - -a code { - border: 0; - color: #CA7900; -} - -a code:hover { - color: #2491CF; -} - -pre { - background-color: transparent !important; - font-family: 'Consolas', 'Deja Vu Sans Mono', - 'Bitstream Vera Sans Mono', monospace; - font-size: 0.95em; - letter-spacing: 0.015em; - line-height: 120%; - padding: 0.5em; - border-right: 5px solid #ccc; - border-left: 5px solid #ccc; -} - -pre a { - color: inherit; - text-decoration: underline; -} - -td.linenos pre { - padding: 0.5em 0; -} - -div.quotebar { - background-color: #f8f8f8; - max-width: 250px; - float: right; - padding: 2px 7px; - border: 1px solid #ccc; -} - -div.topic { - background-color: #f8f8f8; -} - -table { - border-collapse: collapse; - margin: 0 -0.5em 0 -0.5em; -} - -table td, table th { - padding: 0.2em 0.5em 0.2em 0.5em; -} - -div.admonition { - font-size: 0.9em; - margin: 1em 0 1em 0; - border: 3px solid #cccccc; - background-color: #f7f7f7; - padding: 0; -} - -div.admonition p { - margin: 0.5em 1em 0.5em 1em; - padding: 0; -} - -div.admonition li p { - margin-left: 0; -} - -div.admonition pre, div.warning pre { - margin: 0; -} - -div.highlight { - margin: 0.4em 1em; -} - -div.admonition p.admonition-title { - margin: 0; - padding: 0.1em 0 0.1em 0.5em; - color: white; - border-bottom: 3px solid #cccccc; - font-weight: bold; - background-color: #165e83; -} - -div.danger { border: 3px solid #f0908d; background-color: #f0cfa0; } -div.error { border: 3px solid #f0908d; background-color: #ede4cd; } -div.warning { border: 3px solid #f8b862; background-color: #f0cfa0; } -div.caution { border: 3px solid #f8b862; background-color: #ede4cd; } -div.attention { border: 3px solid #f8b862; background-color: #f3f3f3; } -div.important { border: 3px solid #f0cfa0; background-color: #ede4cd; } -div.note { border: 3px solid #f0cfa0; background-color: #f3f3f3; } -div.hint { border: 3px solid #bed2c3; background-color: #f3f3f3; } -div.tip { border: 3px solid #bed2c3; background-color: #f3f3f3; } - -div.danger p.admonition-title, div.error p.admonition-title { - background-color: #b7282e; - border-bottom: 3px solid #f0908d; -} - -div.caution p.admonition-title, -div.warning p.admonition-title, -div.attention p.admonition-title { - background-color: #f19072; - border-bottom: 3px solid #f8b862; -} - -div.note p.admonition-title, div.important p.admonition-title { - background-color: #f8b862; - border-bottom: 3px solid #f0cfa0; -} - -div.hint p.admonition-title, div.tip p.admonition-title { - background-color: #7ebea5; - border-bottom: 3px solid #bed2c3; -} - -div.admonition ul, div.admonition ol, -div.warning ul, div.warning ol { - margin: 0.1em 0.5em 0.5em 3em; - padding: 0; -} - -div.versioninfo { - margin: 1em 0 0 0; - border: 1px solid #ccc; - background-color: #DDEAF0; - padding: 8px; - line-height: 1.3em; - font-size: 0.9em; -} - -.viewcode-back { - font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', - 'Verdana', sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; -} - -p.versionchanged span.versionmodified { - font-size: 0.9em; - margin-right: 0.2em; - padding: 0.1em; - background-color: #DCE6A0; -} - -dl.field-list > dt { - color: white; - background-color: #82A0BE; -} - -dl.field-list > dd { - background-color: #f7f7f7; -} - -/* -- table styles ---------------------------------------------------------- */ - -table.docutils { - margin: 1em 0; - padding: 0; - border: 1px solid white; - background-color: #f7f7f7; -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 1px solid white; - border-bottom: 1px solid white; -} - -table.docutils td p { - margin-top: 0; - margin-bottom: 0.3em; -} - -table.field-list td, table.field-list th { - border: 0 !important; - word-break: break-word; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - color: white; - text-align: left; - padding-right: 5px; - background-color: #82A0BE; -} - -div.literal-block-wrapper div.code-block-caption { - background-color: #EEE; - border-style: solid; - border-color: #CCC; - border-width: 1px 5px; -} - -/* WIDE DESKTOP STYLE */ -@media only screen and (min-width: 1176px) { -body { - margin: 0 40px 0 40px; -} -} - -/* TABLET STYLE */ -@media only screen and (min-width: 768px) and (max-width: 991px) { -body { - margin: 0 40px 0 40px; -} -} - -/* MOBILE LAYOUT (PORTRAIT/320px) */ -@media only screen and (max-width: 767px) { -body { - margin: 0; -} -div.bodywrapper { - margin: 0; - width: 100%; - border: none; -} -div.sphinxsidebar { - display: none; -} -} - -/* MOBILE LAYOUT (LANDSCAPE/480px) */ -@media only screen and (min-width: 480px) and (max-width: 767px) { -body { - margin: 0 20px 0 20px; -} -} - -/* RETINA OVERRIDES */ -@media -only screen and (-webkit-min-device-pixel-ratio: 2), -only screen and (min-device-pixel-ratio: 2) { -} - -/* -- end ------------------------------------------------------------------- */ \ No newline at end of file diff --git a/public/_static/bizstyle.js b/public/_static/bizstyle.js deleted file mode 100644 index e3810ee66261e04be099ced0f569d8d4bb0cbf33..0000000000000000000000000000000000000000 --- a/public/_static/bizstyle.js +++ /dev/null @@ -1,41 +0,0 @@ -// -// bizstyle.js -// ~~~~~~~~~~~ -// -// Sphinx javascript -- for bizstyle theme. -// -// This theme was created by referring to 'sphinxdoc' -// -// :copyright: Copyright 2012-2014 by Sphinx team, see AUTHORS. -// :license: BSD, see LICENSE for details. -// -$(document).ready(function(){ - if (navigator.userAgent.indexOf('iPhone') > 0 || - navigator.userAgent.indexOf('Android') > 0) { - $("li.nav-item-0 a").text("Top"); - } - - $("div.related:first ul li:not(.right) a").slice(1).each(function(i, item){ - if (item.text.length > 20) { - var tmpstr = item.text - $(item).attr("title", tmpstr); - $(item).text(tmpstr.substr(0, 17) + "..."); - } - }); - $("div.related:last ul li:not(.right) a").slice(1).each(function(i, item){ - if (item.text.length > 20) { - var tmpstr = item.text - $(item).attr("title", tmpstr); - $(item).text(tmpstr.substr(0, 17) + "..."); - } - }); -}); - -$(window).resize(function(){ - if ($(window).width() <= 776) { - $("li.nav-item-0 a").text("Top"); - } - else { - $("li.nav-item-0 a").text("Ohmpi: open hardware resistivity-meter documentation"); - } -}); \ No newline at end of file diff --git a/public/_static/classic.css b/public/_static/classic.css deleted file mode 100644 index cceb67ac4803b270fac7218846f0640c37f2be93..0000000000000000000000000000000000000000 --- a/public/_static/classic.css +++ /dev/null @@ -1,266 +0,0 @@ -/* - * classic.css_t - * ~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- classic theme. - * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -html { - /* CSS hack for macOS's scrollbar (see #1125) */ - background-color: #FFFFFF; -} - -body { - font-family: sans-serif; - font-size: 100%; - background-color: #11303d; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - background-color: #1c4e63; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 230px; -} - -div.body { - background-color: #ffffff; - color: #000000; - padding: 0 20px 30px 20px; -} - -div.footer { - color: #ffffff; - width: 100%; - padding: 9px 0 9px 0; - text-align: center; - font-size: 75%; -} - -div.footer a { - color: #ffffff; - text-decoration: underline; -} - -div.related { - background-color: #133f52; - line-height: 30px; - color: #ffffff; -} - -div.related a { - color: #ffffff; -} - -div.sphinxsidebar { -} - -div.sphinxsidebar h3 { - font-family: 'Trebuchet MS', sans-serif; - color: #ffffff; - font-size: 1.4em; - font-weight: normal; - margin: 0; - padding: 0; -} - -div.sphinxsidebar h3 a { - color: #ffffff; -} - -div.sphinxsidebar h4 { - font-family: 'Trebuchet MS', sans-serif; - color: #ffffff; - font-size: 1.3em; - font-weight: normal; - margin: 5px 0 0 0; - padding: 0; -} - -div.sphinxsidebar p { - color: #ffffff; -} - -div.sphinxsidebar p.topless { - margin: 5px 10px 10px 10px; -} - -div.sphinxsidebar ul { - margin: 10px; - padding: 0; - color: #ffffff; -} - -div.sphinxsidebar a { - color: #98dbcc; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - - - -/* -- hyperlink styles ------------------------------------------------------ */ - -a { - color: #355f7c; - text-decoration: none; -} - -a:visited { - color: #355f7c; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - - - -/* -- body styles ----------------------------------------------------------- */ - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Trebuchet MS', sans-serif; - background-color: #f2f2f2; - font-weight: normal; - color: #20435c; - border-bottom: 1px solid #ccc; - margin: 20px -20px 10px -20px; - padding: 3px 0 3px 10px; -} - -div.body h1 { margin-top: 0; font-size: 200%; } -div.body h2 { font-size: 160%; } -div.body h3 { font-size: 140%; } -div.body h4 { font-size: 120%; } -div.body h5 { font-size: 110%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #c60f0f; - font-size: 0.8em; - padding: 0 4px 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - background-color: #c60f0f; - color: white; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - text-align: justify; - line-height: 130%; -} - -div.admonition p.admonition-title + p { - display: inline; -} - -div.admonition p { - margin-bottom: 5px; -} - -div.admonition pre { - margin-bottom: 5px; -} - -div.admonition ul, div.admonition ol { - margin-bottom: 5px; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -div.warning { - background-color: #ffe4e4; - border: 1px solid #f66; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre { - padding: 5px; - background-color: unset; - color: unset; - line-height: 120%; - border: 1px solid #ac9; - border-left: none; - border-right: none; -} - -code { - background-color: #ecf0f3; - padding: 0 1px 0 1px; - font-size: 0.95em; -} - -th, dl.field-list > dt { - background-color: #ede; -} - -.warning code { - background: #efc2c2; -} - -.note code { - background: #d6d6d6; -} - -.viewcode-back { - font-family: sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; -} - -div.code-block-caption { - color: #efefef; - background-color: #1c4e63; -} \ No newline at end of file diff --git a/public/_static/css3-mediaqueries.js b/public/_static/css3-mediaqueries.js deleted file mode 100644 index 59735f59dcb97f8d892a786ab94a33120254db9d..0000000000000000000000000000000000000000 --- a/public/_static/css3-mediaqueries.js +++ /dev/null @@ -1 +0,0 @@ -if(typeof Object.create!=="function"){Object.create=function(e){function t(){}t.prototype=e;return new t}}var ua={toString:function(){return navigator.userAgent},test:function(e){return this.toString().toLowerCase().indexOf(e.toLowerCase())>-1}};ua.version=(ua.toString().toLowerCase().match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1];ua.webkit=ua.test("webkit");ua.gecko=ua.test("gecko")&&!ua.webkit;ua.opera=ua.test("opera");ua.ie=ua.test("msie")&&!ua.opera;ua.ie6=ua.ie&&document.compatMode&&typeof document.documentElement.style.maxHeight==="undefined";ua.ie7=ua.ie&&document.documentElement&&typeof document.documentElement.style.maxHeight!=="undefined"&&typeof XDomainRequest==="undefined";ua.ie8=ua.ie&&typeof XDomainRequest!=="undefined";var domReady=function(){var e=[];var t=function(){if(!arguments.callee.done){arguments.callee.done=true;for(var t=0;t<e.length;t++){e[t]()}}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",t,false)}if(ua.ie){(function(){try{document.documentElement.doScroll("left")}catch(e){setTimeout(arguments.callee,50);return}t()})();document.onreadystatechange=function(){if(document.readyState==="complete"){document.onreadystatechange=null;t()}}}if(ua.webkit&&document.readyState){(function(){if(document.readyState!=="loading"){t()}else{setTimeout(arguments.callee,10)}})()}window.onload=t;return function(t){if(typeof t==="function"){e[e.length]=t}return t}}();var cssHelper=function(){var e={BLOCKS:/[^\s{;][^{;]*\{(?:[^{}]*\{[^{}]*\}[^{}]*|[^{}]*)*\}/g,BLOCKS_INSIDE:/[^\s{][^{]*\{[^{}]*\}/g,DECLARATIONS:/[a-zA-Z\-]+[^;]*:[^;]+;/g,RELATIVE_URLS:/url\(['"]?([^\/\)'"][^:\)'"]+)['"]?\)/g,REDUNDANT_COMPONENTS:/(?:\/\*([^*\\\\]|\*(?!\/))+\*\/|@import[^;]+;)/g,REDUNDANT_WHITESPACE:/\s*(,|:|;|\{|\})\s*/g,WHITESPACE_IN_PARENTHESES:/\(\s*(\S*)\s*\)/g,MORE_WHITESPACE:/\s{2,}/g,FINAL_SEMICOLONS:/;\}/g,NOT_WHITESPACE:/\S+/g};var t,n=false;var r=[];var s=function(e){if(typeof e==="function"){r[r.length]=e}};var o=function(){for(var e=0;e<r.length;e++){r[e](t)}};var u={};var a=function(e,t){if(u[e]){var n=u[e].listeners;if(n){for(var r=0;r<n.length;r++){n[r](t)}}}};var f=function(e,t,n){if(ua.ie&&!window.XMLHttpRequest){window.XMLHttpRequest=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}if(!XMLHttpRequest){return""}var r=new XMLHttpRequest;try{r.open("get",e,true);r.setRequestHeader("X_REQUESTED_WITH","XMLHttpRequest")}catch(i){n();return}var s=false;setTimeout(function(){s=true},5e3);document.documentElement.style.cursor="progress";r.onreadystatechange=function(){if(r.readyState===4&&!s){if(!r.status&&location.protocol==="file:"||r.status>=200&&r.status<300||r.status===304||navigator.userAgent.indexOf("Safari")>-1&&typeof r.status==="undefined"){t(r.responseText)}else{n()}document.documentElement.style.cursor="";r=null}};r.send("")};var l=function(t){t=t.replace(e.REDUNDANT_COMPONENTS,"");t=t.replace(e.REDUNDANT_WHITESPACE,"$1");t=t.replace(e.WHITESPACE_IN_PARENTHESES,"($1)");t=t.replace(e.MORE_WHITESPACE," ");t=t.replace(e.FINAL_SEMICOLONS,"}");return t};var c={stylesheet:function(t){var n={};var r=[],i=[],s=[],o=[];var u=t.cssHelperText;var a=t.getAttribute("media");if(a){var f=a.toLowerCase().split(",")}else{var f=["all"]}for(var l=0;l<f.length;l++){r[r.length]=c.mediaQuery(f[l],n)}var h=u.match(e.BLOCKS);if(h!==null){for(var l=0;l<h.length;l++){if(h[l].substring(0,7)==="@media "){var p=c.mediaQueryList(h[l],n);s=s.concat(p.getRules());i[i.length]=p}else{s[s.length]=o[o.length]=c.rule(h[l],n,null)}}}n.element=t;n.getCssText=function(){return u};n.getAttrMediaQueries=function(){return r};n.getMediaQueryLists=function(){return i};n.getRules=function(){return s};n.getRulesWithoutMQ=function(){return o};return n},mediaQueryList:function(t,n){var r={};var i=t.indexOf("{");var s=t.substring(0,i);t=t.substring(i+1,t.length-1);var o=[],u=[];var a=s.toLowerCase().substring(7).split(",");for(var f=0;f<a.length;f++){o[o.length]=c.mediaQuery(a[f],r)}var l=t.match(e.BLOCKS_INSIDE);if(l!==null){for(f=0;f<l.length;f++){u[u.length]=c.rule(l[f],n,r)}}r.type="mediaQueryList";r.getMediaQueries=function(){return o};r.getRules=function(){return u};r.getListText=function(){return s};r.getCssText=function(){return t};return r},mediaQuery:function(t,n){t=t||"";var r,i;if(n.type==="mediaQueryList"){r=n}else{i=n}var s=false,o;var u=[];var a=true;var f=t.match(e.NOT_WHITESPACE);for(var l=0;l<f.length;l++){var c=f[l];if(!o&&(c==="not"||c==="only")){if(c==="not"){s=true}}else if(!o){o=c}else if(c.charAt(0)==="("){var h=c.substring(1,c.length-1).split(":");u[u.length]={mediaFeature:h[0],value:h[1]||null}}}return{getQueryText:function(){return t},getAttrStyleSheet:function(){return i||null},getList:function(){return r||null},getValid:function(){return a},getNot:function(){return s},getMediaType:function(){return o},getExpressions:function(){return u}}},rule:function(e,t,n){var r={};var i=e.indexOf("{");var s=e.substring(0,i);var o=s.split(",");var u=[];var a=e.substring(i+1,e.length-1).split(";");for(var f=0;f<a.length;f++){u[u.length]=c.declaration(a[f],r)}r.getStylesheet=function(){return t||null};r.getMediaQueryList=function(){return n||null};r.getSelectors=function(){return o};r.getSelectorText=function(){return s};r.getDeclarations=function(){return u};r.getPropertyValue=function(e){for(var t=0;t<u.length;t++){if(u[t].getProperty()===e){return u[t].getValue()}}return null};return r},declaration:function(e,t){var n=e.indexOf(":");var r=e.substring(0,n);var i=e.substring(n+1);return{getRule:function(){return t||null},getProperty:function(){return r},getValue:function(){return i}}}};var h=function(e){if(typeof e.cssHelperText!=="string"){return}var n={stylesheet:null,mediaQueryLists:[],rules:[],selectors:{},declarations:[],properties:{}};var r=n.stylesheet=c.stylesheet(e);var s=n.mediaQueryLists=r.getMediaQueryLists();var o=n.rules=r.getRules();var u=n.selectors;var a=function(e){var t=e.getSelectors();for(var n=0;n<t.length;n++){var r=t[n];if(!u[r]){u[r]=[]}u[r][u[r].length]=e}};for(i=0;i<o.length;i++){a(o[i])}var f=n.declarations;for(i=0;i<o.length;i++){f=n.declarations=f.concat(o[i].getDeclarations())}var l=n.properties;for(i=0;i<f.length;i++){var h=f[i].getProperty();if(!l[h]){l[h]=[]}l[h][l[h].length]=f[i]}e.cssHelperParsed=n;t[t.length]=e;return n};var p=function(e,t){return;e.cssHelperText=l(t||e.innerHTML);return h(e)};var d=function(){n=true;t=[];var r=[];var i=function(){for(var e=0;e<r.length;e++){h(r[e])}var t=document.getElementsByTagName("style");for(e=0;e<t.length;e++){p(t[e])}n=false;o()};var s=document.getElementsByTagName("link");for(var u=0;u<s.length;u++){var a=s[u];if(a.getAttribute("rel").indexOf("style")>-1&&a.href&&a.href.length!==0&&!a.disabled){r[r.length]=a}}if(r.length>0){var c=0;var d=function(){c++;if(c===r.length){i()}};var v=function(t){var n=t.href;f(n,function(r){r=l(r).replace(e.RELATIVE_URLS,"url("+n.substring(0,n.lastIndexOf("/"))+"/$1)");t.cssHelperText=r;d()},d)};for(u=0;u<r.length;u++){v(r[u])}}else{i()}};var v={stylesheets:"array",mediaQueryLists:"array",rules:"array",selectors:"object",declarations:"array",properties:"object"};var m={stylesheets:null,mediaQueryLists:null,rules:null,selectors:null,declarations:null,properties:null};var g=function(e,t){if(m[e]!==null){if(v[e]==="array"){return m[e]=m[e].concat(t)}else{var n=m[e];for(var r in t){if(t.hasOwnProperty(r)){if(!n[r]){n[r]=t[r]}else{n[r]=n[r].concat(t[r])}}}return n}}};var y=function(e){m[e]=v[e]==="array"?[]:{};for(var n=0;n<t.length;n++){var r=e==="stylesheets"?"stylesheet":e;g(e,t[n].cssHelperParsed[r])}return m[e]};var b=function(e){if(typeof window.innerWidth!="undefined"){return window["inner"+e]}else if(typeof document.documentElement!=="undefined"&&typeof document.documentElement.clientWidth!=="undefined"&&document.documentElement.clientWidth!=0){return document.documentElement["client"+e]}};return{addStyle:function(e,t,n){var r=document.createElement("style");r.setAttribute("type","text/css");if(t&&t.length>0){r.setAttribute("media",t.join(","))}document.getElementsByTagName("head")[0].appendChild(r);if(r.styleSheet){r.styleSheet.cssText=e}else{r.appendChild(document.createTextNode(e))}r.addedWithCssHelper=true;if(typeof n==="undefined"||n===true){cssHelper.parsed(function(t){var n=p(r,e);for(var i in n){if(n.hasOwnProperty(i)){g(i,n[i])}}a("newStyleParsed",r)})}else{r.parsingDisallowed=true}return r},removeStyle:function(e){return e.parentNode.removeChild(e)},parsed:function(e){if(n){s(e)}else{if(typeof t!=="undefined"){if(typeof e==="function"){e(t)}}else{s(e);d()}}},stylesheets:function(e){cssHelper.parsed(function(t){e(m.stylesheets||y("stylesheets"))})},mediaQueryLists:function(e){cssHelper.parsed(function(t){e(m.mediaQueryLists||y("mediaQueryLists"))})},rules:function(e){cssHelper.parsed(function(t){e(m.rules||y("rules"))})},selectors:function(e){cssHelper.parsed(function(t){e(m.selectors||y("selectors"))})},declarations:function(e){cssHelper.parsed(function(t){e(m.declarations||y("declarations"))})},properties:function(e){cssHelper.parsed(function(t){e(m.properties||y("properties"))})},broadcast:a,addListener:function(e,t){if(typeof t==="function"){if(!u[e]){u[e]={listeners:[]}}u[e].listeners[u[e].listeners.length]=t}},removeListener:function(e,t){if(typeof t==="function"&&u[e]){var n=u[e].listeners;for(var r=0;r<n.length;r++){if(n[r]===t){n.splice(r,1);r-=1}}}},getViewportWidth:function(){return b("Width")},getViewportHeight:function(){return b("Height")}}}();domReady(function(){var t;var n={LENGTH_UNIT:/[0-9]+(em|ex|px|in|cm|mm|pt|pc)$/,RESOLUTION_UNIT:/[0-9]+(dpi|dpcm)$/,ASPECT_RATIO:/^[0-9]+\/[0-9]+$/,ABSOLUTE_VALUE:/^[0-9]*(\.[0-9]+)*$/};var r=[];var i=function(){var e="css3-mediaqueries-test";var t=document.createElement("div");t.id=e;var n=cssHelper.addStyle("@media all and (width) { #"+e+" { width: 1px !important; } }",[],false);document.body.appendChild(t);var r=t.offsetWidth===1;n.parentNode.removeChild(n);t.parentNode.removeChild(t);i=function(){return r};return r};var s=function(){t=document.createElement("div");t.style.cssText="position:absolute;top:-9999em;left:-9999em;"+"margin:0;border:none;padding:0;width:1em;font-size:1em;";document.body.appendChild(t);if(t.offsetWidth!==16){t.style.fontSize=16/t.offsetWidth+"em"}t.style.width=""};var o=function(e){t.style.width=e;var n=t.offsetWidth;t.style.width="";return n};var u=function(e,t){var r=e.length;var i=e.substring(0,4)==="min-";var s=!i&&e.substring(0,4)==="max-";if(t!==null){var u;var a;if(n.LENGTH_UNIT.exec(t)){u="length";a=o(t)}else if(n.RESOLUTION_UNIT.exec(t)){u="resolution";a=parseInt(t,10);var f=t.substring((a+"").length)}else if(n.ASPECT_RATIO.exec(t)){u="aspect-ratio";a=t.split("/")}else if(n.ABSOLUTE_VALUE){u="absolute";a=t}else{u="unknown"}}var l,c;if("device-width"===e.substring(r-12,r)){l=screen.width;if(t!==null){if(u==="length"){return i&&l>=a||s&&l<a||!i&&!s&&l===a}else{return false}}else{return l>0}}else if("device-height"===e.substring(r-13,r)){c=screen.height;if(t!==null){if(u==="length"){return i&&c>=a||s&&c<a||!i&&!s&&c===a}else{return false}}else{return c>0}}else if("width"===e.substring(r-5,r)){l=document.documentElement.clientWidth||document.body.clientWidth;if(t!==null){if(u==="length"){return i&&l>=a||s&&l<a||!i&&!s&&l===a}else{return false}}else{return l>0}}else if("height"===e.substring(r-6,r)){c=document.documentElement.clientHeight||document.body.clientHeight;if(t!==null){if(u==="length"){return i&&c>=a||s&&c<a||!i&&!s&&c===a}else{return false}}else{return c>0}}else if("device-aspect-ratio"===e.substring(r-19,r)){return u==="aspect-ratio"&&screen.width*a[1]===screen.height*a[0]}else if("color-index"===e.substring(r-11,r)){var h=Math.pow(2,screen.colorDepth);if(t!==null){if(u==="absolute"){return i&&h>=a||s&&h<a||!i&&!s&&h===a}else{return false}}else{return h>0}}else if("color"===e.substring(r-5,r)){var p=screen.colorDepth;if(t!==null){if(u==="absolute"){return i&&p>=a||s&&p<a||!i&&!s&&p===a}else{return false}}else{return p>0}}else if("resolution"===e.substring(r-10,r)){var d;if(f==="dpcm"){d=o("1cm")}else{d=o("1in")}if(t!==null){if(u==="resolution"){return i&&d>=a||s&&d<a||!i&&!s&&d===a}else{return false}}else{return d>0}}else{return false}};var a=function(e){var t=e.getValid();var n=e.getExpressions();var r=n.length;if(r>0){for(var i=0;i<r&&t;i++){t=u(n[i].mediaFeature,n[i].value)}var s=e.getNot();return t&&!s||s&&!t}return t};var f=function(e,t){var n=e.getMediaQueries();var i={};for(var s=0;s<n.length;s++){var o=n[s].getMediaType();if(n[s].getExpressions().length===0){continue}var u=true;if(o!=="all"&&t&&t.length>0){u=false;for(var f=0;f<t.length;f++){if(t[f]===o){u=true}}}if(u&&a(n[s])){i[o]=true}}var l=[],c=0;for(var h in i){if(i.hasOwnProperty(h)){if(c>0){l[c++]=","}l[c++]=h}}if(l.length>0){r[r.length]=cssHelper.addStyle("@media "+l.join("")+"{"+e.getCssText()+"}",t,false)}};var l=function(e,t){for(var n=0;n<e.length;n++){f(e[n],t)}};var c=function(e){var t=e.getAttrMediaQueries();var n=false;var i={};for(var s=0;s<t.length;s++){if(a(t[s])){i[t[s].getMediaType()]=t[s].getExpressions().length>0}}var o=[],u=[];for(var f in i){if(i.hasOwnProperty(f)){o[o.length]=f;if(i[f]){u[u.length]=f}if(f==="all"){n=true}}}if(u.length>0){r[r.length]=cssHelper.addStyle(e.getCssText(),u,false)}var c=e.getMediaQueryLists();if(n){l(c)}else{l(c,o)}};var h=function(e){for(var t=0;t<e.length;t++){c(e[t])}if(ua.ie){document.documentElement.style.display="block";setTimeout(function(){document.documentElement.style.display=""},0);setTimeout(function(){cssHelper.broadcast("cssMediaQueriesTested")},100)}else{cssHelper.broadcast("cssMediaQueriesTested")}};var p=function(){for(var e=0;e<r.length;e++){cssHelper.removeStyle(r[e])}r=[];cssHelper.stylesheets(h)};var d=0;var v=function(){var e=cssHelper.getViewportWidth();var t=cssHelper.getViewportHeight();if(ua.ie){var n=document.createElement("div");n.style.position="absolute";n.style.top="-9999em";n.style.overflow="scroll";document.body.appendChild(n);d=n.offsetWidth-n.clientWidth;document.body.removeChild(n)}var r;var s=function(){var n=cssHelper.getViewportWidth();var s=cssHelper.getViewportHeight();if(Math.abs(n-e)>d||Math.abs(s-t)>d){e=n;t=s;clearTimeout(r);r=setTimeout(function(){if(!i()){p()}else{cssHelper.broadcast("cssMediaQueriesTested")}},500)}};window.onresize=function(){var e=window.onresize||function(){};return function(){e();s()}}()};var m=document.documentElement;m.style.marginLeft="-32767px";setTimeout(function(){m.style.marginLeft=""},5e3);return function(){if(!i()){cssHelper.addListener("newStyleParsed",function(e){c(e.cssHelperParsed.stylesheet)});cssHelper.addListener("cssMediaQueriesTested",function(){if(ua.ie){m.style.width="1px"}setTimeout(function(){m.style.width="";m.style.marginLeft=""},0);cssHelper.removeListener("cssMediaQueriesTested",arguments.callee)});s();p()}else{m.style.marginLeft=""}v()}}());try{document.execCommand("BackgroundImageCache",false,true)}catch(e){} diff --git a/public/_static/css3-mediaqueries_src.js b/public/_static/css3-mediaqueries_src.js deleted file mode 100644 index f21dd4949aa37f06293f86d3f520c80862ae71b9..0000000000000000000000000000000000000000 --- a/public/_static/css3-mediaqueries_src.js +++ /dev/null @@ -1,1104 +0,0 @@ -/* -css3-mediaqueries.js - CSS Helper and CSS3 Media Queries Enabler - -author: Wouter van der Graaf <wouter at dynora nl> -version: 1.0 (20110330) -license: MIT -website: http://code.google.com/p/css3-mediaqueries-js/ - -W3C spec: http://www.w3.org/TR/css3-mediaqueries/ - -Note: use of embedded <style> is not recommended when using media queries, because IE has no way of returning the raw literal css text from a <style> element. -*/ - - -// true prototypal inheritance (http://javascript.crockford.com/prototypal.html) -if (typeof Object.create !== 'function') { - Object.create = function (o) { - function F() {} - F.prototype = o; - return new F(); - }; -} - - -// user agent sniffing shortcuts -var ua = { - toString: function () { - return navigator.userAgent; - }, - test: function (s) { - return this.toString().toLowerCase().indexOf(s.toLowerCase()) > -1; - } -}; -ua.version = (ua.toString().toLowerCase().match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1]; -ua.webkit = ua.test('webkit'); -ua.gecko = ua.test('gecko') && !ua.webkit; -ua.opera = ua.test('opera'); -ua.ie = ua.test('msie') && !ua.opera; -ua.ie6 = ua.ie && document.compatMode && typeof document.documentElement.style.maxHeight === 'undefined'; -ua.ie7 = ua.ie && document.documentElement && typeof document.documentElement.style.maxHeight !== 'undefined' && typeof XDomainRequest === 'undefined'; -ua.ie8 = ua.ie && typeof XDomainRequest !== 'undefined'; - - - -// initialize when DOM content is loaded -var domReady = function () { - var fns = []; - var init = function () { - if (!arguments.callee.done) { // run init functions once - arguments.callee.done = true; - for (var i = 0; i < fns.length; i++) { - fns[i](); - } - } - }; - - // listeners for different browsers - if (document.addEventListener) { - document.addEventListener('DOMContentLoaded', init, false); - } - if (ua.ie) { - (function () { - try { - // throws errors until after ondocumentready - document.documentElement.doScroll('left'); - } - catch (e) { - setTimeout(arguments.callee, 50); - return; - } - // no errors, fire - init(); - })(); - // trying to always fire before onload - document.onreadystatechange = function () { - if (document.readyState === 'complete') { - document.onreadystatechange = null; - init(); - } - }; - } - if (ua.webkit && document.readyState) { - (function () { - if (document.readyState !== 'loading') { - init(); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - window.onload = init; // fallback - - return function (fn) { // add fn to init functions - if (typeof fn === 'function') { - fns[fns.length] = fn; - } - return fn; - }; -}(); - - - -// helper library for parsing css to objects -var cssHelper = function () { - - var regExp = { - BLOCKS: /[^\s{;][^{;]*\{(?:[^{}]*\{[^{}]*\}[^{}]*|[^{}]*)*\}/g, - BLOCKS_INSIDE: /[^\s{][^{]*\{[^{}]*\}/g, - DECLARATIONS: /[a-zA-Z\-]+[^;]*:[^;]+;/g, - RELATIVE_URLS: /url\(['"]?([^\/\)'"][^:\)'"]+)['"]?\)/g, - // strip whitespace and comments, @import is evil - REDUNDANT_COMPONENTS: /(?:\/\*([^*\\\\]|\*(?!\/))+\*\/|@import[^;]+;)/g, - REDUNDANT_WHITESPACE: /\s*(,|:|;|\{|\})\s*/g, - WHITESPACE_IN_PARENTHESES: /\(\s*(\S*)\s*\)/g, - MORE_WHITESPACE: /\s{2,}/g, - FINAL_SEMICOLONS: /;\}/g, - NOT_WHITESPACE: /\S+/g - }; - - var parsed, parsing = false; - - var waiting = []; - var wait = function (fn) { - if (typeof fn === 'function') { - waiting[waiting.length] = fn; - } - }; - var ready = function () { - for (var i = 0; i < waiting.length; i++) { - waiting[i](parsed); - } - }; - var events = {}; - var broadcast = function (n, v) { - if (events[n]) { - var listeners = events[n].listeners; - if (listeners) { - for (var i = 0; i < listeners.length; i++) { - listeners[i](v); - } - } - } - }; - - var requestText = function (url, fnSuccess, fnFailure) { - if (ua.ie && !window.XMLHttpRequest) { - window.XMLHttpRequest = function () { - return new ActiveXObject('Microsoft.XMLHTTP'); - }; - } - if (!XMLHttpRequest) { - return ''; - } - var r = new XMLHttpRequest(); - try { - r.open('get', url, true); - r.setRequestHeader('X_REQUESTED_WITH', 'XMLHttpRequest'); - } - catch (e) { - fnFailure(); - return; - } - var done = false; - setTimeout(function () { - done = true; - }, 5000); - document.documentElement.style.cursor = 'progress'; - r.onreadystatechange = function () { - if (r.readyState === 4 && !done) { - if (!r.status && location.protocol === 'file:' || - (r.status >= 200 && r.status < 300) || - r.status === 304 || - navigator.userAgent.indexOf('Safari') > -1 && typeof r.status === 'undefined') { - fnSuccess(r.responseText); - } - else { - fnFailure(); - } - document.documentElement.style.cursor = ''; - r = null; // avoid memory leaks - } - }; - r.send(''); - }; - - var sanitize = function (text) { - text = text.replace(regExp.REDUNDANT_COMPONENTS, ''); - text = text.replace(regExp.REDUNDANT_WHITESPACE, '$1'); - text = text.replace(regExp.WHITESPACE_IN_PARENTHESES, '($1)'); - text = text.replace(regExp.MORE_WHITESPACE, ' '); - text = text.replace(regExp.FINAL_SEMICOLONS, '}'); // optional final semicolons - return text; - }; - - var objects = { - stylesheet: function (el) { - var o = {}; - var amqs = [], mqls = [], rs = [], rsw = []; - var s = el.cssHelperText; - - // add attribute media queries - var attr = el.getAttribute('media'); - if (attr) { - var qts = attr.toLowerCase().split(',') - } - else { - var qts = ['all'] // imply 'all' - } - for (var i = 0; i < qts.length; i++) { - amqs[amqs.length] = objects.mediaQuery(qts[i], o); - } - - // add media query lists and rules (top down order) - var blocks = s.match(regExp.BLOCKS); // @charset is not a block - if (blocks !== null) { - for (var i = 0; i < blocks.length; i++) { - if (blocks[i].substring(0, 7) === '@media ') { // media query (list) - var mql = objects.mediaQueryList(blocks[i], o); - rs = rs.concat(mql.getRules()); - mqls[mqls.length] = mql; - } - else { // regular rule set, page context (@page) or font description (@font-face) - rs[rs.length] = rsw[rsw.length] = objects.rule(blocks[i], o, null); - } - } - } - - o.element = el; - o.getCssText = function () { - return s; - }; - o.getAttrMediaQueries = function () { - return amqs; - }; - o.getMediaQueryLists = function () { - return mqls; - }; - o.getRules = function () { - return rs; - }; - o.getRulesWithoutMQ = function () { - return rsw; - }; - return o; - }, - - mediaQueryList: function (s, stsh) { - var o = {}; - var idx = s.indexOf('{'); - var lt = s.substring(0, idx); - s = s.substring(idx + 1, s.length - 1); - var mqs = [], rs = []; - - // add media queries - var qts = lt.toLowerCase().substring(7).split(','); - for (var i = 0; i < qts.length; i++) { // parse each media query - mqs[mqs.length] = objects.mediaQuery(qts[i], o); - } - - // add rule sets - var rts = s.match(regExp.BLOCKS_INSIDE); - if (rts !== null) { - for (i = 0; i < rts.length; i++) { - rs[rs.length] = objects.rule(rts[i], stsh, o); - } - } - - o.type = 'mediaQueryList'; - o.getMediaQueries = function () { - return mqs; - }; - o.getRules = function () { - return rs; - }; - o.getListText = function () { - return lt; - }; - o.getCssText = function () { - return s; - }; - return o; - }, - - mediaQuery: function (s, listOrSheet) { - s = s || ''; - var mql, stsh; - if (listOrSheet.type === 'mediaQueryList') { - mql = listOrSheet; - } - else { - stsh = listOrSheet; - } - var not = false, type; - var expr = []; - var valid = true; - var tokens = s.match(regExp.NOT_WHITESPACE); - - - - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (!type && (token === 'not' || token === 'only')) { // 'not' and 'only' keywords - // keyword 'only' does nothing, as if it was not present - if (token === 'not') { - not = true; - } - } - else if (!type) { // media type - type = token; - } - else if (token.charAt(0) === '(') { // media feature expression - var pair = token.substring(1, token.length - 1).split(':'); - expr[expr.length] = { - mediaFeature: pair[0], - value: pair[1] || null - }; - } - } - - return { - getQueryText: function () { - return s; - }, - getAttrStyleSheet: function () { - return stsh || null; - }, - getList: function () { - return mql || null; - }, - getValid: function () { - return valid; - }, - getNot: function () { - return not; - }, - getMediaType: function () { - return type; - }, - getExpressions: function () { - return expr; - } - }; - }, - - rule: function (s, stsh, mql) { - var o = {}; - var idx = s.indexOf('{'); - var st = s.substring(0, idx); - var ss = st.split(','); - var ds = []; - var dts = s.substring(idx + 1, s.length - 1).split(';'); - for (var i = 0; i < dts.length; i++) { - ds[ds.length] = objects.declaration(dts[i], o); - } - - o.getStylesheet = function () { - return stsh || null; - }; - o.getMediaQueryList = function () { - return mql || null; - }; - o.getSelectors = function () { - return ss; - }; - o.getSelectorText = function () { - return st; - }; - o.getDeclarations = function () { - return ds; - }; - o.getPropertyValue = function (n) { - for (var i = 0; i < ds.length; i++) { - if (ds[i].getProperty() === n) { - return ds[i].getValue(); - } - } - return null; - }; - return o; - }, - - declaration: function (s, r) { - var idx = s.indexOf(':'); - var p = s.substring(0, idx); - var v = s.substring(idx + 1); - return { - getRule: function () { - return r || null; - }, - getProperty: function () { - return p; - }, - getValue: function () { - return v; - } - }; - } - }; - - var parseText = function (el) { - if (typeof el.cssHelperText !== 'string') { - return; - } - var o = { - stylesheet: null, - mediaQueryLists: [], - rules: [], - selectors: {}, - declarations: [], - properties: {} - }; - - // build stylesheet object - var stsh = o.stylesheet = objects.stylesheet(el); - - // collect media query lists - var mqls = o.mediaQueryLists = stsh.getMediaQueryLists(); - - // collect all rules - var ors = o.rules = stsh.getRules(); - - // collect all selectors - var oss = o.selectors; - var collectSelectors = function (r) { - var ss = r.getSelectors(); - for (var i = 0; i < ss.length; i++) { - var n = ss[i]; - if (!oss[n]) { - oss[n] = []; - } - oss[n][oss[n].length] = r; - } - }; - for (var i = 0; i < ors.length; i++) { - collectSelectors(ors[i]); - } - - // collect all declarations - var ods = o.declarations; - for (i = 0; i < ors.length; i++) { - ods = o.declarations = ods.concat(ors[i].getDeclarations()); - } - - // collect all properties - var ops = o.properties; - for (i = 0; i < ods.length; i++) { - var n = ods[i].getProperty(); - if (!ops[n]) { - ops[n] = []; - } - ops[n][ops[n].length] = ods[i]; - } - - el.cssHelperParsed = o; - parsed[parsed.length] = el; - return o; - }; - - var parseEmbedded = function (el, s) { - return; - // This function doesn't work because of a bug in IE, where innerHTML gives us parsed css instead of raw literal. - el.cssHelperText = sanitize(s || el.innerHTML); - return parseText(el); - }; - - var parse = function () { - parsing = true; - parsed = []; - var linked = []; - var finish = function () { - for (var i = 0; i < linked.length; i++) { - parseText(linked[i]); - } - var styles = document.getElementsByTagName('style'); - for (i = 0; i < styles.length; i++) { - parseEmbedded(styles[i]); - } - parsing = false; - ready(); - }; - var links = document.getElementsByTagName('link'); - for (var i = 0; i < links.length; i++) { - var link = links[i]; - if (link.getAttribute('rel').indexOf('style') > -1 && link.href && link.href.length !== 0 && !link.disabled) { - linked[linked.length] = link; - } - } - if (linked.length > 0) { - var c = 0; - var checkForFinish = function () { - c++; - if (c === linked.length) { // parse in right order, so after last link is read - finish(); - } - }; - var processLink = function (link) { - var href = link.href; - requestText(href, function (text) { - // fix url's - text = sanitize(text).replace(regExp.RELATIVE_URLS, 'url(' + href.substring(0, href.lastIndexOf('/')) + '/$1)'); - link.cssHelperText = text; - checkForFinish(); - }, checkForFinish); - }; - for (i = 0; i < linked.length; i++) { - processLink(linked[i]); - } - } - else { - finish(); - } - }; - - var types = { - stylesheets: 'array', - mediaQueryLists: 'array', - rules: 'array', - selectors: 'object', - declarations: 'array', - properties: 'object' - }; - - var collections = { - stylesheets: null, - mediaQueryLists: null, - rules: null, - selectors: null, - declarations: null, - properties: null - }; - - var addToCollection = function (name, v) { - if (collections[name] !== null) { - if (types[name] === 'array') { - return (collections[name] = collections[name].concat(v)); - } - else { - var c = collections[name]; - for (var n in v) { - if (v.hasOwnProperty(n)) { - if (!c[n]) { - c[n] = v[n]; - } - else { - c[n] = c[n].concat(v[n]); - } - } - } - return c; - } - } - }; - - var collect = function (name) { - collections[name] = (types[name] === 'array') ? [] : {}; - for (var i = 0; i < parsed.length; i++) { - var pname = name === 'stylesheets' ? 'stylesheet' : name; // the exception - addToCollection(name, parsed[i].cssHelperParsed[pname]); - } - return collections[name]; - }; - - // viewport size - var getViewportSize = function (d) { - if (typeof window.innerWidth != 'undefined') { - return window['inner' + d]; - } - else if (typeof document.documentElement !== 'undefined' - && typeof document.documentElement.clientWidth !== 'undefined' - && document.documentElement.clientWidth != 0) { - return document.documentElement['client' + d]; - } - }; - - // public static functions - return { - addStyle: function (s, mediaTypes, process) { - var el = document.createElement('style'); - el.setAttribute('type', 'text/css'); - if (mediaTypes && mediaTypes.length > 0) { - el.setAttribute('media', mediaTypes.join(',')); - } - document.getElementsByTagName('head')[0].appendChild(el); - if (el.styleSheet) { // IE - el.styleSheet.cssText = s; - } - else { - el.appendChild(document.createTextNode(s)); - } - el.addedWithCssHelper = true; - if (typeof process === 'undefined' || process === true) { - cssHelper.parsed(function (parsed) { - var o = parseEmbedded(el, s); - for (var n in o) { - if (o.hasOwnProperty(n)) { - addToCollection(n, o[n]); - } - } - broadcast('newStyleParsed', el); - }); - } - else { - el.parsingDisallowed = true; - } - return el; - }, - - removeStyle: function (el) { - return el.parentNode.removeChild(el); - }, - - parsed: function (fn) { - if (parsing) { - wait(fn); - } - else { - if (typeof parsed !== 'undefined') { - if (typeof fn === 'function') { - fn(parsed); - } - } - else { - wait(fn); - parse(); - } - } - }, - - stylesheets: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.stylesheets || collect('stylesheets')); - }); - }, - - mediaQueryLists: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.mediaQueryLists || collect('mediaQueryLists')); - }); - }, - - rules: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.rules || collect('rules')); - }); - }, - - selectors: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.selectors || collect('selectors')); - }); - }, - - declarations: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.declarations || collect('declarations')); - }); - }, - - properties: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.properties || collect('properties')); - }); - }, - - broadcast: broadcast, - - addListener: function (n, fn) { // in case n is 'styleadd': added function is called everytime style is added and parsed - if (typeof fn === 'function') { - if (!events[n]) { - events[n] = { - listeners: [] - }; - } - events[n].listeners[events[n].listeners.length] = fn; - } - }, - - removeListener: function (n, fn) { - if (typeof fn === 'function' && events[n]) { - var ls = events[n].listeners; - for (var i = 0; i < ls.length; i++) { - if (ls[i] === fn) { - ls.splice(i, 1); - i -= 1; - } - } - } - }, - - getViewportWidth: function () { - return getViewportSize('Width'); - }, - - getViewportHeight: function () { - return getViewportSize('Height'); - } - }; -}(); - - - -// function to test and apply parsed media queries against browser capabilities -domReady(function enableCssMediaQueries() { - var meter; - - var regExp = { - LENGTH_UNIT: /[0-9]+(em|ex|px|in|cm|mm|pt|pc)$/, - RESOLUTION_UNIT: /[0-9]+(dpi|dpcm)$/, - ASPECT_RATIO: /^[0-9]+\/[0-9]+$/, - ABSOLUTE_VALUE: /^[0-9]*(\.[0-9]+)*$/ - }; - - var styles = []; - - var nativeSupport = function () { - // check support for media queries - var id = 'css3-mediaqueries-test'; - var el = document.createElement('div'); - el.id = id; - var style = cssHelper.addStyle('@media all and (width) { #' + id + - ' { width: 1px !important; } }', [], false); // false means don't parse this temp style - document.body.appendChild(el); - var ret = el.offsetWidth === 1; - style.parentNode.removeChild(style); - el.parentNode.removeChild(el); - nativeSupport = function () { - return ret; - }; - return ret; - }; - - var createMeter = function () { // create measuring element - meter = document.createElement('div'); - meter.style.cssText = 'position:absolute;top:-9999em;left:-9999em;' + - 'margin:0;border:none;padding:0;width:1em;font-size:1em;'; // cssText is needed for IE, works for the others - document.body.appendChild(meter); - // meter must have browser default font size of 16px - if (meter.offsetWidth !== 16) { - meter.style.fontSize = 16 / meter.offsetWidth + 'em'; - } - meter.style.width = ''; - }; - - var measure = function (value) { - meter.style.width = value; - var amount = meter.offsetWidth; - meter.style.width = ''; - return amount; - }; - - var testMediaFeature = function (feature, value) { - // non-testable features: monochrome|min-monochrome|max-monochrome|scan|grid - var l = feature.length; - var min = (feature.substring(0, 4) === 'min-'); - var max = (!min && feature.substring(0, 4) === 'max-'); - - if (value !== null) { // determine value type and parse to usable amount - var valueType; - var amount; - if (regExp.LENGTH_UNIT.exec(value)) { - valueType = 'length'; - amount = measure(value); - } - else if (regExp.RESOLUTION_UNIT.exec(value)) { - valueType = 'resolution'; - amount = parseInt(value, 10); - var unit = value.substring((amount + '').length); - } - else if (regExp.ASPECT_RATIO.exec(value)) { - valueType = 'aspect-ratio'; - amount = value.split('/'); - } - else if (regExp.ABSOLUTE_VALUE) { - valueType = 'absolute'; - amount = value; - } - else { - valueType = 'unknown'; - } - } - - var width, height; - if ('device-width' === feature.substring(l - 12, l)) { // screen width - width = screen.width; - if (value !== null) { - if (valueType === 'length') { - return ((min && width >= amount) || (max && width < amount) || (!min && !max && width === amount)); - } - else { - return false; - } - } - else { // test width without value - return width > 0; - } - } - else if ('device-height' === feature.substring(l - 13, l)) { // screen height - height = screen.height; - if (value !== null) { - if (valueType === 'length') { - return ((min && height >= amount) || (max && height < amount) || (!min && !max && height === amount)); - } - else { - return false; - } - } - else { // test height without value - return height > 0; - } - } - else if ('width' === feature.substring(l - 5, l)) { // viewport width - width = document.documentElement.clientWidth || document.body.clientWidth; // the latter for IE quirks mode - if (value !== null) { - if (valueType === 'length') { - return ((min && width >= amount) || (max && width < amount) || (!min && !max && width === amount)); - } - else { - return false; - } - } - else { // test width without value - return width > 0; - } - } - else if ('height' === feature.substring(l - 6, l)) { // viewport height - height = document.documentElement.clientHeight || document.body.clientHeight; // the latter for IE quirks mode - if (value !== null) { - if (valueType === 'length') { - return ((min && height >= amount) || (max && height < amount) || (!min && !max && height === amount)); - } - else { - return false; - } - } - else { // test height without value - return height > 0; - } - } - else if ('device-aspect-ratio' === feature.substring(l - 19, l)) { // screen aspect ratio - return valueType === 'aspect-ratio' && screen.width * amount[1] === screen.height * amount[0]; - } - else if ('color-index' === feature.substring(l - 11, l)) { // number of colors - var colors = Math.pow(2, screen.colorDepth); - if (value !== null) { - if (valueType === 'absolute') { - return ((min && colors >= amount) || (max && colors < amount) || (!min && !max && colors === amount)); - } - else { - return false; - } - } - else { // test height without value - return colors > 0; - } - } - else if ('color' === feature.substring(l - 5, l)) { // bits per color component - var color = screen.colorDepth; - if (value !== null) { - if (valueType === 'absolute') { - return ((min && color >= amount) || (max && color < amount) || (!min && !max && color === amount)); - } - else { - return false; - } - } - else { // test height without value - return color > 0; - } - } - else if ('resolution' === feature.substring(l - 10, l)) { - var res; - if (unit === 'dpcm') { - res = measure('1cm'); - } - else { - res = measure('1in'); - } - if (value !== null) { - if (valueType === 'resolution') { - return ((min && res >= amount) || (max && res < amount) || (!min && !max && res === amount)); - } - else { - return false; - } - } - else { // test height without value - return res > 0; - } - } - else { - return false; - } - }; - - var testMediaQuery = function (mq) { - var test = mq.getValid(); - var expressions = mq.getExpressions(); - var l = expressions.length; - if (l > 0) { - for (var i = 0; i < l && test; i++) { - test = testMediaFeature(expressions[i].mediaFeature, expressions[i].value); - } - var not = mq.getNot(); - return (test && !not || not && !test); - } - return test; - }; - - var testMediaQueryList = function (mql, ts) { - // ts is null or an array with any media type but 'all'. - var mqs = mql.getMediaQueries(); - var t = {}; - for (var i = 0; i < mqs.length; i++) { - var type = mqs[i].getMediaType(); - if (mqs[i].getExpressions().length === 0) { - continue; - // TODO: Browser check! Assuming old browsers do apply the bare media types, even in a list with media queries. - } - var typeAllowed = true; - if (type !== 'all' && ts && ts.length > 0) { - typeAllowed = false; - for (var j = 0; j < ts.length; j++) { - if (ts[j] === type) { - typeAllowed = true; - } - } - } - if (typeAllowed && testMediaQuery(mqs[i])) { - t[type] = true; - } - } - var s = [], c = 0; - for (var n in t) { - if (t.hasOwnProperty(n)) { - if (c > 0) { - s[c++] = ','; - } - s[c++] = n; - } - } - if (s.length > 0) { - styles[styles.length] = cssHelper.addStyle('@media ' + s.join('') + '{' + mql.getCssText() + '}', ts, false); - } - }; - - var testMediaQueryLists = function (mqls, ts) { - for (var i = 0; i < mqls.length; i++) { - testMediaQueryList(mqls[i], ts); - } - }; - - var testStylesheet = function (stsh) { - var amqs = stsh.getAttrMediaQueries(); - var allPassed = false; - var t = {}; - for (var i = 0; i < amqs.length; i++) { - if (testMediaQuery(amqs[i])) { - t[amqs[i].getMediaType()] = amqs[i].getExpressions().length > 0; - } - } - var ts = [], tswe = []; - for (var n in t) { - if (t.hasOwnProperty(n)) { - ts[ts.length] = n; - if (t[n]) { - tswe[tswe.length] = n - } - if (n === 'all') { - allPassed = true; - } - } - } - if (tswe.length > 0) { // types with query expressions that passed the test - styles[styles.length] = cssHelper.addStyle(stsh.getCssText(), tswe, false); - } - var mqls = stsh.getMediaQueryLists(); - if (allPassed) { - // If 'all' in media attribute passed the test, then test all @media types in linked CSS and create style with those types. - testMediaQueryLists(mqls); - } - else { - // Or else, test only media attribute types that passed the test and also 'all'. - // For positive '@media all', create style with attribute types that passed their test. - testMediaQueryLists(mqls, ts); - } - }; - - var testStylesheets = function (stshs) { - for (var i = 0; i < stshs.length; i++) { - testStylesheet(stshs[i]); - } - if (ua.ie) { - // force repaint in IE - document.documentElement.style.display = 'block'; - setTimeout(function () { - document.documentElement.style.display = ''; - }, 0); - // delay broadcast somewhat for IE - setTimeout(function () { - cssHelper.broadcast('cssMediaQueriesTested'); - }, 100); - } - else { - cssHelper.broadcast('cssMediaQueriesTested'); - } - }; - - var test = function () { - for (var i = 0; i < styles.length; i++) { - cssHelper.removeStyle(styles[i]); - } - styles = []; - cssHelper.stylesheets(testStylesheets); - }; - - var scrollbarWidth = 0; - var checkForResize = function () { - var cvpw = cssHelper.getViewportWidth(); - var cvph = cssHelper.getViewportHeight(); - - // determine scrollbar width in IE, see resizeHandler - if (ua.ie) { - var el = document.createElement('div'); - el.style.position = 'absolute'; - el.style.top = '-9999em'; - el.style.overflow = 'scroll'; - document.body.appendChild(el); - scrollbarWidth = el.offsetWidth - el.clientWidth; - document.body.removeChild(el); - } - - var timer; - var resizeHandler = function () { - var vpw = cssHelper.getViewportWidth(); - var vph = cssHelper.getViewportHeight(); - // check whether vp size has really changed, because IE also triggers resize event when body size changes - // 20px allowance to accomodate short appearance of scrollbars in IE in some cases - if (Math.abs(vpw - cvpw) > scrollbarWidth || Math.abs(vph - cvph) > scrollbarWidth) { - cvpw = vpw; - cvph = vph; - clearTimeout(timer); - timer = setTimeout(function () { - if (!nativeSupport()) { - test(); - } - else { - cssHelper.broadcast('cssMediaQueriesTested'); - } - }, 500); - } - }; - - window.onresize = function () { - var x = window.onresize || function () {}; // save original - return function () { - x(); - resizeHandler(); - }; - }(); - }; - - // prevent jumping of layout by hiding everything before painting <body> - var docEl = document.documentElement; - docEl.style.marginLeft = '-32767px'; - - // make sure it comes back after a while - setTimeout(function () { - docEl.style.marginLeft = ''; - }, 5000); - - return function () { - if (!nativeSupport()) { // if browser doesn't support media queries - cssHelper.addListener('newStyleParsed', function (el) { - testStylesheet(el.cssHelperParsed.stylesheet); - }); - // return visibility after media queries are tested - cssHelper.addListener('cssMediaQueriesTested', function () { - // force repaint in IE by changing width - if (ua.ie) { - docEl.style.width = '1px'; - } - setTimeout(function () { - docEl.style.width = ''; // undo width - docEl.style.marginLeft = ''; // undo hide - }, 0); - // remove this listener to prevent following execution - cssHelper.removeListener('cssMediaQueriesTested', arguments.callee); - }); - createMeter(); - test(); - } - else { - docEl.style.marginLeft = ''; // undo visibility hidden - } - checkForResize(); - }; -}()); - - -// bonus: hotfix for IE6 SP1 (bug KB823727) -try { - document.execCommand('BackgroundImageCache', false, true); -} catch (e) {} diff --git a/public/_static/sidebar.js b/public/_static/sidebar.js deleted file mode 100644 index 657f8be523d9347a131f6cd79399bec5aaa872b5..0000000000000000000000000000000000000000 --- a/public/_static/sidebar.js +++ /dev/null @@ -1,159 +0,0 @@ -/* - * sidebar.js - * ~~~~~~~~~~ - * - * This script makes the Sphinx sidebar collapsible. - * - * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds - * in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton - * used to collapse and expand the sidebar. - * - * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden - * and the width of the sidebar and the margin-left of the document - * are decreased. When the sidebar is expanded the opposite happens. - * This script saves a per-browser/per-session cookie used to - * remember the position of the sidebar among the pages. - * Once the browser is closed the cookie is deleted and the position - * reset to the default (expanded). - * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -$(function() { - - - - - - - - - // global elements used by the functions. - // the 'sidebarbutton' element is defined as global after its - // creation, in the add_sidebar_button function - var bodywrapper = $('.bodywrapper'); - var sidebar = $('.sphinxsidebar'); - var sidebarwrapper = $('.sphinxsidebarwrapper'); - - // for some reason, the document has no sidebar; do not run into errors - if (!sidebar.length) return; - - // original margin-left of the bodywrapper and width of the sidebar - // with the sidebar expanded - var bw_margin_expanded = bodywrapper.css('margin-left'); - var ssb_width_expanded = sidebar.width(); - - // margin-left of the bodywrapper and width of the sidebar - // with the sidebar collapsed - var bw_margin_collapsed = '.8em'; - var ssb_width_collapsed = '.8em'; - - // colors used by the current theme - var dark_color = $('.related').css('background-color'); - var light_color = $('.document').css('background-color'); - - function sidebar_is_collapsed() { - return sidebarwrapper.is(':not(:visible)'); - } - - function toggle_sidebar() { - if (sidebar_is_collapsed()) - expand_sidebar(); - else - collapse_sidebar(); - } - - function collapse_sidebar() { - sidebarwrapper.hide(); - sidebar.css('width', ssb_width_collapsed); - bodywrapper.css('margin-left', bw_margin_collapsed); - sidebarbutton.css({ - 'margin-left': '0', - 'height': bodywrapper.height() - }); - sidebarbutton.find('span').text('»'); - sidebarbutton.attr('title', _('Expand sidebar')); - document.cookie = 'sidebar=collapsed'; - } - - function expand_sidebar() { - bodywrapper.css('margin-left', bw_margin_expanded); - sidebar.css('width', ssb_width_expanded); - sidebarwrapper.show(); - sidebarbutton.css({ - 'margin-left': ssb_width_expanded-12, - 'height': bodywrapper.height() - }); - sidebarbutton.find('span').text('«'); - sidebarbutton.attr('title', _('Collapse sidebar')); - document.cookie = 'sidebar=expanded'; - } - - function add_sidebar_button() { - sidebarwrapper.css({ - 'float': 'left', - 'margin-right': '0', - 'width': ssb_width_expanded - 28 - }); - // create the button - sidebar.append( - '<div id="sidebarbutton"><span>«</span></div>' - ); - var sidebarbutton = $('#sidebarbutton'); - light_color = sidebarbutton.css('background-color'); - // find the height of the viewport to center the '<<' in the page - var viewport_height; - if (window.innerHeight) - viewport_height = window.innerHeight; - else - viewport_height = $(window).height(); - sidebarbutton.find('span').css({ - 'display': 'block', - 'margin-top': (viewport_height - sidebar.position().top - 20) / 2 - }); - - sidebarbutton.click(toggle_sidebar); - sidebarbutton.attr('title', _('Collapse sidebar')); - sidebarbutton.css({ - 'color': '#FFFFFF', - 'border-left': '1px solid ' + dark_color, - 'font-size': '1.2em', - 'cursor': 'pointer', - 'height': bodywrapper.height(), - 'padding-top': '1px', - 'margin-left': ssb_width_expanded - 12 - }); - - sidebarbutton.hover( - function () { - $(this).css('background-color', dark_color); - }, - function () { - $(this).css('background-color', light_color); - } - ); - } - - function set_position_from_cookie() { - if (!document.cookie) - return; - var items = document.cookie.split(';'); - for(var k=0; k<items.length; k++) { - var key_val = items[k].split('='); - var key = key_val[0].replace(/ /, ""); // strip leading spaces - if (key == 'sidebar') { - var value = key_val[1]; - if ((value == 'collapsed') && (!sidebar_is_collapsed())) - collapse_sidebar(); - else if ((value == 'expanded') && (sidebar_is_collapsed())) - expand_sidebar(); - } - } - } - - add_sidebar_button(); - var sidebarbutton = $('#sidebarbutton'); - set_position_from_cookie(); -}); \ No newline at end of file diff --git a/public/genindex.html b/public/genindex.html index 1e2814a43367f3f91a13b56f99cc40d2311d97a6..a36aeebe725209c6247072beda87796a27fae559 100644 --- a/public/genindex.html +++ b/public/genindex.html @@ -82,9 +82,9 @@ <ul> -<li class="toctree-l1"><a class="reference internal" href="page0.html">Premiere page</a></li> -<li class="toctree-l1"><a class="reference internal" href="page1.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> -<li class="toctree-l1"><a class="reference internal" href="page2.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="Ohmpi.html">OhmPi project</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_01.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_02.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> </ul> diff --git a/public/index.html b/public/index.html index c623ed220b0f490cd058b4d1565b6ac48224e28e..a6f0bead716a16397ad7ed42b71cc7cf12e50b7e 100644 --- a/public/index.html +++ b/public/index.html @@ -37,7 +37,7 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> - <link rel="next" title="Premiere page" href="page0.html" /> + <link rel="next" title="OhmPi project" href="Ohmpi.html" /> </head> <body class="wy-body-for-nav"> @@ -83,9 +83,9 @@ <ul> -<li class="toctree-l1"><a class="reference internal" href="page0.html">Premiere page</a></li> -<li class="toctree-l1"><a class="reference internal" href="page1.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> -<li class="toctree-l1"><a class="reference internal" href="page2.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="Ohmpi.html">OhmPi project</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_01.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_02.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> </ul> @@ -160,7 +160,7 @@ <dd class="field-odd"><p>open hardware resistivity-meter</p> </dd> <dt class="field-even">Date</dt> -<dd class="field-even"><p>Dec 18, 2020</p> +<dd class="field-even"><p>Dec 21, 2020</p> </dd> <dt class="field-odd">Date start</dt> <dd class="field-odd"><p>July 2016</p> @@ -188,30 +188,30 @@ <p>Contents:</p> <div class="toctree-wrapper compound"> <ul> -<li class="toctree-l1"><a class="reference internal" href="page0.html">Premiere page</a><ul> -<li class="toctree-l2"><a class="reference internal" href="page0.html#ohmpi-project"><strong>OhmPi project</strong></a></li> +<li class="toctree-l1"><a class="reference internal" href="Ohmpi.html">OhmPi project</a><ul> +<li class="toctree-l2"><a class="reference internal" href="Ohmpi.html#partenaires"><strong>Partenaires</strong></a></li> </ul> </li> -<li class="toctree-l1"><a class="reference internal" href="page1.html">OhmPi V 1.01 (limited to 32 electrodes)</a><ul> -<li class="toctree-l2"><a class="reference internal" href="page1.html#the-philosophy-of-ohmpi">The philosophy of Ohmpi</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#technical-data">Technical data</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#raspberry-pi-configuration">Raspberry Pi configuration</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#assembly-of-the-measuring-current-injection-cards-and-connection-with-the-raspberry-pi">Assembly of the measuring/current injection cards, and connection with the Raspberry Pi</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#multiplexer-implentation">Multiplexer implentation</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#electrode-connection">Electrode connection</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#operating-instruction">Operating instruction</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#complete-list-of-components">Complete list of components</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_01.html">OhmPi V 1.01 (limited to 32 electrodes)</a><ul> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#the-philosophy-of-ohmpi">The philosophy of Ohmpi</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#technical-data">Technical data</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#raspberry-pi-configuration">Raspberry Pi configuration</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#assembly-of-the-measuring-current-injection-cards-and-connection-with-the-raspberry-pi">Assembly of the measuring/current injection cards, and connection with the Raspberry Pi</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#multiplexer-implentation">Multiplexer implentation</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#electrode-connection">Electrode connection</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#operating-instruction">Operating instruction</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#complete-list-of-components">Complete list of components</a></li> </ul> </li> -<li class="toctree-l1"><a class="reference internal" href="page2.html">OhmPi V 1.02 (limited to 32 electrodes)</a><ul> -<li class="toctree-l2"><a class="reference internal" href="page2.html#the-philosophy-of-ohmpi">The philosophy of Ohmpi</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#technical-data">Technical data</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#raspberry-pi-configuration">Raspberry Pi configuration</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#assembly-of-the-measuring-current-injection-cards-and-connection-with-the-raspberry-pi">Assembly of the measuring/current injection cards, and connection with the Raspberry Pi</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#multiplexer-implentation">Multiplexer implentation</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#electrode-connection">Electrode connection</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#operating-instruction">Operating instruction</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#complete-list-of-components">Complete list of components</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_02.html">OhmPi V 1.02 (limited to 32 electrodes)</a><ul> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#the-philosophy-of-ohmpi">The philosophy of Ohmpi</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#technical-data">Technical data</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#raspberry-pi-configuration">Raspberry Pi configuration</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#assembly-of-the-measuring-current-injection-cards-and-connection-with-the-raspberry-pi">Assembly of the measuring/current injection cards, and connection with the Raspberry Pi</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#multiplexer-implentation">Multiplexer implentation</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#electrode-connection">Electrode connection</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#operating-instruction">Operating instruction</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#complete-list-of-components">Complete list of components</a></li> </ul> </li> </ul> @@ -226,7 +226,7 @@ <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> - <a href="page0.html" class="btn btn-neutral float-right" title="Premiere page" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + <a href="Ohmpi.html" class="btn btn-neutral float-right" title="OhmPi project" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> </div> diff --git a/public/objects.inv b/public/objects.inv index 04815e6243a226c03bb189a7cf544cb2b46666fa..24b41f4783bf0e931ce294070d61de4d320b133a 100644 Binary files a/public/objects.inv and b/public/objects.inv differ diff --git a/public/search.html b/public/search.html index 5a13e07f2b04faf65a4a926694a0ef88d3311704..e7bba42211069dcc0ef77a3fcd07538eb9a0d4d0 100644 --- a/public/search.html +++ b/public/search.html @@ -84,9 +84,9 @@ <ul> -<li class="toctree-l1"><a class="reference internal" href="page0.html">Premiere page</a></li> -<li class="toctree-l1"><a class="reference internal" href="page1.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> -<li class="toctree-l1"><a class="reference internal" href="page2.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="Ohmpi.html">OhmPi project</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_01.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_02.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> </ul> diff --git a/public/searchindex.js b/public/searchindex.js index a7e5aa7e30f451e17cced06e031a0b2301275891..97ec4d7972e224644f214529682a81c1eadc925f 100644 --- a/public/searchindex.js +++ b/public/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["index","page0","page1","page2"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["index.rst","page0.rst","page1.rst","page2.rst"],objects:{},objnames:{},objtypes:{},terms:{"100nf":3,"10nf":[],"10v":3,"12v":[2,3],"1x0":[2,3],"1x1":[2,3],"1x10":[2,3],"24v":3,"400px":[],"50vdc":3,"5vcc":[2,3],"5vdc":[2,3],"7ah":[2,3],"800px":[],"ao\u00fbt":1,"case":[2,3],"cr\u00e9er":[],"d\u00e9mo":[],"esp\u00e8r":[],"final":[2,3],"function":[1,2,3],"h\u00e9l\u00e8ne":[0,1],"install\u00e9":[],"justifi\u00e9":[],"mm\u00b2":[2,3],"nec\u00e9ssair":[],"new":[2,3],"orl\u00e9an":1,"param\u00e8tr":[],"pr\u00e9sent":[],"pr\u00e9sentat":[],"premi\u00e8r":[],"public":[2,3],"r\u00e9mi":[0,1],"r\u00e9sistanc":[],"return":[2,3],"switch":[2,3],"universit\u00e9":1,"vid\u00e9o":[2,3],ADS:[2,3],CMS:[2,3],For:[2,3],IDE:[],IGE:1,Its:[2,3],The:0,These:[2,3],With:[2,3],abmn:[2,3],abov:[2,3],acc:[2,3],access:[2,3],accord:[2,3],accur:[2,3],accuraci:[2,3],acid:[2,3],activ:[],actual:[2,3],adafruit:[2,3],adapt:[2,3],adc:[2,3],add:[2,3],added:[2,3],adding:[2,3],addit:[2,3],address:[2,3],adjust:[2,3],administr:[],ads1115:[2,3],ads115:[2,3],ads1x15:[2,3],after:[2,3],albatross:[],align:[],all:[2,3],allow:[1,2,3],alp:1,also:[2,3],alt:[],altern:[2,3],amp:[2,3],amplifi:[2,3],analog:[2,3],angl:[],ani:[2,3],anoth:[2,3],aop:[],appear:[2,3],appli:[2,3],applic:1,apt:[2,3],arduino:2,arm:2,arrai:[2,3],articl:[2,3],asler:[2,3],assembl:0,assist:[2,3],associ:1,attent:[2,3],attribut:[2,3],aug:[],author:[0,1,2,3],automat:[1,2,3],automobil:[2,3],avail:[2,3],avon:[],avr:2,bank:[2,3],barbeau:[],base:[2,3],basic:1,batteri:[2,3],been:[2,3],befor:[2,3],behavior:[2,3],being:[2,3],below:[2,3],between:[2,3],bin:[2,3],bit:[2,3],black:[2,3],blinka:[2,3],block:[2,3],blue:[2,3],bluetext:[],board:[],bodytext:[],bone:[],boot:[2,3],both:[2,3],bottom:[2,3],bought:[2,3],bridg:[2,3],bug:2,build:[2,3],button:[2,3],c320c104k1:3,c_1:[],c_2:[],cabl:[2,3],calcul:[2,3],calibr:[2,3],call:1,can:[2,3],canal:2,cap:[2,3],capac:[2,3],capacitor:3,caption:[],car:2,card:0,carri:[2,3],caus:[2,3],ceci:[],cedex:1,cela:[],center:[],ceram:3,chacun:[],channel:[2,3],characterist:[2,3],charg:[2,3],check:[2,3],chosen:[2,3],christoph:[],circuit:[2,3],circuitpython:[2,3],circul:[2,3],clean:[2,3],clement:[0,1],click:[2,3],close:[2,3],code:[2,3],coef_p0:[2,3],coef_p1:[2,3],coef_p2:[2,3],coef_p3:[2,3],coeff:[2,3],coeff_:[],coeff_p0:[],coeff_p1:[],coeff_p3:[],coeff_p_:[],coeffici:[2,3],cokela:[],com:[2,3],command:[2,3],commerci:[2,3],common:[2,3],commun:1,complet:0,compon:0,comput:[2,3],conduct:[2,3],config:[2,3],configur:0,congratul:[2,3],connect:0,connector:[2,3],consequ:[2,3],consist:[2,3],constitut:[2,3],construct:[2,3],consult:[],consumpt:[2,3],contact:[2,3],contain:[2,3],content:0,control:[2,3],convers:[2,3],convert:[2,3],correct:[2,3],correspond:2,corrig:[],cos:[],cost:[1,2,3],could:[2,3],cpu:[2,3],creat:[2,3],creation:1,crimp:[2,3],crunchi:[],csv:[2,3],ctrl:[2,3],currenc:[],current:[0,1],damag:[2,3],dan:[],daniel:[],data:[0,1],date:[0,1,2,3],dcconvert:3,deactiv:[2,3],dec:0,decid:[2,3],decoupl:3,dedic:1,degre:[],delai:[2,3],deliv:[2,3],demo:[],depend:[2,3],des:[],describ:[2,3],design:[2,3],desktop:3,despit:[2,3],detail:2,dev:[2,3],develop:[0,1,2,3],developp:[],diagram:[2,3],differ:[2,3],digit:[2,3],din:[2,3],direct:[2,3],directli:[2,3],directori:[2,3],disconnect:[2,3],displai:[2,3],distanc:[2,3],disturb:[2,3],divid:[2,3],diviseur:[],dkfjshkdfh:[],doc:[],document:[1,2],doe:[],done:[2,3],down:[2,3],download:[2,3],dsp:2,dual:[2,3],duboi:[0,1],durat:[2,3],dure:[2,3],dzwb4:[2,3],e00122ff:1,each:[2,3],editor:[2,3],eiffel:1,either:[2,3],electr:1,electrod:[0,1],electron:[2,3],elsevi:1,emil:1,enabl:[2,3],end:[2,3],energ:[2,3],enough:[2,3],ensur:[2,3],enter:[2,3],entir:[2,3],environ:[2,3],environn:[],environnementshould:[2,3],equal:[2,3],equival:[2,3],eric:[],ert:[2,3],escap:[2,3],est:[],estim:[2,3],everyon:1,evolv:[2,3],exampl:[2,3],excess:[2,3],execut:[2,3],exist:[2,3],experi:[1,2,3],explain:2,export_path:3,extra:[2,3],failur:[2,3],fair:[],fargier:[0,1],fast:3,featur:[2,3],femal:[2,3],ferrul:[2,3],fewer:[2,3],ff10:1,fhac0002zxj:2,fichier:[],field:[2,3],fig:[2,3],figclass:[],figur:[2,3],file:[2,3],find:[2,3],first:[2,3],flexibl:1,florsch:[2,3],flow:[2,3],folder:[2,3],follow:[2,3],fonctionn:[],formul:[],forquet:[0,1],four:[],framework:[2,3],franc:1,frog:[],from:[2,3],full:[2,3],fulli:1,fuse:[2,3],gain:[2,3],ganc:[0,1],gannet:[],gather:[2,3],gener:[0,2,3],ger:1,get:[1,2,3],gitlab:[2,3],gnd:[2,3],gnu:[2,3],good:[],gpio:[2,3],grenobl:1,gro:1,ground:[2,3],gui:[2,3],guidelin:0,gustav:1,guyard:[0,1],h81k0bya:[2,3],h81k5bya:[2,3],had:[2,3],hand:[2,3],handl:[2,3],hardwar:[1,2,3],hardwareresist:[],hardwarex:1,has:[2,3],have:[2,3],hazard:[2,3],header:[2,3],hear:[2,3],height:[],help:[],here:3,high:[2,3],higher:3,holder:[2,3],hole:[2,3],home:[2,3],horizont:[2,3],hous:[2,3],how:[2,3],howev:[2,3],http:[2,3],ifsttar:1,illustr:[2,3],imag:1,imped:[2,3],implement:[],implent:0,improv:3,in1:[2,3],in2:[2,3],in3:[2,3],in4:[2,3],inastal:[],includ:[2,3],incom:[2,3],increas:[2,3],inde:[2,3],index:[],inform:[],inject:[0,1],injection_dur:[2,3],input:[2,3],inra:1,insert:[2,3],insid:[2,3],instal:[],instead:[2,3],instruct:0,instrument:[1,2,3],intens:[2,3],interfac:[2,3],interpret:[2,3],introduc:[2,3],introduct:[],introduir:[],invit:2,involv:1,ion:[2,3],iri:1,irstea:[2,3],its:[2,3],jason:3,journal:2,jpg:[],json:3,juillet:1,juli:0,julien:[0,1],just:3,justifi:[],kemet:3,keyboard:[2,3],kjsdfhksdgfjksdf:[],known:[2,3],kohm:[2,3],laboratori:[1,2,3],last:3,lastli:[2,3],latest:[2,3],lead:[2,3],leav:[2,3],length:[2,3],les:[],less:[2,3],let:[2,3],libatla:[2,3],librari:[2,3],lie:[2,3],lien:[],like:[],limit:0,line:[2,3],lineno:[],list:0,lithium:[2,3],littelfus:[2,3],littl:[2,3],littlefus:[],lm358an:[2,3],lm358n:[2,3],locat:[2,3],logger:[1,2,3],logo:[],logo_inra:[],logo_univ_gustav:[],low:[1,2,3],lr20:[2,3],lying:[2,3],lyon:1,made:[2,3],mai:[2,3],main:[2,3],make:[2,3],manag:[2,3],manual:[2,3],manufactur:[2,3],manuscript:[2,3],massembl:[],master:[2,3],mathrm:[],matur:0,maxdepth:[],maximum:[2,3],measur:[0,1],mechan:[2,3],meet:[2,3],mega:[2,3],menu:[2,3],met:[2,3],meter:[1,2,3],meterfeatur:1,micro:[2,3],mimic:[2,3],min:[2,3],miss:2,mm2:[2,3],model:[2,3],modif:[2,3],modifi:[2,3],modul:[2,3],mohm:[2,3],monitor:[2,3],moreov:[2,3],moscardi:[],mount:[2,3],mous:[2,3],multi:[2,3],multiplex:[0,1],multipli:[2,3],must:[2,3],mux:[2,3],n_k:[],name:[2,3],nano:[2,3],nb_electrod:[2,3],nbr_mea:[2,3],necessari:[2,3],need:[2,3],neg:[2,3],next:[2,3],nicola:[0,1],noob:[2,3],nopb:[2,3],normal:[2,3],note:[2,3],notr:[],nou:[],nov:[],now:[2,3],number:[2,3],numer:[2,3],numpi:[2,3],obtain:[2,3],offcial:0,offer:[2,3],officiel:[],offset:[],ohm:[2,3],ohmmet:[2,3],ohmpi:[],ohmpi_param:3,ohx:1,onc:[2,3],one:[2,3],onli:[],onto:[2,3],open:[1,2,3],oper:0,optim:[2,3],option:[2,3],order:[2,3],org:[],orient:3,osf:[2,3],other:[2,3],our:[2,3],out:[2,3],output:[2,3],ouvr:[],overh:3,packag:[],page0:[],page1:[],page:0,pai:[2,3],panda:[2,3],paramet:[],parent:[],parl:[],part:[2,3],parten:1,pat1l:3,path:[2,3],pcb:[2,3],per:[2,3],perform:[1,2,3],permut:[2,3],peu:[],philosophi:[0,1],pic:2,piec:[2,3],pin1:[],pin:[2,3],pip:[2,3],pitch:[2,3],place:[2,3],pleas:[2,3],plu:[],plug:[2,3],png:[],point:[2,3],polar:[2,3],pole:[2,3],pond:[],posit:[2,3],possibl:[2,3],potenti:[2,3],potentiomet:[2,3],pour:2,power:[2,3],practic:[2,3],pradal:[],precis:[2,3],prefer:[2,3],premier:0,prepar:[2,3],present:[1,2,3],press:[2,3],prevent:3,previous:[2,3],print:[2,3],pro:[2,3],procedur:[],produc:[2,3],program:[2,3],progress:[0,1],project:0,propos:[2,3],protocol:[2,3],provid:[1,2,3],publish:2,puls:[2,3],purpos:[2,3],pyhton3:[2,3],python3:[2,3],python:[],pythonid:[2,3],quadripol:[2,3],quadrupol:[2,3],quantiti:[2,3],que:[],r10:[2,3],r11:[2,3],r12:[2,3],r_ref:[2,3],rail:[2,3],rang:[2,3],rapberri:[],raspberri:0,raspberrypi:[],raspbian:[2,3],raspbian_vers:[],raspebrri:[2,3],readm:[2,3],recommend:[2,3],rectangl:[],red:[2,3],reduct:[2,3],ref:[],refer:[2,3],relai:[2,3],relat:[],releas:0,remain:[2,3],rememb:[2,3],remot:[2,3],repeat:[2,3],repetit:[2,3],replac:3,repositori:[2,3],repres:[2,3],requir:[2,3],research:0,resist:[0,1],resistor:[2,3],resolut:[2,3],respect:[2,3],result:[2,3],revers:[2,3],reversa:[1,2,3],rippl:[],robust:[1,2,3],role:[2,3],root:[2,3],rpi:[2,3],rro:1,run:[2,3],s_k:[],safeti:[2,3],sain:[2,3],sainsmart:[2,3],same:[2,3],samtec:[2,3],save:[2,3],scale:1,schema:[],schemat:[2,3],scienc:[2,3],scientif:1,screen:[2,3],screw:[2,3],search:[],second:[2,3],section:[2,3],see:[2,3],select:[2,3],sequenc:[2,3],sequence_delai:[2,3],seri:[2,3],serv:[2,3],set:[2,3],setp:3,setup:[2,3],sever:[2,3],shape:[],shield:[2,3],shortcut:[2,3],should:[2,3],show:[2,3],shown:[2,3],side:[],signal:[2,3],simpl:[2,3],simpli:[2,3],simultan:[2,3],singl:[2,3],site:[],skim:[],slightli:[],slope:[2,3],small:[1,2,3],smaller:[2,3],smart:[2,3],softwar:[2,3],soil:[2,3],solder:[2,3],solut:[2,3],some:[0,2,3],sound:[2,3],sourc:[1,2,3],specif:[2,3],specifi:[2,3],sphinx:[],spi:[2,3],squar:[],ssw:[2,3],stabl:[2,3],stack:[2,3],stainless:[2,3],start:[0,2,3],statu:[0,1],steel:[2,3],step:[2,3],stick:[],still:[2,3],storag:[2,3],strict:[2,3],strip:[2,3],strong:[2,3],stronger:[2,3],strongli:[2,3],stuck:[2,3],studi:[2,3],style:[],subject:[2,3],sudo:[2,3],suffici:[2,3],suggest:[2,3],suitabl:[2,3],sum:[2,3],sum_:[],suppli:[2,3],suppress:3,sur:[],sure:[2,3],surfac:1,system:[2,3],tab:[2,3],tabl:3,take:[],tape:[],target:0,task:[2,3],tata:[],technic:0,temperatur:[2,3],ten:[2,3],termin:[2,3],test:[2,3],tester:[],texa:[2,3],text:[],textcolor:[],than:[2,3],the9:[2,3],thei:[2,3],them:[2,3],therefor:[2,3],thevalid:[],thi:[1,2,3],thoma:[],thonni:[],thousand:[2,3],three:[2,3],through:[2,3],thu:[2,3],time:[2,3],toctre:[],togeth:[2,3],toler:3,took:[],tool:1,total:[2,3],toto:[],tourn:[],track:[2,3],traco:3,tracopow:3,treat:[],trn3:3,trn:3,trouv:[],tru:[2,3],turn:[2,3],tutori:0,two:[2,3],txt:[2,3],type:[2,3],typic:[2,3],under:[2,3],underconstruct:[],unexpectedli:[2,3],unit:[2,3],univ:1,unzip:[2,3],updat:1,upgrad:3,upping:[2,3],upw50b50rv:[2,3],usd:[],use:[2,3],used:[2,3],user:[0,2,3],using:[2,3],usr:[2,3],valeur:[],valid:[2,3],valu:[2,3],variou:[2,3],velleman:[2,3],venv:[2,3],veri:3,version:[2,3],vertic:[2,3],via:[2,3],villeurbann:1,virtual:[],vise:[],vivien:[0,1],vlide:[],voi:[],voici:[],voltag:[2,3],voltmet:[2,3],vou:[],wai:[2,3],want:3,watch:[2,3],weaker:2,websit:[2,3],weidmul:[2,3],welcom:1,well:[2,3],were:[2,3],when:[2,3],where:[2,3],which:[2,3],whose:[2,3],width:[],willing:1,window:[2,3],wire:[2,3],within:[2,3],without:[2,3],wjwzhv1v3pk:[2,3],would:[2,3],wouldn:[],wpm404:[2,3],write:[2,3],www:[2,3],x_n:[],yannick:[0,1],you:[2,3],your:[2,3],youtub:[2,3]},titles:["OHMPI: Open source and open hardware resitivity-meter","Premiere page","OhmPi V 1.01 (limited to 32 electrodes)","OhmPi V 1.02 (limited to 32 electrodes)"],titleterms:{IDE:[2,3],The:[2,3],activ:[2,3],assembl:[2,3],bienvenu:[],board:[2,3],card:[2,3],center:0,cett:[],cite:1,complet:[2,3],compon:[2,3],configur:[2,3],connect:[2,3],construct:[],current:[2,3],data:[2,3],delight:[],descript:[2,3],developp:[],document:0,electr:[2,3],electrod:[2,3],environn:[2,3],formul:[],four:[2,3],frist:[2,3],frozen:[],hardwar:0,imag:[],implement:[2,3],implent:[2,3],inastal:[],indic:[],initi:[2,3],inject:[2,3],instal:[2,3],instruct:[2,3],introduct:1,lien:[],limit:[2,3],list:[2,3],massembl:[],measur:[2,3],mesur:[2,3],meter:0,modif:[],multiplex:[2,3],ohmpi:[0,1,2,3],onli:[2,3],open:0,openalea:[],oper:[2,3],packag:[2,3],page:1,paramet:[2,3],philosophi:[2,3],preliminari:[2,3],premier:1,procedur:[2,3],project:1,python:[2,3],rapberri:[2,3],raspberri:[2,3],resist:[2,3],resit:0,run:[],second:[],sourc:0,startup:[2,3],step:[],summari:0,sur:[],tabl:2,technic:[2,3],text:[],thonni:[2,3],titl:2,virtual:[2,3],welcom:[]}}) \ No newline at end of file +Search.setIndex({docnames:["Ohmpi","V1_01","V1_02","index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["Ohmpi.rst","V1_01.rst","V1_02.rst","index.rst"],objects:{},objnames:{},objtypes:{},terms:{"100nf":2,"10v":2,"12v":[1,2],"1x0":[1,2],"1x1":[1,2],"1x10":[1,2],"24v":2,"50vdc":2,"5vcc":[1,2],"5vdc":[1,2],"7ah":[1,2],"ao\u00fbt":0,"case":[1,2],"final":[1,2],"function":[0,1,2],"h\u00e9l\u00e8ne":[0,3],"mm\u00b2":[1,2],"new":[1,2],"orl\u00e9an":0,"public":[1,2],"r\u00e9mi":[0,3],"return":[1,2],"switch":[1,2],"universit\u00e9":0,"vid\u00e9o":[1,2],ADS:[1,2],CMS:[1,2],For:[1,2],IGE:0,Its:[1,2],The:3,These:[1,2],With:[1,2],abmn:[1,2],abov:[1,2],acc:[1,2],access:[1,2],accord:[1,2],accur:[1,2],accuraci:[1,2],acid:[1,2],actual:[1,2],adafruit:[1,2],adapt:[1,2],adc:[1,2],add:[1,2],added:[1,2],adding:[1,2],addit:[1,2],address:[1,2],adjust:[1,2],ads1115:[1,2],ads115:[1,2],ads1x15:[1,2],after:[1,2],all:[1,2],allow:[0,1,2],alp:0,also:[1,2],altern:[1,2],amp:[1,2],amplifi:[1,2],analog:[1,2],ani:[1,2],anoth:[1,2],appear:[1,2],appli:[1,2],applic:0,apt:[1,2],arduino:1,arm:1,arrai:[1,2],articl:[1,2],asler:[1,2],assembl:3,assist:[1,2],associ:0,attent:[1,2],attribut:[1,2],author:[0,1,2,3],automat:[0,1,2],automobil:[1,2],avail:[1,2],avr:1,bank:[1,2],base:[1,2],basic:0,batteri:[1,2],been:[1,2],befor:[1,2],behavior:[1,2],being:[1,2],below:[1,2],between:[1,2],bin:[1,2],bit:[1,2],black:[1,2],blinka:[1,2],block:[1,2],blue:[1,2],boot:[1,2],both:[1,2],bottom:[1,2],bought:[1,2],bridg:[1,2],bug:1,build:[1,2],button:[1,2],c320c104k1:2,cabl:[1,2],calcul:[1,2],calibr:[1,2],call:0,can:[1,2],canal:1,cap:[1,2],capac:[1,2],capacitor:2,car:1,card:3,carri:[1,2],caus:[1,2],cedex:0,ceram:2,channel:[1,2],characterist:[1,2],charg:[1,2],check:[1,2],chosen:[1,2],circuit:[1,2],circuitpython:[1,2],circul:[1,2],clean:[1,2],clement:[0,3],click:[1,2],close:[1,2],code:[1,2],coef_p0:[1,2],coef_p1:[1,2],coef_p2:[1,2],coef_p3:[1,2],coeff:[1,2],coeffici:[1,2],com:[1,2],command:[1,2],commerci:[1,2],common:[1,2],commun:0,complet:3,compon:3,comput:[1,2],conduct:[1,2],config:[1,2],configur:3,congratul:[1,2],connect:3,connector:[1,2],consequ:[1,2],consist:[1,2],constitut:[1,2],construct:[1,2],consumpt:[1,2],contact:[1,2],contain:[1,2],content:3,control:[1,2],convers:[1,2],convert:[1,2],correct:[1,2],correspond:1,cost:[0,1,2],could:[1,2],cpu:[1,2],creat:[1,2],creation:0,crimp:[1,2],csv:[1,2],ctrl:[1,2],current:[0,3],damag:[1,2],data:[0,3],date:[0,1,2,3],dcconvert:2,deactiv:[1,2],dec:3,decid:[1,2],decoupl:2,dedic:0,delai:[1,2],deliv:[1,2],depend:[1,2],describ:[1,2],design:[1,2],desktop:2,despit:[1,2],detail:1,dev:[1,2],develop:[0,1,2,3],diagram:[1,2],differ:[1,2],digit:[1,2],din:[1,2],direct:[1,2],directli:[1,2],directori:[1,2],disconnect:[1,2],displai:[1,2],distanc:[1,2],disturb:[1,2],divid:[1,2],document:[0,1],done:[1,2],down:[1,2],download:[1,2],dsp:1,dual:[1,2],duboi:[0,3],durat:[1,2],dure:[1,2],dzwb4:[1,2],e00122ff:0,each:[1,2],editor:[1,2],eiffel:0,either:[1,2],electr:0,electrod:[0,3],electron:[1,2],elsevi:0,emil:0,enabl:[1,2],end:[1,2],energ:[1,2],enough:[1,2],ensur:[1,2],enter:[1,2],entir:[1,2],environ:[1,2],environnementshould:[1,2],equal:[1,2],equival:[1,2],ert:[1,2],escap:[1,2],estim:[1,2],everyon:0,evolv:[1,2],exampl:[1,2],excess:[1,2],execut:[1,2],exist:[1,2],experi:[0,1,2],explain:1,export_path:2,extra:[1,2],failur:[1,2],fargier:[0,3],fast:2,featur:[1,2],femal:[1,2],ferrul:[1,2],fewer:[1,2],ff10:0,fhac0002zxj:1,field:[1,2],fig:[1,2],figur:[1,2],file:[1,2],find:[1,2],first:[1,2],flexibl:0,florsch:[1,2],flow:[1,2],folder:[1,2],follow:[1,2],forquet:[0,3],framework:[1,2],franc:0,from:[1,2],full:[1,2],fulli:0,fuse:[1,2],gain:[1,2],ganc:[0,3],gather:[1,2],gener:[1,2,3],ger:0,get:[0,1,2],gitlab:[1,2],gnd:[1,2],gnu:[1,2],gpio:[1,2],grenobl:0,gro:0,ground:[1,2],gui:[1,2],guidelin:3,gustav:0,guyard:[0,3],h81k0bya:[1,2],h81k5bya:[1,2],had:[1,2],hand:[1,2],handl:[1,2],hardwar:[0,1,2],hardwarex:0,has:[1,2],have:[1,2],hazard:[1,2],header:[1,2],hear:[1,2],here:2,high:[1,2],higher:2,holder:[1,2],hole:[1,2],home:[1,2],horizont:[1,2],hous:[1,2],how:[1,2],howev:[1,2],http:[1,2],ifsttar:0,illustr:[1,2],imag:0,imped:[1,2],implent:3,improv:2,in1:[1,2],in2:[1,2],in3:[1,2],in4:[1,2],includ:[1,2],incom:[1,2],increas:[1,2],inde:[1,2],inject:[0,3],injection_dur:[1,2],input:[1,2],inra:0,insert:[1,2],insid:[1,2],instead:[1,2],instruct:3,instrument:[0,1,2],intens:[1,2],interfac:[1,2],interpret:[1,2],introduc:[1,2],invit:1,involv:0,ion:[1,2],iri:0,irstea:[1,2],its:[1,2],jason:2,journal:1,json:2,juillet:0,juli:3,julien:[0,3],just:2,kemet:2,keyboard:[1,2],known:[1,2],kohm:[1,2],laboratori:[0,1,2],last:2,lastli:[1,2],latest:[1,2],lead:[1,2],leav:[1,2],length:[1,2],less:[1,2],let:[1,2],libatla:[1,2],librari:[1,2],lie:[1,2],limit:3,line:[1,2],list:3,lithium:[1,2],littelfus:[1,2],littl:[1,2],lm358an:[1,2],lm358n:[1,2],locat:[1,2],logger:[0,1,2],low:[0,1,2],lr20:[1,2],lying:[1,2],lyon:0,made:[1,2],mai:[1,2],main:[1,2],make:[1,2],manag:[1,2],manual:[1,2],manufactur:[1,2],manuscript:[1,2],master:[1,2],matur:3,maximum:[1,2],measur:[0,3],mechan:[1,2],meet:[1,2],mega:[1,2],menu:[1,2],met:[1,2],meter:[0,1,2],meterfeatur:0,micro:[1,2],mimic:[1,2],min:[1,2],miss:1,mm2:[1,2],model:[1,2],modif:[1,2],modifi:[1,2],modul:[1,2],mohm:[1,2],monitor:[1,2],moreov:[1,2],mount:[1,2],mous:[1,2],multi:[1,2],multiplex:[0,3],multipli:[1,2],must:[1,2],mux:[1,2],name:[1,2],nano:[1,2],nb_electrod:[1,2],nbr_mea:[1,2],necessari:[1,2],need:[1,2],neg:[1,2],next:[1,2],nicola:[0,3],noob:[1,2],nopb:[1,2],normal:[1,2],note:[1,2],now:[1,2],number:[1,2],numer:[1,2],numpi:[1,2],obtain:[1,2],offcial:3,offer:[1,2],ohm:[1,2],ohmmet:[1,2],ohmpi_param:2,ohx:0,onc:[1,2],one:[1,2],onto:[1,2],open:[0,1,2],oper:3,optim:[1,2],option:[1,2],order:[1,2],orient:2,osf:[1,2],other:[1,2],our:[1,2],out:[1,2],output:[1,2],overh:2,pai:[1,2],panda:[1,2],part:[1,2],parten:0,partenair:3,pat1l:2,path:[1,2],pcb:[1,2],per:[1,2],perform:[0,1,2],permut:[1,2],philosophi:[0,3],pic:1,piec:[1,2],pin:[1,2],pip:[1,2],pitch:[1,2],place:[1,2],pleas:[1,2],plug:[1,2],point:[1,2],polar:[1,2],pole:[1,2],posit:[1,2],possibl:[1,2],potenti:[1,2],potentiomet:[1,2],pour:1,power:[1,2],practic:[1,2],precis:[1,2],prefer:[1,2],prepar:[1,2],present:[0,1,2],press:[1,2],prevent:2,previous:[1,2],print:[1,2],pro:[1,2],produc:[1,2],program:[1,2],progress:[0,3],project:3,propos:[1,2],protocol:[1,2],provid:[0,1,2],publish:1,puls:[1,2],purpos:[1,2],pyhton3:[1,2],python3:[1,2],pythonid:[1,2],quadripol:[1,2],quadrupol:[1,2],quantiti:[1,2],r10:[1,2],r11:[1,2],r12:[1,2],r_ref:[1,2],rail:[1,2],rang:[1,2],raspberri:3,raspbian:[1,2],raspebrri:[1,2],readm:[1,2],recommend:[1,2],red:[1,2],reduct:[1,2],refer:[1,2],relai:[1,2],releas:3,remain:[1,2],rememb:[1,2],remot:[1,2],repeat:[1,2],repetit:[1,2],replac:2,repositori:[1,2],repres:[1,2],requir:[1,2],research:3,resist:[0,3],resistor:[1,2],resolut:[1,2],respect:[1,2],result:[1,2],revers:[1,2],reversa:[0,1,2],robust:[0,1,2],role:[1,2],root:[1,2],rpi:[1,2],rro:0,run:[1,2],safeti:[1,2],sain:[1,2],sainsmart:[1,2],same:[1,2],samtec:[1,2],save:[1,2],scale:0,schemat:[1,2],scienc:[1,2],scientif:0,screen:[1,2],screw:[1,2],second:[1,2],section:[1,2],see:[1,2],select:[1,2],sequenc:[1,2],sequence_delai:[1,2],seri:[1,2],serv:[1,2],set:[1,2],setp:2,setup:[1,2],sever:[1,2],shield:[1,2],shortcut:[1,2],should:[1,2],show:[1,2],shown:[1,2],signal:[1,2],simpl:[1,2],simpli:[1,2],simultan:[1,2],singl:[1,2],slope:[1,2],small:[0,1,2],smaller:[1,2],smart:[1,2],softwar:[1,2],soil:[1,2],solder:[1,2],solut:[1,2],some:[1,2,3],sound:[1,2],sourc:[0,1,2],specif:[1,2],specifi:[1,2],spi:[1,2],ssw:[1,2],stabl:[1,2],stack:[1,2],stainless:[1,2],start:[1,2,3],statu:[0,3],steel:[1,2],step:[1,2],still:[1,2],storag:[1,2],strict:[1,2],strip:[1,2],strong:[1,2],stronger:[1,2],strongli:[1,2],stuck:[1,2],studi:[1,2],subject:[1,2],sudo:[1,2],suffici:[1,2],suggest:[1,2],suitabl:[1,2],sum:[1,2],suppli:[1,2],suppress:2,sure:[1,2],surfac:0,system:[1,2],tab:[1,2],tabl:2,target:3,task:[1,2],technic:3,temperatur:[1,2],ten:[1,2],termin:[1,2],test:[1,2],texa:[1,2],than:[1,2],the9:[1,2],thei:[1,2],them:[1,2],therefor:[1,2],thi:[0,1,2],thousand:[1,2],three:[1,2],through:[1,2],thu:[1,2],time:[1,2],togeth:[1,2],toler:2,tool:0,total:[1,2],track:[1,2],traco:2,tracopow:2,trn3:2,trn:2,tru:[1,2],turn:[1,2],tutori:3,two:[1,2],txt:[1,2],type:[1,2],typic:[1,2],under:[1,2],unexpectedli:[1,2],unit:[1,2],univ:0,unzip:[1,2],updat:0,upgrad:2,upping:[1,2],upw50b50rv:[1,2],use:[1,2],used:[1,2],user:[1,2,3],using:[1,2],usr:[1,2],valid:[1,2],valu:[1,2],variou:[1,2],velleman:[1,2],venv:[1,2],veri:2,version:[1,2],vertic:[1,2],via:[1,2],villeurbann:0,vivien:[0,3],voltag:[1,2],voltmet:[1,2],wai:[1,2],want:2,watch:[1,2],weaker:1,websit:[1,2],weidmul:[1,2],welcom:0,well:[1,2],were:[1,2],when:[1,2],where:[1,2],which:[1,2],whose:[1,2],willing:0,window:[1,2],wire:[1,2],within:[1,2],without:[1,2],wjwzhv1v3pk:[1,2],would:[1,2],wpm404:[1,2],write:[1,2],www:[1,2],yannick:[0,3],you:[1,2],your:[1,2],youtub:[1,2]},titles:["OhmPi project","OhmPi V 1.01 (limited to 32 electrodes)","OhmPi V 1.02 (limited to 32 electrodes)","OHMPI: Open source and open hardware resitivity-meter"],titleterms:{IDE:[1,2],The:[1,2],activ:[1,2],assembl:[1,2],board:[1,2],card:[1,2],center:3,cite:0,complet:[1,2],compon:[1,2],configur:[1,2],connect:[1,2],current:[1,2],data:[1,2],descript:[1,2],document:3,electr:[1,2],electrod:[1,2],environn:[1,2],four:[1,2],frist:[1,2],hardwar:3,implement:[1,2],implent:[1,2],initi:[1,2],inject:[1,2],instal:[1,2],instruct:[1,2],introduct:0,limit:[1,2],list:[1,2],measur:[1,2],mesur:[1,2],meter:3,multiplex:[1,2],ohmpi:[0,1,2,3],onli:[1,2],open:3,oper:[1,2],packag:[1,2],paramet:[1,2],partenair:0,philosophi:[1,2],preliminari:[1,2],procedur:[1,2],project:0,python:[1,2],rapberri:[1,2],raspberri:[1,2],resist:[1,2],resit:3,sourc:3,startup:[1,2],summari:3,tabl:1,technic:[1,2],thonni:[1,2],titl:1,virtual:[1,2]}}) \ No newline at end of file diff --git a/sphinx/build/doctrees/Ohmpi.doctree b/sphinx/build/doctrees/Ohmpi.doctree new file mode 100644 index 0000000000000000000000000000000000000000..51164e758771d5172dd0a0c701c87abe121e237b Binary files /dev/null and b/sphinx/build/doctrees/Ohmpi.doctree differ diff --git a/sphinx/build/doctrees/V1_01.doctree b/sphinx/build/doctrees/V1_01.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0f204c41a19e30f4779313ff83903801add650ef Binary files /dev/null and b/sphinx/build/doctrees/V1_01.doctree differ diff --git a/sphinx/build/doctrees/V1_02.doctree b/sphinx/build/doctrees/V1_02.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6695c5ae4df22e2e290a9c9a1c460265cef71bcb Binary files /dev/null and b/sphinx/build/doctrees/V1_02.doctree differ diff --git a/sphinx/build/doctrees/environment.pickle b/sphinx/build/doctrees/environment.pickle index 400d06bbc2f9bfc67dc53288f0de0c853727b0fd..d79996cc2dc1fcce2c891e9786bfff6d78d3ff02 100644 Binary files a/sphinx/build/doctrees/environment.pickle and b/sphinx/build/doctrees/environment.pickle differ diff --git a/sphinx/build/doctrees/index.doctree b/sphinx/build/doctrees/index.doctree index c1118e66d51a584a04c243b3ac7e9ef473e143b5..cb401db703a6d6d80bebbf97698f89143bf15a97 100644 Binary files a/sphinx/build/doctrees/index.doctree and b/sphinx/build/doctrees/index.doctree differ diff --git a/public/page0.html b/sphinx/build/html/Ohmpi.html similarity index 90% rename from public/page0.html rename to sphinx/build/html/Ohmpi.html index 33eb46c1ab3cc34624528b1889314bd8005114f5..4efb23ca3d4bc504cd65d567a6565eb8cc5e17b1 100644 --- a/public/page0.html +++ b/sphinx/build/html/Ohmpi.html @@ -7,7 +7,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Premiere page — Ohmpi: open hardware resistivity-meter documentation</title> + <title>OhmPi project — Ohmpi: open hardware resistivity-meter documentation</title> @@ -37,7 +37,7 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> - <link rel="next" title="OhmPi V 1.01 (limited to 32 electrodes)" href="page1.html" /> + <link rel="next" title="OhmPi V 1.01 (limited to 32 electrodes)" href="V1_01.html" /> <link rel="prev" title="OHMPI: Open source and open hardware resitivity-meter" href="index.html" /> </head> @@ -84,16 +84,16 @@ <ul class="current"> -<li class="toctree-l1 current"><a class="current reference internal" href="#">Premiere page</a><ul> -<li class="toctree-l2"><a class="reference internal" href="#ohmpi-project"><strong>OhmPi project</strong></a><ul> +<li class="toctree-l1 current"><a class="current reference internal" href="#">OhmPi project</a><ul> +<li class="toctree-l2"><a class="reference internal" href="#partenaires"><strong>Partenaires</strong></a><ul> <li class="toctree-l3"><a class="reference internal" href="#citing-ohmpi"><strong>Citing OhmPi</strong></a></li> <li class="toctree-l3"><a class="reference internal" href="#introduction-to-ohmpi"><strong>Introduction to OhmPi</strong></a></li> </ul> </li> </ul> </li> -<li class="toctree-l1"><a class="reference internal" href="page1.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> -<li class="toctree-l1"><a class="reference internal" href="page2.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_01.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_02.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> </ul> @@ -140,13 +140,13 @@ <li><a href="index.html" class="icon icon-home"></a> »</li> - <li>Premiere page</li> + <li>OhmPi project</li> <li class="wy-breadcrumbs-aside"> - <a href="_sources/page0.rst.txt" rel="nofollow"> View page source</a> + <a href="_sources/Ohmpi.rst.txt" rel="nofollow"> View page source</a> </li> @@ -159,10 +159,10 @@ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> - <div class="section" id="premiere-page"> -<h1>Premiere page<a class="headerlink" href="#premiere-page" title="Permalink to this headline">¶</a></h1> -<div class="section" id="ohmpi-project"> -<h2><strong>OhmPi project</strong><a class="headerlink" href="#ohmpi-project" title="Permalink to this headline">¶</a></h2> + <div class="section" id="ohmpi-project"> +<h1>OhmPi project<a class="headerlink" href="#ohmpi-project" title="Permalink to this headline">¶</a></h1> +<div class="section" id="partenaires"> +<h2><strong>Partenaires</strong><a class="headerlink" href="#partenaires" title="Permalink to this headline">¶</a></h2> <a class="reference internal image-reference" href="_images/logo_ohmpi.JPG"><img alt="Logo OhmPi" class="align-center" src="_images/logo_ohmpi.JPG" style="width: 350px; height: 250px;" /></a> <p>Authors:</p> <div class="line-block"> @@ -220,7 +220,7 @@ to the near surface scientific community.</p> <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> - <a href="page1.html" class="btn btn-neutral float-right" title="OhmPi V 1.01 (limited to 32 electrodes)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + <a href="V1_01.html" class="btn btn-neutral float-right" title="OhmPi V 1.01 (limited to 32 electrodes)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> <a href="index.html" class="btn btn-neutral float-left" title="OHMPI: Open source and open hardware resitivity-meter" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> diff --git a/public/page1.html b/sphinx/build/html/V1_01.html similarity index 98% rename from public/page1.html rename to sphinx/build/html/V1_01.html index ac80a9112c4fbff450dfb9ac5416b5a525ba6bca..d7df85db1ca68819766e510a7cf83526c9950235 100644 --- a/public/page1.html +++ b/sphinx/build/html/V1_01.html @@ -37,8 +37,8 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> - <link rel="next" title="OhmPi V 1.02 (limited to 32 electrodes)" href="page2.html" /> - <link rel="prev" title="Premiere page" href="page0.html" /> + <link rel="next" title="OhmPi V 1.02 (limited to 32 electrodes)" href="V1_02.html" /> + <link rel="prev" title="OhmPi project" href="Ohmpi.html" /> </head> <body class="wy-body-for-nav"> @@ -84,7 +84,7 @@ <ul class="current"> -<li class="toctree-l1"><a class="reference internal" href="page0.html">Premiere page</a></li> +<li class="toctree-l1"><a class="reference internal" href="Ohmpi.html">OhmPi project</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">OhmPi V 1.01 (limited to 32 electrodes)</a><ul> <li class="toctree-l2"><a class="reference internal" href="#the-philosophy-of-ohmpi">The philosophy of Ohmpi</a></li> <li class="toctree-l2"><a class="reference internal" href="#technical-data">Technical data</a></li> @@ -115,7 +115,7 @@ <li class="toctree-l2"><a class="reference internal" href="#complete-list-of-components">Complete list of components</a></li> </ul> </li> -<li class="toctree-l1"><a class="reference internal" href="page2.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_02.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> </ul> @@ -168,7 +168,7 @@ <li class="wy-breadcrumbs-aside"> - <a href="_sources/page1.rst.txt" rel="nofollow"> View page source</a> + <a href="_sources/V1_01.rst.txt" rel="nofollow"> View page source</a> </li> @@ -834,10 +834,10 @@ are displayed on the screen. A measurement file is automatically created and nam <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> - <a href="page2.html" class="btn btn-neutral float-right" title="OhmPi V 1.02 (limited to 32 electrodes)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + <a href="V1_02.html" class="btn btn-neutral float-right" title="OhmPi V 1.02 (limited to 32 electrodes)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> - <a href="page0.html" class="btn btn-neutral float-left" title="Premiere page" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + <a href="Ohmpi.html" class="btn btn-neutral float-left" title="OhmPi project" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> </div> diff --git a/public/page2.html b/sphinx/build/html/V1_02.html similarity index 99% rename from public/page2.html rename to sphinx/build/html/V1_02.html index 77852b184b2ad7b5911ce89050e71272d2c1f3aa..69f5cc21c795fbb42e94ea8671f63d7ed3070b39 100644 --- a/public/page2.html +++ b/sphinx/build/html/V1_02.html @@ -37,7 +37,7 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> - <link rel="prev" title="OhmPi V 1.01 (limited to 32 electrodes)" href="page1.html" /> + <link rel="prev" title="OhmPi V 1.01 (limited to 32 electrodes)" href="V1_01.html" /> </head> <body class="wy-body-for-nav"> @@ -83,8 +83,8 @@ <ul class="current"> -<li class="toctree-l1"><a class="reference internal" href="page0.html">Premiere page</a></li> -<li class="toctree-l1"><a class="reference internal" href="page1.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="Ohmpi.html">OhmPi project</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_01.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">OhmPi V 1.02 (limited to 32 electrodes)</a><ul> <li class="toctree-l2"><a class="reference internal" href="#the-philosophy-of-ohmpi">The philosophy of Ohmpi</a></li> <li class="toctree-l2"><a class="reference internal" href="#technical-data">Technical data</a></li> @@ -167,7 +167,7 @@ <li class="wy-breadcrumbs-aside"> - <a href="_sources/page2.rst.txt" rel="nofollow"> View page source</a> + <a href="_sources/V1_02.rst.txt" rel="nofollow"> View page source</a> </li> @@ -846,7 +846,7 @@ are displayed on the screen. A measurement file is automatically created and nam <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> - <a href="page1.html" class="btn btn-neutral float-left" title="OhmPi V 1.01 (limited to 32 electrodes)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + <a href="V1_01.html" class="btn btn-neutral float-left" title="OhmPi V 1.01 (limited to 32 electrodes)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> </div> diff --git a/sphinx/build/html/_images/schema_measurement_board.png b/sphinx/build/html/_images/schema_measurement_board.png deleted file mode 100644 index d8ec4ca8a058dbac280b4fda3a88c7ddae922d83..0000000000000000000000000000000000000000 Binary files a/sphinx/build/html/_images/schema_measurement_board.png and /dev/null differ diff --git a/sphinx/build/html/_sources/page0.rst.txt b/sphinx/build/html/_sources/Ohmpi.rst.txt similarity index 98% rename from sphinx/build/html/_sources/page0.rst.txt rename to sphinx/build/html/_sources/Ohmpi.rst.txt index 7dbbea4ef493009ae39140c0fa5d6e7e6e0cc0a0..c50a70c58038212b8f0492f27f9186e781cd8cb0 100644 --- a/sphinx/build/html/_sources/page0.rst.txt +++ b/sphinx/build/html/_sources/Ohmpi.rst.txt @@ -1,8 +1,8 @@ *************** -Premiere page +OhmPi project *************** -**OhmPi project** +**Partenaires** ************************* .. image:: logo_ohmpi.JPG diff --git a/sphinx/build/html/_sources/page1.rst.txt b/sphinx/build/html/_sources/V1_01.rst.txt similarity index 100% rename from sphinx/build/html/_sources/page1.rst.txt rename to sphinx/build/html/_sources/V1_01.rst.txt diff --git a/sphinx/build/html/_sources/page2.rst.txt b/sphinx/build/html/_sources/V1_02.rst.txt similarity index 100% rename from sphinx/build/html/_sources/page2.rst.txt rename to sphinx/build/html/_sources/V1_02.rst.txt diff --git a/sphinx/build/html/_sources/index.rst.txt b/sphinx/build/html/_sources/index.rst.txt index a212b187733229b40bd0b3da911ff433541f75ce..d2aaf8480ab6fda2b9f2e7a78f644653b80ef947 100644 --- a/sphinx/build/html/_sources/index.rst.txt +++ b/sphinx/build/html/_sources/index.rst.txt @@ -31,9 +31,9 @@ Contents: .. toctree:: :maxdepth: 2 - page0 - page1 - page2 + Ohmpi + V1_01 + V1_02 diff --git a/sphinx/build/html/_sources/old/page2.rst.txt b/sphinx/build/html/_sources/old/page2.rst.txt deleted file mode 100644 index 9bfa4a4d394135fd5f27261223b085463a6ed1d6..0000000000000000000000000000000000000000 --- a/sphinx/build/html/_sources/old/page2.rst.txt +++ /dev/null @@ -1,492 +0,0 @@ -***************************************** -OhmPi V 1.02 (limited to 32 electrodes) -***************************************** - -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 - - -Technical data -*************** -+-------------------------------+--------------------+-----------+ -| **Parameter** | **Specifications** | Units | -+-------------------------------+--------------------+-----------+ -|Electrodes |32 | | -+-------------------------------+--------------------+-----------+ -|Operating temperature |0 to 50 |°c | -+-------------------------------+--------------------+-----------+ -|Power consumption of CPU and |18.5 |W | -|control system | | | -+-------------------------------+--------------------+-----------+ -|Voltage injection |12 |V | -+-------------------------------+--------------------+-----------+ -|Battery |12 |V | -+-------------------------------+--------------------+-----------+ -|Current |0 to 50 |mA | -+-------------------------------+--------------------+-----------+ -|Min pulse duration |150 |mS | -+-------------------------------+--------------------+-----------+ -|Input impedance |36 |Mohm | -+-------------------------------+--------------------+-----------+ -|Data storage |micro SD card | | -+-------------------------------+--------------------+-----------+ -|Resolution |O.O1 |ohm | -+-------------------------------+--------------------+-----------+ - -Raspberry Pi configuration -****************************************** -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) - -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 - - - -.. 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. - - - - -3. When the relays are connected to the GPIO, make sure that all the GPIOs are in the low position when the raspberry starts up. If not, the relays will activate unexpectedly. -To ensure that the GPIOs are in Low position, you will need to modify the /boot/config.txt file. - - Run the terminal, and write - - .. code-block:: python - - cd /boot/ - -4. Open config.txt with GNU nano editor - - .. code-block:: python - - sudo nano config.txt - -5. At the end of the file write : - - .. code-block:: python - - 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 -8. Close the terminal - - - -Virtual Environnement and packages -================================== - -All dependencies are specified in requirements.txt - -.. note:: - 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 - -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 - -Activate it using the following command: - -.. code-block:: python - - 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 - -Check that requirements are met using - -.. code-block:: python - - pip list - -You should run you code within the virtual environment -to leave the virtual environment simply type: - -.. code-block:: python - - deactivate - - -Activate virtual environnement on Thonny (Python IDE) (on Rapberry 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** - -2- Thonny's interface 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 - -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 - -4-On the new open windows select **alternative Pyhton3 or virtual environnement** - -.. figure:: thonny_interpreter.jpg - :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 - -.. figure:: thonny_interpreter_folder.jpg - :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 - - -Assembly of the measuring/current injection cards, and connection with the Raspberry Pi -***************************************************************************************** - -Electrical resistivity measurements board -========================================== - -a) Description ------------------------------ - -To measure electrical resistivity with Raspberry Pi, an ADS1115 was introduced, as proposed by Florsch [7]. The ADS1115 -is a 16-bit ADC (Analog-to-Digital Converter), with an adaptable gain. Its value has been set at 2/3 in this study. The -input signal value could lie between - to + 6.114 V. The ADS1115 is mounted on a board adapted from an in-house design. -Figure 5 shows the general diagram for the electronic measurement board developed. This figure also displays the test -circuit used to test the board in the laboratory, which mimics the behavior of a soil subjected to current injection. -In this test circuit, resistance R11 represents the soil resistance. -Soil resistance R11 is connected to electrodes A and B for the current injection. Resistors R10 and R12 constitute -the contact resistances between soil and electrodes; they are typically made of stainless steel. The battery, which -allows for direct current injection, is connected in series with resistors R10, R11 and R12. In this part of the board, -resistance R9 has been added to measure the current flowing between electrodes A and B. This resistance value has been -set at 50 ohms in order to ensure: -• a precise resistance, -• a resistance less than the sum of resistors R10, R11 and R12; indeed, R10 and R12 generally lie between 100 and 5,000 ohms. -To measure the current intensity between A and B, the electrical potential difference at the pole of the reference resistor (R9) -is measured. The intensity (in mA) is calculated by inserting the resulting value into the following: ? -To measure the potential difference needed to measure current intensity, the ADS 1115 is connected to the ground of the circuit. -In our case, the ground reference is electrode B. The analog inputs A1 and A0 of the ADS1115 are connected to each pole of the -reference resistor (R9). In order to increase input impedance and adapt the signal gain, tracking amplifiers have been included -and completed by a divider bridge (R5, R8, R6 and R7) located between the two amplifiers. The resistance of the divider bridge -ensures that the signal remains between 0 and 5 V, in accordance with the ADS1115 signal gain. To measure the potential difference, -the M and N electrodes are connected to analog inputs A2 and A3 of the ADS 1115. Between the ADC and the electrodes, two tracking -amplifiers and a divider bridge have been positioned so as to obtain a potential lying within the 0-5 V range at the analog input of the ADS 1115. -Let's note that the potential difference value would equal the potential measured with ADS1115 multiplied by the voltage reduction -value of the divider bridge (see Section 5.2). Despite the use of high-resolution resistance (i.e. accurate to within 1%), it is -still necessary to calibrate the divider bridge using a precision voltmeter. For this purpose, the input and output potentials -of the divider bridge must be measured using an equivalent circuit for various electrical potential values. These values serve -to calculate the gain. With this electronic board, it is possible to measure the potential and intensity without disturbing the -electric field in the ground, with the total input impedance value being estimated at 36 mega-ohms. -A shortcut between Electrodes A and B will generate excessive currents, whose intensities depend on the type of battery used. -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. - -.. note:: - Last update: - - 1- The board has been slightly modified, we have added a decoupling capacitor at the input of the Operational Amplifiers (AOP) channels, to ensure a good performance of the AOPs (100nF/ 50VDC). - - 2- On each input of the AOP signals, we have also added a 10 MOhms resistor, so that the inputs take the value of the ground when the system does not measure and thus limit the overheating of the AOP. - - 3- To make sure that the signal is not skimmed, we have added a power supply of 24V on the AOPs, these are the TRN3-1211 components. - - -.. figure:: schema_measurement_board1_02.png - :width: 800px - :align: center - :height: 400px - :alt: alternate text - :figclass: align-center - - Measurement board updated from the version 1.01 presented in clement et al 2020 - -b) Implementation --------------------------------- -The measurement board must be printed using the PCB file (Source file repository), with components soldered onto -it by following the steps described below and illustrated in the following figure : - -* 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: 31 - - """ - 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 31 to 35 of the ohmpi.py code. - - -* Step no. 2: installation of the 1-Kohm resistors with an accuracy of ± 0.1% (following figure-b). -* Step no. 3: installation of the 1.5-Kohm resistors with an accuracy of ± 0.1% (following figure-c). -* Step no. 4: installation of both the black female 1 x 10 header and the 7-blue screw terminal blocks (following figure-d) -* Step no. 5: installation of the 50-Ohm reference resistor ± 0.1%, please check the value with ohmmeter and correct in the jason file (ohmpi_param.json),(following figure-e). -* 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) (following figure-f). -* Step no. 7: installation of the 10-Mohm resistors -* Step no. 8: addition of the DC/DC converter (TRN3-1211) -* Step no. 9: adding 10nF capacitor and fuse (1.5A-littlefuse ref: 0253001.V) - -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 -place a fuse holder with a 1.5-A fuse for safety purposes. - -.. figure:: measurement_board1-02.jpg - :width: 800px - :align: center - :height: 700px - :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 - -.. figure:: measurement_board-2-V1-02.jpg - :width: 800px - :align: center - :height: 700px - :alt: alternate text - :figclass: align-center - - Measurement board installation with Raspberry Pi - -Current injection board -======================= - -To carry out the electrical resistivity measurement, the first step consists of injecting current into the ground. -In our case, a simple 12-V lead-acid battery is used to create an electrical potential difference that results -in current circulating into the ground. The current is injected through electrodes A and B (see Fig. 2). This -injection is controlled via a 4-channel relay module board connected to the Raspberry Pi. The mechanical relay -module board is shown in Figure 4. Relays 1 and 2 serve to switch on the current source. The common contacts -of relays 1 and 2 are connected to the positive and negative battery poles, respectively. The normally open -contacts of both relays are connected to the common contacts of relays 3 and 4. Relays 1 and 2 are connected -to the GPIO 7 on the Raspberry Pi and therefore activate simultaneously. The role of relays 3 and 4 is to reverse -the polarity at electrodes A and B. Thus, when relays 3 and 4 are energized by the GPIO 8 in the open position, -the positive battery pole is connected to electrode A and the negative pole to electrode B. When not energized, -they remain in the normally closed position. This set-up offers a simple and robust solution to inject current. - -.. figure:: current_board.jpg - :width: 800px - :align: center - :height: 400px - :alt: alternate text - :figclass: align-center - - Wiring of the 4-channel relay module board for current injection management - - -Frist four electrodes resistivity mesurement -============================================ - - -Under construction describe the way vlide the first part of the instruction. -Electrical resistivity measurement on test circuit - - -Multiplexer implentation -************************* -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 -the 32 electrodes stuck into the ground, all of which are connected to the data logger. - - -We will describe below how to assemble the four multiplexers (MUX), one per terminal. A multiplexer consists of 2 relay -modules with 16 channels each. On the first board, on each MUX, 15 relays out of the 16 available will be used. Please note that the suggested -configuration enables making smaller multiplexers (8 or 16 electrodes only). On the other hand, if you prefer upping to 64 electrodes, -which is entirely possible, a GPIO channel multiplier will have to be used. -To prepare the multiplexer, the channels of the two relay boards must be connected according to the wiring diagram shown below. - -.. figure:: multiplexer_implementation.jpg - :width: 800px - :align: center - :height: 400px - :alt: alternate text - :figclass: align-center - - Schematic diagram of the wiring of two 16-channel relay shields - - -For this purpose, 0.5-mm² cables with end caps are used and their length adjusted for each connection in order to produce a clean assembly. -The length was adjusted so that the distance between the two points to be connected could be directly measured on the board once they had -been assembled one above the other, in adding an extra 3 cm. The wires at the ends need to be stripped and the end caps added. -As a final step, connect the cables to the correct connectors. This operation must be repeated in order to carry out all the wiring shown in Figure below. - -Once the operation has been completed, the 16 control pins of each 16-channel relay shield card must be prepared. Each card actually contains 16 input channels -for activating each relay (Fig. 12). However, we will be activating several relays with a single GPIO (to limit the number of GPIOs used on Raspberry Pi, -see Section 2.4). To execute this step, it will be necessary to follow the protocol presented in Figure. - - .. figure:: connection.jpg - :width: 800px - :align: center - :height: 400px - :alt: alternate text - :figclass: align-center - - Connection to the 16-channel relay shield - -For the 16-channel relay shield no. 1, these steps must be followed: -* Position a test circuit with 10 horizontal and 10 vertical holes on the pins of the 16-channel relay shield board. -* Follow the diagram and solder the pins as shown in Fig. -* Lastly, solder 0.5-mm² wires 1 m in length to the test circuit. - -For relay shield no. 2, follow the same procedure, but solder all the pins together (d-e-f). -This same operation must be repeated for the other three multiplexers as well. -The next step consists of connecting the relay card inputs to the Raspberry Pi according to Table 5 for all four multiplexers. - - -+-------------------------------+-------------------------------------------+---------------------+ -| |Relay shield n°1 |Relay Shield n°2 | -| +----------+----------+----------+----------+---------------------+ -| |Pin 1 |Pin 2-3 |Pin 4-7 |Pin 8-16 |Pin 1- 16 | -+-------------------------------+----------+----------+----------+----------+---------------------+ -| Multiplexer A |12 |16 |20 |21 |26 | -+-------------------------------+----------+----------+----------+----------+---------------------+ -| Multiplexer B |18 |23 |24 |25 |19 | -+-------------------------------+----------+----------+----------+----------+---------------------+ -| Multiplexer M |06 |13 |04 |17 |27 | -+-------------------------------+----------+----------+----------+----------+---------------------+ -| Multiplexer N |22 |10 |09 |11 |05 | -+-------------------------------+----------+----------+----------+----------+---------------------+ - - Connection of the GPIOs to each multiplexer - - -Electrode connection -************************* -At this point, all that remains is to connect the electrodes of each multiplexer to a terminal block (Fig. 13). In our set-up, screw terminals assembled on a din rail were used. -According to the chosen multiplexer configuration, all the relays of each multiplexer will be connected to an electrode and, consequently, each electrode will have four incoming -connections. Instead of having four cables connecting an electrode terminal to each multiplexer, we recommend using the cable assembly shown in the following Figure. - -.. figure:: cable.jpg - :width: 800px - :align: center - :height: 300px - :alt: alternate text - :figclass: align-center - -the next figure provides an example of multiplexer relay connections for electrode no. 1: this electrode of multiplexer MUX A must be connected to electrode no. 1 of MUX B. Moreover, electrode no. 1 of MUX B -must be connected to electrode no. 1 of MUX N, which in turn must be connected to electrode no. 1 of MUX M. Lastly, electrode no. 1 of MUX M is connected to the terminal block. -This operation must be repeated for all 32 electrodes. - -.. figure:: electrode_cable.jpg - :width: 800px - :align: center - :height: 800px - :alt: alternate text - :figclass: align-center - -Operating instruction -************************* - -Preliminary procedure (Only for the initial operation) -====================================================== -The open source code must be downloaded at the Open Science Framework source file repository for this manuscript (https://osf.io/dzwb4/) -or at the following Gitlab repository address: https://gitlab.irstea.fr/reversaal/OhmPi. The code must be then unzipped into a selected folder (e.g. OhmPi-master). A “readme†file -is proposed in the directory to assist with installation of the software and required python packages. It is strongly recommended to create a python virtual environment for installing -the required packages and running the code. - - -Startup procedure -================== -As an initial operating instruction, the 12-V battery must be disconnected before any hardware handling. Ensure that the battery is charged at full capacity. Plug all the electrodes (32 or fewer) -into the screw terminals. The Raspberry Pi must be plugged into a computer screen, with a mouse and keyboard accessed remotely. The Raspberry Pi must then be plugged into the power supply -(for laboratory measurements) or a power bank (5V - 2A for field measurements). At this point, you'll need to access the Raspbian operating system. Inside the previously created folder “ohmPiâ€, -the protocol file “ABMN.txt†must be created or modified; this file contains all quadrupole ABMN numeration (an example is proposed with the source code). Some input parameters of the main “ohmpi.py†-function may be adjusted/optimized depending on the measurement attributes. For example, both the current injection duration and number of stacks can be adjusted. At this point, the 12-V battery can be -plugged into the hardware; the "ohmpi.py" source code must be run within a python3 environment (or a virtual environment if one has been created) either in the terminal or using Thonny. You should now -hear the characteristic sound of a relay switching as a result of electrode permutation. After each quadrupole measurement, the potential difference as well as the current intensity and resistance -are displayed on the screen. A measurement file is automatically created and named "measure.csv"; it will be placed in the same folder. - -Electrical resistivity measurement parameters description -========================================================== - -.. code-block:: python - :linenos: - :lineno-start: 2 - - 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 - -The measurement parameters can be adjusted in lines 2 to 7 of the ohmpi_param.json file. - -complete list of componements -========================================================== - - diff --git a/sphinx/build/html/_static/background_b01.png b/sphinx/build/html/_static/background_b01.png deleted file mode 100644 index 353f26dde0803aa172c23e21ef6ac068e1253bc8..0000000000000000000000000000000000000000 Binary files a/sphinx/build/html/_static/background_b01.png and /dev/null differ diff --git a/sphinx/build/html/_static/bizstyle.css b/sphinx/build/html/_static/bizstyle.css deleted file mode 100644 index def9cedc5dbfb46c1c8b8b95c40289ecea8869b4..0000000000000000000000000000000000000000 --- a/sphinx/build/html/_static/bizstyle.css +++ /dev/null @@ -1,506 +0,0 @@ -/* - * bizstyle.css_t - * ~~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- business style theme. - * - * :copyright: Copyright 2011-2014 by Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', - 'Verdana', sans-serif; - font-size: 14px; - letter-spacing: -0.01em; - line-height: 150%; - text-align: center; - background-color: white; - background-image: url(background_b01.png); - color: black; - padding: 0; - border-right: 1px solid #336699; - border-left: 1px solid #336699; - - margin: 0px 40px 0px 40px; -} - -div.document { - background-color: white; - text-align: left; - background-repeat: repeat-x; - - -moz-box-shadow: 2px 2px 5px #000; - -webkit-box-shadow: 2px 2px 5px #000; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 240px; - border-left: 1px solid #ccc; -} - -div.body { - margin: 0; - padding: 0.5em 20px 20px 20px; -} -div.bodywrapper { - margin: 0 0 0 calc(210px + 30px); -} - -div.related { - font-size: 1em; - - -moz-box-shadow: 2px 2px 5px #000; - -webkit-box-shadow: 2px 2px 5px #000; -} - -div.related ul { - background-color: #336699; - height: 100%; - overflow: hidden; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -div.related ul li { - color: white; - margin: 0; - padding: 0; - height: 2em; - float: left; -} - -div.related ul li.right { - float: right; - margin-right: 5px; -} - -div.related ul li a { - margin: 0; - padding: 0 5px 0 5px; - line-height: 1.75em; - color: #fff; -} - -div.related ul li a:hover { - color: #fff; - text-decoration: underline; -} - -div.sphinxsidebarwrapper { - padding: 0; -} - -div.sphinxsidebar { - padding: 0.5em 12px 12px 12px; - width: 210px; - font-size: 1em; - text-align: left; -} - -div.sphinxsidebar h3, div.sphinxsidebar h4 { - margin: 1em 0 0.5em 0; - font-size: 1em; - padding: 0.1em 0 0.1em 0.5em; - color: white; - border: 1px solid #336699; - background-color: #336699; -} - -div.sphinxsidebar h3 a { - color: white; -} - -div.sphinxsidebar ul { - padding-left: 1.5em; - margin-top: 7px; - padding: 0; - line-height: 130%; -} - -div.sphinxsidebar ul ul { - margin-left: 20px; -} - -div.sphinxsidebar input { - border: 1px solid #336699; -} - -div.footer { - background-color: white; - color: #336699; - padding: 3px 8px 3px 0; - clear: both; - font-size: 0.8em; - text-align: right; - border-bottom: 1px solid #336699; - - -moz-box-shadow: 2px 2px 5px #000; - -webkit-box-shadow: 2px 2px 5px #000; -} - -div.footer a { - color: #336699; - text-decoration: underline; -} - -/* -- body styles ----------------------------------------------------------- */ - -p { - margin: 0.8em 0 0.5em 0; -} - -a { - color: #336699; - text-decoration: none; -} - -a:hover { - color: #336699; - text-decoration: underline; -} - -div.body a { - text-decoration: underline; -} - -h1, h2, h3 { - color: #336699; -} - -h1 { - margin: 0; - padding: 0.7em 0 0.3em 0; - font-size: 1.5em; -} - -h2 { - margin: 1.3em 0 0.2em 0; - font-size: 1.35em; - padding-bottom: .5em; - border-bottom: 1px solid #336699; -} - -h3 { - margin: 1em 0 -0.3em 0; - font-size: 1.2em; - padding-bottom: .3em; - border-bottom: 1px solid #CCCCCC; -} - -div.body h1 a, div.body h2 a, div.body h3 a, -div.body h4 a, div.body h5 a, div.body h6 a { - color: black!important; -} - -h1 a.anchor, h2 a.anchor, h3 a.anchor, -h4 a.anchor, h5 a.anchor, h6 a.anchor { - display: none; - margin: 0 0 0 0.3em; - padding: 0 0.2em 0 0.2em; - color: #aaa!important; -} - -h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, -h5:hover a.anchor, h6:hover a.anchor { - display: inline; -} - -h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover, -h5 a.anchor:hover, h6 a.anchor:hover { - color: #777; - background-color: #eee; -} - -a.headerlink { - color: #c60f0f!important; - font-size: 1em; - margin-left: 6px; - padding: 0 4px 0 4px; - text-decoration: none!important; -} - -a.headerlink:hover { - background-color: #ccc; - color: white!important; -} - -cite, code, tt { - font-family: 'Consolas', 'Deja Vu Sans Mono', - 'Bitstream Vera Sans Mono', monospace; - font-size: 0.95em; - letter-spacing: 0.01em; -} - -code { - background-color: #F2F2F2; - border-bottom: 1px solid #ddd; - color: #333; -} - -code.descname, code.descclassname, code.xref { - border: 0; -} - -hr { - border: 1px solid #abc; - margin: 2em; -} - -a code { - border: 0; - color: #CA7900; -} - -a code:hover { - color: #2491CF; -} - -pre { - background-color: transparent !important; - font-family: 'Consolas', 'Deja Vu Sans Mono', - 'Bitstream Vera Sans Mono', monospace; - font-size: 0.95em; - letter-spacing: 0.015em; - line-height: 120%; - padding: 0.5em; - border-right: 5px solid #ccc; - border-left: 5px solid #ccc; -} - -pre a { - color: inherit; - text-decoration: underline; -} - -td.linenos pre { - padding: 0.5em 0; -} - -div.quotebar { - background-color: #f8f8f8; - max-width: 250px; - float: right; - padding: 2px 7px; - border: 1px solid #ccc; -} - -div.topic { - background-color: #f8f8f8; -} - -table { - border-collapse: collapse; - margin: 0 -0.5em 0 -0.5em; -} - -table td, table th { - padding: 0.2em 0.5em 0.2em 0.5em; -} - -div.admonition { - font-size: 0.9em; - margin: 1em 0 1em 0; - border: 3px solid #cccccc; - background-color: #f7f7f7; - padding: 0; -} - -div.admonition p { - margin: 0.5em 1em 0.5em 1em; - padding: 0; -} - -div.admonition li p { - margin-left: 0; -} - -div.admonition pre, div.warning pre { - margin: 0; -} - -div.highlight { - margin: 0.4em 1em; -} - -div.admonition p.admonition-title { - margin: 0; - padding: 0.1em 0 0.1em 0.5em; - color: white; - border-bottom: 3px solid #cccccc; - font-weight: bold; - background-color: #165e83; -} - -div.danger { border: 3px solid #f0908d; background-color: #f0cfa0; } -div.error { border: 3px solid #f0908d; background-color: #ede4cd; } -div.warning { border: 3px solid #f8b862; background-color: #f0cfa0; } -div.caution { border: 3px solid #f8b862; background-color: #ede4cd; } -div.attention { border: 3px solid #f8b862; background-color: #f3f3f3; } -div.important { border: 3px solid #f0cfa0; background-color: #ede4cd; } -div.note { border: 3px solid #f0cfa0; background-color: #f3f3f3; } -div.hint { border: 3px solid #bed2c3; background-color: #f3f3f3; } -div.tip { border: 3px solid #bed2c3; background-color: #f3f3f3; } - -div.danger p.admonition-title, div.error p.admonition-title { - background-color: #b7282e; - border-bottom: 3px solid #f0908d; -} - -div.caution p.admonition-title, -div.warning p.admonition-title, -div.attention p.admonition-title { - background-color: #f19072; - border-bottom: 3px solid #f8b862; -} - -div.note p.admonition-title, div.important p.admonition-title { - background-color: #f8b862; - border-bottom: 3px solid #f0cfa0; -} - -div.hint p.admonition-title, div.tip p.admonition-title { - background-color: #7ebea5; - border-bottom: 3px solid #bed2c3; -} - -div.admonition ul, div.admonition ol, -div.warning ul, div.warning ol { - margin: 0.1em 0.5em 0.5em 3em; - padding: 0; -} - -div.versioninfo { - margin: 1em 0 0 0; - border: 1px solid #ccc; - background-color: #DDEAF0; - padding: 8px; - line-height: 1.3em; - font-size: 0.9em; -} - -.viewcode-back { - font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', - 'Verdana', sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; -} - -p.versionchanged span.versionmodified { - font-size: 0.9em; - margin-right: 0.2em; - padding: 0.1em; - background-color: #DCE6A0; -} - -dl.field-list > dt { - color: white; - background-color: #82A0BE; -} - -dl.field-list > dd { - background-color: #f7f7f7; -} - -/* -- table styles ---------------------------------------------------------- */ - -table.docutils { - margin: 1em 0; - padding: 0; - border: 1px solid white; - background-color: #f7f7f7; -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 1px solid white; - border-bottom: 1px solid white; -} - -table.docutils td p { - margin-top: 0; - margin-bottom: 0.3em; -} - -table.field-list td, table.field-list th { - border: 0 !important; - word-break: break-word; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - color: white; - text-align: left; - padding-right: 5px; - background-color: #82A0BE; -} - -div.literal-block-wrapper div.code-block-caption { - background-color: #EEE; - border-style: solid; - border-color: #CCC; - border-width: 1px 5px; -} - -/* WIDE DESKTOP STYLE */ -@media only screen and (min-width: 1176px) { -body { - margin: 0 40px 0 40px; -} -} - -/* TABLET STYLE */ -@media only screen and (min-width: 768px) and (max-width: 991px) { -body { - margin: 0 40px 0 40px; -} -} - -/* MOBILE LAYOUT (PORTRAIT/320px) */ -@media only screen and (max-width: 767px) { -body { - margin: 0; -} -div.bodywrapper { - margin: 0; - width: 100%; - border: none; -} -div.sphinxsidebar { - display: none; -} -} - -/* MOBILE LAYOUT (LANDSCAPE/480px) */ -@media only screen and (min-width: 480px) and (max-width: 767px) { -body { - margin: 0 20px 0 20px; -} -} - -/* RETINA OVERRIDES */ -@media -only screen and (-webkit-min-device-pixel-ratio: 2), -only screen and (min-device-pixel-ratio: 2) { -} - -/* -- end ------------------------------------------------------------------- */ \ No newline at end of file diff --git a/sphinx/build/html/_static/bizstyle.js b/sphinx/build/html/_static/bizstyle.js deleted file mode 100644 index e3810ee66261e04be099ced0f569d8d4bb0cbf33..0000000000000000000000000000000000000000 --- a/sphinx/build/html/_static/bizstyle.js +++ /dev/null @@ -1,41 +0,0 @@ -// -// bizstyle.js -// ~~~~~~~~~~~ -// -// Sphinx javascript -- for bizstyle theme. -// -// This theme was created by referring to 'sphinxdoc' -// -// :copyright: Copyright 2012-2014 by Sphinx team, see AUTHORS. -// :license: BSD, see LICENSE for details. -// -$(document).ready(function(){ - if (navigator.userAgent.indexOf('iPhone') > 0 || - navigator.userAgent.indexOf('Android') > 0) { - $("li.nav-item-0 a").text("Top"); - } - - $("div.related:first ul li:not(.right) a").slice(1).each(function(i, item){ - if (item.text.length > 20) { - var tmpstr = item.text - $(item).attr("title", tmpstr); - $(item).text(tmpstr.substr(0, 17) + "..."); - } - }); - $("div.related:last ul li:not(.right) a").slice(1).each(function(i, item){ - if (item.text.length > 20) { - var tmpstr = item.text - $(item).attr("title", tmpstr); - $(item).text(tmpstr.substr(0, 17) + "..."); - } - }); -}); - -$(window).resize(function(){ - if ($(window).width() <= 776) { - $("li.nav-item-0 a").text("Top"); - } - else { - $("li.nav-item-0 a").text("Ohmpi: open hardware resistivity-meter documentation"); - } -}); \ No newline at end of file diff --git a/sphinx/build/html/_static/classic.css b/sphinx/build/html/_static/classic.css deleted file mode 100644 index cceb67ac4803b270fac7218846f0640c37f2be93..0000000000000000000000000000000000000000 --- a/sphinx/build/html/_static/classic.css +++ /dev/null @@ -1,266 +0,0 @@ -/* - * classic.css_t - * ~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- classic theme. - * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -html { - /* CSS hack for macOS's scrollbar (see #1125) */ - background-color: #FFFFFF; -} - -body { - font-family: sans-serif; - font-size: 100%; - background-color: #11303d; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - background-color: #1c4e63; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 230px; -} - -div.body { - background-color: #ffffff; - color: #000000; - padding: 0 20px 30px 20px; -} - -div.footer { - color: #ffffff; - width: 100%; - padding: 9px 0 9px 0; - text-align: center; - font-size: 75%; -} - -div.footer a { - color: #ffffff; - text-decoration: underline; -} - -div.related { - background-color: #133f52; - line-height: 30px; - color: #ffffff; -} - -div.related a { - color: #ffffff; -} - -div.sphinxsidebar { -} - -div.sphinxsidebar h3 { - font-family: 'Trebuchet MS', sans-serif; - color: #ffffff; - font-size: 1.4em; - font-weight: normal; - margin: 0; - padding: 0; -} - -div.sphinxsidebar h3 a { - color: #ffffff; -} - -div.sphinxsidebar h4 { - font-family: 'Trebuchet MS', sans-serif; - color: #ffffff; - font-size: 1.3em; - font-weight: normal; - margin: 5px 0 0 0; - padding: 0; -} - -div.sphinxsidebar p { - color: #ffffff; -} - -div.sphinxsidebar p.topless { - margin: 5px 10px 10px 10px; -} - -div.sphinxsidebar ul { - margin: 10px; - padding: 0; - color: #ffffff; -} - -div.sphinxsidebar a { - color: #98dbcc; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - - - -/* -- hyperlink styles ------------------------------------------------------ */ - -a { - color: #355f7c; - text-decoration: none; -} - -a:visited { - color: #355f7c; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - - - -/* -- body styles ----------------------------------------------------------- */ - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Trebuchet MS', sans-serif; - background-color: #f2f2f2; - font-weight: normal; - color: #20435c; - border-bottom: 1px solid #ccc; - margin: 20px -20px 10px -20px; - padding: 3px 0 3px 10px; -} - -div.body h1 { margin-top: 0; font-size: 200%; } -div.body h2 { font-size: 160%; } -div.body h3 { font-size: 140%; } -div.body h4 { font-size: 120%; } -div.body h5 { font-size: 110%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #c60f0f; - font-size: 0.8em; - padding: 0 4px 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - background-color: #c60f0f; - color: white; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - text-align: justify; - line-height: 130%; -} - -div.admonition p.admonition-title + p { - display: inline; -} - -div.admonition p { - margin-bottom: 5px; -} - -div.admonition pre { - margin-bottom: 5px; -} - -div.admonition ul, div.admonition ol { - margin-bottom: 5px; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -div.warning { - background-color: #ffe4e4; - border: 1px solid #f66; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre { - padding: 5px; - background-color: unset; - color: unset; - line-height: 120%; - border: 1px solid #ac9; - border-left: none; - border-right: none; -} - -code { - background-color: #ecf0f3; - padding: 0 1px 0 1px; - font-size: 0.95em; -} - -th, dl.field-list > dt { - background-color: #ede; -} - -.warning code { - background: #efc2c2; -} - -.note code { - background: #d6d6d6; -} - -.viewcode-back { - font-family: sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; -} - -div.code-block-caption { - color: #efefef; - background-color: #1c4e63; -} \ No newline at end of file diff --git a/sphinx/build/html/_static/css3-mediaqueries.js b/sphinx/build/html/_static/css3-mediaqueries.js deleted file mode 100644 index 59735f59dcb97f8d892a786ab94a33120254db9d..0000000000000000000000000000000000000000 --- a/sphinx/build/html/_static/css3-mediaqueries.js +++ /dev/null @@ -1 +0,0 @@ -if(typeof Object.create!=="function"){Object.create=function(e){function t(){}t.prototype=e;return new t}}var ua={toString:function(){return navigator.userAgent},test:function(e){return this.toString().toLowerCase().indexOf(e.toLowerCase())>-1}};ua.version=(ua.toString().toLowerCase().match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1];ua.webkit=ua.test("webkit");ua.gecko=ua.test("gecko")&&!ua.webkit;ua.opera=ua.test("opera");ua.ie=ua.test("msie")&&!ua.opera;ua.ie6=ua.ie&&document.compatMode&&typeof document.documentElement.style.maxHeight==="undefined";ua.ie7=ua.ie&&document.documentElement&&typeof document.documentElement.style.maxHeight!=="undefined"&&typeof XDomainRequest==="undefined";ua.ie8=ua.ie&&typeof XDomainRequest!=="undefined";var domReady=function(){var e=[];var t=function(){if(!arguments.callee.done){arguments.callee.done=true;for(var t=0;t<e.length;t++){e[t]()}}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",t,false)}if(ua.ie){(function(){try{document.documentElement.doScroll("left")}catch(e){setTimeout(arguments.callee,50);return}t()})();document.onreadystatechange=function(){if(document.readyState==="complete"){document.onreadystatechange=null;t()}}}if(ua.webkit&&document.readyState){(function(){if(document.readyState!=="loading"){t()}else{setTimeout(arguments.callee,10)}})()}window.onload=t;return function(t){if(typeof t==="function"){e[e.length]=t}return t}}();var cssHelper=function(){var e={BLOCKS:/[^\s{;][^{;]*\{(?:[^{}]*\{[^{}]*\}[^{}]*|[^{}]*)*\}/g,BLOCKS_INSIDE:/[^\s{][^{]*\{[^{}]*\}/g,DECLARATIONS:/[a-zA-Z\-]+[^;]*:[^;]+;/g,RELATIVE_URLS:/url\(['"]?([^\/\)'"][^:\)'"]+)['"]?\)/g,REDUNDANT_COMPONENTS:/(?:\/\*([^*\\\\]|\*(?!\/))+\*\/|@import[^;]+;)/g,REDUNDANT_WHITESPACE:/\s*(,|:|;|\{|\})\s*/g,WHITESPACE_IN_PARENTHESES:/\(\s*(\S*)\s*\)/g,MORE_WHITESPACE:/\s{2,}/g,FINAL_SEMICOLONS:/;\}/g,NOT_WHITESPACE:/\S+/g};var t,n=false;var r=[];var s=function(e){if(typeof e==="function"){r[r.length]=e}};var o=function(){for(var e=0;e<r.length;e++){r[e](t)}};var u={};var a=function(e,t){if(u[e]){var n=u[e].listeners;if(n){for(var r=0;r<n.length;r++){n[r](t)}}}};var f=function(e,t,n){if(ua.ie&&!window.XMLHttpRequest){window.XMLHttpRequest=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}if(!XMLHttpRequest){return""}var r=new XMLHttpRequest;try{r.open("get",e,true);r.setRequestHeader("X_REQUESTED_WITH","XMLHttpRequest")}catch(i){n();return}var s=false;setTimeout(function(){s=true},5e3);document.documentElement.style.cursor="progress";r.onreadystatechange=function(){if(r.readyState===4&&!s){if(!r.status&&location.protocol==="file:"||r.status>=200&&r.status<300||r.status===304||navigator.userAgent.indexOf("Safari")>-1&&typeof r.status==="undefined"){t(r.responseText)}else{n()}document.documentElement.style.cursor="";r=null}};r.send("")};var l=function(t){t=t.replace(e.REDUNDANT_COMPONENTS,"");t=t.replace(e.REDUNDANT_WHITESPACE,"$1");t=t.replace(e.WHITESPACE_IN_PARENTHESES,"($1)");t=t.replace(e.MORE_WHITESPACE," ");t=t.replace(e.FINAL_SEMICOLONS,"}");return t};var c={stylesheet:function(t){var n={};var r=[],i=[],s=[],o=[];var u=t.cssHelperText;var a=t.getAttribute("media");if(a){var f=a.toLowerCase().split(",")}else{var f=["all"]}for(var l=0;l<f.length;l++){r[r.length]=c.mediaQuery(f[l],n)}var h=u.match(e.BLOCKS);if(h!==null){for(var l=0;l<h.length;l++){if(h[l].substring(0,7)==="@media "){var p=c.mediaQueryList(h[l],n);s=s.concat(p.getRules());i[i.length]=p}else{s[s.length]=o[o.length]=c.rule(h[l],n,null)}}}n.element=t;n.getCssText=function(){return u};n.getAttrMediaQueries=function(){return r};n.getMediaQueryLists=function(){return i};n.getRules=function(){return s};n.getRulesWithoutMQ=function(){return o};return n},mediaQueryList:function(t,n){var r={};var i=t.indexOf("{");var s=t.substring(0,i);t=t.substring(i+1,t.length-1);var o=[],u=[];var a=s.toLowerCase().substring(7).split(",");for(var f=0;f<a.length;f++){o[o.length]=c.mediaQuery(a[f],r)}var l=t.match(e.BLOCKS_INSIDE);if(l!==null){for(f=0;f<l.length;f++){u[u.length]=c.rule(l[f],n,r)}}r.type="mediaQueryList";r.getMediaQueries=function(){return o};r.getRules=function(){return u};r.getListText=function(){return s};r.getCssText=function(){return t};return r},mediaQuery:function(t,n){t=t||"";var r,i;if(n.type==="mediaQueryList"){r=n}else{i=n}var s=false,o;var u=[];var a=true;var f=t.match(e.NOT_WHITESPACE);for(var l=0;l<f.length;l++){var c=f[l];if(!o&&(c==="not"||c==="only")){if(c==="not"){s=true}}else if(!o){o=c}else if(c.charAt(0)==="("){var h=c.substring(1,c.length-1).split(":");u[u.length]={mediaFeature:h[0],value:h[1]||null}}}return{getQueryText:function(){return t},getAttrStyleSheet:function(){return i||null},getList:function(){return r||null},getValid:function(){return a},getNot:function(){return s},getMediaType:function(){return o},getExpressions:function(){return u}}},rule:function(e,t,n){var r={};var i=e.indexOf("{");var s=e.substring(0,i);var o=s.split(",");var u=[];var a=e.substring(i+1,e.length-1).split(";");for(var f=0;f<a.length;f++){u[u.length]=c.declaration(a[f],r)}r.getStylesheet=function(){return t||null};r.getMediaQueryList=function(){return n||null};r.getSelectors=function(){return o};r.getSelectorText=function(){return s};r.getDeclarations=function(){return u};r.getPropertyValue=function(e){for(var t=0;t<u.length;t++){if(u[t].getProperty()===e){return u[t].getValue()}}return null};return r},declaration:function(e,t){var n=e.indexOf(":");var r=e.substring(0,n);var i=e.substring(n+1);return{getRule:function(){return t||null},getProperty:function(){return r},getValue:function(){return i}}}};var h=function(e){if(typeof e.cssHelperText!=="string"){return}var n={stylesheet:null,mediaQueryLists:[],rules:[],selectors:{},declarations:[],properties:{}};var r=n.stylesheet=c.stylesheet(e);var s=n.mediaQueryLists=r.getMediaQueryLists();var o=n.rules=r.getRules();var u=n.selectors;var a=function(e){var t=e.getSelectors();for(var n=0;n<t.length;n++){var r=t[n];if(!u[r]){u[r]=[]}u[r][u[r].length]=e}};for(i=0;i<o.length;i++){a(o[i])}var f=n.declarations;for(i=0;i<o.length;i++){f=n.declarations=f.concat(o[i].getDeclarations())}var l=n.properties;for(i=0;i<f.length;i++){var h=f[i].getProperty();if(!l[h]){l[h]=[]}l[h][l[h].length]=f[i]}e.cssHelperParsed=n;t[t.length]=e;return n};var p=function(e,t){return;e.cssHelperText=l(t||e.innerHTML);return h(e)};var d=function(){n=true;t=[];var r=[];var i=function(){for(var e=0;e<r.length;e++){h(r[e])}var t=document.getElementsByTagName("style");for(e=0;e<t.length;e++){p(t[e])}n=false;o()};var s=document.getElementsByTagName("link");for(var u=0;u<s.length;u++){var a=s[u];if(a.getAttribute("rel").indexOf("style")>-1&&a.href&&a.href.length!==0&&!a.disabled){r[r.length]=a}}if(r.length>0){var c=0;var d=function(){c++;if(c===r.length){i()}};var v=function(t){var n=t.href;f(n,function(r){r=l(r).replace(e.RELATIVE_URLS,"url("+n.substring(0,n.lastIndexOf("/"))+"/$1)");t.cssHelperText=r;d()},d)};for(u=0;u<r.length;u++){v(r[u])}}else{i()}};var v={stylesheets:"array",mediaQueryLists:"array",rules:"array",selectors:"object",declarations:"array",properties:"object"};var m={stylesheets:null,mediaQueryLists:null,rules:null,selectors:null,declarations:null,properties:null};var g=function(e,t){if(m[e]!==null){if(v[e]==="array"){return m[e]=m[e].concat(t)}else{var n=m[e];for(var r in t){if(t.hasOwnProperty(r)){if(!n[r]){n[r]=t[r]}else{n[r]=n[r].concat(t[r])}}}return n}}};var y=function(e){m[e]=v[e]==="array"?[]:{};for(var n=0;n<t.length;n++){var r=e==="stylesheets"?"stylesheet":e;g(e,t[n].cssHelperParsed[r])}return m[e]};var b=function(e){if(typeof window.innerWidth!="undefined"){return window["inner"+e]}else if(typeof document.documentElement!=="undefined"&&typeof document.documentElement.clientWidth!=="undefined"&&document.documentElement.clientWidth!=0){return document.documentElement["client"+e]}};return{addStyle:function(e,t,n){var r=document.createElement("style");r.setAttribute("type","text/css");if(t&&t.length>0){r.setAttribute("media",t.join(","))}document.getElementsByTagName("head")[0].appendChild(r);if(r.styleSheet){r.styleSheet.cssText=e}else{r.appendChild(document.createTextNode(e))}r.addedWithCssHelper=true;if(typeof n==="undefined"||n===true){cssHelper.parsed(function(t){var n=p(r,e);for(var i in n){if(n.hasOwnProperty(i)){g(i,n[i])}}a("newStyleParsed",r)})}else{r.parsingDisallowed=true}return r},removeStyle:function(e){return e.parentNode.removeChild(e)},parsed:function(e){if(n){s(e)}else{if(typeof t!=="undefined"){if(typeof e==="function"){e(t)}}else{s(e);d()}}},stylesheets:function(e){cssHelper.parsed(function(t){e(m.stylesheets||y("stylesheets"))})},mediaQueryLists:function(e){cssHelper.parsed(function(t){e(m.mediaQueryLists||y("mediaQueryLists"))})},rules:function(e){cssHelper.parsed(function(t){e(m.rules||y("rules"))})},selectors:function(e){cssHelper.parsed(function(t){e(m.selectors||y("selectors"))})},declarations:function(e){cssHelper.parsed(function(t){e(m.declarations||y("declarations"))})},properties:function(e){cssHelper.parsed(function(t){e(m.properties||y("properties"))})},broadcast:a,addListener:function(e,t){if(typeof t==="function"){if(!u[e]){u[e]={listeners:[]}}u[e].listeners[u[e].listeners.length]=t}},removeListener:function(e,t){if(typeof t==="function"&&u[e]){var n=u[e].listeners;for(var r=0;r<n.length;r++){if(n[r]===t){n.splice(r,1);r-=1}}}},getViewportWidth:function(){return b("Width")},getViewportHeight:function(){return b("Height")}}}();domReady(function(){var t;var n={LENGTH_UNIT:/[0-9]+(em|ex|px|in|cm|mm|pt|pc)$/,RESOLUTION_UNIT:/[0-9]+(dpi|dpcm)$/,ASPECT_RATIO:/^[0-9]+\/[0-9]+$/,ABSOLUTE_VALUE:/^[0-9]*(\.[0-9]+)*$/};var r=[];var i=function(){var e="css3-mediaqueries-test";var t=document.createElement("div");t.id=e;var n=cssHelper.addStyle("@media all and (width) { #"+e+" { width: 1px !important; } }",[],false);document.body.appendChild(t);var r=t.offsetWidth===1;n.parentNode.removeChild(n);t.parentNode.removeChild(t);i=function(){return r};return r};var s=function(){t=document.createElement("div");t.style.cssText="position:absolute;top:-9999em;left:-9999em;"+"margin:0;border:none;padding:0;width:1em;font-size:1em;";document.body.appendChild(t);if(t.offsetWidth!==16){t.style.fontSize=16/t.offsetWidth+"em"}t.style.width=""};var o=function(e){t.style.width=e;var n=t.offsetWidth;t.style.width="";return n};var u=function(e,t){var r=e.length;var i=e.substring(0,4)==="min-";var s=!i&&e.substring(0,4)==="max-";if(t!==null){var u;var a;if(n.LENGTH_UNIT.exec(t)){u="length";a=o(t)}else if(n.RESOLUTION_UNIT.exec(t)){u="resolution";a=parseInt(t,10);var f=t.substring((a+"").length)}else if(n.ASPECT_RATIO.exec(t)){u="aspect-ratio";a=t.split("/")}else if(n.ABSOLUTE_VALUE){u="absolute";a=t}else{u="unknown"}}var l,c;if("device-width"===e.substring(r-12,r)){l=screen.width;if(t!==null){if(u==="length"){return i&&l>=a||s&&l<a||!i&&!s&&l===a}else{return false}}else{return l>0}}else if("device-height"===e.substring(r-13,r)){c=screen.height;if(t!==null){if(u==="length"){return i&&c>=a||s&&c<a||!i&&!s&&c===a}else{return false}}else{return c>0}}else if("width"===e.substring(r-5,r)){l=document.documentElement.clientWidth||document.body.clientWidth;if(t!==null){if(u==="length"){return i&&l>=a||s&&l<a||!i&&!s&&l===a}else{return false}}else{return l>0}}else if("height"===e.substring(r-6,r)){c=document.documentElement.clientHeight||document.body.clientHeight;if(t!==null){if(u==="length"){return i&&c>=a||s&&c<a||!i&&!s&&c===a}else{return false}}else{return c>0}}else if("device-aspect-ratio"===e.substring(r-19,r)){return u==="aspect-ratio"&&screen.width*a[1]===screen.height*a[0]}else if("color-index"===e.substring(r-11,r)){var h=Math.pow(2,screen.colorDepth);if(t!==null){if(u==="absolute"){return i&&h>=a||s&&h<a||!i&&!s&&h===a}else{return false}}else{return h>0}}else if("color"===e.substring(r-5,r)){var p=screen.colorDepth;if(t!==null){if(u==="absolute"){return i&&p>=a||s&&p<a||!i&&!s&&p===a}else{return false}}else{return p>0}}else if("resolution"===e.substring(r-10,r)){var d;if(f==="dpcm"){d=o("1cm")}else{d=o("1in")}if(t!==null){if(u==="resolution"){return i&&d>=a||s&&d<a||!i&&!s&&d===a}else{return false}}else{return d>0}}else{return false}};var a=function(e){var t=e.getValid();var n=e.getExpressions();var r=n.length;if(r>0){for(var i=0;i<r&&t;i++){t=u(n[i].mediaFeature,n[i].value)}var s=e.getNot();return t&&!s||s&&!t}return t};var f=function(e,t){var n=e.getMediaQueries();var i={};for(var s=0;s<n.length;s++){var o=n[s].getMediaType();if(n[s].getExpressions().length===0){continue}var u=true;if(o!=="all"&&t&&t.length>0){u=false;for(var f=0;f<t.length;f++){if(t[f]===o){u=true}}}if(u&&a(n[s])){i[o]=true}}var l=[],c=0;for(var h in i){if(i.hasOwnProperty(h)){if(c>0){l[c++]=","}l[c++]=h}}if(l.length>0){r[r.length]=cssHelper.addStyle("@media "+l.join("")+"{"+e.getCssText()+"}",t,false)}};var l=function(e,t){for(var n=0;n<e.length;n++){f(e[n],t)}};var c=function(e){var t=e.getAttrMediaQueries();var n=false;var i={};for(var s=0;s<t.length;s++){if(a(t[s])){i[t[s].getMediaType()]=t[s].getExpressions().length>0}}var o=[],u=[];for(var f in i){if(i.hasOwnProperty(f)){o[o.length]=f;if(i[f]){u[u.length]=f}if(f==="all"){n=true}}}if(u.length>0){r[r.length]=cssHelper.addStyle(e.getCssText(),u,false)}var c=e.getMediaQueryLists();if(n){l(c)}else{l(c,o)}};var h=function(e){for(var t=0;t<e.length;t++){c(e[t])}if(ua.ie){document.documentElement.style.display="block";setTimeout(function(){document.documentElement.style.display=""},0);setTimeout(function(){cssHelper.broadcast("cssMediaQueriesTested")},100)}else{cssHelper.broadcast("cssMediaQueriesTested")}};var p=function(){for(var e=0;e<r.length;e++){cssHelper.removeStyle(r[e])}r=[];cssHelper.stylesheets(h)};var d=0;var v=function(){var e=cssHelper.getViewportWidth();var t=cssHelper.getViewportHeight();if(ua.ie){var n=document.createElement("div");n.style.position="absolute";n.style.top="-9999em";n.style.overflow="scroll";document.body.appendChild(n);d=n.offsetWidth-n.clientWidth;document.body.removeChild(n)}var r;var s=function(){var n=cssHelper.getViewportWidth();var s=cssHelper.getViewportHeight();if(Math.abs(n-e)>d||Math.abs(s-t)>d){e=n;t=s;clearTimeout(r);r=setTimeout(function(){if(!i()){p()}else{cssHelper.broadcast("cssMediaQueriesTested")}},500)}};window.onresize=function(){var e=window.onresize||function(){};return function(){e();s()}}()};var m=document.documentElement;m.style.marginLeft="-32767px";setTimeout(function(){m.style.marginLeft=""},5e3);return function(){if(!i()){cssHelper.addListener("newStyleParsed",function(e){c(e.cssHelperParsed.stylesheet)});cssHelper.addListener("cssMediaQueriesTested",function(){if(ua.ie){m.style.width="1px"}setTimeout(function(){m.style.width="";m.style.marginLeft=""},0);cssHelper.removeListener("cssMediaQueriesTested",arguments.callee)});s();p()}else{m.style.marginLeft=""}v()}}());try{document.execCommand("BackgroundImageCache",false,true)}catch(e){} diff --git a/sphinx/build/html/_static/css3-mediaqueries_src.js b/sphinx/build/html/_static/css3-mediaqueries_src.js deleted file mode 100644 index f21dd4949aa37f06293f86d3f520c80862ae71b9..0000000000000000000000000000000000000000 --- a/sphinx/build/html/_static/css3-mediaqueries_src.js +++ /dev/null @@ -1,1104 +0,0 @@ -/* -css3-mediaqueries.js - CSS Helper and CSS3 Media Queries Enabler - -author: Wouter van der Graaf <wouter at dynora nl> -version: 1.0 (20110330) -license: MIT -website: http://code.google.com/p/css3-mediaqueries-js/ - -W3C spec: http://www.w3.org/TR/css3-mediaqueries/ - -Note: use of embedded <style> is not recommended when using media queries, because IE has no way of returning the raw literal css text from a <style> element. -*/ - - -// true prototypal inheritance (http://javascript.crockford.com/prototypal.html) -if (typeof Object.create !== 'function') { - Object.create = function (o) { - function F() {} - F.prototype = o; - return new F(); - }; -} - - -// user agent sniffing shortcuts -var ua = { - toString: function () { - return navigator.userAgent; - }, - test: function (s) { - return this.toString().toLowerCase().indexOf(s.toLowerCase()) > -1; - } -}; -ua.version = (ua.toString().toLowerCase().match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1]; -ua.webkit = ua.test('webkit'); -ua.gecko = ua.test('gecko') && !ua.webkit; -ua.opera = ua.test('opera'); -ua.ie = ua.test('msie') && !ua.opera; -ua.ie6 = ua.ie && document.compatMode && typeof document.documentElement.style.maxHeight === 'undefined'; -ua.ie7 = ua.ie && document.documentElement && typeof document.documentElement.style.maxHeight !== 'undefined' && typeof XDomainRequest === 'undefined'; -ua.ie8 = ua.ie && typeof XDomainRequest !== 'undefined'; - - - -// initialize when DOM content is loaded -var domReady = function () { - var fns = []; - var init = function () { - if (!arguments.callee.done) { // run init functions once - arguments.callee.done = true; - for (var i = 0; i < fns.length; i++) { - fns[i](); - } - } - }; - - // listeners for different browsers - if (document.addEventListener) { - document.addEventListener('DOMContentLoaded', init, false); - } - if (ua.ie) { - (function () { - try { - // throws errors until after ondocumentready - document.documentElement.doScroll('left'); - } - catch (e) { - setTimeout(arguments.callee, 50); - return; - } - // no errors, fire - init(); - })(); - // trying to always fire before onload - document.onreadystatechange = function () { - if (document.readyState === 'complete') { - document.onreadystatechange = null; - init(); - } - }; - } - if (ua.webkit && document.readyState) { - (function () { - if (document.readyState !== 'loading') { - init(); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - window.onload = init; // fallback - - return function (fn) { // add fn to init functions - if (typeof fn === 'function') { - fns[fns.length] = fn; - } - return fn; - }; -}(); - - - -// helper library for parsing css to objects -var cssHelper = function () { - - var regExp = { - BLOCKS: /[^\s{;][^{;]*\{(?:[^{}]*\{[^{}]*\}[^{}]*|[^{}]*)*\}/g, - BLOCKS_INSIDE: /[^\s{][^{]*\{[^{}]*\}/g, - DECLARATIONS: /[a-zA-Z\-]+[^;]*:[^;]+;/g, - RELATIVE_URLS: /url\(['"]?([^\/\)'"][^:\)'"]+)['"]?\)/g, - // strip whitespace and comments, @import is evil - REDUNDANT_COMPONENTS: /(?:\/\*([^*\\\\]|\*(?!\/))+\*\/|@import[^;]+;)/g, - REDUNDANT_WHITESPACE: /\s*(,|:|;|\{|\})\s*/g, - WHITESPACE_IN_PARENTHESES: /\(\s*(\S*)\s*\)/g, - MORE_WHITESPACE: /\s{2,}/g, - FINAL_SEMICOLONS: /;\}/g, - NOT_WHITESPACE: /\S+/g - }; - - var parsed, parsing = false; - - var waiting = []; - var wait = function (fn) { - if (typeof fn === 'function') { - waiting[waiting.length] = fn; - } - }; - var ready = function () { - for (var i = 0; i < waiting.length; i++) { - waiting[i](parsed); - } - }; - var events = {}; - var broadcast = function (n, v) { - if (events[n]) { - var listeners = events[n].listeners; - if (listeners) { - for (var i = 0; i < listeners.length; i++) { - listeners[i](v); - } - } - } - }; - - var requestText = function (url, fnSuccess, fnFailure) { - if (ua.ie && !window.XMLHttpRequest) { - window.XMLHttpRequest = function () { - return new ActiveXObject('Microsoft.XMLHTTP'); - }; - } - if (!XMLHttpRequest) { - return ''; - } - var r = new XMLHttpRequest(); - try { - r.open('get', url, true); - r.setRequestHeader('X_REQUESTED_WITH', 'XMLHttpRequest'); - } - catch (e) { - fnFailure(); - return; - } - var done = false; - setTimeout(function () { - done = true; - }, 5000); - document.documentElement.style.cursor = 'progress'; - r.onreadystatechange = function () { - if (r.readyState === 4 && !done) { - if (!r.status && location.protocol === 'file:' || - (r.status >= 200 && r.status < 300) || - r.status === 304 || - navigator.userAgent.indexOf('Safari') > -1 && typeof r.status === 'undefined') { - fnSuccess(r.responseText); - } - else { - fnFailure(); - } - document.documentElement.style.cursor = ''; - r = null; // avoid memory leaks - } - }; - r.send(''); - }; - - var sanitize = function (text) { - text = text.replace(regExp.REDUNDANT_COMPONENTS, ''); - text = text.replace(regExp.REDUNDANT_WHITESPACE, '$1'); - text = text.replace(regExp.WHITESPACE_IN_PARENTHESES, '($1)'); - text = text.replace(regExp.MORE_WHITESPACE, ' '); - text = text.replace(regExp.FINAL_SEMICOLONS, '}'); // optional final semicolons - return text; - }; - - var objects = { - stylesheet: function (el) { - var o = {}; - var amqs = [], mqls = [], rs = [], rsw = []; - var s = el.cssHelperText; - - // add attribute media queries - var attr = el.getAttribute('media'); - if (attr) { - var qts = attr.toLowerCase().split(',') - } - else { - var qts = ['all'] // imply 'all' - } - for (var i = 0; i < qts.length; i++) { - amqs[amqs.length] = objects.mediaQuery(qts[i], o); - } - - // add media query lists and rules (top down order) - var blocks = s.match(regExp.BLOCKS); // @charset is not a block - if (blocks !== null) { - for (var i = 0; i < blocks.length; i++) { - if (blocks[i].substring(0, 7) === '@media ') { // media query (list) - var mql = objects.mediaQueryList(blocks[i], o); - rs = rs.concat(mql.getRules()); - mqls[mqls.length] = mql; - } - else { // regular rule set, page context (@page) or font description (@font-face) - rs[rs.length] = rsw[rsw.length] = objects.rule(blocks[i], o, null); - } - } - } - - o.element = el; - o.getCssText = function () { - return s; - }; - o.getAttrMediaQueries = function () { - return amqs; - }; - o.getMediaQueryLists = function () { - return mqls; - }; - o.getRules = function () { - return rs; - }; - o.getRulesWithoutMQ = function () { - return rsw; - }; - return o; - }, - - mediaQueryList: function (s, stsh) { - var o = {}; - var idx = s.indexOf('{'); - var lt = s.substring(0, idx); - s = s.substring(idx + 1, s.length - 1); - var mqs = [], rs = []; - - // add media queries - var qts = lt.toLowerCase().substring(7).split(','); - for (var i = 0; i < qts.length; i++) { // parse each media query - mqs[mqs.length] = objects.mediaQuery(qts[i], o); - } - - // add rule sets - var rts = s.match(regExp.BLOCKS_INSIDE); - if (rts !== null) { - for (i = 0; i < rts.length; i++) { - rs[rs.length] = objects.rule(rts[i], stsh, o); - } - } - - o.type = 'mediaQueryList'; - o.getMediaQueries = function () { - return mqs; - }; - o.getRules = function () { - return rs; - }; - o.getListText = function () { - return lt; - }; - o.getCssText = function () { - return s; - }; - return o; - }, - - mediaQuery: function (s, listOrSheet) { - s = s || ''; - var mql, stsh; - if (listOrSheet.type === 'mediaQueryList') { - mql = listOrSheet; - } - else { - stsh = listOrSheet; - } - var not = false, type; - var expr = []; - var valid = true; - var tokens = s.match(regExp.NOT_WHITESPACE); - - - - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (!type && (token === 'not' || token === 'only')) { // 'not' and 'only' keywords - // keyword 'only' does nothing, as if it was not present - if (token === 'not') { - not = true; - } - } - else if (!type) { // media type - type = token; - } - else if (token.charAt(0) === '(') { // media feature expression - var pair = token.substring(1, token.length - 1).split(':'); - expr[expr.length] = { - mediaFeature: pair[0], - value: pair[1] || null - }; - } - } - - return { - getQueryText: function () { - return s; - }, - getAttrStyleSheet: function () { - return stsh || null; - }, - getList: function () { - return mql || null; - }, - getValid: function () { - return valid; - }, - getNot: function () { - return not; - }, - getMediaType: function () { - return type; - }, - getExpressions: function () { - return expr; - } - }; - }, - - rule: function (s, stsh, mql) { - var o = {}; - var idx = s.indexOf('{'); - var st = s.substring(0, idx); - var ss = st.split(','); - var ds = []; - var dts = s.substring(idx + 1, s.length - 1).split(';'); - for (var i = 0; i < dts.length; i++) { - ds[ds.length] = objects.declaration(dts[i], o); - } - - o.getStylesheet = function () { - return stsh || null; - }; - o.getMediaQueryList = function () { - return mql || null; - }; - o.getSelectors = function () { - return ss; - }; - o.getSelectorText = function () { - return st; - }; - o.getDeclarations = function () { - return ds; - }; - o.getPropertyValue = function (n) { - for (var i = 0; i < ds.length; i++) { - if (ds[i].getProperty() === n) { - return ds[i].getValue(); - } - } - return null; - }; - return o; - }, - - declaration: function (s, r) { - var idx = s.indexOf(':'); - var p = s.substring(0, idx); - var v = s.substring(idx + 1); - return { - getRule: function () { - return r || null; - }, - getProperty: function () { - return p; - }, - getValue: function () { - return v; - } - }; - } - }; - - var parseText = function (el) { - if (typeof el.cssHelperText !== 'string') { - return; - } - var o = { - stylesheet: null, - mediaQueryLists: [], - rules: [], - selectors: {}, - declarations: [], - properties: {} - }; - - // build stylesheet object - var stsh = o.stylesheet = objects.stylesheet(el); - - // collect media query lists - var mqls = o.mediaQueryLists = stsh.getMediaQueryLists(); - - // collect all rules - var ors = o.rules = stsh.getRules(); - - // collect all selectors - var oss = o.selectors; - var collectSelectors = function (r) { - var ss = r.getSelectors(); - for (var i = 0; i < ss.length; i++) { - var n = ss[i]; - if (!oss[n]) { - oss[n] = []; - } - oss[n][oss[n].length] = r; - } - }; - for (var i = 0; i < ors.length; i++) { - collectSelectors(ors[i]); - } - - // collect all declarations - var ods = o.declarations; - for (i = 0; i < ors.length; i++) { - ods = o.declarations = ods.concat(ors[i].getDeclarations()); - } - - // collect all properties - var ops = o.properties; - for (i = 0; i < ods.length; i++) { - var n = ods[i].getProperty(); - if (!ops[n]) { - ops[n] = []; - } - ops[n][ops[n].length] = ods[i]; - } - - el.cssHelperParsed = o; - parsed[parsed.length] = el; - return o; - }; - - var parseEmbedded = function (el, s) { - return; - // This function doesn't work because of a bug in IE, where innerHTML gives us parsed css instead of raw literal. - el.cssHelperText = sanitize(s || el.innerHTML); - return parseText(el); - }; - - var parse = function () { - parsing = true; - parsed = []; - var linked = []; - var finish = function () { - for (var i = 0; i < linked.length; i++) { - parseText(linked[i]); - } - var styles = document.getElementsByTagName('style'); - for (i = 0; i < styles.length; i++) { - parseEmbedded(styles[i]); - } - parsing = false; - ready(); - }; - var links = document.getElementsByTagName('link'); - for (var i = 0; i < links.length; i++) { - var link = links[i]; - if (link.getAttribute('rel').indexOf('style') > -1 && link.href && link.href.length !== 0 && !link.disabled) { - linked[linked.length] = link; - } - } - if (linked.length > 0) { - var c = 0; - var checkForFinish = function () { - c++; - if (c === linked.length) { // parse in right order, so after last link is read - finish(); - } - }; - var processLink = function (link) { - var href = link.href; - requestText(href, function (text) { - // fix url's - text = sanitize(text).replace(regExp.RELATIVE_URLS, 'url(' + href.substring(0, href.lastIndexOf('/')) + '/$1)'); - link.cssHelperText = text; - checkForFinish(); - }, checkForFinish); - }; - for (i = 0; i < linked.length; i++) { - processLink(linked[i]); - } - } - else { - finish(); - } - }; - - var types = { - stylesheets: 'array', - mediaQueryLists: 'array', - rules: 'array', - selectors: 'object', - declarations: 'array', - properties: 'object' - }; - - var collections = { - stylesheets: null, - mediaQueryLists: null, - rules: null, - selectors: null, - declarations: null, - properties: null - }; - - var addToCollection = function (name, v) { - if (collections[name] !== null) { - if (types[name] === 'array') { - return (collections[name] = collections[name].concat(v)); - } - else { - var c = collections[name]; - for (var n in v) { - if (v.hasOwnProperty(n)) { - if (!c[n]) { - c[n] = v[n]; - } - else { - c[n] = c[n].concat(v[n]); - } - } - } - return c; - } - } - }; - - var collect = function (name) { - collections[name] = (types[name] === 'array') ? [] : {}; - for (var i = 0; i < parsed.length; i++) { - var pname = name === 'stylesheets' ? 'stylesheet' : name; // the exception - addToCollection(name, parsed[i].cssHelperParsed[pname]); - } - return collections[name]; - }; - - // viewport size - var getViewportSize = function (d) { - if (typeof window.innerWidth != 'undefined') { - return window['inner' + d]; - } - else if (typeof document.documentElement !== 'undefined' - && typeof document.documentElement.clientWidth !== 'undefined' - && document.documentElement.clientWidth != 0) { - return document.documentElement['client' + d]; - } - }; - - // public static functions - return { - addStyle: function (s, mediaTypes, process) { - var el = document.createElement('style'); - el.setAttribute('type', 'text/css'); - if (mediaTypes && mediaTypes.length > 0) { - el.setAttribute('media', mediaTypes.join(',')); - } - document.getElementsByTagName('head')[0].appendChild(el); - if (el.styleSheet) { // IE - el.styleSheet.cssText = s; - } - else { - el.appendChild(document.createTextNode(s)); - } - el.addedWithCssHelper = true; - if (typeof process === 'undefined' || process === true) { - cssHelper.parsed(function (parsed) { - var o = parseEmbedded(el, s); - for (var n in o) { - if (o.hasOwnProperty(n)) { - addToCollection(n, o[n]); - } - } - broadcast('newStyleParsed', el); - }); - } - else { - el.parsingDisallowed = true; - } - return el; - }, - - removeStyle: function (el) { - return el.parentNode.removeChild(el); - }, - - parsed: function (fn) { - if (parsing) { - wait(fn); - } - else { - if (typeof parsed !== 'undefined') { - if (typeof fn === 'function') { - fn(parsed); - } - } - else { - wait(fn); - parse(); - } - } - }, - - stylesheets: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.stylesheets || collect('stylesheets')); - }); - }, - - mediaQueryLists: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.mediaQueryLists || collect('mediaQueryLists')); - }); - }, - - rules: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.rules || collect('rules')); - }); - }, - - selectors: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.selectors || collect('selectors')); - }); - }, - - declarations: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.declarations || collect('declarations')); - }); - }, - - properties: function (fn) { - cssHelper.parsed(function (parsed) { - fn(collections.properties || collect('properties')); - }); - }, - - broadcast: broadcast, - - addListener: function (n, fn) { // in case n is 'styleadd': added function is called everytime style is added and parsed - if (typeof fn === 'function') { - if (!events[n]) { - events[n] = { - listeners: [] - }; - } - events[n].listeners[events[n].listeners.length] = fn; - } - }, - - removeListener: function (n, fn) { - if (typeof fn === 'function' && events[n]) { - var ls = events[n].listeners; - for (var i = 0; i < ls.length; i++) { - if (ls[i] === fn) { - ls.splice(i, 1); - i -= 1; - } - } - } - }, - - getViewportWidth: function () { - return getViewportSize('Width'); - }, - - getViewportHeight: function () { - return getViewportSize('Height'); - } - }; -}(); - - - -// function to test and apply parsed media queries against browser capabilities -domReady(function enableCssMediaQueries() { - var meter; - - var regExp = { - LENGTH_UNIT: /[0-9]+(em|ex|px|in|cm|mm|pt|pc)$/, - RESOLUTION_UNIT: /[0-9]+(dpi|dpcm)$/, - ASPECT_RATIO: /^[0-9]+\/[0-9]+$/, - ABSOLUTE_VALUE: /^[0-9]*(\.[0-9]+)*$/ - }; - - var styles = []; - - var nativeSupport = function () { - // check support for media queries - var id = 'css3-mediaqueries-test'; - var el = document.createElement('div'); - el.id = id; - var style = cssHelper.addStyle('@media all and (width) { #' + id + - ' { width: 1px !important; } }', [], false); // false means don't parse this temp style - document.body.appendChild(el); - var ret = el.offsetWidth === 1; - style.parentNode.removeChild(style); - el.parentNode.removeChild(el); - nativeSupport = function () { - return ret; - }; - return ret; - }; - - var createMeter = function () { // create measuring element - meter = document.createElement('div'); - meter.style.cssText = 'position:absolute;top:-9999em;left:-9999em;' + - 'margin:0;border:none;padding:0;width:1em;font-size:1em;'; // cssText is needed for IE, works for the others - document.body.appendChild(meter); - // meter must have browser default font size of 16px - if (meter.offsetWidth !== 16) { - meter.style.fontSize = 16 / meter.offsetWidth + 'em'; - } - meter.style.width = ''; - }; - - var measure = function (value) { - meter.style.width = value; - var amount = meter.offsetWidth; - meter.style.width = ''; - return amount; - }; - - var testMediaFeature = function (feature, value) { - // non-testable features: monochrome|min-monochrome|max-monochrome|scan|grid - var l = feature.length; - var min = (feature.substring(0, 4) === 'min-'); - var max = (!min && feature.substring(0, 4) === 'max-'); - - if (value !== null) { // determine value type and parse to usable amount - var valueType; - var amount; - if (regExp.LENGTH_UNIT.exec(value)) { - valueType = 'length'; - amount = measure(value); - } - else if (regExp.RESOLUTION_UNIT.exec(value)) { - valueType = 'resolution'; - amount = parseInt(value, 10); - var unit = value.substring((amount + '').length); - } - else if (regExp.ASPECT_RATIO.exec(value)) { - valueType = 'aspect-ratio'; - amount = value.split('/'); - } - else if (regExp.ABSOLUTE_VALUE) { - valueType = 'absolute'; - amount = value; - } - else { - valueType = 'unknown'; - } - } - - var width, height; - if ('device-width' === feature.substring(l - 12, l)) { // screen width - width = screen.width; - if (value !== null) { - if (valueType === 'length') { - return ((min && width >= amount) || (max && width < amount) || (!min && !max && width === amount)); - } - else { - return false; - } - } - else { // test width without value - return width > 0; - } - } - else if ('device-height' === feature.substring(l - 13, l)) { // screen height - height = screen.height; - if (value !== null) { - if (valueType === 'length') { - return ((min && height >= amount) || (max && height < amount) || (!min && !max && height === amount)); - } - else { - return false; - } - } - else { // test height without value - return height > 0; - } - } - else if ('width' === feature.substring(l - 5, l)) { // viewport width - width = document.documentElement.clientWidth || document.body.clientWidth; // the latter for IE quirks mode - if (value !== null) { - if (valueType === 'length') { - return ((min && width >= amount) || (max && width < amount) || (!min && !max && width === amount)); - } - else { - return false; - } - } - else { // test width without value - return width > 0; - } - } - else if ('height' === feature.substring(l - 6, l)) { // viewport height - height = document.documentElement.clientHeight || document.body.clientHeight; // the latter for IE quirks mode - if (value !== null) { - if (valueType === 'length') { - return ((min && height >= amount) || (max && height < amount) || (!min && !max && height === amount)); - } - else { - return false; - } - } - else { // test height without value - return height > 0; - } - } - else if ('device-aspect-ratio' === feature.substring(l - 19, l)) { // screen aspect ratio - return valueType === 'aspect-ratio' && screen.width * amount[1] === screen.height * amount[0]; - } - else if ('color-index' === feature.substring(l - 11, l)) { // number of colors - var colors = Math.pow(2, screen.colorDepth); - if (value !== null) { - if (valueType === 'absolute') { - return ((min && colors >= amount) || (max && colors < amount) || (!min && !max && colors === amount)); - } - else { - return false; - } - } - else { // test height without value - return colors > 0; - } - } - else if ('color' === feature.substring(l - 5, l)) { // bits per color component - var color = screen.colorDepth; - if (value !== null) { - if (valueType === 'absolute') { - return ((min && color >= amount) || (max && color < amount) || (!min && !max && color === amount)); - } - else { - return false; - } - } - else { // test height without value - return color > 0; - } - } - else if ('resolution' === feature.substring(l - 10, l)) { - var res; - if (unit === 'dpcm') { - res = measure('1cm'); - } - else { - res = measure('1in'); - } - if (value !== null) { - if (valueType === 'resolution') { - return ((min && res >= amount) || (max && res < amount) || (!min && !max && res === amount)); - } - else { - return false; - } - } - else { // test height without value - return res > 0; - } - } - else { - return false; - } - }; - - var testMediaQuery = function (mq) { - var test = mq.getValid(); - var expressions = mq.getExpressions(); - var l = expressions.length; - if (l > 0) { - for (var i = 0; i < l && test; i++) { - test = testMediaFeature(expressions[i].mediaFeature, expressions[i].value); - } - var not = mq.getNot(); - return (test && !not || not && !test); - } - return test; - }; - - var testMediaQueryList = function (mql, ts) { - // ts is null or an array with any media type but 'all'. - var mqs = mql.getMediaQueries(); - var t = {}; - for (var i = 0; i < mqs.length; i++) { - var type = mqs[i].getMediaType(); - if (mqs[i].getExpressions().length === 0) { - continue; - // TODO: Browser check! Assuming old browsers do apply the bare media types, even in a list with media queries. - } - var typeAllowed = true; - if (type !== 'all' && ts && ts.length > 0) { - typeAllowed = false; - for (var j = 0; j < ts.length; j++) { - if (ts[j] === type) { - typeAllowed = true; - } - } - } - if (typeAllowed && testMediaQuery(mqs[i])) { - t[type] = true; - } - } - var s = [], c = 0; - for (var n in t) { - if (t.hasOwnProperty(n)) { - if (c > 0) { - s[c++] = ','; - } - s[c++] = n; - } - } - if (s.length > 0) { - styles[styles.length] = cssHelper.addStyle('@media ' + s.join('') + '{' + mql.getCssText() + '}', ts, false); - } - }; - - var testMediaQueryLists = function (mqls, ts) { - for (var i = 0; i < mqls.length; i++) { - testMediaQueryList(mqls[i], ts); - } - }; - - var testStylesheet = function (stsh) { - var amqs = stsh.getAttrMediaQueries(); - var allPassed = false; - var t = {}; - for (var i = 0; i < amqs.length; i++) { - if (testMediaQuery(amqs[i])) { - t[amqs[i].getMediaType()] = amqs[i].getExpressions().length > 0; - } - } - var ts = [], tswe = []; - for (var n in t) { - if (t.hasOwnProperty(n)) { - ts[ts.length] = n; - if (t[n]) { - tswe[tswe.length] = n - } - if (n === 'all') { - allPassed = true; - } - } - } - if (tswe.length > 0) { // types with query expressions that passed the test - styles[styles.length] = cssHelper.addStyle(stsh.getCssText(), tswe, false); - } - var mqls = stsh.getMediaQueryLists(); - if (allPassed) { - // If 'all' in media attribute passed the test, then test all @media types in linked CSS and create style with those types. - testMediaQueryLists(mqls); - } - else { - // Or else, test only media attribute types that passed the test and also 'all'. - // For positive '@media all', create style with attribute types that passed their test. - testMediaQueryLists(mqls, ts); - } - }; - - var testStylesheets = function (stshs) { - for (var i = 0; i < stshs.length; i++) { - testStylesheet(stshs[i]); - } - if (ua.ie) { - // force repaint in IE - document.documentElement.style.display = 'block'; - setTimeout(function () { - document.documentElement.style.display = ''; - }, 0); - // delay broadcast somewhat for IE - setTimeout(function () { - cssHelper.broadcast('cssMediaQueriesTested'); - }, 100); - } - else { - cssHelper.broadcast('cssMediaQueriesTested'); - } - }; - - var test = function () { - for (var i = 0; i < styles.length; i++) { - cssHelper.removeStyle(styles[i]); - } - styles = []; - cssHelper.stylesheets(testStylesheets); - }; - - var scrollbarWidth = 0; - var checkForResize = function () { - var cvpw = cssHelper.getViewportWidth(); - var cvph = cssHelper.getViewportHeight(); - - // determine scrollbar width in IE, see resizeHandler - if (ua.ie) { - var el = document.createElement('div'); - el.style.position = 'absolute'; - el.style.top = '-9999em'; - el.style.overflow = 'scroll'; - document.body.appendChild(el); - scrollbarWidth = el.offsetWidth - el.clientWidth; - document.body.removeChild(el); - } - - var timer; - var resizeHandler = function () { - var vpw = cssHelper.getViewportWidth(); - var vph = cssHelper.getViewportHeight(); - // check whether vp size has really changed, because IE also triggers resize event when body size changes - // 20px allowance to accomodate short appearance of scrollbars in IE in some cases - if (Math.abs(vpw - cvpw) > scrollbarWidth || Math.abs(vph - cvph) > scrollbarWidth) { - cvpw = vpw; - cvph = vph; - clearTimeout(timer); - timer = setTimeout(function () { - if (!nativeSupport()) { - test(); - } - else { - cssHelper.broadcast('cssMediaQueriesTested'); - } - }, 500); - } - }; - - window.onresize = function () { - var x = window.onresize || function () {}; // save original - return function () { - x(); - resizeHandler(); - }; - }(); - }; - - // prevent jumping of layout by hiding everything before painting <body> - var docEl = document.documentElement; - docEl.style.marginLeft = '-32767px'; - - // make sure it comes back after a while - setTimeout(function () { - docEl.style.marginLeft = ''; - }, 5000); - - return function () { - if (!nativeSupport()) { // if browser doesn't support media queries - cssHelper.addListener('newStyleParsed', function (el) { - testStylesheet(el.cssHelperParsed.stylesheet); - }); - // return visibility after media queries are tested - cssHelper.addListener('cssMediaQueriesTested', function () { - // force repaint in IE by changing width - if (ua.ie) { - docEl.style.width = '1px'; - } - setTimeout(function () { - docEl.style.width = ''; // undo width - docEl.style.marginLeft = ''; // undo hide - }, 0); - // remove this listener to prevent following execution - cssHelper.removeListener('cssMediaQueriesTested', arguments.callee); - }); - createMeter(); - test(); - } - else { - docEl.style.marginLeft = ''; // undo visibility hidden - } - checkForResize(); - }; -}()); - - -// bonus: hotfix for IE6 SP1 (bug KB823727) -try { - document.execCommand('BackgroundImageCache', false, true); -} catch (e) {} diff --git a/sphinx/build/html/_static/sidebar.js b/sphinx/build/html/_static/sidebar.js deleted file mode 100644 index 657f8be523d9347a131f6cd79399bec5aaa872b5..0000000000000000000000000000000000000000 --- a/sphinx/build/html/_static/sidebar.js +++ /dev/null @@ -1,159 +0,0 @@ -/* - * sidebar.js - * ~~~~~~~~~~ - * - * This script makes the Sphinx sidebar collapsible. - * - * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds - * in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton - * used to collapse and expand the sidebar. - * - * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden - * and the width of the sidebar and the margin-left of the document - * are decreased. When the sidebar is expanded the opposite happens. - * This script saves a per-browser/per-session cookie used to - * remember the position of the sidebar among the pages. - * Once the browser is closed the cookie is deleted and the position - * reset to the default (expanded). - * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -$(function() { - - - - - - - - - // global elements used by the functions. - // the 'sidebarbutton' element is defined as global after its - // creation, in the add_sidebar_button function - var bodywrapper = $('.bodywrapper'); - var sidebar = $('.sphinxsidebar'); - var sidebarwrapper = $('.sphinxsidebarwrapper'); - - // for some reason, the document has no sidebar; do not run into errors - if (!sidebar.length) return; - - // original margin-left of the bodywrapper and width of the sidebar - // with the sidebar expanded - var bw_margin_expanded = bodywrapper.css('margin-left'); - var ssb_width_expanded = sidebar.width(); - - // margin-left of the bodywrapper and width of the sidebar - // with the sidebar collapsed - var bw_margin_collapsed = '.8em'; - var ssb_width_collapsed = '.8em'; - - // colors used by the current theme - var dark_color = $('.related').css('background-color'); - var light_color = $('.document').css('background-color'); - - function sidebar_is_collapsed() { - return sidebarwrapper.is(':not(:visible)'); - } - - function toggle_sidebar() { - if (sidebar_is_collapsed()) - expand_sidebar(); - else - collapse_sidebar(); - } - - function collapse_sidebar() { - sidebarwrapper.hide(); - sidebar.css('width', ssb_width_collapsed); - bodywrapper.css('margin-left', bw_margin_collapsed); - sidebarbutton.css({ - 'margin-left': '0', - 'height': bodywrapper.height() - }); - sidebarbutton.find('span').text('»'); - sidebarbutton.attr('title', _('Expand sidebar')); - document.cookie = 'sidebar=collapsed'; - } - - function expand_sidebar() { - bodywrapper.css('margin-left', bw_margin_expanded); - sidebar.css('width', ssb_width_expanded); - sidebarwrapper.show(); - sidebarbutton.css({ - 'margin-left': ssb_width_expanded-12, - 'height': bodywrapper.height() - }); - sidebarbutton.find('span').text('«'); - sidebarbutton.attr('title', _('Collapse sidebar')); - document.cookie = 'sidebar=expanded'; - } - - function add_sidebar_button() { - sidebarwrapper.css({ - 'float': 'left', - 'margin-right': '0', - 'width': ssb_width_expanded - 28 - }); - // create the button - sidebar.append( - '<div id="sidebarbutton"><span>«</span></div>' - ); - var sidebarbutton = $('#sidebarbutton'); - light_color = sidebarbutton.css('background-color'); - // find the height of the viewport to center the '<<' in the page - var viewport_height; - if (window.innerHeight) - viewport_height = window.innerHeight; - else - viewport_height = $(window).height(); - sidebarbutton.find('span').css({ - 'display': 'block', - 'margin-top': (viewport_height - sidebar.position().top - 20) / 2 - }); - - sidebarbutton.click(toggle_sidebar); - sidebarbutton.attr('title', _('Collapse sidebar')); - sidebarbutton.css({ - 'color': '#FFFFFF', - 'border-left': '1px solid ' + dark_color, - 'font-size': '1.2em', - 'cursor': 'pointer', - 'height': bodywrapper.height(), - 'padding-top': '1px', - 'margin-left': ssb_width_expanded - 12 - }); - - sidebarbutton.hover( - function () { - $(this).css('background-color', dark_color); - }, - function () { - $(this).css('background-color', light_color); - } - ); - } - - function set_position_from_cookie() { - if (!document.cookie) - return; - var items = document.cookie.split(';'); - for(var k=0; k<items.length; k++) { - var key_val = items[k].split('='); - var key = key_val[0].replace(/ /, ""); // strip leading spaces - if (key == 'sidebar') { - var value = key_val[1]; - if ((value == 'collapsed') && (!sidebar_is_collapsed())) - collapse_sidebar(); - else if ((value == 'expanded') && (sidebar_is_collapsed())) - expand_sidebar(); - } - } - } - - add_sidebar_button(); - var sidebarbutton = $('#sidebarbutton'); - set_position_from_cookie(); -}); \ No newline at end of file diff --git a/sphinx/build/html/genindex.html b/sphinx/build/html/genindex.html index 1e2814a43367f3f91a13b56f99cc40d2311d97a6..a36aeebe725209c6247072beda87796a27fae559 100644 --- a/sphinx/build/html/genindex.html +++ b/sphinx/build/html/genindex.html @@ -82,9 +82,9 @@ <ul> -<li class="toctree-l1"><a class="reference internal" href="page0.html">Premiere page</a></li> -<li class="toctree-l1"><a class="reference internal" href="page1.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> -<li class="toctree-l1"><a class="reference internal" href="page2.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="Ohmpi.html">OhmPi project</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_01.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_02.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> </ul> diff --git a/sphinx/build/html/index.html b/sphinx/build/html/index.html index c623ed220b0f490cd058b4d1565b6ac48224e28e..a6f0bead716a16397ad7ed42b71cc7cf12e50b7e 100644 --- a/sphinx/build/html/index.html +++ b/sphinx/build/html/index.html @@ -37,7 +37,7 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> - <link rel="next" title="Premiere page" href="page0.html" /> + <link rel="next" title="OhmPi project" href="Ohmpi.html" /> </head> <body class="wy-body-for-nav"> @@ -83,9 +83,9 @@ <ul> -<li class="toctree-l1"><a class="reference internal" href="page0.html">Premiere page</a></li> -<li class="toctree-l1"><a class="reference internal" href="page1.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> -<li class="toctree-l1"><a class="reference internal" href="page2.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="Ohmpi.html">OhmPi project</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_01.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_02.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> </ul> @@ -160,7 +160,7 @@ <dd class="field-odd"><p>open hardware resistivity-meter</p> </dd> <dt class="field-even">Date</dt> -<dd class="field-even"><p>Dec 18, 2020</p> +<dd class="field-even"><p>Dec 21, 2020</p> </dd> <dt class="field-odd">Date start</dt> <dd class="field-odd"><p>July 2016</p> @@ -188,30 +188,30 @@ <p>Contents:</p> <div class="toctree-wrapper compound"> <ul> -<li class="toctree-l1"><a class="reference internal" href="page0.html">Premiere page</a><ul> -<li class="toctree-l2"><a class="reference internal" href="page0.html#ohmpi-project"><strong>OhmPi project</strong></a></li> +<li class="toctree-l1"><a class="reference internal" href="Ohmpi.html">OhmPi project</a><ul> +<li class="toctree-l2"><a class="reference internal" href="Ohmpi.html#partenaires"><strong>Partenaires</strong></a></li> </ul> </li> -<li class="toctree-l1"><a class="reference internal" href="page1.html">OhmPi V 1.01 (limited to 32 electrodes)</a><ul> -<li class="toctree-l2"><a class="reference internal" href="page1.html#the-philosophy-of-ohmpi">The philosophy of Ohmpi</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#technical-data">Technical data</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#raspberry-pi-configuration">Raspberry Pi configuration</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#assembly-of-the-measuring-current-injection-cards-and-connection-with-the-raspberry-pi">Assembly of the measuring/current injection cards, and connection with the Raspberry Pi</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#multiplexer-implentation">Multiplexer implentation</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#electrode-connection">Electrode connection</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#operating-instruction">Operating instruction</a></li> -<li class="toctree-l2"><a class="reference internal" href="page1.html#complete-list-of-components">Complete list of components</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_01.html">OhmPi V 1.01 (limited to 32 electrodes)</a><ul> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#the-philosophy-of-ohmpi">The philosophy of Ohmpi</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#technical-data">Technical data</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#raspberry-pi-configuration">Raspberry Pi configuration</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#assembly-of-the-measuring-current-injection-cards-and-connection-with-the-raspberry-pi">Assembly of the measuring/current injection cards, and connection with the Raspberry Pi</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#multiplexer-implentation">Multiplexer implentation</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#electrode-connection">Electrode connection</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#operating-instruction">Operating instruction</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_01.html#complete-list-of-components">Complete list of components</a></li> </ul> </li> -<li class="toctree-l1"><a class="reference internal" href="page2.html">OhmPi V 1.02 (limited to 32 electrodes)</a><ul> -<li class="toctree-l2"><a class="reference internal" href="page2.html#the-philosophy-of-ohmpi">The philosophy of Ohmpi</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#technical-data">Technical data</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#raspberry-pi-configuration">Raspberry Pi configuration</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#assembly-of-the-measuring-current-injection-cards-and-connection-with-the-raspberry-pi">Assembly of the measuring/current injection cards, and connection with the Raspberry Pi</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#multiplexer-implentation">Multiplexer implentation</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#electrode-connection">Electrode connection</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#operating-instruction">Operating instruction</a></li> -<li class="toctree-l2"><a class="reference internal" href="page2.html#complete-list-of-components">Complete list of components</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_02.html">OhmPi V 1.02 (limited to 32 electrodes)</a><ul> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#the-philosophy-of-ohmpi">The philosophy of Ohmpi</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#technical-data">Technical data</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#raspberry-pi-configuration">Raspberry Pi configuration</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#assembly-of-the-measuring-current-injection-cards-and-connection-with-the-raspberry-pi">Assembly of the measuring/current injection cards, and connection with the Raspberry Pi</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#multiplexer-implentation">Multiplexer implentation</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#electrode-connection">Electrode connection</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#operating-instruction">Operating instruction</a></li> +<li class="toctree-l2"><a class="reference internal" href="V1_02.html#complete-list-of-components">Complete list of components</a></li> </ul> </li> </ul> @@ -226,7 +226,7 @@ <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> - <a href="page0.html" class="btn btn-neutral float-right" title="Premiere page" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + <a href="Ohmpi.html" class="btn btn-neutral float-right" title="OhmPi project" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> </div> diff --git a/sphinx/build/html/objects.inv b/sphinx/build/html/objects.inv index 04815e6243a226c03bb189a7cf544cb2b46666fa..24b41f4783bf0e931ce294070d61de4d320b133a 100644 Binary files a/sphinx/build/html/objects.inv and b/sphinx/build/html/objects.inv differ diff --git a/sphinx/build/html/search.html b/sphinx/build/html/search.html index 5a13e07f2b04faf65a4a926694a0ef88d3311704..e7bba42211069dcc0ef77a3fcd07538eb9a0d4d0 100644 --- a/sphinx/build/html/search.html +++ b/sphinx/build/html/search.html @@ -84,9 +84,9 @@ <ul> -<li class="toctree-l1"><a class="reference internal" href="page0.html">Premiere page</a></li> -<li class="toctree-l1"><a class="reference internal" href="page1.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> -<li class="toctree-l1"><a class="reference internal" href="page2.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="Ohmpi.html">OhmPi project</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_01.html">OhmPi V 1.01 (limited to 32 electrodes)</a></li> +<li class="toctree-l1"><a class="reference internal" href="V1_02.html">OhmPi V 1.02 (limited to 32 electrodes)</a></li> </ul> diff --git a/sphinx/build/html/searchindex.js b/sphinx/build/html/searchindex.js index a7e5aa7e30f451e17cced06e031a0b2301275891..97ec4d7972e224644f214529682a81c1eadc925f 100644 --- a/sphinx/build/html/searchindex.js +++ b/sphinx/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["index","page0","page1","page2"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["index.rst","page0.rst","page1.rst","page2.rst"],objects:{},objnames:{},objtypes:{},terms:{"100nf":3,"10nf":[],"10v":3,"12v":[2,3],"1x0":[2,3],"1x1":[2,3],"1x10":[2,3],"24v":3,"400px":[],"50vdc":3,"5vcc":[2,3],"5vdc":[2,3],"7ah":[2,3],"800px":[],"ao\u00fbt":1,"case":[2,3],"cr\u00e9er":[],"d\u00e9mo":[],"esp\u00e8r":[],"final":[2,3],"function":[1,2,3],"h\u00e9l\u00e8ne":[0,1],"install\u00e9":[],"justifi\u00e9":[],"mm\u00b2":[2,3],"nec\u00e9ssair":[],"new":[2,3],"orl\u00e9an":1,"param\u00e8tr":[],"pr\u00e9sent":[],"pr\u00e9sentat":[],"premi\u00e8r":[],"public":[2,3],"r\u00e9mi":[0,1],"r\u00e9sistanc":[],"return":[2,3],"switch":[2,3],"universit\u00e9":1,"vid\u00e9o":[2,3],ADS:[2,3],CMS:[2,3],For:[2,3],IDE:[],IGE:1,Its:[2,3],The:0,These:[2,3],With:[2,3],abmn:[2,3],abov:[2,3],acc:[2,3],access:[2,3],accord:[2,3],accur:[2,3],accuraci:[2,3],acid:[2,3],activ:[],actual:[2,3],adafruit:[2,3],adapt:[2,3],adc:[2,3],add:[2,3],added:[2,3],adding:[2,3],addit:[2,3],address:[2,3],adjust:[2,3],administr:[],ads1115:[2,3],ads115:[2,3],ads1x15:[2,3],after:[2,3],albatross:[],align:[],all:[2,3],allow:[1,2,3],alp:1,also:[2,3],alt:[],altern:[2,3],amp:[2,3],amplifi:[2,3],analog:[2,3],angl:[],ani:[2,3],anoth:[2,3],aop:[],appear:[2,3],appli:[2,3],applic:1,apt:[2,3],arduino:2,arm:2,arrai:[2,3],articl:[2,3],asler:[2,3],assembl:0,assist:[2,3],associ:1,attent:[2,3],attribut:[2,3],aug:[],author:[0,1,2,3],automat:[1,2,3],automobil:[2,3],avail:[2,3],avon:[],avr:2,bank:[2,3],barbeau:[],base:[2,3],basic:1,batteri:[2,3],been:[2,3],befor:[2,3],behavior:[2,3],being:[2,3],below:[2,3],between:[2,3],bin:[2,3],bit:[2,3],black:[2,3],blinka:[2,3],block:[2,3],blue:[2,3],bluetext:[],board:[],bodytext:[],bone:[],boot:[2,3],both:[2,3],bottom:[2,3],bought:[2,3],bridg:[2,3],bug:2,build:[2,3],button:[2,3],c320c104k1:3,c_1:[],c_2:[],cabl:[2,3],calcul:[2,3],calibr:[2,3],call:1,can:[2,3],canal:2,cap:[2,3],capac:[2,3],capacitor:3,caption:[],car:2,card:0,carri:[2,3],caus:[2,3],ceci:[],cedex:1,cela:[],center:[],ceram:3,chacun:[],channel:[2,3],characterist:[2,3],charg:[2,3],check:[2,3],chosen:[2,3],christoph:[],circuit:[2,3],circuitpython:[2,3],circul:[2,3],clean:[2,3],clement:[0,1],click:[2,3],close:[2,3],code:[2,3],coef_p0:[2,3],coef_p1:[2,3],coef_p2:[2,3],coef_p3:[2,3],coeff:[2,3],coeff_:[],coeff_p0:[],coeff_p1:[],coeff_p3:[],coeff_p_:[],coeffici:[2,3],cokela:[],com:[2,3],command:[2,3],commerci:[2,3],common:[2,3],commun:1,complet:0,compon:0,comput:[2,3],conduct:[2,3],config:[2,3],configur:0,congratul:[2,3],connect:0,connector:[2,3],consequ:[2,3],consist:[2,3],constitut:[2,3],construct:[2,3],consult:[],consumpt:[2,3],contact:[2,3],contain:[2,3],content:0,control:[2,3],convers:[2,3],convert:[2,3],correct:[2,3],correspond:2,corrig:[],cos:[],cost:[1,2,3],could:[2,3],cpu:[2,3],creat:[2,3],creation:1,crimp:[2,3],crunchi:[],csv:[2,3],ctrl:[2,3],currenc:[],current:[0,1],damag:[2,3],dan:[],daniel:[],data:[0,1],date:[0,1,2,3],dcconvert:3,deactiv:[2,3],dec:0,decid:[2,3],decoupl:3,dedic:1,degre:[],delai:[2,3],deliv:[2,3],demo:[],depend:[2,3],des:[],describ:[2,3],design:[2,3],desktop:3,despit:[2,3],detail:2,dev:[2,3],develop:[0,1,2,3],developp:[],diagram:[2,3],differ:[2,3],digit:[2,3],din:[2,3],direct:[2,3],directli:[2,3],directori:[2,3],disconnect:[2,3],displai:[2,3],distanc:[2,3],disturb:[2,3],divid:[2,3],diviseur:[],dkfjshkdfh:[],doc:[],document:[1,2],doe:[],done:[2,3],down:[2,3],download:[2,3],dsp:2,dual:[2,3],duboi:[0,1],durat:[2,3],dure:[2,3],dzwb4:[2,3],e00122ff:1,each:[2,3],editor:[2,3],eiffel:1,either:[2,3],electr:1,electrod:[0,1],electron:[2,3],elsevi:1,emil:1,enabl:[2,3],end:[2,3],energ:[2,3],enough:[2,3],ensur:[2,3],enter:[2,3],entir:[2,3],environ:[2,3],environn:[],environnementshould:[2,3],equal:[2,3],equival:[2,3],eric:[],ert:[2,3],escap:[2,3],est:[],estim:[2,3],everyon:1,evolv:[2,3],exampl:[2,3],excess:[2,3],execut:[2,3],exist:[2,3],experi:[1,2,3],explain:2,export_path:3,extra:[2,3],failur:[2,3],fair:[],fargier:[0,1],fast:3,featur:[2,3],femal:[2,3],ferrul:[2,3],fewer:[2,3],ff10:1,fhac0002zxj:2,fichier:[],field:[2,3],fig:[2,3],figclass:[],figur:[2,3],file:[2,3],find:[2,3],first:[2,3],flexibl:1,florsch:[2,3],flow:[2,3],folder:[2,3],follow:[2,3],fonctionn:[],formul:[],forquet:[0,1],four:[],framework:[2,3],franc:1,frog:[],from:[2,3],full:[2,3],fulli:1,fuse:[2,3],gain:[2,3],ganc:[0,1],gannet:[],gather:[2,3],gener:[0,2,3],ger:1,get:[1,2,3],gitlab:[2,3],gnd:[2,3],gnu:[2,3],good:[],gpio:[2,3],grenobl:1,gro:1,ground:[2,3],gui:[2,3],guidelin:0,gustav:1,guyard:[0,1],h81k0bya:[2,3],h81k5bya:[2,3],had:[2,3],hand:[2,3],handl:[2,3],hardwar:[1,2,3],hardwareresist:[],hardwarex:1,has:[2,3],have:[2,3],hazard:[2,3],header:[2,3],hear:[2,3],height:[],help:[],here:3,high:[2,3],higher:3,holder:[2,3],hole:[2,3],home:[2,3],horizont:[2,3],hous:[2,3],how:[2,3],howev:[2,3],http:[2,3],ifsttar:1,illustr:[2,3],imag:1,imped:[2,3],implement:[],implent:0,improv:3,in1:[2,3],in2:[2,3],in3:[2,3],in4:[2,3],inastal:[],includ:[2,3],incom:[2,3],increas:[2,3],inde:[2,3],index:[],inform:[],inject:[0,1],injection_dur:[2,3],input:[2,3],inra:1,insert:[2,3],insid:[2,3],instal:[],instead:[2,3],instruct:0,instrument:[1,2,3],intens:[2,3],interfac:[2,3],interpret:[2,3],introduc:[2,3],introduct:[],introduir:[],invit:2,involv:1,ion:[2,3],iri:1,irstea:[2,3],its:[2,3],jason:3,journal:2,jpg:[],json:3,juillet:1,juli:0,julien:[0,1],just:3,justifi:[],kemet:3,keyboard:[2,3],kjsdfhksdgfjksdf:[],known:[2,3],kohm:[2,3],laboratori:[1,2,3],last:3,lastli:[2,3],latest:[2,3],lead:[2,3],leav:[2,3],length:[2,3],les:[],less:[2,3],let:[2,3],libatla:[2,3],librari:[2,3],lie:[2,3],lien:[],like:[],limit:0,line:[2,3],lineno:[],list:0,lithium:[2,3],littelfus:[2,3],littl:[2,3],littlefus:[],lm358an:[2,3],lm358n:[2,3],locat:[2,3],logger:[1,2,3],logo:[],logo_inra:[],logo_univ_gustav:[],low:[1,2,3],lr20:[2,3],lying:[2,3],lyon:1,made:[2,3],mai:[2,3],main:[2,3],make:[2,3],manag:[2,3],manual:[2,3],manufactur:[2,3],manuscript:[2,3],massembl:[],master:[2,3],mathrm:[],matur:0,maxdepth:[],maximum:[2,3],measur:[0,1],mechan:[2,3],meet:[2,3],mega:[2,3],menu:[2,3],met:[2,3],meter:[1,2,3],meterfeatur:1,micro:[2,3],mimic:[2,3],min:[2,3],miss:2,mm2:[2,3],model:[2,3],modif:[2,3],modifi:[2,3],modul:[2,3],mohm:[2,3],monitor:[2,3],moreov:[2,3],moscardi:[],mount:[2,3],mous:[2,3],multi:[2,3],multiplex:[0,1],multipli:[2,3],must:[2,3],mux:[2,3],n_k:[],name:[2,3],nano:[2,3],nb_electrod:[2,3],nbr_mea:[2,3],necessari:[2,3],need:[2,3],neg:[2,3],next:[2,3],nicola:[0,1],noob:[2,3],nopb:[2,3],normal:[2,3],note:[2,3],notr:[],nou:[],nov:[],now:[2,3],number:[2,3],numer:[2,3],numpi:[2,3],obtain:[2,3],offcial:0,offer:[2,3],officiel:[],offset:[],ohm:[2,3],ohmmet:[2,3],ohmpi:[],ohmpi_param:3,ohx:1,onc:[2,3],one:[2,3],onli:[],onto:[2,3],open:[1,2,3],oper:0,optim:[2,3],option:[2,3],order:[2,3],org:[],orient:3,osf:[2,3],other:[2,3],our:[2,3],out:[2,3],output:[2,3],ouvr:[],overh:3,packag:[],page0:[],page1:[],page:0,pai:[2,3],panda:[2,3],paramet:[],parent:[],parl:[],part:[2,3],parten:1,pat1l:3,path:[2,3],pcb:[2,3],per:[2,3],perform:[1,2,3],permut:[2,3],peu:[],philosophi:[0,1],pic:2,piec:[2,3],pin1:[],pin:[2,3],pip:[2,3],pitch:[2,3],place:[2,3],pleas:[2,3],plu:[],plug:[2,3],png:[],point:[2,3],polar:[2,3],pole:[2,3],pond:[],posit:[2,3],possibl:[2,3],potenti:[2,3],potentiomet:[2,3],pour:2,power:[2,3],practic:[2,3],pradal:[],precis:[2,3],prefer:[2,3],premier:0,prepar:[2,3],present:[1,2,3],press:[2,3],prevent:3,previous:[2,3],print:[2,3],pro:[2,3],procedur:[],produc:[2,3],program:[2,3],progress:[0,1],project:0,propos:[2,3],protocol:[2,3],provid:[1,2,3],publish:2,puls:[2,3],purpos:[2,3],pyhton3:[2,3],python3:[2,3],python:[],pythonid:[2,3],quadripol:[2,3],quadrupol:[2,3],quantiti:[2,3],que:[],r10:[2,3],r11:[2,3],r12:[2,3],r_ref:[2,3],rail:[2,3],rang:[2,3],rapberri:[],raspberri:0,raspberrypi:[],raspbian:[2,3],raspbian_vers:[],raspebrri:[2,3],readm:[2,3],recommend:[2,3],rectangl:[],red:[2,3],reduct:[2,3],ref:[],refer:[2,3],relai:[2,3],relat:[],releas:0,remain:[2,3],rememb:[2,3],remot:[2,3],repeat:[2,3],repetit:[2,3],replac:3,repositori:[2,3],repres:[2,3],requir:[2,3],research:0,resist:[0,1],resistor:[2,3],resolut:[2,3],respect:[2,3],result:[2,3],revers:[2,3],reversa:[1,2,3],rippl:[],robust:[1,2,3],role:[2,3],root:[2,3],rpi:[2,3],rro:1,run:[2,3],s_k:[],safeti:[2,3],sain:[2,3],sainsmart:[2,3],same:[2,3],samtec:[2,3],save:[2,3],scale:1,schema:[],schemat:[2,3],scienc:[2,3],scientif:1,screen:[2,3],screw:[2,3],search:[],second:[2,3],section:[2,3],see:[2,3],select:[2,3],sequenc:[2,3],sequence_delai:[2,3],seri:[2,3],serv:[2,3],set:[2,3],setp:3,setup:[2,3],sever:[2,3],shape:[],shield:[2,3],shortcut:[2,3],should:[2,3],show:[2,3],shown:[2,3],side:[],signal:[2,3],simpl:[2,3],simpli:[2,3],simultan:[2,3],singl:[2,3],site:[],skim:[],slightli:[],slope:[2,3],small:[1,2,3],smaller:[2,3],smart:[2,3],softwar:[2,3],soil:[2,3],solder:[2,3],solut:[2,3],some:[0,2,3],sound:[2,3],sourc:[1,2,3],specif:[2,3],specifi:[2,3],sphinx:[],spi:[2,3],squar:[],ssw:[2,3],stabl:[2,3],stack:[2,3],stainless:[2,3],start:[0,2,3],statu:[0,1],steel:[2,3],step:[2,3],stick:[],still:[2,3],storag:[2,3],strict:[2,3],strip:[2,3],strong:[2,3],stronger:[2,3],strongli:[2,3],stuck:[2,3],studi:[2,3],style:[],subject:[2,3],sudo:[2,3],suffici:[2,3],suggest:[2,3],suitabl:[2,3],sum:[2,3],sum_:[],suppli:[2,3],suppress:3,sur:[],sure:[2,3],surfac:1,system:[2,3],tab:[2,3],tabl:3,take:[],tape:[],target:0,task:[2,3],tata:[],technic:0,temperatur:[2,3],ten:[2,3],termin:[2,3],test:[2,3],tester:[],texa:[2,3],text:[],textcolor:[],than:[2,3],the9:[2,3],thei:[2,3],them:[2,3],therefor:[2,3],thevalid:[],thi:[1,2,3],thoma:[],thonni:[],thousand:[2,3],three:[2,3],through:[2,3],thu:[2,3],time:[2,3],toctre:[],togeth:[2,3],toler:3,took:[],tool:1,total:[2,3],toto:[],tourn:[],track:[2,3],traco:3,tracopow:3,treat:[],trn3:3,trn:3,trouv:[],tru:[2,3],turn:[2,3],tutori:0,two:[2,3],txt:[2,3],type:[2,3],typic:[2,3],under:[2,3],underconstruct:[],unexpectedli:[2,3],unit:[2,3],univ:1,unzip:[2,3],updat:1,upgrad:3,upping:[2,3],upw50b50rv:[2,3],usd:[],use:[2,3],used:[2,3],user:[0,2,3],using:[2,3],usr:[2,3],valeur:[],valid:[2,3],valu:[2,3],variou:[2,3],velleman:[2,3],venv:[2,3],veri:3,version:[2,3],vertic:[2,3],via:[2,3],villeurbann:1,virtual:[],vise:[],vivien:[0,1],vlide:[],voi:[],voici:[],voltag:[2,3],voltmet:[2,3],vou:[],wai:[2,3],want:3,watch:[2,3],weaker:2,websit:[2,3],weidmul:[2,3],welcom:1,well:[2,3],were:[2,3],when:[2,3],where:[2,3],which:[2,3],whose:[2,3],width:[],willing:1,window:[2,3],wire:[2,3],within:[2,3],without:[2,3],wjwzhv1v3pk:[2,3],would:[2,3],wouldn:[],wpm404:[2,3],write:[2,3],www:[2,3],x_n:[],yannick:[0,1],you:[2,3],your:[2,3],youtub:[2,3]},titles:["OHMPI: Open source and open hardware resitivity-meter","Premiere page","OhmPi V 1.01 (limited to 32 electrodes)","OhmPi V 1.02 (limited to 32 electrodes)"],titleterms:{IDE:[2,3],The:[2,3],activ:[2,3],assembl:[2,3],bienvenu:[],board:[2,3],card:[2,3],center:0,cett:[],cite:1,complet:[2,3],compon:[2,3],configur:[2,3],connect:[2,3],construct:[],current:[2,3],data:[2,3],delight:[],descript:[2,3],developp:[],document:0,electr:[2,3],electrod:[2,3],environn:[2,3],formul:[],four:[2,3],frist:[2,3],frozen:[],hardwar:0,imag:[],implement:[2,3],implent:[2,3],inastal:[],indic:[],initi:[2,3],inject:[2,3],instal:[2,3],instruct:[2,3],introduct:1,lien:[],limit:[2,3],list:[2,3],massembl:[],measur:[2,3],mesur:[2,3],meter:0,modif:[],multiplex:[2,3],ohmpi:[0,1,2,3],onli:[2,3],open:0,openalea:[],oper:[2,3],packag:[2,3],page:1,paramet:[2,3],philosophi:[2,3],preliminari:[2,3],premier:1,procedur:[2,3],project:1,python:[2,3],rapberri:[2,3],raspberri:[2,3],resist:[2,3],resit:0,run:[],second:[],sourc:0,startup:[2,3],step:[],summari:0,sur:[],tabl:2,technic:[2,3],text:[],thonni:[2,3],titl:2,virtual:[2,3],welcom:[]}}) \ No newline at end of file +Search.setIndex({docnames:["Ohmpi","V1_01","V1_02","index"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["Ohmpi.rst","V1_01.rst","V1_02.rst","index.rst"],objects:{},objnames:{},objtypes:{},terms:{"100nf":2,"10v":2,"12v":[1,2],"1x0":[1,2],"1x1":[1,2],"1x10":[1,2],"24v":2,"50vdc":2,"5vcc":[1,2],"5vdc":[1,2],"7ah":[1,2],"ao\u00fbt":0,"case":[1,2],"final":[1,2],"function":[0,1,2],"h\u00e9l\u00e8ne":[0,3],"mm\u00b2":[1,2],"new":[1,2],"orl\u00e9an":0,"public":[1,2],"r\u00e9mi":[0,3],"return":[1,2],"switch":[1,2],"universit\u00e9":0,"vid\u00e9o":[1,2],ADS:[1,2],CMS:[1,2],For:[1,2],IGE:0,Its:[1,2],The:3,These:[1,2],With:[1,2],abmn:[1,2],abov:[1,2],acc:[1,2],access:[1,2],accord:[1,2],accur:[1,2],accuraci:[1,2],acid:[1,2],actual:[1,2],adafruit:[1,2],adapt:[1,2],adc:[1,2],add:[1,2],added:[1,2],adding:[1,2],addit:[1,2],address:[1,2],adjust:[1,2],ads1115:[1,2],ads115:[1,2],ads1x15:[1,2],after:[1,2],all:[1,2],allow:[0,1,2],alp:0,also:[1,2],altern:[1,2],amp:[1,2],amplifi:[1,2],analog:[1,2],ani:[1,2],anoth:[1,2],appear:[1,2],appli:[1,2],applic:0,apt:[1,2],arduino:1,arm:1,arrai:[1,2],articl:[1,2],asler:[1,2],assembl:3,assist:[1,2],associ:0,attent:[1,2],attribut:[1,2],author:[0,1,2,3],automat:[0,1,2],automobil:[1,2],avail:[1,2],avr:1,bank:[1,2],base:[1,2],basic:0,batteri:[1,2],been:[1,2],befor:[1,2],behavior:[1,2],being:[1,2],below:[1,2],between:[1,2],bin:[1,2],bit:[1,2],black:[1,2],blinka:[1,2],block:[1,2],blue:[1,2],boot:[1,2],both:[1,2],bottom:[1,2],bought:[1,2],bridg:[1,2],bug:1,build:[1,2],button:[1,2],c320c104k1:2,cabl:[1,2],calcul:[1,2],calibr:[1,2],call:0,can:[1,2],canal:1,cap:[1,2],capac:[1,2],capacitor:2,car:1,card:3,carri:[1,2],caus:[1,2],cedex:0,ceram:2,channel:[1,2],characterist:[1,2],charg:[1,2],check:[1,2],chosen:[1,2],circuit:[1,2],circuitpython:[1,2],circul:[1,2],clean:[1,2],clement:[0,3],click:[1,2],close:[1,2],code:[1,2],coef_p0:[1,2],coef_p1:[1,2],coef_p2:[1,2],coef_p3:[1,2],coeff:[1,2],coeffici:[1,2],com:[1,2],command:[1,2],commerci:[1,2],common:[1,2],commun:0,complet:3,compon:3,comput:[1,2],conduct:[1,2],config:[1,2],configur:3,congratul:[1,2],connect:3,connector:[1,2],consequ:[1,2],consist:[1,2],constitut:[1,2],construct:[1,2],consumpt:[1,2],contact:[1,2],contain:[1,2],content:3,control:[1,2],convers:[1,2],convert:[1,2],correct:[1,2],correspond:1,cost:[0,1,2],could:[1,2],cpu:[1,2],creat:[1,2],creation:0,crimp:[1,2],csv:[1,2],ctrl:[1,2],current:[0,3],damag:[1,2],data:[0,3],date:[0,1,2,3],dcconvert:2,deactiv:[1,2],dec:3,decid:[1,2],decoupl:2,dedic:0,delai:[1,2],deliv:[1,2],depend:[1,2],describ:[1,2],design:[1,2],desktop:2,despit:[1,2],detail:1,dev:[1,2],develop:[0,1,2,3],diagram:[1,2],differ:[1,2],digit:[1,2],din:[1,2],direct:[1,2],directli:[1,2],directori:[1,2],disconnect:[1,2],displai:[1,2],distanc:[1,2],disturb:[1,2],divid:[1,2],document:[0,1],done:[1,2],down:[1,2],download:[1,2],dsp:1,dual:[1,2],duboi:[0,3],durat:[1,2],dure:[1,2],dzwb4:[1,2],e00122ff:0,each:[1,2],editor:[1,2],eiffel:0,either:[1,2],electr:0,electrod:[0,3],electron:[1,2],elsevi:0,emil:0,enabl:[1,2],end:[1,2],energ:[1,2],enough:[1,2],ensur:[1,2],enter:[1,2],entir:[1,2],environ:[1,2],environnementshould:[1,2],equal:[1,2],equival:[1,2],ert:[1,2],escap:[1,2],estim:[1,2],everyon:0,evolv:[1,2],exampl:[1,2],excess:[1,2],execut:[1,2],exist:[1,2],experi:[0,1,2],explain:1,export_path:2,extra:[1,2],failur:[1,2],fargier:[0,3],fast:2,featur:[1,2],femal:[1,2],ferrul:[1,2],fewer:[1,2],ff10:0,fhac0002zxj:1,field:[1,2],fig:[1,2],figur:[1,2],file:[1,2],find:[1,2],first:[1,2],flexibl:0,florsch:[1,2],flow:[1,2],folder:[1,2],follow:[1,2],forquet:[0,3],framework:[1,2],franc:0,from:[1,2],full:[1,2],fulli:0,fuse:[1,2],gain:[1,2],ganc:[0,3],gather:[1,2],gener:[1,2,3],ger:0,get:[0,1,2],gitlab:[1,2],gnd:[1,2],gnu:[1,2],gpio:[1,2],grenobl:0,gro:0,ground:[1,2],gui:[1,2],guidelin:3,gustav:0,guyard:[0,3],h81k0bya:[1,2],h81k5bya:[1,2],had:[1,2],hand:[1,2],handl:[1,2],hardwar:[0,1,2],hardwarex:0,has:[1,2],have:[1,2],hazard:[1,2],header:[1,2],hear:[1,2],here:2,high:[1,2],higher:2,holder:[1,2],hole:[1,2],home:[1,2],horizont:[1,2],hous:[1,2],how:[1,2],howev:[1,2],http:[1,2],ifsttar:0,illustr:[1,2],imag:0,imped:[1,2],implent:3,improv:2,in1:[1,2],in2:[1,2],in3:[1,2],in4:[1,2],includ:[1,2],incom:[1,2],increas:[1,2],inde:[1,2],inject:[0,3],injection_dur:[1,2],input:[1,2],inra:0,insert:[1,2],insid:[1,2],instead:[1,2],instruct:3,instrument:[0,1,2],intens:[1,2],interfac:[1,2],interpret:[1,2],introduc:[1,2],invit:1,involv:0,ion:[1,2],iri:0,irstea:[1,2],its:[1,2],jason:2,journal:1,json:2,juillet:0,juli:3,julien:[0,3],just:2,kemet:2,keyboard:[1,2],known:[1,2],kohm:[1,2],laboratori:[0,1,2],last:2,lastli:[1,2],latest:[1,2],lead:[1,2],leav:[1,2],length:[1,2],less:[1,2],let:[1,2],libatla:[1,2],librari:[1,2],lie:[1,2],limit:3,line:[1,2],list:3,lithium:[1,2],littelfus:[1,2],littl:[1,2],lm358an:[1,2],lm358n:[1,2],locat:[1,2],logger:[0,1,2],low:[0,1,2],lr20:[1,2],lying:[1,2],lyon:0,made:[1,2],mai:[1,2],main:[1,2],make:[1,2],manag:[1,2],manual:[1,2],manufactur:[1,2],manuscript:[1,2],master:[1,2],matur:3,maximum:[1,2],measur:[0,3],mechan:[1,2],meet:[1,2],mega:[1,2],menu:[1,2],met:[1,2],meter:[0,1,2],meterfeatur:0,micro:[1,2],mimic:[1,2],min:[1,2],miss:1,mm2:[1,2],model:[1,2],modif:[1,2],modifi:[1,2],modul:[1,2],mohm:[1,2],monitor:[1,2],moreov:[1,2],mount:[1,2],mous:[1,2],multi:[1,2],multiplex:[0,3],multipli:[1,2],must:[1,2],mux:[1,2],name:[1,2],nano:[1,2],nb_electrod:[1,2],nbr_mea:[1,2],necessari:[1,2],need:[1,2],neg:[1,2],next:[1,2],nicola:[0,3],noob:[1,2],nopb:[1,2],normal:[1,2],note:[1,2],now:[1,2],number:[1,2],numer:[1,2],numpi:[1,2],obtain:[1,2],offcial:3,offer:[1,2],ohm:[1,2],ohmmet:[1,2],ohmpi_param:2,ohx:0,onc:[1,2],one:[1,2],onto:[1,2],open:[0,1,2],oper:3,optim:[1,2],option:[1,2],order:[1,2],orient:2,osf:[1,2],other:[1,2],our:[1,2],out:[1,2],output:[1,2],overh:2,pai:[1,2],panda:[1,2],part:[1,2],parten:0,partenair:3,pat1l:2,path:[1,2],pcb:[1,2],per:[1,2],perform:[0,1,2],permut:[1,2],philosophi:[0,3],pic:1,piec:[1,2],pin:[1,2],pip:[1,2],pitch:[1,2],place:[1,2],pleas:[1,2],plug:[1,2],point:[1,2],polar:[1,2],pole:[1,2],posit:[1,2],possibl:[1,2],potenti:[1,2],potentiomet:[1,2],pour:1,power:[1,2],practic:[1,2],precis:[1,2],prefer:[1,2],prepar:[1,2],present:[0,1,2],press:[1,2],prevent:2,previous:[1,2],print:[1,2],pro:[1,2],produc:[1,2],program:[1,2],progress:[0,3],project:3,propos:[1,2],protocol:[1,2],provid:[0,1,2],publish:1,puls:[1,2],purpos:[1,2],pyhton3:[1,2],python3:[1,2],pythonid:[1,2],quadripol:[1,2],quadrupol:[1,2],quantiti:[1,2],r10:[1,2],r11:[1,2],r12:[1,2],r_ref:[1,2],rail:[1,2],rang:[1,2],raspberri:3,raspbian:[1,2],raspebrri:[1,2],readm:[1,2],recommend:[1,2],red:[1,2],reduct:[1,2],refer:[1,2],relai:[1,2],releas:3,remain:[1,2],rememb:[1,2],remot:[1,2],repeat:[1,2],repetit:[1,2],replac:2,repositori:[1,2],repres:[1,2],requir:[1,2],research:3,resist:[0,3],resistor:[1,2],resolut:[1,2],respect:[1,2],result:[1,2],revers:[1,2],reversa:[0,1,2],robust:[0,1,2],role:[1,2],root:[1,2],rpi:[1,2],rro:0,run:[1,2],safeti:[1,2],sain:[1,2],sainsmart:[1,2],same:[1,2],samtec:[1,2],save:[1,2],scale:0,schemat:[1,2],scienc:[1,2],scientif:0,screen:[1,2],screw:[1,2],second:[1,2],section:[1,2],see:[1,2],select:[1,2],sequenc:[1,2],sequence_delai:[1,2],seri:[1,2],serv:[1,2],set:[1,2],setp:2,setup:[1,2],sever:[1,2],shield:[1,2],shortcut:[1,2],should:[1,2],show:[1,2],shown:[1,2],signal:[1,2],simpl:[1,2],simpli:[1,2],simultan:[1,2],singl:[1,2],slope:[1,2],small:[0,1,2],smaller:[1,2],smart:[1,2],softwar:[1,2],soil:[1,2],solder:[1,2],solut:[1,2],some:[1,2,3],sound:[1,2],sourc:[0,1,2],specif:[1,2],specifi:[1,2],spi:[1,2],ssw:[1,2],stabl:[1,2],stack:[1,2],stainless:[1,2],start:[1,2,3],statu:[0,3],steel:[1,2],step:[1,2],still:[1,2],storag:[1,2],strict:[1,2],strip:[1,2],strong:[1,2],stronger:[1,2],strongli:[1,2],stuck:[1,2],studi:[1,2],subject:[1,2],sudo:[1,2],suffici:[1,2],suggest:[1,2],suitabl:[1,2],sum:[1,2],suppli:[1,2],suppress:2,sure:[1,2],surfac:0,system:[1,2],tab:[1,2],tabl:2,target:3,task:[1,2],technic:3,temperatur:[1,2],ten:[1,2],termin:[1,2],test:[1,2],texa:[1,2],than:[1,2],the9:[1,2],thei:[1,2],them:[1,2],therefor:[1,2],thi:[0,1,2],thousand:[1,2],three:[1,2],through:[1,2],thu:[1,2],time:[1,2],togeth:[1,2],toler:2,tool:0,total:[1,2],track:[1,2],traco:2,tracopow:2,trn3:2,trn:2,tru:[1,2],turn:[1,2],tutori:3,two:[1,2],txt:[1,2],type:[1,2],typic:[1,2],under:[1,2],unexpectedli:[1,2],unit:[1,2],univ:0,unzip:[1,2],updat:0,upgrad:2,upping:[1,2],upw50b50rv:[1,2],use:[1,2],used:[1,2],user:[1,2,3],using:[1,2],usr:[1,2],valid:[1,2],valu:[1,2],variou:[1,2],velleman:[1,2],venv:[1,2],veri:2,version:[1,2],vertic:[1,2],via:[1,2],villeurbann:0,vivien:[0,3],voltag:[1,2],voltmet:[1,2],wai:[1,2],want:2,watch:[1,2],weaker:1,websit:[1,2],weidmul:[1,2],welcom:0,well:[1,2],were:[1,2],when:[1,2],where:[1,2],which:[1,2],whose:[1,2],willing:0,window:[1,2],wire:[1,2],within:[1,2],without:[1,2],wjwzhv1v3pk:[1,2],would:[1,2],wpm404:[1,2],write:[1,2],www:[1,2],yannick:[0,3],you:[1,2],your:[1,2],youtub:[1,2]},titles:["OhmPi project","OhmPi V 1.01 (limited to 32 electrodes)","OhmPi V 1.02 (limited to 32 electrodes)","OHMPI: Open source and open hardware resitivity-meter"],titleterms:{IDE:[1,2],The:[1,2],activ:[1,2],assembl:[1,2],board:[1,2],card:[1,2],center:3,cite:0,complet:[1,2],compon:[1,2],configur:[1,2],connect:[1,2],current:[1,2],data:[1,2],descript:[1,2],document:3,electr:[1,2],electrod:[1,2],environn:[1,2],four:[1,2],frist:[1,2],hardwar:3,implement:[1,2],implent:[1,2],initi:[1,2],inject:[1,2],instal:[1,2],instruct:[1,2],introduct:0,limit:[1,2],list:[1,2],measur:[1,2],mesur:[1,2],meter:3,multiplex:[1,2],ohmpi:[0,1,2,3],onli:[1,2],open:3,oper:[1,2],packag:[1,2],paramet:[1,2],partenair:0,philosophi:[1,2],preliminari:[1,2],procedur:[1,2],project:0,python:[1,2],rapberri:[1,2],raspberri:[1,2],resist:[1,2],resit:3,sourc:3,startup:[1,2],summari:3,tabl:1,technic:[1,2],thonni:[1,2],titl:1,virtual:[1,2]}}) \ No newline at end of file diff --git a/public/_sources/page0.rst.txt b/sphinx/source/Ohmpi.rst similarity index 98% rename from public/_sources/page0.rst.txt rename to sphinx/source/Ohmpi.rst index 7dbbea4ef493009ae39140c0fa5d6e7e6e0cc0a0..c50a70c58038212b8f0492f27f9186e781cd8cb0 100644 --- a/public/_sources/page0.rst.txt +++ b/sphinx/source/Ohmpi.rst @@ -1,8 +1,8 @@ *************** -Premiere page +OhmPi project *************** -**OhmPi project** +**Partenaires** ************************* .. image:: logo_ohmpi.JPG diff --git a/sphinx/source/page1.rst b/sphinx/source/V1_01.rst similarity index 100% rename from sphinx/source/page1.rst rename to sphinx/source/V1_01.rst diff --git a/sphinx/source/page2.rst b/sphinx/source/V1_02.rst similarity index 100% rename from sphinx/source/page2.rst rename to sphinx/source/V1_02.rst diff --git a/sphinx/source/index.rst b/sphinx/source/index.rst index a212b187733229b40bd0b3da911ff433541f75ce..d2aaf8480ab6fda2b9f2e7a78f644653b80ef947 100644 --- a/sphinx/source/index.rst +++ b/sphinx/source/index.rst @@ -31,9 +31,9 @@ Contents: .. toctree:: :maxdepth: 2 - page0 - page1 - page2 + Ohmpi + V1_01 + V1_02