#1 Re: Апаратні питання » Помехи при ШИМ или ошибка? » 2015-01-21 14:07:54

Нет, ноги разные, но не понятно по каким причинам, при servo.attach(номер_пина); на этом пине при ШИМ импульсы фигачат (смотрел осциллографом) пока его не отключишь servo.detach(); Может что-то в библиотеке сервы как-то связано-не вникал. Проще отключить при неиспользовании.

#2 Re: Апаратні питання » Помехи при ШИМ или ошибка? » 2015-01-21 13:33:54

В общем большое спасибо, что откликнулись. Решение нашел:  При переходе на управления блютуз-пин, который привязан к серве, нужно отключать командой servo.detach(); И всего-то лишь.

#3 Re: Апаратні питання » Помехи при ШИМ или ошибка? » 2015-01-21 11:57:11

NoName пише:

где то так сделано?

void loop()
{
  digitalWrite(13, HIGH);
  delayMicroseconds(100); // Approximately 10% duty cycle @ 1KHz
  digitalWrite(13, LOW);
  delayMicroseconds(1000 - 100);
}

У меня управление скоростью задается переменной vspeed, которая меняется 0-255 в зависимости от команды которая приходит с блютуз.

if (vcmd == '1') {
  vspeed = 25; }
if (vcmd == '2') {
  vspeed = 50; }
if (vcmd == '3') {
  vspeed = 75; }
и т.д.

Что касается аппаратного ШИМ-сдается мне, что сложновато будет, хотя может и правильно. Но!!! Вопрос то остается: Каким макаром ШИМ на одних выводах влияют на совсем левый выход, который практически не используется в данный момент?

#4 Апаратні питання » Помехи при ШИМ или ошибка? » 2015-01-21 10:18:16

pv_serg
відповідей: 7

Такое дело. Где-то пол года назад сделал ребенку машинку-робота на ультразвуковом сенсоре объезжавшая препятствия. Тогда  с ардуино только начинал знакомство. полистав просторы интернета-написал код (половину естественно стырил), пошлифовал его с месяц) - все. Работала машинка безукоризненно. Но захотелось присобачить модуль блютуз. Не вдаваясь в подробности-присобачил. Заработал (после пляски с бубном). Казалось бы все, дети играйтесь и не трожте меня больше. Но не тут то было. У машинки не было реализовано такое чувство как скорость движения. Ну тут, собственно, проблем не возникло. При работе через сенсор-изменение скорости нафиг не нужно, реализовал только в функции управления через блютуз.Вот и начались проблемы. При максимальной скорости движения-все четко, но стоить мне уменьшить скорость -как начинает непонятным образом крутиться серва. Еду вперед на 50% скорости-нормально, еду назад-серва с ума сходит, поворачиваю налево - нормально, направо-с ума сходит. В функции управлением через блютуз-серва никаким образом не проскакивает в коде. Вывод - помехи?  (менял пин подключения сервы- 0 результат). Кто что подскажет? Фрагмент кода с функцией управления по блютуз.

#include <Servo.h>   
const int motor1APin = 3;
const int motor2APin = 5;
const int motor3APin = 6;
const int motor4APin = 9;
const int vbtn = 2;
int vcmd;
Servo vservo;
const int vservo_array[5]={
  0,45,90,135,180};
byte vspeed;
int vservo_int;
int vmode;


//***************************************
void setup() {
  pinMode( motor1APin, OUTPUT);
  pinMode( motor2APin, OUTPUT);
  pinMode( motor3APin, OUTPUT);
  pinMode( motor4APin, OUTPUT);
  Serial.begin(9600);
vservo.attach(17); // МЕНЯЛ РАЗНЫЕ ПИНЫ
  vservo.write(90);
  pinMode(vbtn, INPUT);
     vspeed=0;
    }
//********************************************************************


void loop() {
      vmode = digitalRead(vbtn);
      switch (vmode) {
        case 0:
NoBT();
        break;
      case 1:
        // Режим управления через Bluetooth
BT();
        break;
      }
}

//*******************



void vforward() {

  analogWrite(motor1APin, vspeed);
  analogWrite(motor2APin, 0);
  analogWrite(motor3APin, vspeed);
  analogWrite(motor4APin, 0);
 
}
void back() {
  analogWrite(motor1APin,0);
  analogWrite(motor2APin, vspeed);
  analogWrite(motor3APin, 0);
  analogWrite(motor4APin, vspeed);

}
void vforwardRL() {
  analogWrite(motor1APin, vspeed);
  analogWrite(motor2APin, 0);
  analogWrite(motor3APin, 0);
  analogWrite(motor4APin, vspeed);
}
void vforwardL(){
  analogWrite(motor1APin, 0);
  analogWrite(motor2APin, vspeed);
  analogWrite(motor3APin, vspeed);
  analogWrite(motor4APin, 0);
}
void vbackwardRL() {
  analogWrite(motor1APin, 0);
  analogWrite(motor2APin, 0);
  analogWrite(motor3APin, 0);
  analogWrite(motor4APin, vspeed);
}

void vbackwardL() {
  analogWrite(motor1APin, vspeed);
  analogWrite(motor2APin, 0);
  analogWrite(motor3APin, 0);
  analogWrite(motor4APin, 0);
}
void left() {
  analogWrite(motor1APin, vspeed);
  analogWrite(motor2APin, 0);
  analogWrite(motor3APin, 0);
  analogWrite(motor4APin, vspeed);
}
void right() {
  analogWrite(motor1APin, 0);
  analogWrite(motor2APin, vspeed);
  analogWrite(motor3APin, vspeed);
  analogWrite(motor4APin, 0);
}
void vstop(){
  analogWrite(motor1APin, 0);
  analogWrite(motor2APin, 0);
  analogWrite(motor3APin, 0);
  analogWrite(motor4APin, 0);
}

//********************************************************
void BT(){
    if (Serial.available()) 
  vcmd = (char)Serial.read();
//vservo_int = LOW;  Пытался устанавливать пин сервы в 0-не помогло. Крутится зараза!!!
if (vcmd == '1') {
  vspeed = 25; }
if (vcmd == '2') {
  vspeed = 50; }
if (vcmd == '3') {
  vspeed = 75; }
if (vcmd == '4') {
  vspeed = 100; }
if (vcmd == '5') {
  vspeed = 125; }
if (vcmd == '6') {
  vspeed = 150; }
if (vcmd == '7') {
  vspeed = 175; }
if (vcmd == '8') {
  vspeed = 200; }
if (vcmd == '9') {
  vspeed = 225; } 
  if (vcmd == 'q') {
  vspeed = 255; }

  if (vcmd == 'F') {
      vforward();
    }
    if (vcmd == 'B')
    {
      back();
    }   
    if (vcmd == 'L')
    {
      left();
    }   
    if (vcmd == 'R')
    {
      right();
    }     
    if (vcmd == 'J')
    {
      vbackwardRL();
    }
    if (vcmd == 'H')
    {
      vbackwardL();
    } 
    if (vcmd == 'G')
    {
      vforwardRL();
    }   
      if (vcmd == 'I')
    {
      vforwardL();
    }   
   
      if (vcmd == 'S')
    {
      vstop();
    }   

     
}

#5 Re: Програмування Arduino » Делитель частоты » 2014-12-29 08:34:14

Очень просто по смыслу: вход и выход, на вход идут импульсы определенной частоты (например от 10 до 500 в минуту), нужно так,  чтобы на выходе было в это время, скажем,  от 1 до 50 импульса в минуту. То-есть коэфициент 10. У меня что-то не получается сохранить пропорции, если при частоте 100 на входе  получается 10  на выходе, то при 500 на входе - на выходе не 50, а 30 (к примеру).

#6 Програмування Arduino » Делитель частоты » 2014-12-06 18:08:11

pv_serg
відповідей: 7

Очень нужен делитель частоты импульсов.  Может кто подскажет код, или хотя-бы направление, как реализовать. Я с ардуино только начал знакомство, так что прошу без насмешек-типа "проще пареной репы..." Все когда-то начинали. Буду очень признательный.

Підвал форуму