Проблема с вольтажом
- Войдите на сайт для отправки комментариев
Пнд, 25/04/2022 - 12:35
Всем доброго времени суток, есть проблема с вольтажом датчика давления. Начал делать код на плате Ардуино Уно и все прекрасно работало но потом решил переделать код под 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 ");
}
}
//код на 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); }// получатель #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"); //ОБЩИЙПонятное дело. Uno питается от 5В, а ESP от 3,3В
Может кто-то знает в чем дело?
А чего тут знать, у Вас в коде прямо прописаны ардуиновские 5В. Кто их за Вас будет на 3,3 менять?
тут и формулы имеются
CHARODEY, вы издеваетесь или правда настолько темный?
Все измерения на аналоговых пинах делаются ОТНОСИТЕЛЬНО УРОВНЯ ПИТАНИЯ, у ЕСП питание 3.3в. у ардуины 5в.... что-то еще надо пояснять?
Или вы в этом коде вообще ни буквы не понимаете? :)))
А как мне тогда запитать 5В датчик? (В интернете было написано: Для питания на плату можно подавать напряжение от 5 до 12 В, но рекомендуется от 10 В.) Если не ошибаюсь то на пину VIN 5 Воль
Ну походу так и есть. Не случайно я зашел на Песочницу. Если не сложно подскажите как можна решить даную проблему?
А как мне тогда запитать 5В датчик? (В интернете было написано: Для питания на плату можно подавать напряжение от 5 до 12 В, но рекомендуется от 10 В.) Если не ошибаюсь то на пину VIN 5 Воль
А как мне тогда запитать 5В датчик? (В интернете было написано: Для питания на плату можно подавать напряжение от 5 до 12 В, но рекомендуется от 10 В.) Если не ошибаюсь то на пину VIN 5 Воль
питайте как питали. Напряжение питания на пине VIN не имеет ни малейшего отношения к вашей проблеме, какое бы ни было входное напряжение, у вас на чипе ЕСП всегда 3.3в. И именно это значение надо подставлять в формулу вычисления сигнала с датчика.
Кстати. если вы питаете датчик давления от 5в и потом подаете сигнал на ЕСП - вы можете сжечь ЕСП
Я понял, а как можна считывать 5в? Получаетса плата не подходит
Я понял, а как можна считывать 5в? Получаетса плата не подходит
поставить резистивный делитель так, чтобы на выходе напряжение не превышало 3.3 вольта
Я понял, а как можна считывать 5в? Получаетса плата не подходит
сравните свое давление с номиналом для датчика - может он никогда и не выдаст вам больше 3.3в
Не выйдет датчик от 0,5 до 4,5 вольта нужны именно ети 5вольт
Не выйдет датчик от 0,5 до 4,5 вольта нужны именно ети 5вольт
судя по фразе - вы вообще не понимаете, о чем речь...
Кто вам это поручил? Может найти более грамотного исполнителя? а то сожгете плату - обидно будет.
Выдаст( на сайте пишут и проверено через ардуино уно он выдаёт 5вольт
Не выйдет датчик от 0,5 до 4,5 вольта нужны именно ети 5вольт
чего там не выйдет-то, переводите делителем в напряжения от 0 до 3.3 вольта и подавайте на ESP8266
бред. Через ардуину вы никак не смогли бы это проверить...
Чем дальше читаю - тем больше впечатление, что вы занимаетесь не своим делом.
Не правильно сформулировал. Я далёк от всего этого и не понимаю как уно выдает правильно вольтаж, а ESP нет
видимо надо поЧИтать
PS если не ставить делитель, то править тут:
https://wikihandbk.com/wiki/Arduino:%D0%A5%D0%B0%D0%BA%D0%B8%D0%BD%D0%B3...
Вы за ети методы говорили?
Это надо смотреть нагрузочную способность вашего датчика, резисторы можно увеличить в 10 раз, будет 10ком и около 20 ком, нижнее плечо подогнать, чтобы при подаче напряжения 5 вольт на делителе было ровно 3.3 вольта
Не выйдет датчик от 0,5 до 4,5 вольта нужны именно ети 5вольт
Не выйдет датчик от 0,5 до 4,5 вольта нужны именно ети 5вольт
вы идиот?
вам обьясняют, как преобразовать "именно ети 5вольт" в нужные для ЕСП 0-3.3в, а вы все свое твердите. Если так уверены, что "не выйдет" - нафига спрашивать. Тогда выкиньте свою ЕСП и идите... все делайте на Уно.
Тут извиняюсь проблема з инетом видимо ответ как-то залагал
Тут извиняюсь проблема з инетом видимо ответ как-то залагал
ну и у меня тоже проблемы... слово в начале прошлого ответа вставилось само... не знаю теперь как убрать...
скетч приёмника с ошибками однако
Ну что поделаешь куда без ошибок, учусь пока что, а где именно ошибка? И можна задам вопрос: нужно подключить резистивный делитель так что-бы было 3,3 вольта на выходе, но куда подключать в етом нажаль не силен нашел пару схем и калькулятор, но не понял где ту схему нужно организовать
Нашел детский емулятор можете подсказать где именно нужны резисторы?
Этот рисунок наврятли кто рассматривать будет. Лучше иди на форум гивера, там такие рисунки любят.
У коллег терпение кончилось) Попробую я.
Возьми два одинаковых резистора по 10-20 кОм, соедини вывод одного резистора с выводом другого и входом ЕСП. Свободный вывод одного резистора соедини с землей (минусом питания), а свободный вывод второго резистора - с выходом датчика. Все.
Хах)
Дякую всему вашему колективу, и тебе за то что пояснил как младенцу)