Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
  1. Главная
  2. Блоги сообщества Raspberry Pi
  3. Получение данных с аналоговых датчиков, подключенных к Raspberry Pi

Получение данных с аналоговых датчиков, подключенных к Raspberry Pi

Запланировано Прикреплена Закрыта Перенесена Блоги сообщества Raspberry Pi
5 Сообщения 3 Posters 963 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • N Не в сети
    N Не в сети
    nbo
    написал в отредактировано pi
    #1

    Информация, снимаемая с аналогового датчика, представляет собой напряжение сигнального выхода датчика. Это напряжение может изменяться от 0 до напряжения питания датчика (грубо говоря, чем больше измеряемая датчиком величина, тем выше напряжение сигнального выхода)

    Чтобы считать это напряжение и преобразовать его к осязаемому цифровому значению используется аналого-цифровой преобразователь (AЦП).

    В Raspberry Pi отсутствует встроенный АЦП, поэтому для подключения к RasPi аналоговых датчиков потребуется внешний АЦП.

    Я использовал АЦП на основе чипа PCF8591 -http://smartelectronika.com/viewproduct/49/

    727a2beb-0d63-446f-b0fc-bbb999e25d74-image.png

    Это 4-канальный 8-битный АЦП, который передаёт считываемые с датчика значения напряжения по i2c. Соответственно подключаем его к пинам 5V, GND, SDA, SCL GPIO разъёма Raspberry Pi. Также нам потребуется подгрузить модули ядра для работы с i2c:

    sudo modprobe i2c-dev
    sudo modprobe i2c-bcm2708
    

    Чтобы постоянно не подгружать их постоянно вручную рекомендую добавить строчки в /etc/modules:

    i2c-dev
    i2c-bcm2708
    

    Как я уже выше писал, разрешающая способность PCF8591 8-бит. Это значит, что величина цифрового значения, в которое будет преобразовано напряжение сигнального выхода датчика будет лежать в диапазоне от 0 до 2^8-1=255. Это значение высчитывается по формуле -

    напряжение сигнального выхода датчика/напряжение АЦП * разрешающую способность АЦП
    Таким образом для 3V с датчика: value=3/5*255=153

    К АЦП мы будем подключать аналоговый датчик MQ-3, который определяет концентрацию паров этилового спирта в воздухе.

    73e5f19a-8255-4d89-a431-08ebd7b416fe-image.png

    У MQ-3 4 выхода - AD, DO, Vcc, GND. Vcc и GND подключаем к пинам GPIO 5V и GND. AD (выход сигнального напряжения датчика) подключаем к одному из 4 входов АЦП (я подключил к А0). DO не подключаем никуда. На выходе DO появляется напряжение, когда значение измеряемой величины (в нашем случае концентрации паров этилового спирта в воздухе) достигает некоторой критической величины. Критическая величина задаётся подкруткой подстроечного резистора на плате датчика.

    a05fe677-41fd-4a8e-afec-f4b981e96363-image.png

    Далее переходим к программной части. Для получения значения датчика будем использовать популярную библиотеку для работы с GPIOwiringPi:

    sudo apt-get install git-core
    git clone git://git.drogon.net/wiringPi
    cd wiringPi
    ./build
    

    Напишем небольшую программу, которая будет каждые полсекунды выводить на экран значение датчика:

    #include <wiringPi.h> 
    #include <pcf8591.h> 
    main ()
    {
      wiringPiSetup () ;
      pcf8591Setup (200, 0x48) ;
      for (;;)
            {
         delay (500);
        printf ("%4d \n", analogRead (200)) ;
         }
    }
    

    В функцию pcf8591Setup передаётся число большее 64, которое будет служить номером "виртуального" пина для библиотеки wiringPi и адрес АЦП на интерфейсе i2c.analogReadвозвращает преобразованное значение напряжения датчика (число от 0 до 255), подключённого к АЦП.

    Компилируем нашу программу:

    gcc -o ./analogread ./analogread.c -lwiringPi
    

    Запускаем скомпилированный analogread - на экране побегут значения датчика, обновляемые каждые полсекунды.

    Если к датчику поднести открытую бутылку с алкоголем, то значения будут в реальном времени увеличиваться.

    Чтобы это значение преобразовать в реальное значение концентрации паров этилового спирта нужно обратиться к даташиту на MQ-3, в этой статье я этот вопрос рассматривать не буду.

    1 ответ Последний ответ
    0
    • piP Не в сети
      piP Не в сети
      pi
      написал в отредактировано pi
      #2

      Добрый вечер. Не смог по вашей инструкции сделать тоже самое. Я не программист, могли бы вы по-подробнее изложить инструкцию, начиная с пункта "Напишем небольшую программу, которая будет каждые полсекунды выводить на экран значение датчика". Как это сделать. Я создал папку analogread, внутри создал файл analogread.h с точным содержанием приложенного вами листинга. Компилирую

      gcc analogread.c -lwiringPi
      

      И на этом у меня все останавливается.

      analogread.c:1:10: error: #include expects "FILENAME" or &lt;FILENAME&gt; 
      #include          ^analogread.c:3:10: error:  #include expects "FILENAME" or &lt;FILENAME&gt; 
      #include          ^analogread.c: In function ‘main’:analogread.c:23:5: warning: incompatible implicit declaration of built-in function ‘printf’     printf ("%4d \n", analogRead (200)) ;
      

      Подскажите, пожалуйста.

      1 ответ Последний ответ
      0
      • piP Не в сети
        piP Не в сети
        pi
        написал в отредактировано
        #3

        Очень странно, что из кода выборочно пропали ссылки на библиотеки, оставив #includ'ы.OLEGTSSS,Замените обе строчки #include на:#include <wiringPi.h>
        #include <pcf8591.h>

        1 ответ Последний ответ
        0
        • piP Не в сети
          piP Не в сети
          pi
          написал в отредактировано
          #4

          Thank you!

          gerundG 1 ответ Последний ответ
          0
          • gerundG Не в сети
            gerundG Не в сети
            gerund
            replied to pi on отредактировано gerund
            #5

            Кстати рекомендую использовать i2c ЦАП ADS 1115, он поинтереснее будет
            больше разрядность, c RasPi работает чётко
            6fb34401-bf70-4174-8626-ee070b9dff37-image.png

            1 ответ Последний ответ
            0
            • Человек СтроительЧ Человек Строитель сослался на эту тему в

            • Войти

            • Нет учётной записи? Зарегистрироваться

            • Login or register to search.
            • Первое сообщение
              Последнее сообщение
            0
            • Категории
            • Главная
            • Документация
            • Последние
            • Пользователи