Arduino Nano корректно работает только при USB подключении

shtecer
Offline
Зарегистрирован: 12.11.2018

Имеется Arduino nano v3 от RobotDyn при отключении от USB и подключении внешнего питания - работает не корректно. Есть 2 проекта и на обоих такие проблемы. В первом случае вольтметр четко показывает скажем 12 вольт при отключении от юсб и переходе на внешнее питание показывает что стало около 15 вольт. Во втором проекте объявлен высокий уровень для отключения реле, как только отключаю юсб реле включается (низкий уровень на пине), хотя на дисплее показывает что оно выключено.

Подскажите в какую сторону копать. Заранее спасибо.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

shtecer пишет:

В первом случае вольтметр четко показывает скажем 12 вольт при отключении от юсб и переходе на внешнее питание показывает что стало около 15 вольт. 

Вы зыбыли сказать куда он подключён.

shtecer пишет:

объявлен высокий уровень для отключения реле, как только отключаю юсб реле включается (низкий уровень на пине), хотя на дисплее показывает что оно выключено.

Тоже самое. Как подключён источник питания? Какой источник?

В общем, давайте схему с подробными пояснениями, что и где. Ну, и скетч не помешает.

 

shtecer
Offline
Зарегистрирован: 12.11.2018

в первом случае схема следующая АКБ 12В дальше dc-dc потом ардуино (земля общая), вольтметр обычный резистивный делитель одной стороной на землю другой на +12В (перед дс-дс). Не полная версия кода

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
 pin 7 - Serial clock out (SCLK)
 pin 8 - Serial data out (DIN)
 pin 9 - Data/Command select (D/C)
 pin 10 - LCD chip select (CS)
 pin 11 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 8, 9, 10, 11);

#define R1  100.25  // сопротивление резистора R1
#define R2  10.0 // сопротивление резистора R2
float u;

const int ledPin =  13;
const int mosfetPin = 12;
const int gsmPin = 6;
boolean flag = 1;
boolean flag2 = 1;
boolean flagboot = 1;
int ch = 0; 
String val = "";


void setup() {
  pinMode(ledPin, OUTPUT);
 
display.begin();              // Инициализация дисплея
display.setContrast(60);      // Устанавливаем контраст
display.setTextColor(BLACK);  // Устанавливаем цвет текста
display.setTextSize(1);       // Устанавливаем размер текста
display.clearDisplay();       // Очищаем дисплей
display.display();
delay(1000); 
  

}

void loop() { 
// delay(2000);

  u=  ((float)analogRead(A1)) * 5.0 / 1024. / R2 * (R1 + R2);
}

во втором случае зарядка от телефона-контроллер литиевый акб (ТР40что-то вроде и аккумулятор, чтоб работало если отключат 220) - дс-дс повышайка (МТ3806 вроде) до 5,1 В, кусок кода

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 8, 9, 10, 11);
#include <OneWire.h>
OneWire oneWire(6);

//Подключаем библиотеку для работы с термометром
#include <DallasTemperature.h>

//Создаем объект sensors, подключенный по OneWire
DallasTemperature sensors(&oneWire);

//Создаем переменные для работы с термометром
DeviceAddress adres_ulica = {0x28, 0xFF, 0xFD, 0xCA, 0x83, 0x16, 0x03, 0x02};
DeviceAddress adres_dom = {0x28, 0xFF, 0x18, 0x4C, 0x84, 0x16, 0x05, 0x7D};

float temp_dom=0; //переменная для текущего значения температуры
float temp_ulica=0;
int setTmp=5; // переменная для заданного значения температуры

//Реле подключено к пину D5
#define relay_convector 5


void setup()
{
 // настраиваем дисплей    
  display.begin();              // Инициализация дисплея
  display.setContrast(60);      // Устанавливаем контраст
  display.setTextColor(BLACK);  // Устанавливаем цвет текста
  display.setTextSize(1);       // Устанавливаем размер текста
  display.clearDisplay();       // Очищаем дисплей
  display.display();


  pinMode(relay_convector, OUTPUT);
  digitalWrite(relay_convector, HIGH);
  
  sensors.begin();
  sensors.setResolution(adres_ulica, 10);
  sensors.setResolution(adres_dom, 10);

  Serial.begin(9600); //Запускаем порт для компа
 
}
void loop()
{
  //Запуск процедуры измерения температуры
  sensors.setWaitForConversion(false);
  sensors.requestTemperatures();
  sensors.setWaitForConversion(true);

  delay(750); // задержка для обработки информации внутри термометра

//Считывание значения температуры
  temp_ulica=sensors.getTempC(adres_ulica);
  temp_dom=sensors.getTempC(adres_dom);


   if (temp_dom<setTmp) 
   {
    //display.clearDisplay();       // Очищаем дисплей
    //display.display();
    //display.setCursor(0, 0);
    display.print("conv on");
    display.display();
    //delay(2000);
    digitalWrite(relay_convector,LOW);
    
   }
    else 
     {
    //display.clearDisplay();       // Очищаем дисплей
    //display.display();
    //display.setCursor(0, 0);
    display.print("conv otkl");
    display.display();
    //delay(2000);
    digitalWrite(relay_convector,HIGH);
      }
}


 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

shtecer пишет:

в первом случае схема следующая АКБ 12В дальше dc-dc потом ардуино (земля общая), вольтметр обычный резистивный делитель одной стороной на землю другой на +12В (перед дс-дс). 

Не, так не пойдёт. "DC-DC" на сколько на выходе? "Потом ардуино" - какой именно пин? "Земля общая" у кого с кем? Что такое "обычный резистивный делитель одной стороной на землю другой на +12В (перед дс-дс)" я вообще не понял. У Вас что, на АКБ напряжение с 12 до 15 взлетало при отключении USB? С чего бы это оно?

Давайте. рисуйте схему.

shtecer
Offline
Зарегистрирован: 12.11.2018

подскажите пожалуйста программку чтоб схему нарисовать и закинуть, не в паинте-же рисовать :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sPlan - только рисовать

Multisim, Proteus - заодно и моделировать её работу

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ЕвгенийП пишет:

sPlan - только рисовать

Multisim, Proteus - заодно и моделировать её работу

Ltspice, все-таки, международный стандарт схемного моделирования. И, если это кому-то важно, он честно ставится с сайта. В отличии от Протеуса, который не бесплатен.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

https://easyeda.com

рисовать разводить.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

wdrakula пишет:

он честно ставится с сайта. В отличии от Протеуса, который не бесплатен.

Во, блин! А я платил за протеус :(

shtecer
Offline
Зарегистрирован: 12.11.2018

Всем спасибо огромное за помощь, программы поизучаю, свою проблему решил тем, что подал питание с dc-dc на контакт ардуины 5V, а было на Vin.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

shtecer пишет:

подал питание с dc-dc на контакт ардуины 5V, а было на Vin.

Вот об этом Вас и спрашивали

ЕвгенийП пишет:

"DC-DC" на сколько на выходе? "Потом ардуино" - какой именно пин?