Відповісти

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

Назад

Огляд теми (нові повідомленні вгорі)

dimich
Вчора 14:39:28
mohax1685 пише:

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

Якщо їх ніхто навмисне не перепаював, то правильно: robojax-servo-sg90_datasheet.pdf. Навряд чи він би взагалі рухався при неправильному підключенні.

Впевніться, що обрана в IDE частота MCU відповідає вашому Arduino Nano (8 чи 16 МГц).

Запустіть демку (приклад) для Servo, що йде в бібліотеці. Тільки ардуіна і серва, без фоторезистора. Працює?

mohax1685
Вчора 09:53:54
Васятко пише:
mohax1685 пише:

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

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

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

немає

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

mohax1685
Вчора 08:32:40
jokeer пише:

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

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

dimich
2025-07-17 22:55:49
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) підбирайте експериментально.

jokeer
2025-07-17 21:11:59

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

jokeer
2025-07-17 21:02:22

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

mohax1685
2025-07-17 20:51:47

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

Васятко
2025-07-17 20:49:25
mohax1685 пише:

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

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

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

немає

jokeer
2025-07-17 20:41:50

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

mohax1685
2025-07-17 20:36:58

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

dimich
2025-07-17 20:19:59

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

  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:08:16
mohax1685 пише:

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

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

Serial.println(val);
mohax1685
2025-07-17 19:56:05

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

mohax1685
2025-07-17 19:54:01
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

dimich
2025-07-17 19:42:25
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);
}

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

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

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