Ви не увійшли.
Добрий день всім, я так новочок в цій сфері, але руки з потрібного місця ростут, в мене є:
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);
}
Неактивний
при підсвітці фонарем серво привод повинен рухатись раз в одну сторону, при другому освітленні в іншу сторону.
Що значить "рухатись раз в одну сторону"? Що значить "друге освітлення"?
Я зібрав все по схеме
Покажіть цю схему.
фоторезистор показує значення різні
Які саме значення?
але сервопривод просто крутиться і все
Перевіряли, чи працює керування сервоприводом взагалі? Без фоторезистора?
void loop()
{
myservo.write(120);
delay(1000);
myservo.write(60);
delay(1000);
}
Не відноситься до проблеми, але навіщо читати аналоговий вхід два раза підряд?
val = analogRead(A3);
Serial.println(val);
state = val > 700;
...
Неактивний
У вас весь цей код:
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, нічого взагалі не виконується.
Неактивний
У вас весь цей код:
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)
Неактивний
А що там розбиратись? розберіться, що у вас символізує state і що dir і як вони повинні бути пов'язані.
А що там розбиратись? розберіться, що у вас символізує state і що dir і як вони повинні бути пов'язані.
я Ардуино тримаю сьогодні перший раз, я зібрав по схемі і закинув готовий скетч, як би я розумів в чому помилки, я б сюди не звертався би
Неактивний
А до чого тут ардуїно? Програма на С. Як саме вона повинна працювати - знаєте тільки ви. Звідси видно що ті 2 змінні обробляються якось дивно.
А до чого тут ардуїно? Програма на С. Як саме вона повинна працювати - знаєте тільки ви. Звідси видно що ті 2 змінні обробляються якось дивно.
підкажіть будь ласка що можно спробувать?
Неактивний
Яка кінцева мета? Що саме повинно відбуватися? Якщо впевнитись що фото резистор може управляти сервою - воно ж управляє
Пройдіть програму з олівцем по кроках, якщо змінні міняються - запишіть на папірець. Це не складно.
Я прикрипив файл, там є внутрі все щоб розібратись
Із тих картинок в архіві зовсім не зрозуміло, що це за пристрій, і як він має працювати.
підкажіть будь ласка що можно спробувать?
Якщо вгадав, що при появі освітлення має повернутись в один бік і назад, а при зникненні освітлення має повернутись в інший бік і назад, то має працювати щось типу такого:
#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);
}
(Не компілював, не перевіряв).
Але ж тут нема ніякого гістерезису. На граничних значеннях освітлення буде тіліпатись туди-сюди.
Неактивний
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
Неактивний
Здається, можна спростити:
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)
Неактивний
Цей привід наче не вміє маслати в одну сторону, він повертається на вказаний кут.
Так при першому освітленні він в один бік повертається і назад, а потім при другому освітленні він повертаєтся в інший бік і теж назад
Ну то воно приблизно так і працює https://wokwi.com/projects/436748234276620289
ніякого
малслає в одну сторону
немає
По кінцевому результаті воно повинно працювати так: к ардуіно підключенний сервопривід і фоторезистор, при подачі живлення нічого не повинно обертатись, тілько після ліхтарика наведеного на фоторезистр, він обертаеється в одну сторону і повертається назад, та при наведенні світла в другий раз, він повинен обертатись в іншу сторону і ставати назад, я вже голову ломаю цілий день, я придбав цей скетч і схему по збиранню, і нічого не працює
Неактивний
А кінцева мета яка? Якщо навчитись - ну, є симулятор, можна гратись, щось міняти. В симуляторі працює ж.
Ага, я здається здогадався. Напишіть в discord, man0vvar
при подачі живлення нічого не повинно обертатись, тілько після ліхтарика наведеного на фоторезистр, він обертаеється в одну сторону і повертається назад, та при наведенні світла в другий раз, він повинен обертатись в іншу сторону і ставати назад
Ось такий опис і потрібно надавати в самому першому повідомленні, при описі проблеми.
і нічого не працює
"Нічого не працює" - це якщо навіть індикатор живлення не світиться.
#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) підбирайте експериментально.
Неактивний
mohax1685 пише:Так при першому освітленні він в один бік повертається і назад, а потім при другому освітленні він повертаєтся в інший бік і теж назад
Ну то воно приблизно так і працює https://wokwi.com/projects/436748234276620289
ніякогомалслає в одну сторону
немає
Підкажіть а піни сервоприводу я правильно розташував?
Сервопривод Micro Servo 9G
-красний - VIN
-коричневий - GMD
-жовтий - D4
Неактивний