1

Topic: Нужна помощь в проекте Smartroom

Всем привет.
Скажу сразу что в этом деле новичок, в електронике и программировании почти не шарю )

Проблема такова: Все сложил на макете, написал скетч - заработало только половина из всего... ((((
К ардуино Уно подключил блютуз (питание от ардуино)
4 реле, датчик температуры и влажности, 2 серво привода (внешнее питание, компьютерный БП АТ на 230вт)

По блютузу подключился без проблем, 2 реле работают отлично, но 2 просто светятся лампочки.
Серво приводы как бы работают, управляются - но они как живые - дергаются, рычат.... (сами по себе)
Температуры и влажности 0 реакции. - не каких данных не отображал на смартфон.

В чем может быть проблема? Может написал что то не то? Или проблемы с подключением (распиновкой) или еще че?

Если чего то важного не написал - говорите.

Вот сам проект:
http://remotexy.com/ru/editor/5d3ee809a … 4c7488815/


Вот сам скетч:

/*
   -- My smart room --

   This source code of graphical user interface
   has been generated automatically by RemoteXY editor.
   To compile this code using RemoteXY library 2.3.1 or later version
   download by link http://remotexy.com/en/library/
   To connect using RemoteXY mobile app by link http://remotexy.com/en/download/
     - for ANDROID 4.0.1 or later version;
     - for iOS 1.1.0 or later version;

   This source code is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
*/

//////////////////////////////////////////////
//        RemoteXY include library          //
//////////////////////////////////////////////

// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__SOFTSERIAL
#include <SoftwareSerial.h>

#include <RemoteXY.h>

// настройки соединения
#define REMOTEXY_SERIAL_RX 2
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 9600

#define CW 7 // CW инициализируется на контакте 7//
#define CCW 8 // CCW инициализируется на контакте 8//
#define CCCW 9 // CCCW инициализируется на контакте 8//
#define CCCCW 10 // CCCCW инициализируется на контакте 8//


// конфигурация интерфейса 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,6,0,25,0,240,0,6,0,1,
  2,0,3,64,57,8,0,208,161,209,
  130,208,190,208,187,0,79,70,70,0,
  2,0,3,73,57,8,6,208,158,208,
  186,208,189,208,190,0,79,70,70,0,
  2,0,3,82,57,8,5,208,154,209,
  131,208,187,208,181,209,128,0,79,70,
  70,0,2,0,3,91,57,8,4,208,
  146,209,139,209,130,209,143,208,182,208,
  186,208,176,32,0,79,70,70,0,4,
  160,4,50,56,8,2,4,160,4,40,
  56,8,1,66,130,40,27,9,7,5,
  66,193,4,28,16,4,6,67,4,38,
  21,15,5,2,11,67,4,16,21,14,
  5,2,11,66,129,20,28,16,4,1,
  129,0,1,0,61,11,4,68,111,98,
  101,114,77,97,110,110,0,129,0,9,
  10,43,6,7,77,121,32,115,109,97,
  114,116,32,114,111,111,109,0,129,0,
  2,17,19,3,14,84,101,109,112,101,
  114,97,116,117,114,101,58,0,129,0,
  31,17,14,3,14,72,117,109,105,100,
  105,116,121,58,0,129,0,18,32,5,
  3,13,48,194,176,208,161,0,129,0,
  43,30,3,3,13,37,0 };
 
// структура определяет все переменные вашего интерфейса управления
struct {

    // input variable
  uint8_t switch_1; // =1 если переключатель включен и =0 если отключен
  uint8_t switch_2; // =1 если переключатель включен и =0 если отключен
  uint8_t switch_3; // =1 если переключатель включен и =0 если отключен
  uint8_t switch_4; // =1 если переключатель включен и =0 если отключен
  int8_t slider_leftright; // =-100..100 положение слайдера
  int8_t slider_updown; // =-100..100 положение слайдера

    // output variable
  int8_t level_hum; // =0..100 положение уровня
  int8_t level_temp_down; // =0..100 положение уровня
  int8_t level_temp_up; // =0..100 положение уровня
  char text_hum[11];  // =строка UTF8 оканчивающаяся нулем
  char text_temp[11];  // =строка UTF8 оканчивающаяся нулем


    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)


/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////

#include <Servo.h>

#define PIN_LEFTRIGHT_SERVO 5
#define PIN_UPDOWN_SERVO 12

Servo leftright_servo;
Servo updown_servo;

#include "DHT.h"
#define DHTPIN 4
DHT dht(DHTPIN, DHT11);

void setup()
{
  RemoteXY_Init ();
  pinMode(CW, OUTPUT); // настраиваем CW в качестве выхода//
  pinMode(CCW, OUTPUT); // настраиваем CCW в качестве выхода//
  pinMode(CCCW, OUTPUT); // настраиваем CCCW в качестве выхода//
  pinMode(CCCCW, OUTPUT); // настраиваем CCCCW в качестве выхода//

  leftright_servo.attach(PIN_LEFTRIGHT_SERVO);
  updown_servo.attach(PIN_UPDOWN_SERVO);

  // TODO you setup code

}

void loop()
{
  RemoteXY_Handler ();

  if (RemoteXY.switch_1 == 1) {
    digitalWrite(CW, LOW);
  }
  if (RemoteXY.switch_1 == 0) {
    digitalWrite(CW, HIGH);
  }
  if (RemoteXY.switch_2 == 1) {
    digitalWrite(CCW, LOW);
  }
  if (RemoteXY.switch_2 == 0) {
    digitalWrite(CCW, HIGH);
  }
  if (RemoteXY.switch_3 == 1) {
    digitalWrite(CCCW, LOW);
  }
  if (RemoteXY.switch_3 == 0) {
    digitalWrite(CCCW, HIGH);
  }
  if (RemoteXY.switch_4 == 1) {
    digitalWrite(CCCCW, LOW);
  }
  if (RemoteXY.switch_4 == 0) {
    digitalWrite(CCCCW, HIGH);
  }

  leftright_servo.writeMicroseconds(RemoteXY.slider_leftright * 20 + 500);
  updown_servo.writeMicroseconds(2500 - RemoteXY.slider_updown * 20);

 

  float temp = dht.readTemperature(); 
  float hum = dht.readHumidity();
  dtostrf(temp, 0, 1, RemoteXY.text_temp);
  dtostrf(hum, 0, 1, RemoteXY.text_hum);
 
  if (temp<0) {
    RemoteXY.level_temp_up = 0;
    RemoteXY.level_temp_down = min (-temp*2,100);
  }
  else if (temp>0) {
    RemoteXY.level_temp_up = min(temp*2,100);
    RemoteXY.level_temp_down = 0;
  }
  else {
    RemoteXY.level_temp_up = 0;
    RemoteXY.level_temp_down = 0;
  }
  RemoteXY.level_hum = hum;
}

  // TODO you loop code
  // используйте структуру RemoteXY для передачи данных

2

Re: Нужна помощь в проекте Smartroom

по сервоприводу http://forum.remotexy.com/viewtopic.php?id=9 может и другие проблемы от того же. В код лениво сейчас смотреть smile

3

Re: Нужна помощь в проекте Smartroom

1. По сервоприводу вам верно сказали - проблема в конфликте библиотек SoftwareSerial и Servo. Решение - перевести RemoteXY на аппаратный Serial.
2. По цифровым выводам на первый взгляд не вижу ничего критичного, с учетом что 2 работают. Поверьте контакты на двух других.
3. По температуре - попробуйте выводить данные с датчика в отладочный порт, что бы посмотреть есть ли какие данные с него. Serial.println (temp)

4 (edited by Focus 2017-10-08 05:49:37)

Re: Нужна помощь в проекте Smartroom

Опрос датчика DHT11 должен происходить не чаще 1 раза в секунду (1 раз в 2 секунды для DHT22), Не знаю, реализовано ли это в библиотеке, или надо самостоятельно делать задержку (delay вне закона, только через millis)

например так:

......
unsigned long last_time_update;
int time_update = 2000;
.....
void loop()
{
.....
if (millis()-last_time_update>time_update)
{
chk = DHT.read(DHT11_PIN);
last_time_update=millis();
}
......
}

Ну и выводить в сериал конечно все непонятно-работающие переменные (хотя как это сделать, если сериал будет использован для связи с БТ? smile наверно надо отладить работу датчика без БТ, или отрубить библиотеку сервы, со всем остальным к серве-относящимся, оставив БТ на софтовом сериале и отладить работу датчика, а может эта библиотека не будет мешать? оО Кароче пробовать! big_smile )