• Skip to primary navigation
  • Skip to content
  • Skip to primary sidebar
  • Skip to secondary sidebar

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Raspberry pi
      • Raspberry pi server
      • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
  • ЧПУ
  • 3d печать
  • Об авторе

Мониторинг устройств с помощью сервиса ThingSpeak и Arduino

Февраль 15, 2017

Для этой статьи нам понадобится:

Arduino Uno: http://ali.ski/gC_mOa или  Arduino nano: http://ali.ski/rHRbY

Ethernet shield: http://ali.ski/tLocoy

Датчик температуры LM335: http://ali.pub/pr1cx

Фоторезистор: http://ali.ski/5GDvP7

Контактные провода: http://ali.ski/Exjr3

Сначала рассмотрим датчик LM335. Это датчик температурного чувствительного элемента с диапазоном от -40 до +100 градусов по Цельсию с точностью в 1 градус.

По принципу действия датчик LM335 представляет собой стабилитрон, у которого напряжение стабилизации зависит от температуры, при повышении температуры на один градус Кельвина напряжение стабилизации увеличивается на 10 милливольт.

Скетч и схему для этого датчика смотрите по ссылке.

Чтение данных с фоторезистора

Рассмотрим аналоговый датчик – фоторезистор. Чаще всего с помощью фоторезисторов осуществляют измерение освещенности. Дело в том, что  в темноте сопротивление фоторезистора весьма велико, но когда на него попадает свет, это сопротивление падает пропорционально освещенности.

Схема подключения фоторезистора к Ардуино:

Для схемы измерения освещенности необходимо собрать делитель напряжения, в котором верхнее плечо будет представлено фоторезистором, а нижнее обычным резистором 10 кОм. среднее же плечо делителя подключается к аналоговому входу А0 Ардуино.

Скетч
int light;
void setup(){
serial.begin(9600);
}
void loop(){
light = analogRead(0);
Serial.println(light);
delay(100);
}

Отправка данных в сервис ThingSpeak.

Сервис ThingSpeak – открытая платформа данных для проектов Internet of Things, включающая в себя сбор данных с датчиков в реальном времени, обработку этих данных, их визуализацию и использование в приложениях и плагинах.

Чтобы начать работу с сервисом, необходимо зарегистрироваться, нажав кнопку GetStarted Now в стартовом окне сервиса. В открывшимся окне регистрации заполняем требуемые формы, нажимаем кнопку Create Account и сразу попадаем в свой аккаунт.

Здесь нам надо создать канал (Channel), в котором будут храниться наши данные.

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

Для создания канала нажимаем кнопку NewChannel, заполняем поля, как показано на рисунки ниже и сохраняем канал, нажав на кнопку Save Channel. Все – канал создан. Мы в качестве датчика задействовали в создаваемом канале фоторезистор, прописав его в поле Field 1. А в Field 2 мы пропишем датчик температуры LM335.

Схема подключения Фоторезистора и датчика LM335 к Ардуино:


Скетч

#include <SPI.h>
#include <Ethernet.h>

// уникальный MAC-адрес платы Arduino
byte mac[] = { 0xD5, 0x28, 0xB2, 0xFF, 0xA1, 0xA1 }; 

// IP адрес, назначаемый Ethernet shield:
byte ip[] = { 192, 168, 1, 11 };    
// IP адрес, dns сервера:
byte sdns[] = { 8, 8, 8, 8 };    
// адрес шлюза:
byte gateway[] = { 192, 168, 1, 111 };
// маска:
byte subnet[] = { 255, 255, 255, 0 };
 
// ThingSpeak Settings
char thingSpeakAddress[] = "api.thingspeak.com";
String writeAPIKey = "H3P7EX4C1I4G33ON";
// Интервал отправки данных на сервер – 16 сек
const int updateThingSpeakInterval = 16 * 1000;      

// служебные переменные
long lastConnectionTime = 0; 
boolean lastConnected = false;
int failedCounter = 0;

// Инициализация Arduino Ethernet client
EthernetClient client;

void setup()
  {
  // Запуск последовательного порта
  Serial.begin(9600);
  // Запуск Ethernet на Arduino
  startEthernet();
  }

void loop()
  {
  // Чтение данных из A0 и A1
  String analogValue0 = String(analogRead(A0), DEC);
  double temp335=analogRead(A1)*5.0/1024*100-273.15;
  String analogValue1 = String(temp335);
  // печать запроса в последовательный порт
  if (client.available())
    {
    char c = client.read();
    Serial.print(c);
    }

  // Разъединение с ThingSpeak
  if (!client.connected() && lastConnected)
    {
    Serial.println("...disconnected");
    Serial.println();
    client.stop();
    }
  
  // отправка данных в Канал ThingSpeak
  if(!client.connected() && (millis() - lastConnectionTime > updateThingSpeakInterval))
    {
    updateThingSpeak("field1="+analogValue0+"&field2="+analogValue1);
    Serial.println(analogValue0);
    Serial.println(analogValue1);
    }
  // При кол-ве неуспешных попыток >10 – перезапуск интернет-соединения
  if (failedCounter > 10 ) {startEthernet();}
  lastConnected = client.connected();
}
// отправка данных в Канал Thingspeak
void updateThingSpeak(String tsData)
  {
  if (client.connect(thingSpeakAddress, 80))
    {         
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(tsData.length());
    client.print("\n\n");

    client.print(tsData);
    lastConnectionTime = millis();
    if (client.connected())
      {
      Serial.println("Connecting to ThingSpeak...");
      Serial.println();
      
      failedCounter = 0;
      }
    else
      {
      failedCounter++;  
      Serial.println("Connection to ThingSpeak failed ("+String(failedCounter, DEC)+")");   
      Serial.println();
      }
    }
  else
    {
    // увеличение счетчика неуспешных попыток отправки данных
    failedCounter++;
    Serial.println("Connection to ThingSpeak Failed ("+String(failedCounter, DEC)+")");   
    Serial.println();
    lastConnectionTime = millis(); 
    }
  }
// Перезапуск интернет-соединения
void startEthernet()
  {
  client.stop();
  Serial.println("Connecting Arduino to network...");
  Serial.println();  
  delay(1000);
  Ethernet.begin(mac,ip,sdns,gateway,subnet); 
  delay(1000);
    Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++)
   {
    // печать ip-адреса
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print(".");
    }
  Serial.println(); 
  delay(1000);
}

Ссылка на скетч: https://yadi.sk/d/Rb-3Cnaw3E7g7B

Видео:

  • Нравится

Primary Sidebar

Поиск

Новые записи

  • Подключение к raspberry pi через USB-ttl адаптер
  • Гирлянда на адресных светодиодах ws2812b и arduino
  • Снежинка на arduino и светодиодной ленте ws2812
  • Подключение термистора к arduino.
  • Термостат с регулировкой температуры до 1000 С° с помощью модуля MAX6675, реле и arduino.

Метки

Loading

Arduino attiny84 BH1750 Blynk buzzer CNC DS18b20 esp8266 Ethernet FLProg Games GSM HC-06 HC-SR04 HC-SR501 ir isd1820 L298N LM335 MAX7219 MQ-2 neopixel NEOWAY M590 Nextion nodemcu processing raspberry pi Relay RFID SD card Servo sharp ThingSpeak ws2812 Влажность Датчик звука Сигнализация Температура ЧПУ диод кнопка монитор порта уроки фоторезистор часы 3d печать (1)
Arduino (82)
ESP (2)
ESP32 (1)
ESP8266 (13)
FLProg (10)
NodeMCU (7)
Raspberry pi (5)
Raspberry pi server (2)
Uncategorized (2)
Игры на Arduino (3)
Музыка (1)
Приборы (1)
Проекты Arduino (53)
Проекты Raspberry pi (1)
Роботы на Ардуино (1)
Уроки Arduino (14)
ЧПУ (3)

Подписаться на YouTube!

Группа в ВК

Secondary Sidebar

Свежие записи

  • Подключение к raspberry pi через USB-ttl адаптер
  • Гирлянда на адресных светодиодах ws2812b и arduino
  • Снежинка на arduino и светодиодной ленте ws2812
  • Подключение термистора к arduino.
  • Термостат с регулировкой температуры до 1000 С° с помощью модуля MAX6675, реле и arduino.

Copyright_У Павла! © 2019 ·