Фоторезистор и 2 сервопривода

Тема в разделе "Arduino & Shields", создана пользователем igor021, 15 фев 2020.

  1. igor021

    igor021 Нуб

    Добрый день, хочу попросить помощи, второй день знакомлюсь с ардуино и не могу понять некоторые вещи,хочу сделать ато скликиватель на 2 серво машинках mg 90s, и фоторезистора который должен определять затемнение на экране смартфона и в это время включать сервопривод, код для постоянной работы сервоприводов сделал (это было просто), но вот как включить во всю эту цепь фоторезистор и заставить его считывать момент и потом посылать в работу второй сервопривод, не могу пока сообразить,
    Код (C++):
    #include <Servo.h>
    Servo servo1;
    Servo servo2;


    void setup (){
      servo1.attach(9);
      servo2.attach(10);
    }

    void loop()
    {
     
      servo1.write(180);
      delay(1000);
      servo1.write(0);
      delay(9600);
       servo1.write(180);
      delay(1000);
      servo1.write(0);
      delay(9600);
       servo1.write(180);
      delay(1000);
      servo1.write(0);
      delay(9600);
       servo1.write(180);
      delay(1000);
      servo1.write(0);
      delay(12100);
       servo2.write(180);
      delay(1000);
      servo2.write(0);
      delay(2000);
      servo2.write(180);
      delay(1000);
      servo2.write(0);
      delay(1000);
    servo2.write(180);
      delay(1000);
      servo2.write(0);
      delay(3600);
       servo2.write(180);
      delay(1000);
      servo2.write(0);
      delay(1500);
    }
    Вот как сделать так чтобы фоторезистор определял момент затемнения и после этого отправлял второй сервопривод в работу , потом после отработки сервопривода идет опять проверка фоторезистором , если все светло то ок идет работать дальше первый сервопривод , если опять затемнение то тут доделывает работу второй сервопривод , пока с фоторезистором у меня вообще нет не каких продвижений даже ком порт данные не показывает
     
  2. a1000

    a1000 Гик

    Ну так покажите что вы пробовали с ним сделать. А то из ваших пояснений выходит, что вы фоторезистор на прямую к COM порту подключаете.
     
  3. igor021

    igor021 Нуб

    я фоторезистор просто подключил к ардуинке, дальше точно не знаю что делать чтоб инфа поступила в ком порт, я так понимаю ее нужно считать с аналогового выхода к которому я подключил фоторезистор ?
     
  4. a1000

    a1000 Гик

    А то как по вашему микроконтроллер узнает о вашем желании. Всё ему надо объяснить в подробностях. Возьмите за основу базовый пример AnalogReadSerial. Там практически всё уже реализовано.
    И что-то мне очень интересно как вы подключили фоторезистор. Его надо подключать по схеме делителя напряжения.
     
  5. igor021

    igor021 Нуб

    я купил готовый модуль с фоторезистором, AnalogReadSerial сейчас почитаю
     
  6. a1000

    a1000 Гик

    Дайте ссылку на модуль. Хочу глянуть что за зверь.
     
  7. igor021

    igor021 Нуб

  8. igor021

    igor021 Нуб

    я вот нашел код который включает светодиод через фоторезистор
    Код (C++):
    int led = 13; //переменная с номером пина светодиода

    int ldr = 0; //и фоторезистора

    void setup() //процедура setup

    {

    pinMode(led, OUTPUT); //указываем, что светодиод - выход

    }

    void loop() //процедура loop

    {

    if (analogRead(ldr) < 800) digitalWrite(led, HIGH);

    //если показатель освещенности меньше 800, включаем светодиод

    else digitalWrite(led, LOW); //иначе выключаем

    }
    я вот только не пойму как теперь вместо светодиода можно ставить сервопривод
     
  9. igor021

    igor021 Нуб

    Так можно сделать ?
    Код (C++):
    int serv =9;//переменная с номером сервопривода

    int ldr =0;//и фоторезистора

    void setup()//процедура setup

    {

    pinMode(serv, OUTPUT);//указываем, что сервопривод - выход

    }

    void loop()//процедура loop

    {

    if(analogRead(ldr)<800) digitalWrite(serv, HIGH);

    //если показатель освещенности меньше 800, включаем светодиод

    else digitalWrite(serv, LOW);//иначе выключаем

    }
     
  10. a1000

    a1000 Гик

    Я немного не понял, вы сервомашинки запустить смогли? Получается их покрутить?
     
  11. igor021

    igor021 Нуб

    Да получается, через первоначальный код и без фоторезистора, фоторезистор только вот хочу подключить и немного затупил
     
  12. igor021

    igor021 Нуб

    что хочу получить в теории, есть сайт который работает на Canvas, с ним в автоматическом режиме работать не как не представляется возможным, поэтому я захотел сделать скликиватель через ардуино, в данный момент есть 2 серво привода , которые через паузы поворачиваются от 0 до 180 градусов и стилусами кликают по определенным точкам на сайте, код работает но элементы на сайте склеиваются не с 100% точностью, поэтому хочу в конструкцию добавить фоторезистор, который будет определять по элементу на сайте (который загорается пере тем как нужно кликнуть вторым стилусом и второй сервомашинкой во вторую точку на сайте), вот фоторезистор должен определять когда появляется элемент на сайте, и серва дает команду второму сервоприводу кликать стилусом на элемент на сайте, А в данный момент на 2 сервоприводах без фоторезистора, все работает тапорно, можно сказать 60% на угад
     
  13. a1000

    a1000 Гик

    То-есть логика работы первого кода вас полностью устраивает. Вы просто хотите что-бы вторая серва запускалась по фоторезистору и делала всё тоже самое?
     
  14. igor021

    igor021 Нуб

    да, все верно, с фоторезистором точность должна быть выше
     
  15. igor021

    igor021 Нуб

    вот как пример моих мыслей:
    Есть 2 сервопривода и один фоторезистор, первый сервопривод поворачивает от 0 до 180 градусов с паузой 9.6 секунд (как видно из первоначального кода) , таких действия первый сервопривод должен совершить 4 раза, после чего, дальше должен работать фоторезистор, должен срабатывать на потемнение экрана в определенной точке , как только фоторезистор заметил что экран потемнел в определенной точке, фоторезистор передает сигнал на второй сервопривод который должен опустится один раз от 0 до 180 градусов , после этого выполненного действия фоторезистор проверяет есть ли опять в указанной точке темны участок если есть, то второй сервопривод еще опускается один раз от 0 до 180, если темного участка нет то, фоторезистор оправляет сигнал на первый сервопривод делать все покругу, а то есть опускаться 4 раза от 0 до 180 с паузой в 9.6 секунд , вот думаю как подружить 3 детали вместе
     
  16. a1000

    a1000 Гик

    Всё как-бы реализуемо. Но не сегодня. Завтра на работу в 5 утра вставать. Давайте пока отложим.
     
  17. igor021

    igor021 Нуб

    А мы точно сможем к этому вернуться ? или забудем раз и на всегда ?
     
  18. a1000

    a1000 Гик

    Вернёмся. Пока вам домашнее задание. Подключите модуль фоторезистора, залейте AnalogReadSerial и посмотрите что вам выдаёт в монитор порта на разных уровнях освещённости. Нужно определить какие показания соответствуют границе светлый-тёмный экран.
    Теперь по логике работы.
    Старт:
    После старта поворачиваем первую серву на 180, возвращаем на 0 (цикл 4 раза)
    Читаем светодиод
    Если есть потемнение переходим на действие_2
    Если не потемнело - не ясно. (ждём потемнения или опять крутим серву 1?)
    Действие_2:
    Крутим серву 2 на 180, возвращаем на 0
    Читаем светодиод
    Если есть потемнение возвращаемся на действие_2 (как я понял вертимся в этом цикле пока не посветлеем)
    Если светло переходим на старт

    Уточните алгоритм.
     
  19. Daniil

    Daniil Гуру

    а фоторезистор к монитору пихать?
    Погуглите sikuli - пишете прогу на пк и никаких железок не надо
     
  20. igor021

    igor021 Нуб

    Прошу прошения что через такой длительный промежуток времени ответил,
    Вы все верно поняли
    Старт:
    После старта поворачиваем первую серву на 180, возвращаем на 0 (цикл 4 раза)
    Читаем фоторезистор
    Если есть потемнение переходим на действие_2
    Если не потемнело - то ждем потемнения, оно будет в любом случае, только время появления иконки из за который происходит потемнение, рандомное
    Действие_2:
    Крутим серву 2 на 180, возвращаем на 0
    Читаем фоторезистор
    Если есть потемнение возвращаемся на действие_2 (как я понял вертимся в этом цикле пока не посветлеем)
    Если светло переходим на старт