Автор Тема: Пак Ардуино  (Прочетена 21198 пъти)

zoro1

  • Global Moderator
  • *****
  • Публикации: 610
    • Профил
    • http://www.zoro1.com
Пак Ардуино
« -: Ноември 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);


}



Проблема е ,че като въртя който и да е от потенциометрите силата на светене се променя и на двата канала едновремеено.А трябва да е различно.Някой да има идея къде съм оплел конците?


...Великите нации  се държат като гангстери,а малките като проститутки...
И.Несторов
Skype:Zorro1430

mitko29

  • Зомбиран Роботостроител
  • *****
  • Публикации: 210
    • Профил
Re: Пак Ардуино
« Отговор #1 -: Ноември 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);


}

Димитър Иванов, гр. Бургас, 17г.
skype: eeeeee5612

zoro1

  • Global Moderator
  • *****
  • Публикации: 610
    • Профил
    • http://www.zoro1.com
Пак Ардуино
« Отговор #2 -: Ноември 07, 2010, 04:45:36 pm »
Проблема  си остава и с твоя код.


...Великите нации  се държат като гангстери,а малките като проститутки...
И.Несторов
Skype:Zorro1430

mitko29

  • Зомбиран Роботостроител
  • *****
  • Публикации: 210
    • Профил
Пак Ардуино
« Отговор #3 -: Ноември 07, 2010, 05:36:19 pm »
Цитат на: "zoro1"
Проблема  си остава и с твоя код.

По кода няма грешка,a като махнеш скобата която съм писал че не и е там мястото дава ли ти ерор?
Да не би да не си свързал нещо неправилно ?
Димитър Иванов, гр. Бургас, 17г.
skype: eeeeee5612

zoro1

  • Global Moderator
  • *****
  • Публикации: 610
    • Профил
    • http://www.zoro1.com
Пак Ардуино
« Отговор #4 -: Ноември 07, 2010, 05:44:03 pm »
A ,то по кода грешка няма ,то и на моя код грешка няма ,но не работи както трябва.По скоро не работи както искам .
Схемата е следната :
на аналоговите пинове 1 и 2 имам закачен средната точка на по един потенциометър 4,7К.
на двата изхода имам два оптрона и два ирфз-а по 100А.Идеята е да се управляват двата шима по отделно ,всеки от собствения си потенциометър.
В действителност ако оставя единия потенциометър на максимум/тестовите лампи и на двете са угасени/ ,при завъртане на другия потенциометър  започват да палят и двете.Аналогично и с другата част.


А бре май се оправих.Сложих допълнителни резистори на входовете към маса по 10к и работата тръгна.Защо -не знам,но пък вече работи....


...Великите нации  се държат като гангстери,а малките като проститутки...
И.Несторов
Skype:Zorro1430

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
Пак Ардуино
« Отговор #5 -: Ноември 07, 2010, 07:44:18 pm »
Това ми намирисва на някаква врътня със самия език на Ардуино, но понеже не съм ползвал не знам точно, разгледай описанието на функцията дали има някакви забележки.
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания

mivr

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 118
    • Профил
Пак Ардуино
« Отговор #6 -: Ноември 10, 2010, 04:29:49 pm »
При ардуино има един бъг с аналоговите портове :когато на един от портовете е високо а на другият няма конекция към GND процесора го взима за свободен и неговата стоиност се изравнява с тази на саседният решението е просто към едниният крак(на потенциометърът) задължително трябва да имаш +5 а на другия GND и както вече си го вързал средният на аналоговият крак
Михаил Врачaнски 19год. В ТУ-София Автоматика

Skype: mivrmmm

email: [email protected]

reverenge

  • Робо-Новак
  • *****
  • Публикации: 16
    • Профил
.
« Отговор #7 -: Ноември 10, 2010, 09:29:08 pm »
Махни двата реда:

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

те не ти трябват , когато използваш пиновете като PWM.
Също добави и някакво малко забавяне след analogWrite,примерно 20 милисекунди няма да ги усетиш.
Това е.

zoro1

  • Global Moderator
  • *****
  • Публикации: 610
    • Профил
    • http://www.zoro1.com
Пак Ардуино
« Отговор #8 -: Ноември 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);}

}


...Великите нации  се държат като гангстери,а малките като проститутки...
И.Несторов
Skype:Zorro1430

emil74

  • Зомбиран Роботостроител
  • *****
  • Публикации: 227
    • Профил
    • http://www.maystorio.com
Пак Ардуино
« Отговор #9 -: Ноември 15, 2010, 10:03:20 am »
Така и не ми стана ясно как точно са вързани потенциометрите. Във всеки случай, свързват се: единият край към Vcc, другият на GND, а средната точка към аналоговия вход. За да имаш адекватен делител на напрежение. Иначе се получават много странни ефекти... Това свързване важи и ПИК-овете.

zoro1

  • Global Moderator
  • *****
  • Публикации: 610
    • Профил
    • http://www.zoro1.com
Пак Ардуино
« Отговор #10 -: Ноември 15, 2010, 01:41:13 pm »
Така де +5,сигнал,маса.И пак се държи странно.Увеличих каналите на 3 и съвсем се сбозиха нещата...


...Великите нации  се държат като гангстери,а малките като проститутки...
И.Несторов
Skype:Zorro1430

emil74

  • Зомбиран Роботостроител
  • *****
  • Публикации: 227
    • Профил
    • http://www.maystorio.com
Пак Ардуино
« Отговор #11 -: Ноември 15, 2010, 02:16:03 pm »
Аз при такива проблеми правя следното: вместо директно на диодите, стойностите показвам през RS-232. Така ще се види как се държи при завъртане на всеки потенциометър.

zoro1

  • Global Moderator
  • *****
  • Публикации: 610
    • Профил
    • http://www.zoro1.com
Пак Ардуино
« Отговор #12 -: Ноември 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 работи,с добавянето и на трети канал няма проблем.
остава да се тества в реална обстановка.
Благодаря на отзовалите се.


...Великите нации  се държат като гангстери,а малките като проститутки...
И.Несторов
Skype:Zorro1430