Я создаю роботизированную руку, используя гибкий датчик, сервопривод и 2 xbees.

Код приема:

#include <Servo.h>
Servo myServo;

void setup() {
Serial.begin(9600);
myServo.attach(9);
delay(5000);
myServo.write(0);
}

void loop() {
  while(Serial.available()==0);

    int d = Serial.read() - '0';
    if(d>0)
    {
      int pos = map(d,0,9,0,180);
      pos = constrain(pos,0,180);
      myServo.write(pos);
      Serial.println(d);

      delay(50);
      }
      else
      {};

}

Код передачи:

int sensorValue = 0;         // значение датчика
int sensorMin = 1023;        // минимальное значение датчика
int sensorMax = 0;           // максимальное значение датчика
int SensorMid = 0;
const int POWER_OF_TWO_TO_AVERAGE = 6;

void setup() {
pinMode(13,OUTPUT);
  Serial.begin(9600);

  while (millis() < 10000) {
    digitalWrite(13,HIGH);
    sensorValue = analogRead(A1);
    if (sensorValue > sensorMax) {
      sensorMax = sensorValue;
    }
    if (sensorValue < sensorMin) {
      sensorMin = sensorValue;
    }
  }
  SensorMid = (sensorMin + sensorMax )/2;
  digitalWrite(13,LOW);
  }

void loop() {
int val = map(analogRead(A1),SensorMid,sensorMax,0,9);
Serial.println(val);
delay(100);
}

Я создаю роботизированную руку и сталкиваюсь с некоторыми проблемами при переходе к стабильности сервоприводов с помощью гибкого кабеля. Я использую гибкий кабель в качестве передатчика, а сервопривод - в качестве приемника, и когда я нажимаю пальцем, мой сервопривод не работает. двигайтесь правильно.

Есть предложения?

, 👍0

Обсуждение

Пожалуйста, покажите свой код (минимальный, полный пример, демонстрирующий проблемы), схему подключения или схему, а также более подробное описание проблемы «не движется должным образом». В противном случае все, что кто-либо может сделать, это строить неосведомленные предположения., @jose can u c

@josecanuc, пожалуйста, обратитесь к вопросу, так как я отредактировал вопрос, @haas

Что это значит? я нажимаю пальцем, @jsotola

Я использую гибкий датчик, он подает сигналы, сгибая палец @jsotola, @haas

Пробовали ли вы взять среднее значение, например, из 10 или 20 последовательных показаний? Все аналоговые сигналы содержат шум, который можно уменьшить, взяв среднее значение., @chrisl


1 ответ


1

Не зная больше о фактической проблеме «не движется должным образом», я изначально вижу, что вы передаете значения 0–9 с помощью Serial.println(), который отправляет байтовые данные, а также новую строку (значение ASCII 10), поэтому ваш код RX, вероятно, получает попеременный ввод заданного значения и значения 10, которое вычитается. из 48 (значение ASCII '0'), mapped и ограничивается значением 0.

Попробуйте изменить сценарий передачи, чтобы вместо этого вызвать Serial.print(). Ваш получатель не заботится о том, чтобы каждое значение появлялось в новой строке — он не знает о строках.

,

Я имею в виду, что он не движется должным образом: когда я пытаюсь согнуть гибкий датчик, я предполагаю, что сервопривод не получает данные должным образом из-за разрешения гибкого датчика., @haas

Я думаю, что сервопривод нестабилен, потому что гибкий диск продолжает отправлять значения, даже когда я его не трогаю. Как мне решить эту проблему @jose can uc, @haas

Почему вы так думаете? Если вам нужна помощь общественности, вы должны предоставить реальные данные., @jose can u c