Jump to content
Sign in to follow this  
Guest Dinovasya

Arduino Nano + RTC 1307 + AM2320 + Реле I2C ?

Recommended Posts

Guest Dinovasya

Хочу собрать умный сетевой фильтр на 5 розеток (1-постоянно включена, 1 регулируемая по времени, 3 регулируются датчиком AM2320).

Всё это будет внутри корпуса сетевого фильтра.

Помощь Ваша мне нужна на всём этапе сборки и программирования.

 

1 с чего начну: 

Tiny RTC  1307 подключил по I2C, на эти же пины А4,А5 посадил AM2320 также по I2C.

Это правильный подход?

I2C: 4 (SDA) and 5 (SCL). Support I2C (TWI) communication using the Wire library.

Есть ли у кого набор готовых скетчей по данной конфигурации?

 

MRTCCircuito.jpg

Share this post


Link to post
Share on other sites

/**
  скетч измеряет каждые 5 секунд влажность и температуру сдатчика Am2320 
  и выводит показания в монитор порта.
  Нужно сделать чтоб при влажности менее 80 % включалось реле на пине D6
  При достижении влажноси 96% отключить реле на пине D6
  Нужно при температуре ниже 14 градусов включить реле на пине D5
  Нужно при достижении температуры 16 градусов выключить реле на пине D5
   
**/

// Include library into the sketch
#include <AM2320.h>

// Create an instance of sensor
AM2320 sensor;

void setup() {
  // enable serial communication
  Serial.begin(9600);
  // call sensor.begin() to initialize the library
  sensor.begin();
}

void loop() {

  // sensor.measure() returns boolean value
  // - true indicates measurement is completed and success
  // - false indicates that either sensor is not ready or crc validation failed
  //   use getErrorCode() to check for cause of error.
  if (sensor.measure()) {
    Serial.print("Temperature: ");
    Serial.println(sensor.getTemperature());
    Serial.print("Humidity: ");
    Serial.println(sensor.getHumidity());
  
  }
  else {  // error has occured
    int errorCode = sensor.getErrorCode();
    switch (errorCode) {
      case 1: Serial.println("ERR: Sensor is offline"); break;
      case 2: Serial.println("ERR: CRC validation failed."); break;
    }    
  }

  delay(5000);
}

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Сообщения

  • Similar Content

    • By Alexandr Petrenko
      Нужна помощь, так случилось, что я никак не связан с радиотехникой и т.д, но мне нужно сделать перчатку (тема дипломной работы) по видео AlexGyver, которая по сути и есть стробоскопом на базе Arduino nano. И я её кое-как спаял и конечно же она не работает, причины искать нет смысла, потому что может быть всё что угодно. Подскажите мне как можно упростить это устройство чтобы я его смог сделать, что-то проще, желательно схему иначе я не справлюсь.
      Вот то видео:
      https://www.youtube.com/watch?v=rLpn_4ERJXQ
    • By IgnatiusF
      Взял с места практики отладочную плату с атмегой 32-й, дома понял (возможно), что микроконтроллер заблокирован.
      Пытался шить через USBASP при помощи AVRDUDE, однако ошибка:
      avrdude.exe: error: programm enable: target doesn't answer. 1 avrdude.exe: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check. В правильности и надежности подключения полностью уверен, проверил каждый контакт и каждый элемент на всей плате тестером. Кстати, вот она:
      У меня точно такая же, только с Atmega32A.
      Попробовал поставить на нее дрова, но теперь она определяется вот так: Неизвестное USB-устройство (сбой дескриптора устройства).
      Из этой статьи по решению данной проблемы выполнил все указания, однако ничего не сработало.
      Тут я подумал на отключенный rst выход, так как был опыт из-за путаницы с обратными и прямыми фьюзами на Attiny13A. Тогда быстренько все исправил высоковольнтным программатором из этой статьи, вот и подумал сделать здесь подобное. Немного (чуть больше) полазив в интернете нашел вот такую схему на arduino. Все есть, чтобы ее сделать, только сперва понять бы, можно или нет без выпаивания это делать. И еще понять бы, в этом ли настоящая проблема? Или может я что-то не то надумал?
      Надеюсь на вашу помощь
    • By Tuxford
      В теории 1-wire позволяет подлючать несколько успройств по одному проводу. Но идентифицировать DHT22 никак нельзя. Получается на один провод нельзя?
      Если мне нужно 10 таких датчиков, то нужно немеренно кабелей, да и количество gpio на  Raspberry Pi 3 не так уж много, даже если ставить екстендер.
      Какие еще дешевые решения для подклбчения 10-20 устройств работающих по 1-wire?
      PS. в таких длеах новичок, поэтому сильно не ругайте.
       
    • By silentland
      Arduino NANO (CH380). Схема питается от 4-х АА элементов через такой преобразователь http://roboparts.ru/products/dc-step-up-2v-5v-2a Соответственно, если АА - это новые батарейки, то напряжение может быть около 6,5В. Можно ли их подать на порт +5В? Что будет? А в качестве USB-питания можно?
    • By Holm
      Приветствую радиолюбители!Проблема такая,решил собрать пульсоксиметр,но т.к это моя первая работа на Arduino Nano,возникли трудности.
      Собираю по этой  статье
      Единственное отличие у них стоит oled display 0.91 у меня 0.96.
      Не могу разобраться,с какой библиотекой работать u8g2lib или u8glib.Какой дисплей мне выбрать и тд.
      Ссылка на библиотеку MAX30100 клик
      #include <CircularBuffer.h> #include <MAX30100.h> #include <MAX30100_BeatDetector.h> #include <MAX30100_Filters.h> #include <MAX30100_PulseOximeter.h> #include <MAX30100_Registers.h> #include <MAX30100_SpO2Calculator.h> #include <U8g2lib.h> #include "MAX30100_PulseOximeter.h" #include <Wire.h> #define REPORTING_PERIOD_MS 500 U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0); // PulseOximeter is the higher level interface to the sensor // it offers: // * beat detection reporting // * heart rate calculation // * SpO2 (oxidation level) calculation PulseOximeter pox; const int numReadings=10; float filterweight=0.5; uint32_t tsLastReport = 0; uint32_t last_beat=0; int readIndex=0; int average_beat=0; int average_SpO2=0; bool calculation_complete=false; bool calculating=false; bool initialized=false; byte beat=0; // Callback (registered below) fired when a pulse is detected void onBeatDetected() { show_beat(); last_beat=millis(); } void show_beat() { u8g2.setFont(u8g2_font_cursor_tf); u8g2.setCursor(8,10); if (beat==0) { u8g2.print("_"); beat=1; } else { u8g2.print("^"); beat=0; } u8g2.sendBuffer(); } void initial_display() { if (not initialized) { u8g2.clearBuffer(); show_beat(); u8g2.setCursor(24,12); u8g2.setFont(u8g2_font_smart_patrol_nbp_tf); u8g2.print("Place finger"); u8g2.setCursor(0,30); u8g2.print("on the sensor"); u8g2.sendBuffer(); initialized=true; } } void display_calculating(int j) { if (not calculating) { u8g2.clearBuffer(); calculating=true; initialized=false; } show_beat(); u8g2.setCursor(24,12); u8g2.setFont(u8g2_font_smart_patrol_nbp_tf); u8g2.print("Measuring"); u8g2.setCursor(0,30); for (int i=0;i<=j;i++) { u8g2.print(". "); } u8g2.sendBuffer(); } void display_values() { u8g2.clearBuffer(); u8g2.setFont(u8g2_font_smart_patrol_nbp_tf); u8g2.setCursor(65,12); u8g2.print(average_beat); u8g2.print(" Bpm"); u8g2.setCursor(0,30); u8g2.print("SpO2 "); u8g2.setCursor(65,30); u8g2.print(average_SpO2); u8g2.print("%"); u8g2.sendBuffer(); } void calculate_average(int beat, int SpO2) { if (readIndex==numReadings) { calculation_complete=true; calculating=false; initialized=false; readIndex=0; display_values(); } if (not calculation_complete and beat>30 and beat<220 and SpO2>50) { average_beat = filterweight * (beat) + (1 - filterweight ) * average_beat; average_SpO2 = filterweight * (SpO2) + (1 - filterweight ) * average_SpO2; readIndex++; display_calculating(readIndex); } } void setup() { Serial.begin(115200); u8g2.begin(); pox.begin(); pox.setOnBeatDetectedCallback(onBeatDetected); initial_display(); } void loop() { // Make sure to call update as fast as possible pox.update(); if ((millis() - tsLastReport > REPORTING_PERIOD_MS) and (not calculation_complete)) { calculate_average(pox.getHeartRate(),pox.getSpO2()); tsLastReport = millis(); } if ((millis()-last_beat>10000)) { calculation_complete=false; average_beat=0; average_SpO2=0; initial_display(); } }  
×
×
  • Create New...