цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Термометр на основе Arduino и датчика MCP9808 с выводом данных на 4-разрядный 7-сегментный индикатор



Термометр на основе Arduino и датчика MCP9808 с выводом данных на 4-разрядный 7-сегментный индикатор

Автор: Mike(admin) от 7-07-2022, 23:55

Данный проект позволит вам собрать простой термометр на основе всего лишь нескольких компонентов, таких как плата Arduino, модуль датчика MCP9808, 4-разрядный 7-сегментный индикатор и резисторы 1 кОм. Используя данное устройство, вы сможете измерять температуру с достаточно высокой точностью.


Термометр на основе Arduino и датчика MCP9808 с выводом данных на 4-разрядный 7-сегментный индикатор

MCP9808 представляет собой цифровой датчик температуры с интерфейсом I2C, который является одним из самых точных датчиков в бюджетном сегменте. Он обладает типичной погрешностью ±0,25°C в диапазоне от -40°C до +125°C и точностью +0,0625°C. MCP9808 отлично работает с любым микроконтроллером, использующим стандарт интерфейса I2C. У него имеются 3 адресных контакта, поэтому вы можете подключить до 8 устройств к одной шине I2C без конфликтов адресов. А благодаря широкому диапазону напряжений питания можно использовать его с логикой от 2,7 В до 5,5 В.


Термометр на основе Arduino и датчика MCP9808 с выводом данных на 4-разрядный 7-сегментный индикатор

Термометр на основе Arduino и датчика MCP9808 с выводом данных на 4-разрядный 7-сегментный индикатор

На следующих рисунках представлены наглядная схема подключения компонентов на макетной плате и принципиальная схема.


Термометр на основе Arduino и датчика MCP9808 с выводом данных на 4-разрядный 7-сегментный индикатор

Термометр на основе Arduino и датчика MCP9808 с выводом данных на 4-разрядный 7-сегментный индикатор

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



#include <Wire.h>
#include "Adafruit_MCP9808.h"

Adafruit_MCP9808 tempSensor = Adafruit_MCP9808();

int pinA = 11;
int pinB = 7;
int pinC = 4;
int pinD = 2;
int pinE = 1;
int pinF = 10;
int pinG = 5;
int pinDP = 3;

int D1 = 12;
int D2 = 9;
int D3 = 8;
int D4 = 6;

void setup() {
  pinMode(pinA, OUTPUT);  //11
  pinMode(pinB, OUTPUT);  //7
  pinMode(pinC, OUTPUT);  //4
  pinMode(pinD, OUTPUT);  //2
  pinMode(pinE, OUTPUT);  //1
  pinMode(pinF, OUTPUT);  //10
  pinMode(pinG, OUTPUT);  //5
  pinMode(D1, OUTPUT);    //12
  pinMode(D2, OUTPUT);    //9
  pinMode(D3, OUTPUT);    //8
  pinMode(D4, OUTPUT);    //6

  tempSensor.begin(0x18);
}

void loop() {
  float C = tempSensor.readTempC();
  //  float F = C*9.0/5.0 + 32;

  int tempd1 = int(C / 10);
  int tempd2 = int((int)C % 10);

  //  int tempd1 = int(F/10);
  //  int tempd2 = int((int)F%10);

  for (int i = 0; i < 2000; i++) {
    digitalWrite(D1, LOW);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, HIGH);
    digitalWrite(D4, HIGH);
    disp(tempd1);
    delay(1);

    digitalWrite(D1, HIGH);
    digitalWrite(D2, LOW);
    digitalWrite(D3, HIGH);
    digitalWrite(D4, HIGH);
    disp(tempd2);
    delay(1);

    digitalWrite(D1, HIGH);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, LOW);
    digitalWrite(D4, HIGH);
    disp(11);
    delay(1);

    digitalWrite(D1, HIGH);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, HIGH);
    digitalWrite(D4, LOW);
    disp(10);
    delay(1);

    //    digitalWrite(D1, HIGH);
    //    digitalWrite(D2, HIGH);
    //    digitalWrite(D3, HIGH);
    //    digitalWrite(D4, LOW);
    //    disp(12);
    //    delay(1);
  }
  displayoff();
  tempSensor.shutdown_wake(1);
  delay(2000);
  tempSensor.shutdown_wake(0);

}

void disp(int number) {

  switch (number) {
    case 0 :
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, HIGH);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, LOW);
      break;

    case 1 :
      digitalWrite(pinA, LOW);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, LOW);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, LOW);
      digitalWrite(pinG, LOW);
      break;

    case 2 :
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, LOW);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, HIGH);
      digitalWrite(pinF, LOW);
      digitalWrite(pinG, HIGH);
      break;

    case 3 :
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, LOW);
      digitalWrite(pinG, HIGH);
      break;

    case 4 :
      digitalWrite(pinA, LOW);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, LOW);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, HIGH);
      break;

    case 5 :
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, LOW);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, HIGH);
      break;

    case 6 :
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, LOW);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, HIGH);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, HIGH);
      break;

    case 7 :
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, LOW);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, LOW);
      digitalWrite(pinG, LOW);
      break;

    case 8 :
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, HIGH);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, HIGH);
      break;

    case 9 :
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, LOW);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, HIGH);
      break;

    case 10 :
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, LOW);
      digitalWrite(pinC, LOW);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, HIGH);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, LOW);
      break;

    case 11 :
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, LOW);
      digitalWrite(pinD, LOW);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, HIGH);
      break;

      //      digitalWrite(pinA, HIGH);
      //      digitalWrite(pinB, LOW);
      //      digitalWrite(pinC, LOW);
      //      digitalWrite(pinD, LOW);
      //      digitalWrite(pinE, HIGH);
      //      digitalWrite(pinF, HIGH);
      //      digitalWrite(pinG, HIGH);
      //      break;
  }
}

void displayoff() {
  digitalWrite(D1, HIGH);
  digitalWrite(D2, HIGH);
  digitalWrite(D3, HIGH);
  digitalWrite(D4, HIGH);
}



© digitrode.ru


Теги: Arduino, датчик температуры, индикатор




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий