Измерение температуры в комнате с помощью Raspberry Pi и датчика LM35


В предыдущих статьях на нашем сайте мы рассмотрели основы работы с платой Raspberry Pi: мигание светодиода, подключение кнопки, использование ШИМ, подключение шагового и двигателя постоянного тока, подключение регистра сдвига и сенсорной клавиатуры. В этой же статье мы рассмотрим первое практическое применение платы Raspberry Pi в электронных проектах – мы рассмотрим создание на ее основе и датчика LM35 простейшего термометра для измерения температуры в комнате. Измеренные показания температуры будут выводиться на экран компьютера.

Внешний вид термометра на основе платы Raspberry Pi и датчика LM35

LM35 является аналоговым датчиком температуры, поэтому показания с него нельзя непосредственно подавать на плату Raspberry Pi поскольку у нее нет собственных каналов АЦП (аналого-цифрового преобразования). Поэтому для считывания показаний с датчика LM35 мы будем использовать модуль АЦП ADC0804 (его подключение к Raspberry Pi рассматривалось в этой статье), выходные контакты которого мы будем подключать к плате Raspberry Pi.

Ранее на нашем сайте мы уже рассматривали подключение датчика температуры LM35 к плате Arduino и микроконтроллеру AVR.

Общие принципы работы ADC0804

Большинство современных микроконтроллеров имеют в своем составе собственные аналого-цифровые преобразователи (АЦП каналы), однако в плате Raspberry Pi собственных АЦП нет. Поэтому если вы хотите подключить к ней какие-нибудь аналоговые датчики, то вам будет необходим внешний АЦП, например, ADC0804.

Чип ADC0804 представляет собой микросхему, предназначенную для преобразования аналогового сигнала в 8-битные цифровые данные. В настоящее время это одна из самых популярных микросхем АЦП в бюджетном сегменте. Поскольку ее разрядность равна 8 бит, то на ее выходе мы можем получать значения от 0 до 255. Поскольку максимальное измеряемое ею напряжение составляет 5V, то, следовательно, одно ее цифровое значение равно шагу напряжения 19.5mV. На следующем рисунке представлена распиновка микросхемы ADC0804.

Распиновка микросхемы ADC0804

Модуль (микросхема) ADC0804 работает с напряжениями 5V, поэтому на своих логических выходах она также обеспечивает напряжение 5V. То есть уровню логической 1 на ее выходных контактах соответствует напряжение 5V. Но плата Raspberry Pi работает с уровнями напряжений +3.3V, поэтому на нее нельзя непосредственно подавать уровни +5V поскольку это может привести к повреждению платы. Поэтому для понижения уровня напряжения с +5V до +3.3V мы будем использовать схему резистивного делителя напряжения. Точнее сказать, мы с помощью этого делителя напряжения будем понижать уровень +5V до уровня +2.5V, который и будет подаваться на плату Raspberry Pi. То есть уровень +2.5V на входе Raspberry Pi будет обозначать логическую 1.

Датчик температуры LM35

LM35 (купить на AliExpress) представляет собой датчик температуры с 3 контактами, который обеспечивает изменение напряжения на своем выходе на 10 мВ при изменении температуры на 1 градус Цельсия. Таким образом, если температура составляет 0 градусов Цельсия, то на выходе датчика будет 0 В, для 10 градусов Цельсия на выходе датчика будет +100 мВ, если температура 25 градусов Цельсия, то на выходе датчика будет +250 мВ. Верхний предел измерения температуры у него составляет около 150 градусов Цельсия. На 1-й контакт датчика подается питающее напряжение, 2-й контакт – выход датчика, а на 3-й подается земля.

Номер контакта Функция Обозначение
1 Питающее напряжение; 5V (+35V to -2V) Vcc
2 Выходное напряжение (+6V to -1V) Output
3 Земля (0V) Ground

Внешний вид датчика температуры LM35 и обозначение его контактов

Необходимые компоненты

  1. Плата Raspberry Pi 2 Model B или другая аналогичная (купить на AliExpress).
  2. Резистор 1 кОм – 17 шт. (купить на AliExpress).
  3. Потенциометр 10 кОм.
  4. Конденсатор 0,1 мкФ (купить на AliExpress).
  5. Конденсатор 100 мкФ (купить на AliExpress).
  6. Конденсатор 1000 мкФ (купить на AliExpress).
  7. Модуль АЦП ADC0804 (купить на AliExpress).
  8. Датчик температуры LM35 (купить на AliExpress).
  9. Макетная плата.
  10. Соединительные провода.

Схема проекта

Схема подключения датчика температуры LM35 и модуля АЦП ADC0804 к Raspberry Pi представлена на следующем рисунке.

Схема подключения датчика температуры LM35 и модуля АЦП ADC0804 к Raspberry Pi

На выходе датчика LM35 могут присутствовать значительные флуктуации напряжения, поэтому мы использовали конденсатор емкостью 100 мкФ чтобы их сглаживать. На выходе АЦП также часто присутствуют различные шумы, поэтому для их фильтрации мы использовали конденсатор емкостью 0,1 мкФ.

В нашем проекте частота работы модуля АЦП ADC0804 задается с помощью RC-генератора – на представленной схеме он состоит из конденсатора C2 и резистора R20. Здесь важно отметить, что емкость конденсатора C2 можно уменьшить для того, чтобы повысить скорость АЦП. Но помните о том, что увеличение скорости АЦП приводит к уменьшению его точности. Поэтому, если для вашего приложения критически важна именно точность АЦП, а не его скорость, то в этом случае вам необходимо увеличить емкость конденсатора C2.

Как мы уже рассмотрели ранее, датчик LM35 обеспечивает приращение уровня напряжения на +10mV на каждый градус. Максимальная температура, которую можно измерить с помощью LM35, составляет 150º, поэтому на выходе LM35 мы будем иметь максимальный уровень напряжения 1.5V. Но опорное напряжение модуля ADC0804 составляет +5V. Поэтому, если мы будем использовать это опорное напряжение, то точность значений на выходе ADC0804 будет невысока поскольку мы будем использовать всего 34% (5/1.5) от возможного диапазона выходных значений модуля.

Но, к счастью для нас, модуль ADC0804 имеет настраиваемый вход для подачи опорного напряжения Vref pin (PIN9), как показано на его распиновке, приведенной выше в статье. Мы будем устанавливать для модуля ADC0804 опорное напряжение (Vref) – для этого мы должны подать напряжение +1V (VREF/2) на контакт PIN9. Для этой цели в схеме мы используем потенциометр 10K. Используйте вольтметр чтобы выставить это напряжение как можно более точно.

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

После того, как все необходимые соединения в схеме сделаны, мы можем подать питание на Raspberry Pi и после загрузки ее операционной системы можно начать писать программу в ней на Python. Подробнее о том, как это можно сделать, можно прочитать в статье про мигание светодиода с помощью Raspberry Pi.

В программе нам первым делом необходимо подключить (импортировать) библиотеку для работы с контактами ввода/вывода. Также мы импортируем эту библиотеку RPi.GPIO под именем “IO” (то есть переименовываем ее для использования в программе), то есть далее в программе всегда, когда мы захотим обратиться к контактам ввода/вывода, мы будем использовать слово ‘IO’.

Иногда контакты ввода/вывода (GPIO pins), которые мы собираемся использовать в программе, могут выполнять другие функции. В этом случае во время исполнения программы мы будем получать предупреждения (warnings). Следующей командой мы укажем плате Raspberry Pi на то, чтобы она игнорировала эти предупреждения и продолжала исполнение программы.

Мы можем обращаться к контактам ввода/вывода (GPIO pins) платы Raspberry Pi используя либо номер контакта на плате, либо его функциональный номер. Например, если смотреть распиновку контактов ввода/вывода платы Raspberry Pi, то можно увидеть, что в ней обозначение GPIO5 соответствует контакту PIN 29. То есть в зависимости от того, какой способ обращения к контактам мы выбрали, мы можем обращаться к рассмотренному контакту либо по номеру ‘29’, либо по номеру ‘5’. В данном проекте мы выберем способ обращения к контактам по их функциональным номерам, поэтому используем следующую команду:

Далее мы сконфигурируем 8 контактов платы Raspberry Pi в качестве цифровых входов – на них мы будем подавать значения с 8 выходных контактов модуля АЦП ADC0804.

Далее в программе мы будем проверять состояние контактов платы Raspberry Pi, к которым подключены выходные контакты модуля АЦП. К примеру, рассмотрим контакт GPIO19. Если на этом контакте уровень high, то мы выполним действия, относящиеся к этому оператору IF. Если же на этом контакте уровень low, то действия внутри оператора IF выполняться не будут.

Следующей командой будет формироваться бесконечный цикл, внутри него все команды будут выполняться непрерывно.

Далее представлен полный текст программы.

Исходный код программы

После написания программы можно запускать ее на выполнение. Рассмотрим что при этом будет происходить в нашем проекте. Вначале датчик LM35 измеряет температуру в комнате и обеспечивает соответствующее ей аналоговое напряжение на своем выходе. Это напряжение будет изменяться линейно с изменением температуры, каждому изменению температуры на градус будет соответствовать изменение этого напряжения на +10mV. Это аналоговое напряжение подается на вход модуля АЦП ADC0804, который преобразует его в цифровое значение с шагом 1,275 на 1 градус (255/200=1,275). Это цифровое значение подается на плату Raspberry Pi и затем в программе оно преобразуется в значение температуры и отображается на экране дисплея.

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
521 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *