Проблема с вольтажом

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Всем доброго времени суток, есть проблема с вольтажом датчика давления.  Начал делать код на плате Ардуино Уно и все прекрасно работало но потом решил переделать код под ESP8266 и под ESP-NOW все принципе работает но плохо. Выходит так что вольтаж между ESP И Ардуино отличается, ESP у 0,625 рази больше показывет. Может кто-то знает в чем дело? 

//Код на плату Ардуино
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
#define DELTA_V_Press 20
#define Input_V 5000
#define pin_Press_sensor 2
#define LCD_ADDRESS 0x27
#define SERIAL_BAUD 115200

int PotenciometrPin = A0;
int Value = 0;
float ves = 0;
float  Value_volt = 0;
float Press_sensor = 0;

LiquidCrystal_PCF8574 lcd(LCD_ADDRESS);


void setup() {
  Serial.begin(SERIAL_BAUD);

  pinMode(pin_Press_sensor, INPUT);

  Wire.begin();
  Wire.beginTransmission(LCD_ADDRESS);
  lcd.begin(20, 4);
  lcd.setBacklight(0);
  delay(100);
  lcd.setBacklight(55);
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("Pressure sensor test");
  delay(2000);
  lcd.clear();

}

void loop() {
{
  const byte count_read = 20;
  int Value = 0;
  int Analog_data_read[count_read];
  Value = analogRead(PotenciometrPin);
  Value_volt = (float)5 / 1025 * Value;
  delay(300);

  if ((Value_volt >= 0.500) && (Value_volt <= 4.500))
  {

  }
  if (Value_volt < 0.500)
  {
    Press_sensor = 0;
  }
  else if (Value_volt > 0.500)
  {
    Press_sensor = (Value_volt - 0.5) * 2.490 ;
  }

  if (Value_volt < 1.3);
  {
    ves = 0;
  }
  if (Value_volt > 1.3);
  {
    ves = Press_sensor * 1.07;
  }
}
{
  lcd.setCursor(8, 0);
  lcd.print(" V:");
  lcd.print(Value_volt);
  lcd.print("V");
  
  lcd.setCursor(0, 0);
  lcd.print("W:");
  lcd.print(ves);
  lcd.print("T");

  lcd.setCursor(0, 1);
  lcd.print("Pressure: ");
  lcd.print(Press_sensor);
  lcd.print(" bar  ");
}
}

 

CHARODEY
Offline
Зарегистрирован: 21.02.2022
//код на esp (отправитель)
#include <ESP8266WiFi.h>
#include <espnow.h>
#define Input_V 5000
#define SERIAL_BAUD 115200
#define BOARD_ID 2
#define DELTA_V_Press 20
#define Input_V 5600


uint8_t broadcastAddress[] = {0x58, 0xBF, 0x25, 0xDB, 0x7F, 0x5C};


typedef struct struct_message {
  int id;
  int Value;
}
struct_message;
struct_message myData;

void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
  Serial.print("Last Packet Send Status: ");
  if (sendStatus == 0) {
    Serial.println("Delivery success");
  }
  else {
    Serial.println("Delivery fail");
  }
}


void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  if (esp_now_init() != 0)
  {
    Serial.println("Error initializing ESP-NOW");
    return;
  }

  esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
  esp_now_register_send_cb(OnDataSent);
  esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}

void loop() {
  int Value = 0; 
  int PotenciometrPin = A0;
  const byte count_read = 20;
  int Analog_data_read[count_read];
  Value = analogRead(PotenciometrPin);
  delay(300);

  myData.id = BOARD_ID;
  myData.Value = Value;

  esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
  delay(300);
}

 

CHARODEY
Offline
Зарегистрирован: 21.02.2022
// получатель
#include <ESP8266WiFi.h>
#include <espnow.h>
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
#include <LiquidCrystal_I2C.h>
#define LCD_ADDRESS 0x27
#define SERIAL_BAUD 115200



typedef struct struct_message {
  int id;
  int Value;
} struct_message;
struct_message board1;
struct_message board2;
struct_message myData;
struct_message boardsStruct[2] = {board1, board2};


void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len)
{
  memcpy(&myData, incomingData, sizeof(myData));
  boardsStruct[myData.id - 1].Value = myData.Value;
}


LiquidCrystal_PCF8574 lcd(LCD_ADDRESS);
void setup()
{
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  if (esp_now_init() != 0) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }
  {
    Serial.begin(SERIAL_BAUD);
    Wire.begin();
    Wire.beginTransmission(LCD_ADDRESS);
    lcd.begin(20, 4);
    lcd.setBacklight(0);
    delay(100);
    lcd.setBacklight(55);
    lcd.clear();
    lcd.setCursor(4, 1);
    lcd.print("Please wait...");
    delay(1000);
    lcd.clear();
  }
  esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
  esp_now_register_recv_cb(OnDataRecv);
}


void loop()
{
  float ves = 0;
  float ves1 = 0;
  float Press_sensor = 0;
  float Press_sensor1 = 0;
  float Value_volt = 0;
  float Value_volt1 = 0;
  float TONNA = 0;
  int board1X = boardsStruct[0].Value;
  int board2X = boardsStruct[1].Value;

  Value_volt = (float)5 / 1025 * board1X;
  Value_volt1 = (float)5 / 1025 * board2X;

  if ((Value_volt >= 0.500) && (Value_volt <= 4.500))
    if (Value_volt < 0.500)
    {
      Press_sensor = 0;
    }
    else if (Value_volt > 0.500)
    {
      Press_sensor = (Value_volt - 0.5) * 2.490;
    }
  if (Press_sensor < 1.500)
  {
    ves = 0;
  }
  if (Press_sensor > 1.500)
  {
    ves = Press_sensor * 2.211;
  }


  if ((Value_volt1 >= 0.500) && (Value_volt1 <= 5.000))

  if (Value_volt1 < 0.500)
  {
    Press_sensor1 = 0;
  }
  else if (Value_volt1 > 0.500)
  {
    Press_sensor1 = (Value_volt1 - 0.5) * 2.490;
  }
  if (Press_sensor1 < 1.3);
  {
    ves1 = 0;
  }
  if (Press_sensor1 > 1.3);
  {
    ves1 = Press_sensor1 * 4.22;
  }

  TONNA = ves + ves1 / 2;

  {
    lcd.setCursor(0, 0);
    lcd.print("       1      2");

    //1
    lcd.setCursor(0, 1);
    lcd.print("Tuck  ");
    lcd.print(Press_sensor);
    lcd.print("A");
    lcd.setCursor(0, 2);
    lcd.print("Bec   ");
    lcd.print(ves);
    lcd.print("T");

    //2
    lcd.setCursor(13, 1);
    lcd.print("");
    lcd.print(Press_sensor1);
    lcd.print("A");
    lcd.setCursor(13, 2);
    lcd.print("");
    lcd.print(ves1);
    lcd.print("T");
    //ОБЩИЙ

 

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

CHARODEY пишет:
Выходит так что вольтаж между ESP И Ардуино отличается, ESP у 0,625 рази больше показывет.

Понятное дело. Uno питается от 5В, а ESP от 3,3В

CHARODEY пишет:

Может кто-то знает в чем дело? 

А чего тут знать, у Вас в коде прямо прописаны ардуиновские 5В. Кто их за Вас будет на 3,3 менять?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
b707
Offline
Зарегистрирован: 26.05.2017

CHARODEY, вы издеваетесь или правда настолько темный?

Все измерения на аналоговых пинах делаются ОТНОСИТЕЛЬНО УРОВНЯ ПИТАНИЯ, у ЕСП питание 3.3в. у ардуины 5в.... что-то еще надо пояснять?

Или вы в этом коде вообще ни буквы не понимаете? :)))

CHARODEY
Offline
Зарегистрирован: 21.02.2022

А как мне тогда запитать 5В датчик? (В интернете было написано: Для питания на плату можно подавать напряжение от 5 до 12 В, но рекомендуется от 10 В.)  Если не ошибаюсь то на пину VIN 5 Воль

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Ну походу так и есть. Не случайно я зашел на Песочницу. Если не сложно подскажите как можна решить даную проблему?

CHARODEY
Offline
Зарегистрирован: 21.02.2022

CHARODEY пишет:

А как мне тогда запитать 5В датчик? (В интернете было написано: Для питания на плату можно подавать напряжение от 5 до 12 В, но рекомендуется от 10 В.)  Если не ошибаюсь то на пину VIN 5 Воль

Уже понял что херню написал, извините канешно за слово

b707
Offline
Зарегистрирован: 26.05.2017

CHARODEY пишет:

А как мне тогда запитать 5В датчик? (В интернете было написано: Для питания на плату можно подавать напряжение от 5 до 12 В, но рекомендуется от 10 В.)  Если не ошибаюсь то на пину VIN 5 Воль

питайте как питали. Напряжение питания на пине VIN не имеет ни малейшего отношения к вашей проблеме, какое бы ни было входное напряжение, у вас на чипе ЕСП всегда 3.3в. И именно это значение надо подставлять в формулу вычисления сигнала с датчика.

 

Кстати. если вы питаете датчик давления от 5в и потом подаете сигнал на ЕСП - вы можете сжечь ЕСП

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Я понял, а как можна считывать 5в? Получаетса плата не подходит

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

CHARODEY пишет:

Я понял, а как можна считывать 5в? Получаетса плата не подходит

поставить резистивный делитель так, чтобы на выходе напряжение не превышало 3.3 вольта

b707
Offline
Зарегистрирован: 26.05.2017

CHARODEY пишет:

Я понял, а как можна считывать 5в? Получаетса плата не подходит

сравните свое давление с номиналом для датчика - может он никогда и не выдаст вам больше 3.3в

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Не выйдет датчик от 0,5 до 4,5 вольта нужны именно ети 5вольт

b707
Offline
Зарегистрирован: 26.05.2017

CHARODEY пишет:

Не выйдет датчик от 0,5 до 4,5 вольта нужны именно ети 5вольт

судя по фразе - вы вообще не понимаете, о чем речь...

Кто вам это поручил? Может найти более грамотного исполнителя? а то сожгете плату - обидно будет.

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Выдаст( на сайте пишут и проверено через ардуино уно он выдаёт 5вольт

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

CHARODEY пишет:

Не выйдет датчик от 0,5 до 4,5 вольта нужны именно ети 5вольт

чего там не выйдет-то, переводите делителем в напряжения от 0 до 3.3 вольта и подавайте на ESP8266

b707
Offline
Зарегистрирован: 26.05.2017

CHARODEY пишет:
проверено через ардуино уно он выдаёт 5вольт

бред. Через ардуину вы никак не смогли бы это проверить...

Чем дальше читаю - тем больше впечатление, что вы занимаетесь не своим делом.

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Не правильно сформулировал. Я далёк от всего этого и не понимаю как уно выдает правильно вольтаж, а ESP нет

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

CHARODEY пишет:
Не правильно сформулировал. Я далёк от всего этого и не понимаю как уно выдает правильно вольтаж, а ESP нет

видимо надо поЧИтать

PS если не ставить делитель, то править тут:
 

Value_volt = (float)5 / 1025 * board1X;
Value_volt1 = (float)5 / 1025 * board2X;


 

CHARODEY
Offline
Зарегистрирован: 21.02.2022

https://wikihandbk.com/wiki/Arduino:%D0%A5%D0%B0%D0%BA%D0%B8%D0%BD%D0%B3...

Вы за ети методы говорили?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

CHARODEY пишет:
Вы за ети методы говорили?

Это надо смотреть нагрузочную способность вашего датчика, резисторы можно увеличить в 10 раз, будет 10ком и около 20 ком, нижнее плечо подогнать, чтобы при подаче напряжения 5 вольт на делителе было ровно 3.3 вольта

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Не выйдет датчик от 0,5 до 4,5 вольта нужны именно ети 5вольт

b707
Offline
Зарегистрирован: 26.05.2017

CHARODEY пишет:

Не выйдет датчик от 0,5 до 4,5 вольта нужны именно ети 5вольт

вы идиот?

вам обьясняют, как преобразовать "именно ети 5вольт" в нужные для ЕСП 0-3.3в,  а вы все свое твердите. Если так уверены, что "не выйдет" - нафига спрашивать. Тогда выкиньте свою ЕСП и идите... все делайте на Уно.

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Тут извиняюсь проблема з инетом видимо ответ как-то залагал

b707
Offline
Зарегистрирован: 26.05.2017

CHARODEY пишет:

Тут извиняюсь проблема з инетом видимо ответ как-то залагал

ну и у меня тоже проблемы... слово в начале прошлого ответа вставилось само... не знаю теперь как убрать...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

скетч приёмника с ошибками однако

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Ну что поделаешь куда без ошибок, учусь пока что, а где именно ошибка? И можна задам вопрос: нужно подключить резистивный делитель так что-бы было 3,3 вольта на выходе, но куда подключать в етом нажаль не силен нашел пару схем и калькулятор, но не понял где ту схему нужно организовать

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Нашел детский емулятор можете подсказать где именно нужны резисторы?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Этот рисунок наврятли кто рассматривать будет. Лучше иди на форум гивера, там такие рисунки любят.

Pyotr
Offline
Зарегистрирован: 12.03.2014

У коллег терпение кончилось) Попробую я.

Возьми два одинаковых резистора по 10-20 кОм, соедини вывод одного резистора с выводом другого и входом ЕСП. Свободный вывод одного резистора соедини с землей (минусом питания), а свободный вывод второго резистора - с выходом датчика. Все.

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Хах)

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Дякую всему вашему колективу, и тебе за то что пояснил как младенцу)