Цифровой барометр

Разработка структурной схемы устройства. Принцип работы его блоков: источника напряжения, цифрового программируемого устройства, семисегментного дисплея, датчиков давления и температуры. Разработка алгоритма работы управляющей программы, ее блок-схема.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 23.06.2015
Размер файла 2,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

Курсовая работа

Цифровой барометр

Содержание

Введение

Разработка структурной схемы устройства

Разработка принципиальной схемы

Разработка алгоритма работы управляющей программы

Разработка управляющей программы

Заключение

Список использованных источников

Введение

Одним из важнейших направлений научно-технического прогресса является развитие и применение микропроцессоров. Их малые размеры, высокая надежность, большие вычислительные и логические способности позволяют создавать контролирующие, управляющие и обрабатывающие цифровые устройства высокого качества и низкой стоимости. Начиная с 1971 года, объемы ежегодного производства микроконтроллеров в несколько раз превышают объемы производства процессоров.

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

На сегодняшний день существует более 200 модификаций микроконтроллеров, среди которых популярностью пользуются 8-битные микроконтроллеры PIC фирмы Microchip Technology, AVR фирмы Atmel, 16-битные MSP430 фирмы TI, а также 32-битные микроконтроллеры архитектуры ARM, которую разрабатывает фирма ARM.

1. Разработка структурной схемы устройства

Структурная схема цифрового барометра приведена на рисунке 1.1. Устройство состоит из четырех блоков: источника напряжения, цифрового программируемого устройства, семисегментного дисплея, датчика атмосферного давления и температуры в помещении и датчика внешней температуры.

Рисунок 1.1 - Структурная схема цифрового барометра

Основой цифрового барометра является цифровое программируемое устройство (ЦПУ). Его основой является микроконтроллер ATMega328 в составе модуля Arduino Uno R3. Оно выполняет такие функции, как получение значений температуры и давления с датчиков, обработка полученных данных и вывод информации на дисплей.

Датчик BMP085 измеряет атмосферное давление с высокой точностью, а также получает данные о температуре воздуха и высоты над уровнем моря. Он отличается производительностью, точностью (минимальное значения измерения давления - 0.03hPa) и очень низким энергопотреблением.

Принцип действия датчика внешней температуры состоит в использовании термистора - полупроводникового прибора, электрическое сопротивление которого изменяется в зависимости от его температуры. ЦПУ получает значение падения напряжения с термистора, преобразует его в цифровой код и передает его в управляющую программу. Расчет значения температуры производится путем сопоставления полученного напряжения значению из таблицы соответствующих температур (таблицы температур находятся в технической документации термистора).

Жидкокристаллический модуль МТ-10Т7 состоит из БИС контроллера и ЖК панели и может отображать 10 знакомест.

2. Разработка принципиальной схемы

Принципиальная схема устройства показана на рисунке 2.1. Входное напряжение подается на вход VCC датчика давления, на вход VSS дисплея и в цепь с термистором, выполняющую функцию датчика внешней температуры.

Выводы датчика BMP085 SCL и SDA подключены к портам Arduino Uno A5/SCL и A4/SDA соответственно. Посредством этих выводов на Arduino осуществляется связь I2C и передача информации между датчиком и микропроцессором.

Порт назначения адреса А дисплея подключен к выводу D10 Arduino Uno, порты DB0-DB3, выполняющие функцию шин адреса/данных, подключены к D7-D4 соответственно. Порты дисплея R/W и RS предназначены для записи данных в модуль, подключены к выводам D9 и D8. Порты D4-D10 являются цифровыми входами, из которых D5, D6, D9, D10 обеспечивают широтно-импульсную модуляцию с разрешением 8 бит для получения изменяющегося аналогового сигнала.

Принципиальная схема Arduino Uno показана на рисунке 2.2.

Рисунок 2.1 - Схема электрическая принципиальная цифрового барометра

Рисунок 2.2 - Схема электрическая принципиальная Arduino Uno

Для рассматриваемого устройства спецификация приведена в таблице 2.1.

Таблица 2.1 - Перечень элементов схемы электрической принципиальной разрабатываемого устройства

Обозначение

Наименование

Кол.

Примечание

Микросхемы

DD1

Uno Arduino

1

Дисплей

DD2

ЖК модуль МТ-10Т7

1

Резисторы

R1

Резистор выводной - 10 кОм

1

R2

Термистор - 2,2 кОм

1

Конденсаторы

C1

Конденсатор - 100 нФ

1

C2-C3

Конденсатор - 0.1 мкФ

2

Дроссели

L2

Дроссель выводной - 10 мкГн

1

3. Разработка алгоритма работы управляющей программы

В общем виде управляющая программа показана на рисунке 3.1.

Рисунок 3.1 - Общий вид управляющей программы

Общая блок-схема программы представлена на рисунке 3.1. При подключении питания однократно выполняется подпрограмма setup(), проверяющая подключение датчика и инициализирующая дисплей. После этого циклически выполняется подпрограмма loop(), которая считывает и преобразует полученные с датчиков данные в понятную пользователю форму и выводит информацию на дисплей, до того момента, пока питание не будет отключено. Показания давления и температуры сменяют друг друга с интервалом в три секунды. Блок-схемы программ setup() n loop() представлены на рисунках 3.2, 3.3.

Рисунок 3.2 - Блок-схема подпрограммы setup()

Рисунок 3.3 - Блок-схема подпрограммы loop()

Показание атмосферного давления считывается с датчика BMP085, умножается на переводной множитель Kmm для перевода из паскалей в миллиметры ртутного столба и передаются в подпрограмму Pressure(float P), где обрабатывается для корректного вывода на дисплей. Преобразованные данные (значения разрядов числового значения давления с точностью до 0,01 мм ртутного столба) передаются в строку InfoPress[10].

Показание температуры внутри помещения считывается с датчика BMP085 и аналогично значению давления передается в подпрограмму Temperature(int Tin, int Tout).

Механизм считывания и обработки внешней температуры несколько сложнее. В качестве датчика внешней температуры использован терморезистор, поэтому прежде, чем передавать полученное значение в подпрограмму Temperature(int Tin, int Tout), требуется провести линейную интерполяцию полученного значения напряжения с термистора и соотнести полученное значение падения напряжения с соответствующим значением температуры. Для этого полученное значение напряжение передается в подпрограмму CalcTemperature(float AD), которое возвращает значение температуры. После этого полученное числовое значение передается в подпрограмму Temperature(int Tin, int Tout) вместе со значением внутренней температуры. Значение Tout умножается на поправочный множитель 1,286 для минимизации погрешности. Обработанная информация заносится в строку InfoTemp[10]. Блок-схемы подпрограмм Pressure(float P), Temperature(int Tin, int Tout) и CalcTemperature(float AD) приведены на рисунках 3.4, 3.5, 3.6.

цифровой барометр датчик

Рисунок 3.4 - Блок-схема подпрограммы Pressure(float P)

Рисунок 3.5 - Блок-схема подпрограммы Temperature(int Tin, int Tout)

Рисунок 3.6 - Блок-схема подпрограммы CalcTemperature(float AD)

Для отображения обработанной информации используется подпрограмма DispString(char Str[10]). После установления начального адреса символу с каждой позиции переданной строки устанавливается соответствие из массива SegmentMap[30], который содержит передаваемые на семисегментный дисплей коды символов. Блок-схема данной подпрограммы изображена на рисунке 3.7.

Рисунок 3.7 - Блок-схема подпрограммы DispString(char Str[10])

4. Разработка управляющей программы

Листинг управляющей программы:

#include <Wire.h>

#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;

float Kmm = 0.00750063755419211

byte StPin = 4; //start pin No for output 4 bits DB0-DB3

byte WR1pin = 8; //pin No for WR1

byte WR2pin = 9; //pin No for WR1

byte ADpin = 10; // address/data signal

int sensorPin = A0; // select the input pin for the potentiometer

int ledPin = 13; //select the pin for the LED

int sensorValue = 0; // variable to store the value coming from the sensor

byte SegmentMap[30] = {B11101110, B01100000, B00101111, B01101101, B11100001,

B11001101, B11001111, B01101000, B11101111, B11101101,

B00100011, B11000001, B11100110, B11101010, B10101001,

B10001110, B00000001, 0, B01000011, 0,

B11111110, B01110000, B00111111, B01111101, B11110001,

B11011101, B11011111, B01111000, B11111111, B11111101};

byte MaskLow[4] = {B00000001,B00000010,B00000100,B00001000};

byte MaskHigh[4] = {B00010000,B00100000,B01000000,B10000000};

char InfoPress[10];

char InfoTemp[10];

#define ArrSize 20

int TStep[ArrSize] = {-40, -35, -30, -25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55};

int ADval[ArrSize] = {884, 842, 794, 738, 677, 612, 545, 480, 417, 359, 307, 260, 220, 185, 155, 130, 109, 92, 77, 65};

int Tout=0;

void setup() {

Serial.begin(9600);

if (!bmp.Begin())

{

Serial.println("Could not find a valid BMP085 sensor, check wiring!");

while (1) {}

}

InitScreen();

}

void loop() {

ClearScreen();

Pressure(bmp.readPressure()*Kmm);

Tout=CalcTemperature(analogRead(sensorPin));

Temperature (bmp.readTemperature(), Tout*1.286);

DispString(InfoPress);

delay(3000);

DispString(InfoTemp);

delay(3000);

}

void DispString(char Str[10]) {

byte i=0;

WriteAddr0();

for (i=0; i<=10; i++) {

DispChar(Str[i]); }

}

void InitScreen() {

byte pin=0;

//Assign pins for LCD

pinMode(WR1pin, OUTPUT);

pinMode(WR2pin, OUTPUT);

pinMode(ADpin, OUTPUT);

for (pin=StPin; pin<=StPin+3; pin++) {

pinMode(pin, OUTPUT); }

//Init service pins

digitalWrite(WR1pin,LOW);

digitalWrite(WR2pin,LOW);

digitalWrite(ADpin,HIGH);

//Unblock LCD trigger

for (pin=StPin; pin<=StPin+3; pin++) {

digitalWrite(pin, HIGH); }

StrobeAD();

}

/////////////////////////////////////////////////////////////////////////////////////////////

void ClearScreen() {

byte i=0;

WriteAddr0();

for (i=0; i<=9; i++) {

DataClr(); }

}

//////////////////////////////////////////////////////////////////////////////////////////

void Pressure(float P)

{

int pos1, pos2, pos3, pos4, pos5;

pos1=P/100;

pos2=(P-pos1*100)/10;

pos3=P-pos1*100-pos2*10;

pos4=(P-pos1*100-pos2*10-pos3)*10;

pos5=(P-pos1*100.0-pos2*10.0-pos3-pos4/10)*100;

InfoPress[0]=pos1;

InfoPress[1]=pos2;

InfoPress[2]=pos3+20;

InfoPress[3]=pos4;

InfoPress[4]=pos5;

InfoPress[5]=17;

InfoPress[6]=18;

InfoPress[7]=18;

InfoPress[8]=18;

InfoPress[9]=18;

}

////////////////////////////////////////////////////////////////////////

void Temperature(double Tin, double Tout)

{

InfoTemp[0]=TempSign(Tin);

InfoTemp[1]=TempConvers1(Tin);

InfoTemp[2]=TempConvers2(Tin);

InfoTemp[3]=14;

InfoTemp[4]=15;

InfoTemp[5]=TempSign(Tout);

InfoTemp[6]=TempConvers1(Tout);

InfoTemp[7]=TempConvers2(Tout);

InfoTemp[8]=14;

InfoTemp[9]=15;

}

//////////////////////////////////////////////////////////////////////////////////////

int TempConvers1 (double T)

{ int pos1;

pos1=abs(T)/10;

return pos1;

}

/////////////////////////////////////////////////////////////////////////////////////

int TempConvers2 (double T)

{ int pos2;

pos2=abs(T)-TempConvers1(T)*10;

return pos2;

}

///////////////////////////////////////////////////////////////////////////////

int TempSign(double T)

{if (T>=0) {return 17;}

else {return 16;}

}

////////////////////////////////////////////////////////////

float CalcTemperature(int AD)

{ int p=1, q=ArrSize, s;

float TempPrev, TempItog, del, porAD;

while (p<q)

{

s=(p+q)/2;

if (ADval[s]>=AD)

{

p=s+1;

}

else

{q=s;

}

}

TempPrev=TStep[s-1];

del=(5.0/(ADval[s-1]-ADval[s]));

TempItog=TempPrev+(ADval[s]-AD)*del;

return TempItog;

}

//////////////////////////////////////////////////////////

void StrobeAD() {

digitalWrite(ADpin,LOW);

digitalWrite(WR1pin,HIGH);

delayMicroseconds(1);

digitalWrite(WR1pin,LOW);

digitalWrite(ADpin,HIGH);

}

////////////////////////////////////////////////////////////////

void WriteAddr0() //write address 00 to LCD

{int pin=0;

for (pin=StPin; pin<=StPin+3; pin++) {

digitalWrite(pin, LOW); }

StrobeAD();

}

/////////////////////////////////////////////////

void DispChar(byte Code) {

int Ln=0;

//Display Low part

for (Ln=0; Ln<=3; Ln++) {

digitalWrite(StPin+Ln,(SegmentMap[Code] & MaskLow[Ln])); }

StrobeWR();

//Display High part

for (Ln=0; Ln<=3; Ln++) {

digitalWrite(StPin+Ln,(SegmentMap[Code] & MaskHigh[Ln]));

}

StrobeWR();

}

/////////////////////////////////////////////////////

void StrobeWR() {

digitalWrite(WR1pin,HIGH);

delayMicroseconds(1);

digitalWrite(WR1pin,LOW);

}

/////////////////////////////////////////////////////////

void DataClr() {

int pin=0;

for (pin=StPin; pin<=StPin+3; pin++) {

digitalWrite(pin, LOW); }

StrobeWR();

StrobeWR();

}

Заключение

В данной курсовой работе продемонстрирована возможность разработки цифровых устройств на микроконтроллере ATMega328 в составе инструмента для проектирования электронных устройств Arduino Uno R3.

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

Таким образом, цели работы курсового проектирования были достигнуты в полном объеме.

Список источников

Каган Б.М., Сташин В.В. Основы проектирования микропроцессорных устройств автоматики. - М.: Энергоатомиздат, 1987.

Хартов В. Я. Микроконтроллеры AVR/. Практикум для начинающих. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2007.

Петин В. Проекты с использованием контроллера Arduino. - M.: BHV, 2015.

Размещено на Allbest.ru


Подобные документы

  • Развитие и применение микропроцессоров как одно из направлений научно-технического прогресса. Разработка структурной и принципиальной схемы разрабатываемого устройства, анализ функциональности. Алгоритм работы управляющей программы: работа и требования.

    курсовая работа [459,4 K], добавлен 11.12.2015

  • Разработка системы считывания данных с пяти четырехбитных датчиков. Проектирование структурной схемы микроконтроллера, схемы электрической принципиальной, блок-схемы работы программного обеспечения устройства. Разработка алгоритма основной программы.

    контрольная работа [275,4 K], добавлен 08.01.2014

  • Проектирование цифрового генератора аналоговых сигналов. Разработка структурной, электрической и функциональной схемы устройства, блок-схемы опроса кнопок и работы генератора. Схема делителя с выходом в виде напряжения на инверсной резистивной матрице.

    курсовая работа [268,1 K], добавлен 05.08.2011

  • Электронный замок: общая характеристика и принцип действия. Анализ вариантов реализации устройства. Разработка алгоритма функционирования, структурной и электрической принципиальной схемы электронного замка. Блок-схема алгоритма работы программы.

    курсовая работа [363,3 K], добавлен 10.05.2015

  • Проектирование функциональной и принципиальной схем цифрового вольтметра. Выбор устройства управления (микроконтроллера), источника и инвертора напряжения, индикаторов. Функции и структура управляющей программы, ее алгоритм и глобальные переменные.

    курсовая работа [84,8 K], добавлен 14.03.2014

  • В работе на базе PIC-контроллера реализуется цифровой секундомер. Выбор технических требований к устройству, к питанию. Разработка структурной схемы, принципиальной электрической схемы, алгоритма работы управляющей программы, управляющей программы.

    курсовая работа [427,1 K], добавлен 20.06.2008

  • Анализ влияния напряжения питания на работу микроэлектронных устройств. Принцип действия и характеристика устройств контроля напряжения. Выбор типа микроконтроллера. Функции, выполняемые супервизором. Разработка алгоритма и структурной схемы устройства.

    диссертация [3,1 M], добавлен 29.07.2015

  • Принцип работы электрических термометров, преимущества использования. Структурная схема устройства, выбор элементной базы, средств индикации. Выбор микроконтроллера, разработка функциональной схемы устройства. Блок-схема алгоритма работы термометра.

    курсовая работа [3,6 M], добавлен 23.05.2012

  • Анализ аналогов генератора пилообразного напряжения. Принципиальная схема, принцип работы. Генератор пилообразного напряжения на микроконтроллере. Разработка структурной функциональной схемы цифрового устройства. Индикатор уровня сигнала на LM3915.

    курсовая работа [1,3 M], добавлен 27.01.2016

  • Разработка алгоритма функционирования устройства. Разработка и отладка рабочей программы на языке команд микропроцессора. Составление и описание электрической принципиальной схемы. Расчет АЧХ устройства для заданных и реальных значений коэффициентов.

    курсовая работа [313,9 K], добавлен 28.11.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.