«

»

Распечатать Запись

Термометр на микроконтроллере PIC16F628A и цифровом датчике DS1620. Контроль через Интернет

Отображение на ЖК-дисплее:

  • температуры окружающей среды
  • минимальной температуры
  • максимальной температуры

Связь с компьютером (через порт RS232C)

  • Наблюдение за температурой в раскрывающемся графике
  • Сохранение измерений в файле
  • Программируемый термостат
  • Контроль температуры через интернет на базе данных MySQL
  • Контроль температуры через интернет с помощью протокола FTP

1.  Ознакомление

Это электронный термометр с выводом температуры на ЖК-дисплей.
Температура окружающей среды измеряется каждые 840 мс при помощи цифрового датчика DS1620, фирмы Dallas Semiconductor.
рисунок №1Одна из кнопок позволяет переключить экран, на котором отображается максимальная и минимальная температура:
экран №1экран №2Вторая кнопка сбрасывает значения температуры мин./макс.Как вариант, можно подключить устройство к компьютеру (через RS232). Температура передается на компьютер с устройства, управляемого микроконтроллером 16F628A. Приложение, установленное на компьютере, показывает температуру в реальном времени и выводит её на график. С другой стороны, приложение позволяет запрограммировать два предельных значения температуры термостата DS1620.
график №1

2. Принципиальная схема:

Версия № 1: без интерфейса RS232;
Принципиальная схема №1
Версия № 2: с помощью RS232
Принципиальная схема №2ПРИМЕЧАНИЕ: Прошивка для микроконтроллера одна и таже для обоих вариантов.
3. Обзор датчика температуры DS1620
4. Принцип работы ЖК-дисплея (параллельный интерфейс)
5. Принцип работы устройства
5-1. Без интерфейса RS232;
После подачи напряжения, микроконтроллер 16F628A опрашивает датчик температуры DS1620 (команда Write Config с CPU = 1 и 1SHOT = 0, затем команда Start Convert T) и настраивает ЖК-дисплей (команда Set Function для использования в режиме интерфейса 4 бита). Модуль Timer1 (16 бит) микроконтроллера 16F628A активируется, что приводит к прерыванию приблизительно каждые 105 мс. При каждом прерывании модуля Timer1, опрашивается состояние кнопки SELECTION ECRAN и кнопки RESET MIN/MAX. Каждые 8 прерываний (около 840 мс) происходит чтение температуры и информация на ЖК-дисплее обновляется:
экран №1 экран №2
5-2. Через порт RS232

Относительно работы без интерфейса RS232, добавляются два прерывания:

  • Прерывание приема UART (сообщает микроконтроллеру, что он получил данные от компьютера через RS232)
  • Прерывание передачи UART (сообщает микроконтроллеру, что UART собирается передать данные на компьютер)
5-2-1. Кабель связи между компьютером и устройством.

Конечно же нужен компьютер, который имеет COM-порт (разъем SUB-D, 9 контактов "папа"). Нужно подключить нуль-модемный кабель (кабель с перекрёстным соединением) между компьютером и устройством. Если у вас его нет, вы можете легко его сделать (нужно 3 провода и 2 разъема SUB-D, 9 контактов "мама").

5-2-2. Протокол связи между компьютером и устройством.

Компьютер посылает команду. Микроконтроллер отвечает.
Компьютер посылает 3 байта (через RS232):

Команда DS1620 1-ый байт (код команды) 2-ой байт (данные) 3-ий байт (данные)
Read Temperature (каждые 1000 мс) 0хАА 0х00 (не используется) 0х00 (не используется)
Read TH (чтение высокой температуры термостата) 0хА1      0х00 (не используется) 0х00 (не используется)
Read TL (чтение низкой температуры термостата) 0хА2 0х00 (не используется) 0х00 (не используется)
Write TH (запись высокой температуры термостата) 0х01 (0000000 D8) (D7 … D0)
Write TL (запись низкой температуры термостата) 0х02 (0000000 D8) (D7 … D0)

Получив же их, микроконтроллер передает команду датчику DS1620 (через 3-проводной последовательный порт, синхронный). В случае команды чтения (Read Temperature, TH Read, Read TL), термометр DS1620 отправляет данные в микроконтроллер (температура в виде двоичного числа 9 бит, закодированных в дополнение в 2). Это число передается без изменений на компьютер в виде 2-х байт:
1-й байт: (0000000 D8)
2-й байт: (D7 ... D0)
D0 = бит
Для других команд, микроконтроллер посылает компьютеру два байта 0x00 (через RS232).

Команда DS1620
1-ый байт (данные)
   2-ой байт (данные)
Read Temperature (каждые 1000 мс)
       (0000000 D8)
           (D7 … D0)
Read TH (чтение высокой температуры термостата)
       (0000000 D8)
           (D7 … D0)
Read TL (чтение низкой температуры термостата)
       (0000000 D8)
           (D7 … D0)
Write TH (запись высокой температуры термостата)      0х00 (не используется)      0х00 (не используется)
Write TL (запись низкой температуры термостата)      0х00 (не используется)      0х00 (не используется)

Пример осциллограммы: команда Read Temperature
Связь между компьютером и PIC (RS232) :
Осцилограмма №10xAA = код команды Read Temperature

0x00 0x2D = 0 0010 1101 = 45 = +22,5 °C

Связь между PIC и DS1620 (последовательный порт, синхронный) :
Осцилограмма №210101010 = 0xAA = код команды Read Temperature

0 00101101 = 0x2D = 45 = +22,5 °C

6. Приложение DS1620_104.exe для Windows

график №1Предисловие
Это приложение было написано на C++ Borland Builder 5. Приложение работает на Windows NT4 и Windows XP (на Windows Vista не тестировалось).

Примечание: для управления устройством через порт RS232 требуется установка компонента TComPort (версии 2.64 достаточно):
Скачать
Процедура установки
Учебник

Процедура использования:

  • Соединить компьютер и устройство нуль-модемным кабелем (в выключенном состоянии)
  • Подключить питание
  • Открыть приложение
  • Настроить параметры соединения с RS232C :
    9600 бит/сек
    8 бит данных
    бит чётности-нет
    1 стопбит
    контроль потока-нет
  • Открыть порт
    Должна появиться реальная температура (с обновлением каждые 1000 мс). Имеется возможность сохранения данных в текстовый файл:

Текстовый файл №1Этот файл затем может быть использован с Excel, Matlab ...

Скачать приложение DS1620_104.exe для Windows 797 кб
Скачать исходный код приложения DS1620_104.exe 224 кб

7. Приложения для связи RS232 с LabVIEW

Вот два приложения, которые я написал для LabVIEW 5 :
Приложение для связи RS232 с LabVIEW №1Приложение для связи RS232 с LabVIEW №2ds1620_011.vi
ds1620_thermostat_004.vi
Обратите внимание, что эти приложения также работают с версией 6 LabVIEW.

Скачать ds1620_011.vi 223 кб
Скачать ds1620_thermostat_004.vi 223 кб

8. Установка соединения RS232 на языке Python

Версия Python: 2.7
Протестировано на Windows XP и Linux/Ubuntu
Этот сценарий требует наличия пакета pyserial (загрузка и процесс установки здесь).
Исходный код:

# (C) Фабрис Сэнсэр
# python 2.7

# соединение RS232 с цифровым термометром на цифровом датчике DS1620
#http://fabrice.sincere.pagespersoorange.fr/cm_электроника/проект_pic/ЖК термометр_DS1620htm/ЖК термометр_DS1620.htm

# тест: OK (linux/ubuntu + winXP)

import time
import serial # внешняя библиотека pyserial

print 'Связь с COM-портом'

filename = 'температура.txt'
print '\nФайл резервного копирования : '+filename
File = open(filename,'a')

# библиотека pyserial :
# http://pyserial.sourceforge.net/shortintro.html
# http://pyserial.sourceforge.net/pyserial_api.html

Port = serial.Serial()

Port.baudrate = 9600
Port.bytesize=8
Port.parities=0
Port.stopbits=1
Port.xonxoff=0
Port.rtscts=0
Port.timeout=0.1 # в секундах

print """
# Под Windows :
# COM1 -> 0 (или COM1)
# COM2 -> 1 (или COM2)

# Под Linux :
# COM1 -> 0 (или /dev/ttyS0)
# COM2 -> 1 (или /dev/ttyS1)
"""

nomport = raw_input('Имя COM-порта ? ')
try:
int(nomport)
Port.port = int(nomport)
except:
Port.port = nomport

print ('Port ->', Port.portstr,'\n'

Port.open()

try:
while True:
# запись
Port.write('\xAA\x00\x00')

# чтение
MSB = Port.read() # старший байт
LSB = Port.read() # младший байт

if (MSB !=" and LSB != "):
temperature = ord(LSB) + 256* ord(MSB)
if temperature >= 256:
temperature = temperature - 512
temperature *= 0.5
affichage = "time".strftime('%H:%M:%S',time.localtime()) + ' '+ str(temperature) +' °C'
print affichage
Fichier.write(affichage +'\n')

# пауза в 1 секунду
time.sleep(1.0)

except KeyboardInterrupt:
# CTRL + C
print "\nCTRL+C\nЗакрытие порта", Port.portstr
Port.close()
Fichier.close()

Выполнение сценария :
>>>
Связь с COM-портом

Файл резервной копии : температура.txt

# Под Windows :
# COM1 -> 0 (или COM1)
# COM2 -> 1 (или COM2)

# Под Linux :
# COM1 -> 0 (или /dev/ttyS0)
# COM2 -> 1 (или /dev/ttyS1)

Имя COM-порта ? 0
Порт -> COM1

09:15:28 19.5 °C
09:15:29 19.5 °C
09:15:30 19.5 °C
09:15:31 19.5 °C
09:15:32 19.5 °C
09:15:33 19.5 °C
09:15:34 20.0 °C
09:15:35 20.0 °C
09:15:36 20.0 °C
09:15:37 20.0 °C
09:15:38 20.0 °C
09:15:39 20.0 °C

CTRL+C
Закрытие порта COM1
>>>

Скачать сценарий Python

9. Проверка температуры через интернет с помощью CGI-скрипта на Python

Тестировалось у меня на Linux/Ubuntu на Livebox (автор является клиентом Orange), со следующими настройками сети:

  • частный IP-адрес: 192.168.1.10
  • публичный: 90.14.148.96

Установка:

Помимо Python 2.7 и пакета pyserial, нужно установить на компьютер Веб-сервер Apache (здесь с XAMPP).Сценарии Python cgi_чтение температуры.py , cgi_сборник установок.py и cgi_обработка сборника установок.py должны быть помещены в каталог /opt/lampp/cgi-bin/
Внимание на установки: Свойства -> Разрешения -> Разрешить выполнение файла как программы
Что касается сценариев CGI в Python:
Первая линия сценариев должна быть:
#! /usr/bin/python
Первый выход должен быть (header) :
print "Content-Type: text/html\n\n"
Настройка Livebox:
Путь - Преобразование сетевых адресов -> Добавить службу http(протокол TCP, порт 80, IP-адрес сервера 192.168.1.10)
Настройка брандмауэра:
разрешить входящие соединения на порт 80 (TCP)

Постоянная ссылка на это сообщение: http://meandr.org/archives/24913

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