0

The thermometer on the microcontroller and digital sensor DS1620 PIC16F628A. Control over the Internet

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

  • ambient temperature
  • minimum temperature
  • maximum temperature

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

  • Monitoring the temperature drop graph
  • Save measurement file
  • Programmable Thermostat
  • Temperature control via the Internet to the MySQL database
  • Temperature control via the Internet using the FTP protocol

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 мс) 0Everywhere 0х00 (не используется) 0х00 (не используется)
Read TH (чтение высокой температуры термостата) 0hA1 0х00 (не используется) 0х00 (не используется)
Read TL (чтение низкой температуры термостата) 0hA2 0х00 (не используется) 0х00 (не используется)
Write TH (запись высокой температуры термостата) 0X01 (0000000 D8) (D7 … D0)
Write TL (запись низкой температуры термостата) 0X02 (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

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

Note: для управления устройством через порт RS232 требуется установка компонента TComPort (версии 2.64 достаточно):
Download
Installation Procedure
Textbook

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

  • Соединить компьютер и устройство нуль-модемным кабелем (в выключенном состоянии)
  • Connect the power supply
  • Open application
  • Настроить параметры соединения с RS232C :
    9600 бит/сек
    8 бит данных
    parity bit, no
    1 стопбит
    flow control, no
  • Open Port
    Должна появиться реальная температура (с обновлением каждые 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 (загрузка и процесс установки here).
Source code:

# (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()

Выполнение сценария :
>>>
Communication with the COM-port

Файл резервной копии : температура.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
Closing the COM1
>>>

Download сценарий 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)

admin

Leave a Reply

Your email address will not be published. Required fields are marked *