Цифровой барометр - Курсовая работа

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

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
Устройство состоит из четырех блоков: источника напряжения, цифрового программируемого устройства, семисегментного дисплея, датчика атмосферного давления и температуры в помещении и датчика внешней температуры. Оно выполняет такие функции, как получение значений температуры и давления с датчиков, обработка полученных данных и вывод информации на дисплей. Показание температуры внутри помещения считывается с датчика BMP085 и аналогично значению давления передается в подпрограмму Temperature(int Tin, int Tout). В качестве датчика внешней температуры использован терморезистор, поэтому прежде, чем передавать полученное значение в подпрограмму Temperature(int Tin, int Tout), требуется провести линейную интерполяцию полученного значения напряжения с термистора и соотнести полученное значение падения напряжения с соответствующим значением температуры. Блок-схемы подпрограмм Pressure(float P), Temperature(int Tin, int Tout) и CALCTEMPERATURE(float AD) приведены на рисунках 3.4, 3.5, 3.6. цифровой барометр датчикВ данной курсовой работе продемонстрирована возможность разработки цифровых устройств на микроконтроллере ATMEGA328 в составе инструмента для проектирования электронных устройств Arduino Uno R3.

План
Содержание

Введение

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

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

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

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

Заключение

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

Введение
Одним из важнейших направлений научно-технического прогресса является развитие и применение микропроцессоров. Их малые размеры, высокая надежность, большие вычислительные и логические способности позволяют создавать контролирующие, управляющие и обрабатывающие цифровые устройства высокого качества и низкой стоимости. Начиная с 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

#include

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.

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

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?