ВОПРОС: можно ли подать напряжение на аналоговый вход от 0 до 6 вольт
нельзя - допуск 0.....5 V и что бы это показывалось на экране?
хочешь вывести на экран напряжение бортсети ? можно
интересут не код программы а именно возможность работы платы Ardruino Nano v3 обработки такого низкого напряжения?
для аналогового входа низкое напряжение это < 4,8 милливольт.....
да, возможность есть :)
ну со скоростью вроде разобрались, остался температурный датчик и что то типо вольтметра только на уровень бака в литрах. там у меня на машине соответствие напряжения к литрам))) ну и сам вольтметр))) остальное будут формулы))))
ого ! как хотелки растут быстро :)
на экран - приветствие, скорость, напряжение борт сети, температура ОЖ, уровень топлива - можно много чего ещё добавить :) , только постепенно....
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 10, 6, 5, 4, 3);
volatile byte nSpeed; // колво импульсов, если не будете гонять более 255 км/час
//volatile int nSpeed; // колво импульсов, если будете гонять более 255 км/час
#define speedPin 2 // для UNO
#define buttonPin 4 // кнопка на GND и на пин 4 !!!!!!!!!!!!!!!!!!!!!!!!!!!
unsigned long speedMillisOld; // "секундомер" для замера скорости
const byte speedMillisDelta=60; // время измерения скорости - 60 mS
boolean getSpeed; // флаг измерения скорости
byte nLCD=0; // 0 - приветствие , 1 - скорость, 2 - напряжение,3,4,5 - что придумаешь
#define voltagePin A0 // пин для измерения бортсети
// с +АКБ авто на резистор 3 kOm, с него на резистор 1 kOm, с него на - АКБ
// среднюю точку резисторов на пин A0
float kVoltage=1.01; // поправочный коэффициент для напряжения - число с потолка !!!!!!!!!!!!!!
float voltage;
//================================================================================
void speedInterrupt()
{
nSpeed++;
}
//================================================================================
void outputDispHello()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Hello !");
lcd.setCursor(0,1);
lcd.print(" Hello !");
}
//================================================================================
void outputDispSpeed()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Speed :");
lcd.setCursor(2,1);
lcd.print(nSpeed);
lcd.setCursor(4,1);
lcd.print(" km/h");
}
//================================================================================
void outputDispVoltage()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Voltage:");
lcd.setCursor(2,1);
lcd.print(voltage);
lcd.setCursor(4,1);
lcd.print(" V");
}
//================================================================================
void setup()
{
lcd.begin(8,2);
pinMode(speedPin,INPUT);
digitalWrite(speedPin,HIGH);
pinMode(buttonPin,INPUT);
digitalWrite(buttonPin,HIGH);
attachInterrupt(0,speedInterrupt,RISING);
}
//================================================================================
void loop()
{
// расчёт скорости
if(getSpeed)
{
nSpeed=0;
speedMillisOld=millis();
}
else
{
if((millis()-speedMillisOld)>speedMillisDelta)
{
getSpeed=1;
}
}
// измерение напряжения бортсети
// voltage=5/1024*analogRead(voltagePin)*4*kVoltage;
voltage=0.01953125*analogRead(voltagePin)*kVoltage; // это - тоже самое что и выше
// обработка кнопки
if(digitalRead(buttonPin)==0)
{
delay(75); // подождали окончания дребезга
while(digitalRead(buttonPin)==0) { } // ждём отпускания кнопки
nLCD++;
if(nLCD>2) nLCD=0; // 2 поменять на ( колво экранов - 1 )
}
// вывод экранов
switch (nLCD)
{
case 0: {outputDispHello(); break;}
case 1: {outputDispSpeed(); break;}
case 2: {outputDispVoltage(); break;}
}
}
//================================================================================
тут и про напряжение бортсети добавлено....
код из #56 - строка 3 - зачем нужна ?
строка 13 даст ошибку ( скобки проверьте ) и ( не 204,6 а 204.6 )! и почему делить на 204.6 ?
это не хотелки быстро растут, а так было задумано изначально :)))
дык реализовывать надо постепенно , а не засорять код переменными , которые будут использовацца через месяц :) ...а экранчик 20 х 4 - был бы более удобен :) , но и на 8 х 2 всё можно решить
что значит - нормальный код ? заработал на железе ? .... а то я не проверял ( неохота макетку лепить )
constintanalogInPin = 0; - это не аналоговый пин, аналоговые - это A0........A5
пины 0 и 1 - никогда не трогай ( год, два - минимум :) )
outputValue = float(analogRead(analogInPin))/204,6 - это вывод напряжения 0......5 V с аналогового пина на индикацию ?
где ты такое взял ?
constintanalogInPin = 0; - ещё раз ! - надо #define voltagePin A0 - что он аналоговый ясно из того что он пин A0, что он входной - это прописывается в сетапе.... не надо вкладывать в текстовое объявление пина ВСЕ его параметры...
"voltagePin" в любом месте кода знаем что это пин измерения напряжения бортсети....
voltageAnalogInputPin = вода водянистая :)
constintanalogInPin = 0; - это не аналоговый пин, аналоговые - это A0........A5
пины 0 и 1 - никогда не трогай ( год, два - минимум :) )
outputValue = float(analogRead(analogInPin))/204,6 - это вывод напряжения 0......5 V с аналогового пина на индикацию ?
где ты такое взял ?
constintanalogInPin = 0; - ещё раз ! - надо #define voltagePin A0 - что он аналоговый ясно из того что он пин A0, что он входной - это прописывается в сетапе.... не надо вкладывать в текстовое объявление пина ВСЕ его параметры...
"voltagePin" в любом месте кода знаем что это пин измерения напряжения бортсети....
voltageAnalogInputPin = вода водянистая :)
мерять напряжения надо на цифровых пинах что ли? я что то запутался. по схеме у них А0, а constintanalogInPin = 0 это D0.
почему не трогать А0 и А1, они особенные что ли какие то?
Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активировать внутренний 20K нагрузочный резистор. Подача LOW в свою очередь отключает этот резистор. http://arduino.ru/Reference/DigitalWrite
тут всё нормально, через резистор же считается расход))) правда на аналоговый вход. думаю что резистор гасит импульсы немного и цифровой вход не успевает их считать)))
раз ты утверждаешь что диапазон напряжений с датчиков не превышает 5 V и при наличии только двух точек ( будем считать зависимость напряжения с датчика от колва топлива линейной ) - то приступим к расчёту топлива....
SU-27-16 спасибо огромнийшее, очень сильно выручаешь.
случилась у меня печалька, спалил питание на USB входе. на вход приходит +5 и тишина, друина мёртвая. Огорчился, полазил в инете, нашёл инфу про внешнее питание и начал калдовать. по характеристикам на VIN и GND от 6 до 20 V - чушь полная, подключил 12,3 плата стала греться как от паяльника. Напряжение взял со старого блока питания компа, там как раз и 12 и 5 есть. но не тут то было, на 5V с комп.блока выходит 5,36, тут я труханул подключаться на 5V и GND ардуинки. благо была под рукой "тринога" 7805 зная по про её способности спаял на "+5V" блока и получил на выходе 4,5V подключил и ардуинка от 5V тоже завилась. так и оставлю наверное. правда остался на плате без +5V, не проблема))))))
а началось всё с замыкания земли на +5V ICSP, ничаяно задел проводком подключенным на землю и не успевшим заизолироваться)))
переспрашиваю, напряжения борт сети у меня максимум 14,5 - спалю так пин?))
вышеееееее написал уже как подключить бортсеть к пину А0 - два резистора, номиналы прописал, код тоже с учётом этого !
делитель рассчитан на макс бортсети - 20 V - лучше ПЕРЕ-бздеть, чем НЕДО-бздеть
если на холостом ходу БП даёт 5,15 , а под нагрузкой 4,45 - это херовый БП !
ищи и применяй БП , который держит на выходе 5,0 при токе потребления от 0 до 400 mA для твоей задачи
ВОПРОС: можно ли подать напряжение на аналоговый вход от 0 до 6 вольт
нельзя - допуск 0.....5 V
и что бы это показывалось на экране?
хочешь вывести на экран напряжение бортсети ? можно
интересут не код программы а именно возможность работы платы Ardruino Nano v3 обработки такого низкого напряжения?
для аналогового входа низкое напряжение это < 4,8 милливольт.....
да, возможность есть :)
ну со скоростью вроде разобрались, остался температурный датчик и что то типо вольтметра только на уровень бака в литрах. там у меня на машине соответствие напряжения к литрам))) ну и сам вольтметр))) остальное будут формулы))))
ого ! как хотелки растут быстро :)
на экран - приветствие, скорость, напряжение борт сети, температура ОЖ, уровень топлива - можно много чего ещё добавить :) , только постепенно....
спасибо за нормальный код)))
это не хотелки быстро растут, а так было задумано изначально :)))
т.е. вот это код напряжения напрямую от 0 до 5 V подключенного на пин A0 - я правильно понял?
тут и про напряжение бортсети добавлено....
код из #56 - строка 3 - зачем нужна ?
строка 13 даст ошибку ( скобки проверьте ) и ( не 204,6 а 204.6 )! и почему делить на 204.6 ?
обрати внимание на строки 11...13
...и почитай про #define
спасибо за нормальный код)))
это не хотелки быстро растут, а так было задумано изначально :)))
дык реализовывать надо постепенно , а не засорять код переменными , которые будут использовацца через месяц :)
...а экранчик 20 х 4 - был бы более удобен :) , но и на 8 х 2 всё можно решить
что значит - нормальный код ? заработал на железе ? .... а то я не проверял ( неохота макетку лепить )
void outputDisp........() - сам в них текст правь ( неохота считать знакоместа, сам красоту наводи )
const
int
analogInPin = 0;
- это не аналоговый пин, аналоговые - это A0........A5пины 0 и 1 - никогда не трогай ( год, два - минимум :) )
outputValue =
float
(analogRead(analogInPin))/204,6
- это вывод напряжения 0......5 V с аналогового пина на индикацию ?где ты такое взял ?
const
int
analogInPin = 0;
- ещё раз ! - надо #define voltagePin A0 - что он аналоговый ясно из того что он пин A0, что он входной - это прописывается в сетапе.... не надо вкладывать в текстовое объявление пина ВСЕ его параметры..."voltagePin" в любом месте кода знаем что это пин измерения напряжения бортсети....
voltageAnalogInputPin = вода водянистая :)
здесь этот код http://arduino.ru/forum/obshchii/kak-sdelat-voltmetr
const
int
analogInPin = 0;
- это не аналоговый пин, аналоговые - это A0........A5пины 0 и 1 - никогда не трогай ( год, два - минимум :) )
outputValue =
float
(analogRead(analogInPin))/204,6
- это вывод напряжения 0......5 V с аналогового пина на индикацию ?где ты такое взял ?
const
int
analogInPin = 0;
- ещё раз ! - надо #define voltagePin A0 - что он аналоговый ясно из того что он пин A0, что он входной - это прописывается в сетапе.... не надо вкладывать в текстовое объявление пина ВСЕ его параметры..."voltagePin" в любом месте кода знаем что это пин измерения напряжения бортсети....
voltageAnalogInputPin = вода водянистая :)
мерять напряжения надо на цифровых пинах что ли? я что то запутался. по схеме у них А0, а
const
int
analogInPin = 0 это D0.
почему не трогать А0 и А1, они особенные что ли какие то?
впринципе, я могу занять все ножки от А2 до А7. тогда А2,А3,А4 - это будет мерять напряжения, т.е. кол-во портов мне позволяет так сделать)))
Ваня, напряжение 6 вольт для ардуины низким назвать нельзя, так как предел-5 вольт
Теперь есть такие цифры:
0,79 V = 59 литров
4,38 V = 2 литра
как снимать напряжение с порта я примерно понял, надо сделать что то типо такого:
void DUT()
{ DUT++}
void loop ()
{
if (dut)
{voltage = 4.38;
DUT = 2;}
else
{
if {voltage = 0.79;
DUT= 59;}
}
я так понимаю он мне будет считывать только только две эти точки, если вообще будет)))
нужно задать что то типо: напряжение = от 4,38 до 0,79 то DUT = от 2 до 59 литров.
так же есть формула зависимость напряжения на датчике от остатка бака: U = 4.512 - 0.064Vост
нужна подсказка)))
Ваня, напряжение 6 вольт для ардуины низким назвать нельзя, так как предел-5 вольт
всё, 6 вольт не нужны, там всё в пределах 5, а значит всё ок))))
что то не так с кодом, не хочет он считать скорость.
почему digitalWrite(speedPin,HIGH) а не read этого порта?
а что ты подсоединил к пину 2 ?
Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активировать внутренний 20K нагрузочный резистор. Подача LOW в свою очередь отключает этот резистор.
http://arduino.ru/Reference/DigitalWrite
датчик скорости через резистор 10 кОм
или нужно датчик скорости подключать напрямую без резисторов?
вроде понял свою ошибку, пойду напрямую подключу)))
сколько проводов идёт от датчика ? какое напряжение на проводах ?
на сигнальном может быть 0.....12 ! будет конец ардуине, не надо торопицца !
провод импульсный, т.е. зависимый от скорости. напряжение +5V
тут всё нормально, через резистор же считается расход))) правда на аналоговый вход. думаю что резистор гасит импульсы немного и цифровой вход не успевает их считать)))
идти проверять?)))
а GND ардуины с корпусом машинки соединили ?
сходил проверил. подсоединил без резистора.
на скорости от 5 км/ч начинает на дисплее быстро меняться "0" "1" и то же до полной остановки. чем выше скорость тем быстрее частота 0 и 1.
кроме 0 и 1 на дисплее ничего не показывается)))
питание друины от борт сети авто, поэтому думаю "-" он же GND у них общий, тоже сейчас подтвертил и мультиметр))
старый
новый
не работал из-за отсутствия строки 31 в старом коде :(
крайняя полная версия ( работать кусками - путь к ошибкам )
раз ты утверждаешь что диапазон напряжений с датчиков не превышает 5 V и при наличии только двух точек ( будем считать зависимость напряжения с датчика от колва топлива линейной ) - то приступим к расчёту топлива....
остаток топлива L = map ( 5 / 1024 * analogRead( пинТопливо) *100 , 79 , 438 , 59 , 2 )
итого
L = map ( 0.48828125 * analogRead( пинТопливо) , 79 , 438 , 59 , 2 )
...будем проверять :)
SU-27-16 спасибо огромнийшее, очень сильно выручаешь.
случилась у меня печалька, спалил питание на USB входе. на вход приходит +5 и тишина, друина мёртвая. Огорчился, полазил в инете, нашёл инфу про внешнее питание и начал калдовать. по характеристикам на VIN и GND от 6 до 20 V - чушь полная, подключил 12,3 плата стала греться как от паяльника. Напряжение взял со старого блока питания компа, там как раз и 12 и 5 есть. но не тут то было, на 5V с комп.блока выходит 5,36, тут я труханул подключаться на 5V и GND ардуинки. благо была под рукой "тринога" 7805 зная по про её способности спаял на "+5V" блока и получил на выходе 4,5V подключил и ардуинка от 5V тоже завилась. так и оставлю наверное. правда остался на плате без +5V, не проблема))))))
а началось всё с замыкания земли на +5V ICSP, ничаяно задел проводком подключенным на землю и не успевшим заизолироваться)))
будем конечно проверять... я там формулу писал зависимости напряжения от остатка литров, её будем как то использЫвать?
крайний - с топливом
так же есть формула зависимость напряжения на датчике от остатка бака: U = 4.512 - 0.064Vост
не увидел, просмотрел.... переделаю....
а началось всё с замыкания земли на +5V ICSP, ничаяно задел проводком подключенным на землю и не успевшим заизолироваться)))
бывает :((((
тут на сайте есть решение такого горя - что перепаять на ардуине - сам поищи, вспомню, сброшу
зависимость U от L - не нужна... нужно наоборот....
т.е. получаем - L=(4.512-U)/0.064
ща переделаю....
крайний
а чё - полный бак = 70 литров ?
крайний
а чё - полный бак = 70 литров ?
59 литров
топливо после загрузки кода сразу показал 70 литров, а вольтаж "2."
ничё страшного !
просто если с датчика придёт 5 V - то покажет 70 литров....
...но раз датчик ( с твоих слов ) не даёт более 4,512 V - то нормально :)
без подключения датчика - так и будет = 70 литров, поэтому и спросил :)-
вольтаж = 2 ? дык не подключено к делителю напряжения НИЧЕГО , вот и глюки.....
не спали пины ардуины 12.....15-ю вольтами ! лучше переспроси....
ничё страшного !
просто если с датчика придёт 5 V - то покажет 70 литров....
...но раз датчик ( с твоих слов ) не даёт более 4,512 V - то нормально :)
слушай, у меня дисплей стал как будто контрастности нету,может быть из за того что ему напряжения не хватает?
я к 4,4V подключил друину+дисплей+кнопка
если им надо 5 - то и надо давать 5 !
...питай их по нормальному !
без подключения датчика - так и будет = 70 литров, поэтому и спросил :)-
вольтаж = 2 ? дык не подключено к делителю напряжения НИЧЕГО , вот и глюки.....
не спали пины ардуины 12.....15-ю вольтами ! лучше переспроси....
переспрашиваю, напряжения борт сети у меня максимум 14,5 - спалю так пин?))
переспрашиваю, напряжения борт сети у меня максимум 14,5 - спалю так пин?))
вышеееееее написал уже как подключить бортсеть к пину А0 - два резистора, номиналы прописал, код тоже с учётом этого !
делитель рассчитан на макс бортсети - 20 V - лучше ПЕРЕ-бздеть, чем НЕДО-бздеть
если им надо 5 - то и надо давать 5 !
...питай их по нормальному !
5,15 - это много?
5,15 - это много?
курс доллара ? фунта стерл. ? напряжения ? на чём ? где ? :)-
если им надо 5 - то и надо давать 5 !
...питай их по нормальному !
5,15V- это много?
щас замерил напряжение на USB показывает 5,26V
заработало)))
если на холостом ходу БП даёт 5,15 , а под нагрузкой 4,45 - это херовый БП !
ищи и применяй БП , который держит на выходе 5,0 при токе потребления от 0 до 400 mA для твоей задачи
игры с питанием МК - всегда против МК :(
какой-то МК и от 5,50 будет работать , другие выпустят свою силу в виде дыма и запаха....
.....читай ДатаШит
у меня всё таже проблема с экраном, рябь от строки lcd.clear();.
когда нажимаю на кнопку и держу, всё ок. когда кнопка отпущенная рябится(((((((((
давай так - 5,15 - это много?
да, много
4,85 - это мало?
да, мало