Оглавление:

Постройте график данных DHT11 с помощью Raspberry Pi и Arduino UNO: 7 шагов
Постройте график данных DHT11 с помощью Raspberry Pi и Arduino UNO: 7 шагов

Видео: Постройте график данных DHT11 с помощью Raspberry Pi и Arduino UNO: 7 шагов

Видео: Постройте график данных DHT11 с помощью Raspberry Pi и Arduino UNO: 7 шагов
Видео: Датчик температуры DS18B20: Обзор, подключение к Arduino и пример скетча 2024, Ноябрь
Anonim
Постройте график данных DHT11 с помощью Raspberry Pi и Arduino UNO
Постройте график данных DHT11 с помощью Raspberry Pi и Arduino UNO

В этом руководстве объясняется, как я строю данные датчика температуры DHT11 с помощью Arduino Uno и Raspberry Pi. В этом датчик температуры подключен к Arduino Uno, а Arduino Uno последовательно подключен к Raspberry Pi. На стороне Raspberry Pi для построения графиков используются библиотеки matplotlib, numpy и drawnow.

Шаг 1. Вещи, необходимые для проекта

Вещи, необходимые для проекта
Вещи, необходимые для проекта
Вещи, необходимые для проекта
Вещи, необходимые для проекта
Вещи, необходимые для проекта
Вещи, необходимые для проекта

1. Raspberry Pi

2. Arduino Uno

3. Датчик температуры DHT11

4. Проволочные перемычки.

5. Макетная плата

Шаг 2: Загрузите и установите Arduino IDE в Raspberry Pi

Загрузите и установите Arduino IDE в Raspberry Pi
Загрузите и установите Arduino IDE в Raspberry Pi
Загрузите и установите Arduino IDE в Raspberry Pi
Загрузите и установите Arduino IDE в Raspberry Pi
Загрузите и установите Arduino IDE в Raspberry Pi
Загрузите и установите Arduino IDE в Raspberry Pi

Примечание: - Вы можете использовать Arduino IDE для Windows, Linux или Mac для загрузки скетча в Arduino UNO.

Первый шаг - установить Arduino IDE для этого открытого браузера в Raspberry Pi и открыть ссылку, приведенную ниже.

Arduino Предыдущая IDE

Затем загрузите версию Linux для ARM и извлеките ее с помощью команды

tar -xf имя файла

После распаковки вы увидите новый каталог. Здесь я использую IDE arduino-1.8.2. Затем перейдите в каталог с помощью команды.

cd arduino-1.8.1

Чтобы запустить Arduino IDE, используйте эту команду в каталоге arduino-1.8.2

./arduino

Как использовать библиотеки

Чтобы установить любые библиотеки в Arduino, просто загрузите библиотеку и вставьте в папку arduino 1.8.2 ==> библиотеки.

ПРИМЕЧАНИЕ: - Убедитесь, что в папке библиотеки нет (-), например (датчик DHT). Если есть (-), переименуйте его.

в этом руководстве мы будем использовать две библиотеки: DHT_Sensor и Adafruit_Sensor.

Шаг 3: Код для Arduino

Код для Ардуино
Код для Ардуино

Теперь давайте поговорим между Python и Arduino. Во-первых, нам нужна простая программа, чтобы Arduino отправлял данные через последовательный порт. Следующая программа представляет собой простую программу, которая будет иметь счетчик Arduino и отправлять данные в последовательный порт.

Код Arduino

#include "DHT.h" float tempC; // Переменная или удерживаемая температура в C float tempF; // Переменная для выдержки температуры в F float влажность; // Переменная для показания давления удержания

#define DHTPIN 7 // к какому цифровому выводу мы подключены

#define DHTTYPE DHT11 // DHT 11

// # определение DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

// # определение DHTTYPE DHT21 // DHT 21 (AM2301)

// Инициализируем датчик DHT.

DHT dht (DHTPIN, DHTTYPE);

void setup () {Serial.begin (115200); // включаем серийный монитор

dht.begin (); // инициализировать dht}

пустой цикл () {tempC = dht.readTemperature (); // Обязательно объявите свои переменные

влажность = dht.readHumidity (); // Считываем влажность

Serial.print (tempC);

Serial.print (",");

Серийный отпечаток (влажность);

Serial.print ("\ n"); // для новой строки (2000); // Пауза между чтениями. }

После того, как скетч скомпилирован, выберите плату и порт и загрузите его.

Шаг 4: Настройте Raspberry Pi

Настройка Raspberry Pi
Настройка Raspberry Pi

После загрузки кода установите несколько библиотек, чтобы мы могли построить график данных, последовательно поступающих от Arduino Uno.

1. PySerial - это библиотека, которая обеспечивает поддержку последовательных соединений на множестве различных устройств. Для его установки используйте команду.

Sudo apt-get install python-serial

2. Numpy - это пакет, который определяет объект многомерного массива и связанные с ним быстрые математические функции. Он также предоставляет простые процедуры для линейной алгебры и БПФ (быстрое преобразование Фурье) и сложную генерацию случайных чисел. Вы можете установить его разными способами, используя пакет apt или pip. Здесь я устанавливаю, используя pip, для этого сначала мы должны установить pip

sudo apt-get install python-pip python-dev build-essential

sudo pip установить numpy

или если вы хотите использовать пакет apt

sudo apt установить python-numpy

3. Matplotlib - это библиотека двухмерных графиков, которая предоставляет объектно-ориентированный API для встраивания графиков в приложения с использованием универсальных инструментов графического интерфейса пользователя, таких как Tkinter, wxPython, Qt или GTK +. Для его установки используйте команду

sudo pip установить matplotlib

или

sudo apt install python-matplotlib

4. Drawnow обычно используется для просмотра результатов после каждой итерации, поскольку мы используем «imshow» в MATLAB. Для его установки используйте команду

sudo pip install drawow

Шаг 5: Python Scipt

Python Scipt
Python Scipt
Python Scipt
Python Scipt

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

1. Постройте данные на одном графике

import serial # import Serial Library

import numpy # Импортировать numpy

импортировать matplotlib.pyplot как plt # импортировать библиотеку matplotlib

из оттянутого импорта *

tempC = # Пустой массивhumidity =

arduino = serial. Serial ("/ dev / ttyACM0", 115200)

plt.ion () # интерактивный режим для построения графика live datacount = 0

def makeFig (): # Создать функцию, которая делает желаемый график

plt.ylim (20, 30) # Установить минимальные и максимальные значения y

plt.title ('Real Time DHT11 Data') # Построить заголовок

plt.grid (True) # Включаем сетку

plt.ylabel ('Temp C') # Установить ylabel

plt.plot (tempC, 'b ^ -', label = 'Degree C') # график температуры

plt.legend (loc = 'upper right') # построить легенду

plt2 = plt.twinx () # Создать вторую ось y

plt.ylim (50, 70) # Устанавливаем пределы второй оси y

plt2.plot (влажность, 'g * -', label = 'Humidity') # график данных давления

plt2.set_ylabel ('Humidity') # метка второй оси y

plt2.ticklabel_format (useOffset = False)

plt2.legend (loc = 'верхний левый')

while True: # Цикл while, который повторяется бесконечно

while (arduino.inWaiting () == 0): # Подождите, пока не появятся данные

передать # ничего не делать

arduinoString = arduino.readline ()

dataArray = arduinoString.split (',') # Разбить на массив

temp = float (dataArray [0])

hum = float (dataArray [1])

tempC.append (темп)

влажность.приложение (гул)

нарисованный (makeFig)

plt.pause (.000001)

count = count + 1 if (count> 20): # брать только последние 20 данных, если данных больше, оно появится первым

tempC.pop (0)

влажность.pop (0)

2. Построение графика влажности и температуры отдельно

import serial # import Serial Library

import numpy # Импортировать numpy

импортировать matplotlib.pyplot как plt # импортировать библиотеку matplotlib

из оттянутого импорта *

tempC = # Пустой массив

влажность =

arduino = serial. Serial ("/ dev / ttyACM0", 115200) # Последовательный порт, к которому подключен arduino, и скорость передачи

plt.ion () # Сообщите matplotlib, что вы хотите, чтобы интерактивный режим отображал данные в реальном времени

def CreatePlot (): # Создать функцию, которая делает желаемый график

plt.subplot (2, 1, 1) # Высота, Ширина, Первый график

plt.ylim (22, 34) # Установить минимальные и максимальные значения y

plt.title ('Real Time DHT11 Data') # Построить заголовок

plt.grid (True) # Включаем сетку

plt.ylabel ('Temp C') # Установить метки

plt.plot (tempC, 'b ^ -', label = 'Degree C') # график температуры

plt.legend (loc = 'upper center') # построить легенду

plt.subplot (2, 1, 2) # Высота, Ширина, Второй график

plt.grid (Истина)

plt.ylim (45, 70) # Устанавливаем пределы второй оси y

plt.plot (влажность, 'g * -', label = 'Humidity (g / m ^ 3)') # построить данные о влажности

plt.ylabel ('Humidity (г / м ^ 3)') # метка второй оси y

plt.ticklabel_format (useOffset = False) # для остановки автомасштабирования оси y

plt.legend (loc = 'верхний центр')

while True: # Цикл while, который повторяется бесконечно

while (arduino.inWaiting () == 0): # Ждать здесь, пока не пройдут данные # ничего не делать

arduinoString = arduino.readline () # читать данные из последовательного порта

dataArray = arduinoString.split (',') # Разбить на массив

temp = float (dataArray [0]) # Преобразуйте первый элемент в плавающее число и поместите в temp

hum = float (dataArray [1]) # Преобразуйте второй элемент в плавающее число и вставьте гул

tempC.append (temp) # Создайте наш массив tempC, добавив временное чтение

влажность.append (hum) # Создаем наш массив влажности, добавляя гул чтения

нарисованный (CreatePlot)

plt.pause (.000001)

count = count + 1

if (count> 20): # брать только последние 20 данных, если данных больше, оно появится первым

tempC.pop (0) # вывести первый элемент

влажность.pop (0)

Шаг 6: Принципиальная схема

Принципиальная электрическая схема
Принципиальная электрическая схема
Принципиальная электрическая схема
Принципиальная электрическая схема
Принципиальная электрическая схема
Принципиальная электрическая схема

Ардуино ==> DHT11

3,3 В ==> VCC

GND ==> GND

D7 ==> ВЫХОД

Рекомендуемые: