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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,52 Мб
  • Опубликовано:
    2015-06-23
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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














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

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

Содержание

Введение

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

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

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

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

Заключение

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

Введение

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

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

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

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

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

 

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

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

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

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

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

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

Принципиальная схема устройства показана на рисунке 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.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])

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

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

#include <Wire.h>

#include <Adafruit_BMP085.h>_BMP085 bmp;Kmm = 0.00750063755419211StPin = 4; //start pin No for output 4 bits DB0-DB3WR1pin = 8; //pin No for WR1WR2pin = 9; //pin No for WR1ADpin = 10; // address/data signalsensorPin = A0; // select the input pin for the potentiometerledPin = 13; //select the pin for the LEDsensorValue = 0; // variable to store the value coming from the sensorSegmentMap[30] = {B11101110, B01100000, B00101111, B01101101, B11100001, , B11001111, B01101000, B11101111, B11101101, , B11000001, B11100110, B11101010, B10101001, , B00000001, 0, B01000011, 0, , B01110000, B00111111, B01111101, B11110001, , B11011111, B01111000, B11111111, B11111101};MaskLow[4] = {B00000001,B00000010,B00000100,B00001000};MaskHigh[4] = {B00010000,B00100000,B01000000,B10000000};InfoPress[10]; InfoTemp[10];

#define ArrSize 20TStep[ArrSize] = {-40, -35, -30, -25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55};ADval[ArrSize] = {884, 842, 794, 738, 677, 612, 545, 480, 417, 359, 307, 260, 220, 185, 155, 130, 109, 92, 77, 65};Tout=0;setup() {.begin(9600);(!bmp.Begin())

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

}();

}loop() {();

Pressure(bmp.readPressure()*Kmm);=CalcTemperature(analogRead(sensorPin));(bmp.readTemperature(), Tout*1.286);

DispString(InfoPress);(3000);(InfoTemp);(3000);

}DispString(char Str[10]) {i=0;();(i=0; i<=10; i++) {(Str[i]); }

}InitScreen() {pin=0;

//Assign pins for LCD(WR1pin, OUTPUT); (WR2pin, OUTPUT); (ADpin, OUTPUT);(pin=StPin; pin<=StPin+3; pin++) {(pin, OUTPUT); }

//Init service pins(WR1pin,LOW);(WR2pin,LOW);(ADpin,HIGH);

//Unblock LCD trigger(pin=StPin; pin<=StPin+3; pin++) {(pin, HIGH); }();

}

/////////////////////////////////////////////////////////////////////////////////////////////ClearScreen() {i=0;();(i=0; i<=9; i++) {(); }

}

//////////////////////////////////////////////////////////////////////////////////////////Pressure(float P)

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

InfoPress[0]=pos1;[1]=pos2;[2]=pos3+20;[3]=pos4;[4]=pos5;[5]=17;[6]=18;[7]=18;[8]=18;[9]=18;

}

////////////////////////////////////////////////////////////////////////Temperature(double Tin, double Tout)

{ [0]=TempSign(Tin);[1]=TempConvers1(Tin);[2]=TempConvers2(Tin);[3]=14;[4]=15;[5]=TempSign(Tout);[6]=TempConvers1(Tout); [7]=TempConvers2(Tout);[8]=14;[9]=15;

}

//////////////////////////////////////////////////////////////////////////////////////TempConvers1 (double T)

{ int pos1;=abs(T)/10;pos1;

}

/////////////////////////////////////////////////////////////////////////////////////TempConvers2 (double T)

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

}

///////////////////////////////////////////////////////////////////////////////TempSign(double T)

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

}

////////////////////////////////////////////////////////////CalcTemperature(int AD)

{ int p=1, q=ArrSize, s;TempPrev, TempItog, del, porAD;

(p<q)

{=(p+q)/2;(ADval[s]>=AD)

{ =s+1;

}

{q=s;

}

}

=TStep[s-1];=(5.0/(ADval[s-1]-ADval[s]));=TempPrev+(ADval[s]-AD)*del;TempItog;

}

//////////////////////////////////////////////////////////StrobeAD() {(ADpin,LOW);(WR1pin,HIGH);(1);(WR1pin,LOW);(ADpin,HIGH);

}

////////////////////////////////////////////////////////////////WriteAddr0() //write address 00 to LCD

{int pin=0;(pin=StPin; pin<=StPin+3; pin++) {(pin, LOW); }();

}

/////////////////////////////////////////////////DispChar(byte Code) {Ln=0;

//Display Low part(Ln=0; Ln<=3; Ln++) {(StPin+Ln,(SegmentMap[Code] & MaskLow[Ln])); }();

//Display High part(Ln=0; Ln<=3; Ln++) {(StPin+Ln,(SegmentMap[Code] & MaskHigh[Ln]));

}();

}

/////////////////////////////////////////////////////StrobeWR() {(WR1pin,HIGH);(1);(WR1pin,LOW);

}

}

Заключение

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

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

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

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

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

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

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


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!