Форум по Роботика

Контролери => Ардуино (Arduino) => Темата е започната от: zoro1 в Ноември 07, 2010, 12:34:28 pm

Титла: Пак Ардуино
Публикувано от: zoro1 в Ноември 07, 2010, 12:34:28 pm
Крайно време е в портала да се появи един подфорум озаглавен "Контролери  за роботи" и в него да има и една тема за Ардуиното...
Но както и да е Боби ще с епогрижи надявам се.На въпроса
Използвам ардуино с атмега8 и генерирам 2 PWM управлявани от два аналогови с два потенциометъра.кода е следния:

 int ledPin1=10;
int ledPin = 9;      // LED connected to digital pin 9
int analogPin = 1; int val = 0;
int analogPin2 = 2;int v1=0;

       


void setup()
{
  pinMode(ledPin, OUTPUT);   // sets the pin as output
 
  pinMode(ledPin1,OUTPUT);
}

void loop()
{
  {
  val = analogRead(analogPin);   // read the input pin
  analogWrite(ledPin, val / 4);  // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
  }
 
  v1=analogRead(analogPin2);
  analogWrite (ledPin1,v1/4);


}



Проблема е ,че като въртя който и да е от потенциометрите силата на светене се променя и на двата канала едновремеено.А трябва да е различно.Някой да има идея къде съм оплел конците?
Титла: Re: Пак Ардуино
Публикувано от: mitko29 в Ноември 07, 2010, 02:38:32 pm
Пробвай така:
const int ledPin1=10;
const int ledPin = 9; // LED connected to digital pin 9
int analogPin = 1;
int analogPin2 = 2;
int val = 0;
int v1=0;


void setup()
{
pinMode(ledPin, OUTPUT); // sets the pin as output

pinMode(ledPin1,OUTPUT);
}

void loop(){
  val = analogRead(analogPin);
  v1=analogRead(analogPin2);
{  // мисля че това е излишно но не съм сигурен немога да го тествам сега.
 // read the input pin
analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}

analogWrite (ledPin1,v1/4);


}

Титла: Пак Ардуино
Публикувано от: zoro1 в Ноември 07, 2010, 04:45:36 pm
Проблема  си остава и с твоя код.
Титла: Пак Ардуино
Публикувано от: mitko29 в Ноември 07, 2010, 05:36:19 pm
Цитат на: "zoro1"
Проблема  си остава и с твоя код.

По кода няма грешка,a като махнеш скобата която съм писал че не и е там мястото дава ли ти ерор?
Да не би да не си свързал нещо неправилно ?
Титла: Пак Ардуино
Публикувано от: zoro1 в Ноември 07, 2010, 05:44:03 pm
A ,то по кода грешка няма ,то и на моя код грешка няма ,но не работи както трябва.По скоро не работи както искам .
Схемата е следната :
на аналоговите пинове 1 и 2 имам закачен средната точка на по един потенциометър 4,7К.
на двата изхода имам два оптрона и два ирфз-а по 100А.Идеята е да се управляват двата шима по отделно ,всеки от собствения си потенциометър.
В действителност ако оставя единия потенциометър на максимум/тестовите лампи и на двете са угасени/ ,при завъртане на другия потенциометър  започват да палят и двете.Аналогично и с другата част.


А бре май се оправих.Сложих допълнителни резистори на входовете към маса по 10к и работата тръгна.Защо -не знам,но пък вече работи....
Титла: Пак Ардуино
Публикувано от: sv_shady в Ноември 07, 2010, 07:44:18 pm
Това ми намирисва на някаква врътня със самия език на Ардуино, но понеже не съм ползвал не знам точно, разгледай описанието на функцията дали има някакви забележки.
Титла: Пак Ардуино
Публикувано от: mivr в Ноември 10, 2010, 04:29:49 pm
При ардуино има един бъг с аналоговите портове :когато на един от портовете е високо а на другият няма конекция към GND процесора го взима за свободен и неговата стоиност се изравнява с тази на саседният решението е просто към едниният крак(на потенциометърът) задължително трябва да имаш +5 а на другия GND и както вече си го вързал средният на аналоговият крак
Титла: .
Публикувано от: reverenge в Ноември 10, 2010, 09:29:08 pm
Махни двата реда:

pinMode(ledPin, OUTPUT); // sets the pin as output
pinMode(ledPin1,OUTPUT);

те не ти трябват , когато използваш пиновете като PWM.
Също добави и някакво малко забавяне след analogWrite,примерно 20 милисекунди няма да ги усетиш.
Това е.
Титла: Пак Ардуино
Публикувано от: zoro1 в Ноември 14, 2010, 09:19:27 pm
Сега пак се регулират два канала от един тример.
Същия код който преди май бачкаше сега не ще.Утре ще погледна хардуера ,нещо да не съм объркал там.
Ето кода:
const int ledPin = 9;      
const int analogPin =4;
 const int analogPin1=2;
const int analogPin2=3;

int val = 0;        
const int led1=10;
const int led2=11;
int val1=0;
int val2=0;

void setup()
{

}

void loop()
            {
{ val = analogRead(analogPin);  
  analogWrite(ledPin, val / 4);
 
}
 
  {
 val2 = analogRead(analogPin2);  
  analogWrite(led2, val / 4);  
  }


{
val1=  analogRead (analogPin1);
analogWrite(led1,val1/4);}

}
Титла: Пак Ардуино
Публикувано от: emil74 в Ноември 15, 2010, 10:03:20 am
Така и не ми стана ясно как точно са вързани потенциометрите. Във всеки случай, свързват се: единият край към Vcc, другият на GND, а средната точка към аналоговия вход. За да имаш адекватен делител на напрежение. Иначе се получават много странни ефекти... Това свързване важи и ПИК-овете.
Титла: Пак Ардуино
Публикувано от: zoro1 в Ноември 15, 2010, 01:41:13 pm
Така де +5,сигнал,маса.И пак се държи странно.Увеличих каналите на 3 и съвсем се сбозиха нещата...
Титла: Пак Ардуино
Публикувано от: emil74 в Ноември 15, 2010, 02:16:03 pm
Аз при такива проблеми правя следното: вместо директно на диодите, стойностите показвам през RS-232. Така ще се види как се държи при завъртане на всеки потенциометър.
Титла: Пак Ардуино
Публикувано от: zoro1 в Ноември 17, 2010, 12:26:09 pm
int val1=0;
int val2=0;

void setup(){
}

void loop(){
val1 = analogRead(4);
val2 = analogRead(2);
val1 /= 4;
val2 /= 4;
analogWrite(9, val1);
delay(30);
analogWrite(10, val2);
delay(30);
}
Ето това ,благодарение на Vlado работи,с добавянето и на трети канал няма проблем.
остава да се тества в реална обстановка.
Благодаря на отзовалите се.