Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Проблем с програмиране на Ардуино уно
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=13619
Страница 1 от 2

Автор:  tosho [ Сря Мар 04, 2015 4:54 pm ]
Заглавие:  Проблем с програмиране на Ардуино уно

Здравейте, приятели :) Имам проблем с програмирането на ардуино уно.
Разполагам със сензори за напрежение https://encrypted-tbn3.gstatic.com/imag ... dfSslWJLmA
и relay shield. http://www.microbot.it/open2b/var/catal ... 20-800.jpg

Трябва ми програма, която при достигане на определено напрежение от сензора за напрежение да превключва релета.
Примерно при заряд на акумулатор,когато напрежението достигне 12V ,реле едно да се изключи и да се включи реле 2. И когато напрежението падне под 12V реле 2 да изключи ,а реле 1 да се включи.
Ще бъда много благодарен, ако някой ми помогне :)

Автор:  ike [ Сря Мар 04, 2015 5:02 pm ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

Това не е сензор, това са 2 резистора. Колко плащаш за тази програма?

Автор:  s7ama7 [ Сря Мар 04, 2015 7:10 pm ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

И за това ти трябва микроконтролер ? 8O

Автор:  tosho [ Сря Мар 04, 2015 7:54 pm ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

s7ama7 написа:
И за това ти трябва микроконтролер ? 8O


Да. Така искам да го направя. Ето и схемата , която искам да реализирам:Делителя на напрежение (сензора) следи напрежението на батерията и подава сигнал на А0 на ардуиното , когато това напрежение падне заради товара ,които разрежда батерията искам платката Relay shild да превключи релетата си. Едната верига която управлява да е затворена ,а другата отворена.

Прикачени файлове:
shemafsdf.jpg
shemafsdf.jpg [ 132.81 KiB | Прегледано 5870 пъти ]

Автор:  s7ama7 [ Чет Мар 05, 2015 12:19 pm ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

Тук нужда от микроконтролер аз не виждам . Това което искаш да направиш може да се направи с няколко елемента и ще струва 5 пъти поне по-евтино и по-малко .
Но да не съм офтопик :)
Трябва да си сметнеш делителя при 12V , след което ползваш тази функция http://arduino.cc/en/Reference/analogRead за да четеш AЦП-то . Всичко е много добре обяснено , само трябва да го прочетеш и ако имаш елементарни познания по програмиране не би трябвало да имаш проблем . Тук имаш и функцията за цифровите входове/изходи http://arduino.cc/en/Reference/digitalWrite . Остава да направиш условието .

Автор:  tosho [ Чет Мар 05, 2015 1:16 pm ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

s7ama7 написа:
Тук нужда от микроконтролер аз не виждам . Това което искаш да направиш може да се направи с няколко елемента и ще струва 5 пъти поне по-евтино и по-малко .
Но да не съм офтопик :)
Трябва да си сметнеш делителя при 12V , след което ползваш тази функция http://arduino.cc/en/Reference/analogRead за да четеш AЦП-то . Всичко е много добре обяснено , само трябва да го прочетеш и ако имаш елементарни познания по програмиране не би трябвало да имаш проблем . Тук имаш и функцията за цифровите входове/изходи http://arduino.cc/en/Reference/digitalWrite . Остава да направиш условието .


Делителя не е ли сметнат ? Това за функциите го бях гледал преди , разбирам почти всеки ред за какво е ,но не мога да ги свържа в една обща ,работеща програма . Точно условието ми е проблема . Съгласен съм , че не е необходим контролер и може да стане по-лесно и по-евтино , но имам ардуното и искам него да използвам . Ако можеш да ми помогнеш с програмата ще ти бъда много благодарен . :roll:

Автор:  s7ama7 [ Чет Мар 05, 2015 3:40 pm ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

Какъв акумулатор мислиш да зареждаш ? Това нещо си мисля че трябва да има някакъв хистерезис :roll:
Делителя може да си го изчислиш с помощта на този сайт http://www.electronics2000.co.uk/calc/potential-divider-calculator.php , за да знаеш при 12v какво напрежение ще се получи от извода на делителя . А като знаеш това напрежение , може да изчислиш при каква стойност на регистъра на АЦП ще имаш примерно 3 V .

Код:
int analogPin = 3;
int RelayPin1 = 13;
int RelayPin2 = 12;
int val = 0;

void setup() {
  pinMode(analogPin, INPUT);
  pinMode(RelayPin1, OUTPUT);
  pinMode(RelayPin2, OUTPUT);
  digitalWrite(RelayPin1, LOW);
  digitalWrite(RelayPin2, LOW);
}

void loop() {
  val = analogRead(analogPin);
  if (val >= ?? ) {
    digitalWrite(RelayPin1, LOW);
    digitalWrite(RelayPin2, HIGH);
  }
  else {
    digitalWrite(RelayPin1, HIGH);
    digitalWrite(RelayPin2, LOW);
  }
}

Автор:  tosho [ Чет Мар 05, 2015 4:04 pm ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

Мисля да е този : http://autocom.bg/%D0%BF%D1%80%D0%BE%D0 ... ycle-60-ah


void loop() {
val = analogRead(analogPin);
if (val >= ?? ) {

Защо са тези въпросителни ?
Как микроконтролера ще разбира какво е напрежението ? Не трябва ли някъде да е указно ,че трябва да брой от 0-1023 в зависимост от напрежението -0-5V нa A0? Извинявам се ако въпросите ми са глупави , сега навлизам в материята. :D Благодаря за бързия отговор.

Автор:  s7ama7 [ Чет Мар 05, 2015 4:16 pm ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

Оставил съм ги въпросителни защото трябва да се изчисли , дори съм писал по-горе как става !

Автор:  M_I_T_A_K_A [ Пет Мар 06, 2015 12:34 am ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

Без да имам претенции, че разбирам от програмиране малко помощ и от мен.
На мястото на ?? може да се пише напрежението, което е необходимо да се следи.
А стойностите на R1 и R2 ги заместваш с тези на "сензора"
5.0 е стойноста на референтното напрежение, в случая захранващото.

Код:
int analogPin = 3;
int RelayPin1 = 13;
int RelayPin2 = 12;
float val = 0;
float R1 = 100000.0; 
float R2 = 10000.0;


void setup() {
  pinMode(analogPin, INPUT);
  pinMode(RelayPin1, OUTPUT);
  pinMode(RelayPin2, OUTPUT);
  digitalWrite(RelayPin1, LOW);
  digitalWrite(RelayPin2, LOW);
}

void loop() {
  val = analogRead(analogPin)*5.0/1024.0;
  val = val/(R2/(R1+R2));
  if (val >= ?? ) {
    digitalWrite(RelayPin1, LOW);
    digitalWrite(RelayPin2, HIGH);
  }
  else {
    digitalWrite(RelayPin1, HIGH);
    digitalWrite(RelayPin2, LOW);
  }
}

Автор:  ike [ Пет Мар 06, 2015 1:46 pm ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

Как от далеч си личат програмистите за PC.

Код:
int analogPin = 3;
int RelayPin1 = 13;
int RelayPin2 = 12;
int iVal;


void setup() {
  pinMode(analogPin, INPUT);
  pinMode(RelayPin1, OUTPUT);
  pinMode(RelayPin2, OUTPUT);
  digitalWrite(RelayPin1, LOW);
  digitalWrite(RelayPin2, LOW);
}

void loop() {
  iVal = analogRead(analogPin);
  if (iVal >= ?? ) {
    digitalWrite(RelayPin1, LOW);
    digitalWrite(RelayPin2, HIGH);
  }
  else {
    digitalWrite(RelayPin1, HIGH);
    digitalWrite(RelayPin2, LOW);
  }
}


M_I_T_A_K_A а така няма ли да прави същата работа, като остане 1к повече свободен флаш?

Автор:  M_I_T_A_K_A [ Съб Мар 07, 2015 12:24 am ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

Критиката ти, за мен е градивна вземам си бележка :)
А примера го дадох, защото реших, че е по лесно резултата да е във волтове.

Автор:  tosho [ Пон Мар 09, 2015 4:25 pm ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

Благодаря ви за отговорите. В сряда ще го пробвам дали работи и на практика :)

Автор:  ike [ Пон Мар 09, 2015 6:27 pm ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

Няма да работи, защото както s7ama7 каза - това устройство няма хистерезис и ще ти прецака релетата.

Автор:  tosho [ Пет Мар 13, 2015 5:14 pm ]
Заглавие:  Re: Проблем с програмиране на Ардуино уно

В крайна сметка , докато правих опити схемата тръгна (подавах различно напрежение на делителя и релетета си превключваха в границите ,както трябва) Изникна проблем , когато направих цялата постановка .Вместо фотоволтаичен панел сложих зарядно за акумулатор , само че като закача зарядното за акумулатора напрежението се променя на около 16 волта ,а когато го изключа и вкюча товар пада на 10 и всичко се проваля. Тези граници които съм задал предварително : от 11волта да превключва едното реле , а от 12 волта другото , стават безсмислени.

Това е програмата, която ползвах:
int analogPin = 3;
int RelayPin1 = 5;
int RelayPin2 = 6;
float val = 0;
float R1 = 7500.0;
float R2 = 30000.0;


void setup() {
pinMode(analogPin, INPUT);
pinMode(RelayPin1, OUTPUT);
pinMode(RelayPin2, OUTPUT);
digitalWrite(RelayPin1, LOW);
digitalWrite(RelayPin2, LOW);
}

void loop() {
val = analogRead(analogPin)*5.0/1024.0;
val = val/(R2/(R1+R2));
if (val >= 3 ) {
digitalWrite(RelayPin1, LOW);
delay(1000);
digitalWrite(RelayPin2, HIGH);
delay(1000);

}
else {
digitalWrite(RelayPin1, HIGH);
digitalWrite(RelayPin2, LOW);
}
}

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/