#1 2025-07-17 16:14:25

mohax1685
Учасник
Зареєстрований: 2025-07-17
Повідомлень: 11

Arduino nano - проблема з сервоприводом

Добрий день всім, я так новочок в цій сфері, але руки з потрібного місця ростут, в мене є:
1. Arduino Nano
2. Фоторезистор
3. Резистор 10 кОм
4. Сервопривод Micro Servo 9G

Я придбав креслення по збірці, суть при підсвітці фонарем серво привод повинен рухатись раз в одну сторону, при другому освітленні в іншу сторону.
Я зібрав все по схеме
Фоторезистор А3-5V
Резистор 10 кОм A3-GMD
Сервопривод Micro Servo 9G
-красний - VIN
-коричневий - GMD
-жовтий - D4

Підключив, в моніторінге фоторезистор показує значення різні, але сервопривод просто крутиться і все, що в мене не так? вот скетч котрий шов в комлекті:

#include <Servo.h>
Servo myservo;

int val;
byte state = 0;
byte prestate = 0;
byte dir = 0;

void setup() {
  myservo.attach(4);
  pinMode(A3, INPUT);
  myservo.write(60);
  Serial.begin(9600);
}

void loop() {
  Serial.println(analogRead(A3));
  val = analogRead(A3);
  if (val > 700) {
    state = 1;
  } else state = 0;

  if (state != prestate) {
    if (state == 1)
      if (dir == 0) {
        myservo.write(120);
        delay(1000);
        myservo.write(60);
        dir = 1;
      } else {
        myservo.write(0);
        delay(1000);
        myservo.write(60);
        prestate = state;
        dir = 0;
      }
  }
  prestate = state;
  delay(100);
}

Неактивний

#2 2025-07-17 16:54:46

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 530

Re: Arduino nano - проблема з сервоприводом

mohax1685 пише:

при підсвітці фонарем серво привод повинен рухатись раз в одну сторону, при другому освітленні в іншу сторону.

Що значить "рухатись раз в одну сторону"? Що значить "друге освітлення"?

mohax1685 пише:

Я зібрав все по схеме

Покажіть цю схему.

mohax1685 пише:

фоторезистор показує значення різні

Які саме значення?

mohax1685 пише:

але сервопривод просто крутиться і все

Перевіряли, чи працює керування сервоприводом взагалі? Без фоторезистора?

void loop()
{
    myservo.write(120);
    delay(1000);
    myservo.write(60);
    delay(1000);
}

Не відноситься до проблеми, але навіщо читати аналоговий вхід два раза підряд?

  val = analogRead(A3);
  Serial.println(val);
  state = val > 700;
  ...

Неактивний

#3 2025-07-17 17:00:38

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 530

Re: Arduino nano - проблема з сервоприводом

У вас весь цей код:

mohax1685 пише:

      if (dir == 0) {
        myservo.write(120);
        delay(1000);
        myservo.write(60);
        dir = 1;
      } else {
        myservo.write(0);
        delay(1000);
        myservo.write(60);
        prestate = state;
        dir = 0;
      }

виконується тільки коли state == 1. Коли state == 0, нічого взагалі не виконується.

Неактивний

#4 2025-07-17 17:23:20

mohax1685
Учасник
Зареєстрований: 2025-07-17
Повідомлень: 11

Re: Arduino nano - проблема з сервоприводом

Я можу вам в особисті повідомлення відправить?

Неактивний

#5 2025-07-17 17:25:25

mohax1685
Учасник
Зареєстрований: 2025-07-17
Повідомлень: 11

Re: Arduino nano - проблема з сервоприводом

dimich пише:

У вас весь цей код:

mohax1685 пише:

      if (dir == 0) {
        myservo.write(120);
        delay(1000);
        myservo.write(60);
        dir = 1;
      } else {
        myservo.write(0);
        delay(1000);
        myservo.write(60);
        prestate = state;
        dir = 0;
      }

виконується тільки коли state == 1. Коли state == 0, нічого взагалі не виконується.

Я прикрипив файл, там є внутрі все щоб розібратись
https://forum.arduino.ua/img/members/4105/M3.7z

Остання редакція mohax1685 (2025-07-17 17:29:40)

Неактивний

#6 2025-07-17 18:02:30

jokeer
Гість

Re: Arduino nano - проблема з сервоприводом

А що там розбиратись? розберіться, що у вас символізує state і що dir і як вони повинні бути пов'язані.

#7 2025-07-17 18:56:35

mohax1685
Учасник
Зареєстрований: 2025-07-17
Повідомлень: 11

Re: Arduino nano - проблема з сервоприводом

jokeer пише:

А що там розбиратись? розберіться, що у вас символізує state і що dir і як вони повинні бути пов'язані.

я Ардуино тримаю сьогодні перший раз, я зібрав по схемі і закинув готовий скетч, як би я розумів в чому помилки, я б сюди не звертався би

Неактивний

#8 2025-07-17 19:05:32

jokeer
Гість

Re: Arduino nano - проблема з сервоприводом

А до чого тут ардуїно? Програма на С. Як саме вона повинна працювати - знаєте тільки ви. Звідси видно що ті 2 змінні обробляються якось дивно.

#9 2025-07-17 19:18:04

mohax1685
Учасник
Зареєстрований: 2025-07-17
Повідомлень: 11

Re: Arduino nano - проблема з сервоприводом

jokeer пише:

А до чого тут ардуїно? Програма на С. Як саме вона повинна працювати - знаєте тільки ви. Звідси видно що ті 2 змінні обробляються якось дивно.

підкажіть будь ласка що можно спробувать?

Неактивний

#10 2025-07-17 19:33:25

jokeer
Гість

Re: Arduino nano - проблема з сервоприводом

Яка кінцева мета? Що саме повинно відбуватися? Якщо впевнитись що фото резистор може управляти сервою - воно ж управляє wink

#11 2025-07-17 19:35:11

jokeer
Гість

Re: Arduino nano - проблема з сервоприводом

Пройдіть програму з олівцем по кроках, якщо змінні міняються - запишіть на папірець. Це не складно.

#12 2025-07-17 19:42:25

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 530

Re: Arduino nano - проблема з сервоприводом

mohax1685 пише:

Я прикрипив файл, там є внутрі все щоб розібратись

Із тих картинок в архіві зовсім не зрозуміло, що це за пристрій, і як він має працювати.

mohax1685 пише:

підкажіть будь ласка що можно спробувать?

Якщо вгадав, що при появі освітлення має повернутись в один бік і назад, а при зникненні освітлення має повернутись в інший бік і назад, то має працювати щось типу такого:

#include <Servo.h>
Servo myservo;

void setup()
{
  myservo.attach(4);
  pinMode(A3, INPUT);
  myservo.write(60);
  Serial.begin(9600);
}

bool prestate;
bool dir;

void loop()
{
  int val = analogRead(A3);
  Serial.println(val));
  bool state = val > 700;

  if (state != prestate) {
    if (state && !dir) {
      myservo.write(120);
      delay(1000);
      myservo.write(60);
      dir = true;
    } else if (!state && dir) {
      myservo.write(0);
      delay(1000);
      myservo.write(60);
      dir = false;
    }
    prestate = state;
  }

  delay(100);
}

(Не компілював, не перевіряв).

Але ж тут нема ніякого гістерезису. На граничних значеннях освітлення буде тіліпатись туди-сюди.

Неактивний

#13 2025-07-17 19:54:01

mohax1685
Учасник
Зареєстрований: 2025-07-17
Повідомлень: 11

Re: Arduino nano - проблема з сервоприводом

dimich пише:
mohax1685 пише:

Я прикрипив файл, там є внутрі все щоб розібратись

Із тих картинок в архіві зовсім не зрозуміло, що це за пристрій, і як він має працювати.

mohax1685 пише:

підкажіть будь ласка що можно спробувать?

Якщо вгадав, що при появі освітлення має повернутись в один бік і назад, а при зникненні освітлення має повернутись в інший бік і назад, то має працювати щось типу такого:

#include <Servo.h>
Servo myservo;

void setup()
{
  myservo.attach(4);
  pinMode(A3, INPUT);
  myservo.write(60);
  Serial.begin(9600);
}

bool prestate;
bool dir;

void loop()
{
  int val = analogRead(A3);
  Serial.println(val));
  bool state = val > 700;

  if (state != prestate) {
    if (state && !dir) {
      myservo.write(120);
      delay(1000);
      myservo.write(60);
      dir = true;
    } else if (!state && dir) {
      myservo.write(0);
      delay(1000);
      myservo.write(60);
      dir = false;
    }
    prestate = state;
  }

  delay(100);
}

(Не компілював, не перевіряв).

Але ж тут нема ніякого гістерезису. На граничних значеннях освітлення буде тіліпатись туди-сюди.

я спробував цей код що Ви дали, видало во це:
C:UsersРоманAppDataLocalTemp.arduinoIDE-unsaved2025617-11184-18ogwsr.rp5isketch_jul17asketch_jul17a.ino: In function 'void loop()':
C:UsersРоманAppDataLocalTemp.arduinoIDE-unsaved2025617-11184-18ogwsr.rp5isketch_jul17asketch_jul17a.ino:18:22: error: expected ';' before ')' token
exit status 1

Compilation error: expected ';' before ')' token

Неактивний

#14 2025-07-17 19:56:05

mohax1685
Учасник
Зареєстрований: 2025-07-17
Повідомлень: 11

Re: Arduino nano - проблема з сервоприводом

Так при першому освітленні він в один бік повертається і назад, а потім при другому освітленні він повертаєтся в інший бік і теж назад

Неактивний

#15 2025-07-17 20:08:16

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 530

Re: Arduino nano - проблема з сервоприводом

mohax1685 пише:

я спробував цей код що Ви дали, видало во це:

Воно ж написало вам, в якому рядку що не так. Приберіть ту зайву помилкову дужку:

Serial.println(val);

Неактивний

#16 2025-07-17 20:19:59

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 530

Re: Arduino nano - проблема з сервоприводом

Здається, можна спростити:

  if (state != dir) {
    if (state) {
      myservo.write(120);
      delay(1000);
      myservo.write(60);
    } else {
      myservo.write(0);
      delay(1000);
      myservo.write(60);
    }
    dir = state;
  }

А prestate не потрібна.

Остання редакція dimich (2025-07-17 20:20:12)

Неактивний

#17 2025-07-17 20:36:58

mohax1685
Учасник
Зареєстрований: 2025-07-17
Повідомлень: 11

Re: Arduino nano - проблема з сервоприводом

Все так зробив але сервопривід просто знову малслає в одну сторону, мож я не так розьми підключаю або інструкція не правильна?

Неактивний

#18 2025-07-17 20:41:50

jokeer
Гість

Re: Arduino nano - проблема з сервоприводом

Цей привід наче не вміє маслати в одну сторону, він повертається на вказаний кут.

#19 2025-07-17 20:49:25

Васятко
Гість

Re: Arduino nano - проблема з сервоприводом

mohax1685 пише:

Так при першому освітленні він в один бік повертається і назад, а потім при другому освітленні він повертаєтся в інший бік і теж назад

Ну то воно приблизно так і працює https://wokwi.com/projects/436748234276620289
ніякого

малслає в одну сторону

немає

#20 2025-07-17 20:51:47

mohax1685
Учасник
Зареєстрований: 2025-07-17
Повідомлень: 11

Re: Arduino nano - проблема з сервоприводом

По кінцевому результаті воно повинно працювати так: к ардуіно підключенний сервопривід і фоторезистор, при подачі живлення нічого не повинно обертатись, тілько після ліхтарика наведеного на фоторезистр, він обертаеється в одну сторону і повертається назад, та при наведенні  світла в другий раз, він повинен обертатись в іншу сторону і ставати назад, я вже голову ломаю цілий день, я придбав цей скетч і схему по збиранню, і нічого не працює

Неактивний

#21 2025-07-17 21:02:22

jokeer
Гість

Re: Arduino nano - проблема з сервоприводом

А кінцева мета яка? Якщо навчитись - ну, є симулятор, можна гратись, щось міняти. В симуляторі працює ж.

#22 2025-07-17 21:11:59

jokeer
Гість

Re: Arduino nano - проблема з сервоприводом

Ага, я здається здогадався. Напишіть в discord, man0vvar

#23 2025-07-17 22:55:49

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 530

Re: Arduino nano - проблема з сервоприводом

mohax1685 пише:

при подачі живлення нічого не повинно обертатись, тілько після ліхтарика наведеного на фоторезистр, він обертаеється в одну сторону і повертається назад, та при наведенні  світла в другий раз, він повинен обертатись в іншу сторону і ставати назад

Ось такий опис і потрібно надавати в самому першому повідомленні, при описі проблеми.

mohax1685 пише:

і нічого не працює

"Нічого не працює" - це якщо навіть індикатор живлення не світиться.

#include <Servo.h>

static constexpr int threshold = 700;
static constexpr int hist = 50;

Servo myservo;

void setup()
{
  Serial.begin(9600);
  myservo.attach(4);
  myservo.write(60);
}

static bool alight = false;
static bool dir = false;

void loop()
{
  int val = analogRead(A3);
  Serial.println(val);

  if (alight) {
    alight = val > threshold - hist;
  } else {
    alight = val > threshold + hist;

    if (alight) {
      myservo.write((dir = !dir) ? 0 : 120);
      delay(1000);
      myservo.write(60);
    }
  }

  delay(100);
}

Симуляція. Але в цьому симуляторі у фотоелемента вихід інверсний: чим більше освітлення, тим менший рівень він видає. У вашій схемі навпаки, так що скетч має працювати правильно. Величину порогового значення (threshold) та гістерезису (hist) підбирайте експериментально.

Неактивний

#24 Вчора 08:32:40

mohax1685
Учасник
Зареєстрований: 2025-07-17
Повідомлень: 11

Re: Arduino nano - проблема з сервоприводом

jokeer пише:

Ага, я здається здогадався. Напишіть в discord, man0vvar

Отправил запрос в друзья roman_80791

Неактивний

#25 Вчора 09:53:54

mohax1685
Учасник
Зареєстрований: 2025-07-17
Повідомлень: 11

Re: Arduino nano - проблема з сервоприводом

Васятко пише:
mohax1685 пише:

Так при першому освітленні він в один бік повертається і назад, а потім при другому освітленні він повертаєтся в інший бік і теж назад

Ну то воно приблизно так і працює https://wokwi.com/projects/436748234276620289
ніякого

малслає в одну сторону

немає

Підкажіть а піни сервоприводу я правильно розташував?
Сервопривод Micro Servo 9G
-красний - VIN
-коричневий - GMD
-жовтий - D4

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

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