Ребят, спасибо тем, кто откликнулся на прошлые мои вопросы, но у меня возник новый. Я "написал" код для сервы, чтобы он работал с потенциометром(код ниже). Как видите, серва должна поворачиваться на 180 градусов, при повороте потенциометра на все 270. Но такого не происходит. Сначала серва поворачивалась на 90 градусов, теперь же на 45. Почему так? Вот еще видео всего процесса. Код (Text): #include <Servo.h> #define POT_MAX_ANGLE 270.0 // макс. угол поворота потенциометра Servo myservo; void setup() { myservo.attach(9); } void loop() { int val = analogRead(A0); int angle = int(val / 1024.0 * POT_MAX_ANGLE); angle = constrain(angle, 0, 180); myservo.write(angle); } P.S. Ребят, я нубяра последний в этом деле. Данная конструкция понадобилась в мое проекте. Без нее никак, поэтому и задаю такие вопросы. Да, гуглил, ответов не нашел Да, и почему, при подключении питания, серва поворачивается на 45 градусов, а потом опять на 0?
Начните с определения значений, выдаваемых АЦП в крайних положениях потенциометра. Получатся некоторые величины, назовем их условно х1 и х2. Запишите их на бумажку. Теперь нужно интервал [х1; х2] сместить так, чтобы он начинался с нуля, т.е. [0; х2-х1]. Затем нужно посчитать, какое значение соответствует повороту на 1 градус. grad = (x2-x1)/180 Тогда серве нужно будет передать значение, считанное с АЦП и умноженное на "цену" одного градуса. angle = (analogRead(PIN) - x1) * grad; Соответственно, в программе понадобится объявить константы х1 и grad, а х2 понадобится только при вычислении значения grad. Поняли смысл вычислений?
Да, только не знаю, как правильно реализовать. Не могли бы написать код, если вам несложно? P.S. У потенциометра крайнии значения 0 и 1023
Да, это она! У меня потенциометр подключен к напряжение 3,3, соответственно максимальное значение будет другим. Я его нашел, подставил в код, и теперь все работае! Спасибо, Megakoteyka! А теперь не подскажите, почему, при подключении питания, серва поворачивается на 45 градусов?
Тогда возвращаемся к тому, что я написал выше. Какие значения выдает АЦП в крайних положениях потенциометра?
Что-то маловато. Должно быть в идеале от 0 до 1023. Смотрите вот так? Код (Text): int val = analogRead(A0); Serial.print(val);
Да, знаю. Я ж говорил, что у меня потенциометр подключен к 3,3 Вольтам. Хотя, сейчас сделал проверку повторно, макс. значение сейчас составляет 230
Код (Text): const int analogInPin = A0; // потенциометр int sensorValue = 0; // считанное значение void setup() { Serial.begin(9600); } void loop() { sensorValue = readSensor(10); Serial.print("sensor = " ); Serial.print(sensorValue); delay(50); } int readSensor(int samples){ // samples - сколько раз нужно прочитать сенсор unsigned int avg_sum=0; for(byte i=0;i<samples;i++){ avg_sum+=analogRead(analogInPin); delay(50); // небольшая пауза между замерами } return avg_sum/samples; } Загружаю код^ и мониторю
Если смотреть вот так: int val = analogRead(A0); Serial.print(val); Что получится? Опять до 193 в максимальном положении? Какой потенциометр используете?
а использую я вот такой потенциометр http://www.ebay.com/itm/10pcs-B100K...754?pt=LH_DefaultDomain_0&hash=item19d5305472