Arduino Servo rotation without delay in the code Servo write rotate

Поділитися
Вставка
  • Опубліковано 29 лис 2016
  • Arduino Servo вращаем / поворот без задержки в коде Лайфхак Своими руками.
    Servo write without Delay.
    Servo rotation without delay in the code.
    Servo rotate.
    Download - sketch.
    yadi.sk/d/jAre1PRZzqqdp
    + sketch оставлю в комментарии - под видео.
    _____________.
    Вспомогательные видео материалы.
    Arduino nRF24L01+ Servo Potentiometer потенциометр wireless Extender multi Лайфхак Своими руками.
    • Arduino nRF24L01+ Serv...
    v.01 Arduino NRF24L01+ 2 Servo radio potentiometer Переменный резистор wireless Control.
    • v.01 Arduino NRF24L01+...
    Arduino NRF24L01+ Servo radio potentiometer Переменный резистор wireless Control.
    • Arduino NRF24L01+ Serv...
    _____________.
    Arduino,Control,Servo,Potentiometer,потенциометр,ардуино,sketch,скетч,умный дом,Module,tutorial,датчик,extender,поворот без задержки,Servo write without Delay,Servo rotation without delay,Servo rotate,code,Download,wireless Control
    _____________.
    Arduino Servo вращаем / поворот без задержки в коде Лайфхак Своими руками.
    • Arduino Servo вращаем ...
  • Наука та технологія

КОМЕНТАРІ • 55

  • @MrPontiPilat
    @MrPontiPilat 7 років тому +9

    Долго не мог понять кого он мене напоминает. Это Жан Рено

  • @BOTASANROY
    @BOTASANROY 7 років тому +4

    спасибо за труды

  • @vitalicorsun1190
    @vitalicorsun1190 4 роки тому

    спасибо ,я долго искал такую информацию.

  • @ArduBlock
    @ArduBlock 3 роки тому

    Спасибо за урок )

  • @user-fz3ks8ew1p
    @user-fz3ks8ew1p 7 років тому +13

    Добавлю. Сервами можно управлять не только без delay(), но и без библиотеки Servo.h
    Ну в общем ловите мой код
    /*
    #1 Серва1 упр. выв -> 2 , 3, 4, 5, 6, 7, 8, 9 (servo_pin[])
    +5В -> +5В
    GND -> GND
    резистор нижний выв -> GND
    средний выв -> A0, A1, A2, A3, A4, A5, A6, A7 (R_pin[])
    верхний выв -> +5
    */
    //#1
    uint8_t i = 0 ;
    const int number_of_servo = 8;
    const int servo_pin[] = { 2, 3, 4, 5, 6, 7, 8, 9 } ;
    uint16_t servo_value[] = { 544, 544, 544, 544, 544, 544, 544, 544 } ; // величина на серве 544-2400 мкс.
    uint16_t servo_value_old[] = { 544, 544, 544, 544, 544, 544, 544, 544 } ; // величина на серве 544-2400 мкс.
    uint8_t servo[] = { 0, 0, 0, 0, 0, 0, 0, 0 } ;
    const int R_pin[] = { A0, A1, A2, A3, A4, A5, A6, A7 } ; // нога резистора
    void setup() {
    //#1
    for (i = 0; i < number_of_servo; i++) {
    pinMode (servo_pin[i], OUTPUT);
    digitalWrite (servo_pin[i], servo[i] = 0);
    }
    i = 0;
    }
    void loop() {
    //#1 3 миллисекунд обслуживание сервы 1
    static uint32_t past_1 = 0 ;
    if (servo[i] && (micros() - past_1 >= servo_value[i]))
    digitalWrite (servo_pin[i], servo[i] = 0);
    if (micros() - past_1 >= 3000) { // если прошло 3000 микросек
    i = (i + 1) % number_of_servo;
    past_1 = micros() ;
    digitalWrite (servo_pin[i], servo[i] = 1);
    servo_value[i] = map (analogRead(R_pin[i]), 0, 1023, 544, 2400);
    }
    }

    • @d36073
      @d36073  7 років тому

      Благодарю уникальный код

    • @user-fz3ks8ew1p
      @user-fz3ks8ew1p 7 років тому

      Не за что. И да что бы движение одного потенциметра не отражалось на всех сервах желательно иметь индивидульное подключение по земле и питанию на каждую серву.Конечно по такому подкючению можно сервы подключить на все выводы ардуины , которые у нее есть. Так же сделать ШИМ даже на тех выводах, на которые аппаратно они не реализованы.

    • @MrStephanthe
      @MrStephanthe 7 років тому

      А для чего объявлялось servo_value_old ?

    • @user-fz3ks8ew1p
      @user-fz3ks8ew1p 7 років тому

      MrStephanthe так была задумка, если значение поворота у нужной сервы не поменялось, то и подавать команду на управление сервой не надо. Меньше жужать серва будет.

    • @AndryG1000
      @AndryG1000 6 років тому

      Иштван Галга, хотелось бы пояснений.

  • @AndryG1000
    @AndryG1000 6 років тому

    Класс!!! Мне нравится. Осталось разобраться с ускорением сервы и передачей управляющих команд от ЧПУ. И можно наконец-то делать управление на управляемый программно манипулятор.

  • @velessn
    @velessn 7 років тому

    Ура , снова канал заработал. Я уж подумал что Дмитрий забил на ютюб.

  • @engineer_Pavlo
    @engineer_Pavlo 7 років тому +4

    хотелось бы увидеть урок о работе двух и более устройств по SPI интерфейсе к примеру ads712

  • @AleksandrArtroom
    @AleksandrArtroom 7 років тому

    Дмитрий.
    Сделал плату управления паяльным жалом Т12 с ПИД регулятором.
    Так вот, если по моей схеме с ноги МК, которая идёт к транзистору, подать на управляющий вывод сервы и в программе понизить ШИМ с 10кГц до 100 Гц, то получите схему управления сервами с помощью энкодера с отображением положения сервы на экране.
    Единственное придётся калибровать серву и записывать минимальные значения положений сервы и отключить ПИД в коде.
    Таким образом вы будите полностью аппаратно управлять сервами и они у вас не будут дёргаться, как больные ;)

  • @user-ho1mu4lw6i
    @user-ho1mu4lw6i 7 років тому

    Спасибо большое!Ваши уроки очень полезны!
    На данный момент делаю серво-манипулятор, который состоит из 3 сервоприводов. Можно Вас попросить выложить пример скетча, который позволит управлять тремя сервами одновременно.
    Например:
    1.включение Ардуино Уно
    2.Через две секунды, после включения - начинает двигаться СЕРВО1 с 0 до 180 градусов(отложенный старт, после включения)
    3.Через 0,5 секунды после начала движения СЕРВО1 - включается СЕРВО2 и начинает двигаться с 0 до 60 градусов
    4.Через 0,5 секунды после начала движения СЕРВО2 - включается СЕРВО и начинает двигаться с 45 до 78 градусов
    Спасибо

  • @ara7878
    @ara7878 7 років тому

    Дмитрий а как вы относитесь к BBC Micro bit - как к платформе для начинающих.

  • @user-lt5kl2es1x
    @user-lt5kl2es1x 5 років тому +1

    А если делаете то хотел бы собрать по вашему видео приемник в две сервы моторчики на l293d .радиомодульnrf24 .передатчик в два жестики кнопка вкл.на одном жестике две сервы на втором для моторчика .и обе на ардуино нано или микро.спасибо

  • @d36073
    @d36073  7 років тому +6

    // Servo rotation without delay.
    #include
    Servo myservo;
    int servoSpeed = 50;
    #define ledPin 11
    byte q[2] = {0, 0};
    void setup() {
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
    }
    void loop() {
    if (Serial.available())q[1] = Serial.parseInt();
    // if (q[0] % 2 == millis() / 100 % 2 && q[0] != q[1])Serial.println(q[1] / q[0] ? ++q[0] : --q[0]);
    // if (q[0] % 2 == millis() / 100 % 2 && q[0] != q[1])analogWrite(ledPin, q[1] / q[0] ? ++q[0] : --q[0]);
    // if (q[0] % 2 == millis() / servoSpeed % 2 && q[0] != q[1])myservo.write(q[1] / q[0] ? ++q[0] : --q[0]);
    // if (q[0] == q[1])myservo.detach(); else myservo.attach(9);
    // if (++q[0] % 2 == 0)Serial.println(q[0]);
    // Serial.println(millis() / 3000 % 2);
    // Serial.println(0 ? ++q[0] : --q[0]);
    }
    //

    • @sturm_waffendeveloping3209
      @sturm_waffendeveloping3209 7 років тому

      СПАСИБО ЗА ЭТОТ УРОК! Ты просто нереально мне жизнь упростил , теперь кучу задач могу решить не расписывая их в тонны текста!

  • @agusheripurnomo2881
    @agusheripurnomo2881 7 років тому +1

    извините, .. я хочу спросить, как сделать обратный вызов Bluetooth приложение изобретатель, который не подключиться? чтобы подключить обратно без необходимости выхода из приложения.
    спасибо.

  • @Viktor_V.
    @Viktor_V. 3 роки тому

    Подскажите - где можно купить управлющую плату из недр этого сервопривода? Как она хоть назывется првильно?.... А то надо шутк 40, и расковыривать двигатели ради платы - дороговато выходит.....

  • @user-gk4he1dd7w
    @user-gk4he1dd7w 7 років тому

    подскажите пожалуйста, как , хоть примерно, должен выглядеть код для поворота сервы через определенный отрезок времени?

  • @rebelidsoftware747
    @rebelidsoftware747 7 років тому

    Спасибо! А Сбербанк или Яндекс кошелек есть у Вас ?

  • @Jeffhda2
    @Jeffhda2 7 років тому +1

    ты прям как леон киллер
    даже штаны специальные на заднем плане

  • @agusheripurnomo2881
    @agusheripurnomo2881 7 років тому

    ли сообщение должно учебники кнопку передатчика и приемника Arduino изобретателя приложения?
    спасибо

  • @user-bg9bi8ug3h
    @user-bg9bi8ug3h 7 років тому

    Как вовремя, я только сервы из китая получил, хотел робота сам собрать, а управлять сервами одновременно код не придумал, к стати сервы буду подключать через PCA9685 если есть инфа про этот модуль, пожалуйста дайте ссылку или видео урок сделайте.

  • @alstaur1337
    @alstaur1337 7 років тому

    Дмитрий спасибо за видео. Хотелось бы узнать можно ли использовать блютуз и нрф модули одновременно на одной ардуино. Например я отправляю команду по блютуз с телефона а ардуино уже отправляем по нрф другим приемника с ардуино.

    • @d36073
      @d36073  7 років тому

      можно

    • @alstaur1337
      @alstaur1337 7 років тому

      Dmitry OSIPOV а можете пример написать? Хотя-бы на мигание светодиодом.

  • @f33net
    @f33net 7 років тому

    Чума! :))) Особенно проверять чётность остатком от деления. :))) X and 1 :)))

  • @egoistv
    @egoistv 5 років тому

    Спасибо за урок Дмитрий.
    Пробую переделать ваш скетч под свои нужды и ни как не получается . Задача управлять сервой двумя кнопками при каждом нажатии на одну кнопку серва поворачивается на угол +5 градусов от положения в котором сейчас находится ,а при нажатии на вторую кнопку на - 5 градусов от положения в котором сейчас находится и ограничить ход от 0 до 180. С Delay написал ,но при это тормозятся остальные функции.
    #define SHAG 5
    if (digitalRead(button1)) angle1 =angle1 + SHAG; //если первая кнопка увеличим угол
    if (digitalRead(button3)) angle1 =angle1 - SHAG;//если вторая уменьшим

    if (angle1 > 180) angle1 = 180; //ограничим угол сервы 0..180
    if (angle1 < 0) angle1 = 0;
    {
    servo2.write(angle1); //задаем получившийся угол
    delay(100); // подождем перед следующим опросом
    что можете посоветовать? как реализовать это без Delay?

  • @yrisu6098
    @yrisu6098 4 місяці тому

    Отличный урок. К сожалению автор канала больше не выпускает уроки.

  • @user-lt5kl2es1x
    @user-lt5kl2es1x 5 років тому

    Здравствуйте .а вы делаете платный урок

  • @zipper41
    @zipper41 7 років тому

    Что то нет новых видео.в чём дело?

  • @stanislavilchenko3368
    @stanislavilchenko3368 7 років тому

    Код Вы сами придумали ? :) Может я и ошибаюсь, но в чем преимущество сравнения путем вычисления остатка от деления ? Не проще ли написать q[1]>q[0] ? [Идеи в коде интересные (тактирование проверкой четности остатком деления), но слишком все запутано, от того что оно все записывается одной строкой быстрей работать вряд ли будет.

    • @SergL637
      @SergL637 7 років тому

      в самом начале он сказал что отказался от функции delay а это значит он тормозит другими способами, например чтобы поднять скорость работы на альфа процессорах в них тогда отказались от умножения, дабы каждая подобная операция имеет н-ое количество циклов чтобы выдать результат

    • @stanislavilchenko3368
      @stanislavilchenko3368 7 років тому

      С delay() и так ясно, подход хороший, не ясно другое - зачем все записывать в одну строку и запутывать код конструкциями вида q[1] / q[0] ? ++q[0] : --q[0] ? Либо я чего-то не понимаю.

    • @SergL637
      @SergL637 7 років тому

      По работе мне приходится заниматься "стихийным программированием" - это когда нужно решить задачу и только потом задумываешся об адекватности кодинга :)

    • @stanislavilchenko3368
      @stanislavilchenko3368 7 років тому

      Сергей Леванчук Одно дело "дырку" срочно заткнуть, абы работало, а другое дело уроки выкладывать. Люди ведь берут пример, многие вообще не в теме что такое байты, массивы. Мне кажется, что если код делается для публики и называется "уроком", то и качество у него должно быть хорошее, чтобы каждая строчка всем была понятна. А то я читаю и думаю, что автор хотел этим добиться, и чувствую себя полным дураком от того что не могу понять.

  • @d36073
    @d36073  7 років тому

    #include
    Servo myservo;
    int servoSpeed = 50;
    void setup() {
    Serial.begin(57600);
    pinMode(11, OUTPUT);
    myservo.attach(9);
    }
    void loop() {
    static byte q[2] = {0, 0};
    if (q[0] % 2 == millis() / servoSpeed % 2) {
    if (q[0] = 180)q[1] = 0;
    q[1] ? ++q[0] : --q[0];
    Serial.println(q[0]);
    myservo.write(q[0]);
    analogWrite(11, q[0]);
    }
    }
    //

  • @user-uv7oe9nj9u
    @user-uv7oe9nj9u 4 роки тому

    ЗДРАВСТВУЙТЕ, ДМИТРИЙ . ТАКУЮ ШТУКУ ХОЧУ ПОДОБНУЮ СОБРАТЬ КАК У ВАС , НО СО СВОИ МИ ЗАДАЧАМИ . МОЖЕТ У ВАС ЕСТЬ ПОХОЖЕЕ ВИДЕО С УДОВОЛЬСТВИЕМ БЫ ГЛЯНУЛ . ВОТ КАК МНЕ НАДО . ВСЕ НА АРДУНКЕ КОНЕШКО С ШАГОВЫМ ДВИГАТЕЛЕМ . ФУНКЦИИ ТАКИЕ МОТОР ВСЕГДА ВРАЩАЛСЯ И С ВОЗМОЖНОСТЬЮ ДЕЛАТЬ СТОП ИЛИ ПАУЗУ . С ВОЗМОЖНОСТЬЮ РЕВЕРСА И РЕГУЛИРОВКА ОБОРОТОВ . МОЖЕТ НАЙДЕТСЯ ВИДЕО ИЛИ СХЕМЫ С БИБЛОТЕКАМИ ГОТОВЫМИ ПРОШИВОК

  • @user-qc7kh2jx6f
    @user-qc7kh2jx6f 7 років тому

    не понял, почему переменная имеет 2 элемента? Если отсчет с нуля то тогда 3 элемента или имеется ввиду {0;0} это 2 элемента, а если переменная равна 3 то 3 элемента {0;0;0} не совсем я это понял. Программируя под винду переменная вида например b(2) имеет 3 b - b0, b1, и b2.

    • @SergL637
      @SergL637 7 років тому

      это двух мерный массив, например x,y

    • @stanislavilchenko3368
      @stanislavilchenko3368 7 років тому

      b[2] при обьявлении массива указывает что массив будет состоять из двух элементов. Тогда как при обращении к такому массиву можно использовать только b[0] 1-ый элемент, b[1] 2-ой, а вот b[2] уже вызовет ошибку. Согласен, обьвление массива и доступ к его элементам имеет одинаковую запись что может сбить с толку :) но такие правила С++, никуда не деться

    • @SergL637
      @SergL637 7 років тому

      Stanislav Ilchenko сдается мне что тут дело не в кол-ве записанных данных а в размере заявленной памяти для работы, не забывайте что ардуина ограниченна прошивкой и размер памяти чипсета, которых намного меньше чем у стм или es8266

  • @oleksiiton4008
    @oleksiiton4008 3 роки тому +1

    всё о так иересно, но ни )(#я не понятно. .. ! основа ґде? массив? переменная? где основа?
    хорошии́ урок, но для знающих☺️☺️

  • @allegas1
    @allegas1 7 років тому

    Димасик, прикупи рулон обоев, поклей и сделай обзор. Раскошеливаться на игрушки это конечно хорошо, но не когда у тебя дома беспредел

    • @user-mb4nh6yf3k
      @user-mb4nh6yf3k 7 років тому

      О чем ты говоришь, какие обои. Человек Дзен познал, а ты про обои ему говоришь.

    • @allegas1
      @allegas1 7 років тому

      Базара ноль

  • @Master_Crypter
    @Master_Crypter 7 років тому

    Дмитрий, добрый день. Разрешите с Вами связаться. Можете дать Ваш SKYPE или почту? СПАСИБО !!!

  • @lifetv666
    @lifetv666 7 років тому

    помогите написать скеч ( код) к ардуино на вот эти вещи в коде не сильно силен надо для гаража подвал сырой
    1 ru.aliexpress.com/item/1pcs-Nano-V3-0-ATmega1..
    2 ru.aliexpress.com/item/DHT22-AM2302-Digital-T..
    3 ru.aliexpress.com/item/1PCS-2-channel-New-2-c..
    4 ru.aliexpress.com/item/0-96-inch-OLED-module-..
    суть кода такова
    датчик dth 22 при показаниях включал
    1е реле срабатывало на выдув при температуре +25 градусов и влажности 35%
    2е реле срабатывало на вдув при температуре +30 или 35 градусови влажности 45%
    выводилось на дисплей температура влажность с лева температура с права влажность какая на данный момент
    как подключить датчик влажности и реле понял с дисплее нужна подсказка а лучше картинка ОЧЕНЬ ПРОШУ ПОМОГИТЕ С КОДОМ

  • @user-bg9bi8ug3h
    @user-bg9bi8ug3h 7 років тому

    Пойдут уроки как сделать робота ?

  • @kostya1306
    @kostya1306 5 років тому +1

    Очень плохо объясняете. Если это расчитано на начинающих программистов, то они ничего не поняли. Смысл оператора % объяснять не долго. Это остаток от целочисленного деления одного целого числа на другое.

  • @user-oe8cu9nr3l
    @user-oe8cu9nr3l 6 років тому

    спасибо за "скучное и занудное" видео!!!! :)))