Ответы пользователя по тегу Arduino
  • Как в Arduino Ide 1.8 windows отследить нажатие кнопки клавиатуры ПК?

    В Arduino IDE это не предусмотрено.
    Можете использовать самописное ПО, которое будет общаться с ардуиной по COM порту. В этом ПО уже реализуете обработку клавиш и т.п.
    Ответ написан
    Комментировать
  • Можно ли питать Arduino Mega через внешний вход питания, через блок питания 5v 30A?

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

    На ардуино есть отличная функция map и на англ., для преобразования диапазонов.
    spoiler

    _______________________
    Математически функция map() может быть записана так:
    
    long map(long x, long in_min, long in_max, long out_min, long out_max)
    {
      return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
    }
    //а если заменить long на float или double, то она будет работать с плавающей точкой
    //и соответственно изменить имя функции, что бы оно не пересекалось с родной библиотекой ардуины

    _______________________

    Если считать в милливольтах, т.е.
    y = map(x, 0, 1023, 0, 5000), т.е. 1023 - соответствует 5000 мВ, т.е. 5 В.

    Если надо можно сделать на ее основе свою, но переваривающую плавающие точки. Только помните, что плавающие точки считать немного дольше, чем целые числа.
    Ответ написан
    Комментировать
  • Существует датчик угла наклона по двум осям?

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

    Получили данные, преобразовали ускорения в градусы и отправили куда надо.

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

    Герметичность обеспечивается лаком, либо вообще заливкой компаундом.
    Ответ написан
    Комментировать
  • Несколько параллельных программ на AVR (или stm)?

    Основной цикл крутиться, а доп. задачи по прерываниям (от таймеров, от изменения входного сигнала и т.д.), либо в простое проверять условия. Судя по описанию задачи жесткий реалтайм не нужен и разбег в микросекунды-миллисекунду не критичен.

    Либо, если хочется чего-то интересного и познавательного, то на stm32 есть "из коробки" freeRTOS, будет у вас целая ОС со своими процессами. :) (на остальное, думаю, тоже можно найти свою RTOS) По крайней мере можете почитать принцип работы и возникнут идеи, как сделать свою многозадачность.
    Ответ написан
    6 комментариев
  • Как измерить силу тока с ШИМ?

    Вроде был уже такой вопрос прям недавно. Фильтрацию пробовали средствами микросхемы по 128 семплам?

    Или берите скоростной АЦП, который будет за период ШИМ точек 20 замерять гарантированно, после чего их интегрировать.
    Ответ написан
    7 комментариев
  • Как измерить ток кулера?

    А почему RC подобрать не получается? В чем проблема?

    Можно вообще емкостей понавешать у кулера (электролиты+керамика/танталы/пленка) и производить измерения между источником и кулером с емкостями - это сгладит пульсации тока на участке источник - нагрузка.

    Ну и для работы с сигналом было бы неплохо его видеть. Вот примеры осциллограмм с питания у кулера (от 5В без доп. емкостей) и осциллограмм с шунта 0,33 Ом.
    5cd5bacb33ce7851449731.png5cd5bad2412d5641580296.png
    Ответ написан
    7 комментариев
  • Будет замыкание или нет в простом премере?

    Порты МК в режиме чтения находятся в высокоомном состоянии и приложение к ним напряжений лог. 1 совершенно безопасно.
    Проблема будет если поставить порт на вывод, выставить низкий лог. уровень и подключить это дело к источнику, вот тогда будет КЗ на землю / ну или постаивть в режиме push-pull лог. единицу, а вывод посадить на землю.
    Ответ написан
    2 комментария
  • Как подключить экранированную витую пару?

    Питание + общий провод уже две штуки и еще сигнальный сигнальный, итого 3 провода.
    Если одна витая пара, то ее не хватит.

    Экран с одной стороны на общий провод со стороны источника.

    Смотрите сопротивление провода на 15 метрах и потребление нагрузки. Иногда питание может не дойти из-за падения напряжения на проводах.

    Ну и неплохо было бы уточнить с чем связываться собираетесь и как. Аналоговый сигнал, цифровой, скорости обмена? Что за провод вообще.
    Ответ написан
  • Абсурдное выполнение условных операторов 3 раза в Arduino nanov3, как исправить?

    void loop() {
      analogWrite(col, xCol);
      xBaza = Serial.read();
      if(xBaza != xBaza0) {
        xBaza0 = xBaza;
        analogWrite(baza, xBaza);
        writes();
      }
    }

    1. Попадаете в условие, выполняете действия. После чего идете на второй круг. в переменной сидит, например 50, которое вы присваиваете.
    2. Снова читаете, но уже чтение порта возвращает вам -1, если не ошибаюсь, если не прочитано ни одного символа.
    Сравниваем: -1 не равно 50 и вы опять в условии. Выполняется вывод и присваивание переменной значения -1.
    После этого обе переменные становятся -1 и вы не попадаете в условие. Т.к. при попытке чтения порта результат -1 и в переменной тоже -1.

    И читаете Вы не цифру, а ее ASCII код.

    Возможно поможет if(xBaza != xBaza0 && xBaza != -1) {
    Ответ написан
    Комментировать
  • Есть ли в природе Sensor/Servo Shield для Arduino UNO на большóе кол-во каналов?

    Можно взять по паре плат на PCA9685 для серв, нафига именно шилд над ардуиной лепить.

    Разместить платы ШИМок для серв ближе к сервоприводам и рулить ими по и2ц. Одну на правое полупопие, вторую на левое. К платкам пойдет только силовые 5В, общий и SDA, SCL линии.

    Шилды у Вас один хрен один над другим не встанут. :)
    Ну а дрыгать ногами на одноплатнике как-то перебор что-ли. Как вариант для этого присмотреть недорогую ПЛИС.
    Ответ написан
    2 комментария
  • Скорость i2c для ЖК экрана?

    ИМХО можно выкинуть и2ц модуль и воткнуть пару сдвиговых регистров, которыми дрыгать через SPI (в случае если не надо читать что-то из памяти дисплея, что только при выводе символов на дисплей не особо-то и нужно, ардуина врядли будет молотить с такой скоростью, что надо будет состояние дисплея запрашивать).
    Сам по себе аппаратный SPI будет гораздо меньше телодвижений делать чем I2C, что обеспечит некоторый прирост в скорости (по сравнению с I2C), но надо будет перевернуть все библиотеки и по сути создать новую.

    И судя по даташиту на микруху неизвестно, как она отреагирует на превышение скорости тактирования, она в принципе похоже рассчитана на 100 кГц. С определенной частоты может просто начать неадекватно работать.
    Ответ написан
    Комментировать
  • Возможно ли к ардуине подключить USB мышку(беспроводную) без использования дополнительных плат?

    Если ардуина на МК, который аппаратно поддерживает USB (например платы на STM32F103 смогут, или Arduino Due), то можно.
    Но! Рулить будете уже не ардуино командами, а обычным си для МК. Надо будет вникать чуть глубже, чем написание команд высокого уровня.
    Если это будете делать, то уже скорее всего просто выкинете оболочку ардуины и будете программировать, как под обычный МК :)

    ___
    UPD, похоже Due на уровне оболочки ардуины даже позволит реализовать вашу хотелку с библиотекой USBHost
    Есть и ее китайский клон, конечно же.
    Ответ написан
    Комментировать
  • Проблема с таймером Arduino, почему не работает?

    Верни всё как было, а одноразовое включение сделай в цикле инициализации :)
    Xer + 1; ничего не сделает с переменной Xer. Эта строка вычислит результат, но никуда его не присвоит.
    Xer ++; или Xer += 1; попробуй ради интереса. Особо в логику не вникал)
    Ответ написан
    5 комментариев
  • Как заставить Arduino выполнять задачу в заданное время?

    1. Читаете время.
    2. Если текущее время = времени выполнения действия, то выполнить действие...
    Или за Вас код написать?
    Ответ написан
  • Как работает библиотека Irremote.h?

    Можно открыть библиотеку и посмотреть. По умолчанию на винде в C:\Program Files (x86)\Arduino\libraries\RobotIRremote\srcI\IRremote.cpp
    Исходя из беглого анализа, то:
    // initialization
    void IRrecv::enableIRIn() {
      cli();
      // setup pulse clock timer interrupt
      //Prescale /8 (16M/8 = 0.5 microseconds per tick)
      // Therefore, the timer interval can range from 0.5 to 128 microseconds
      // depending on the reset value (255 to 0)
      TIMER_CONFIG_NORMAL();
    
      //Timer2 Overflow Interrupt Enable
      TIMER_ENABLE_INTR;
    
      TIMER_RESET;
    
      sei();  // enable interrupts
    
      // initialize state machine variables
      irparams.rcvstate = STATE_IDLE;
      irparams.rawlen = 0;
    
      // set pin modes
      pinMode(irparams.recvpin, INPUT);
    }
    
    //само прерывание
    ISR(TIMER_INTR_NAME)
    {
      TIMER_RESET;
    
      uint8_t irdata = (uint8_t)digitalRead(irparams.recvpin);
    
      irparams.timer++; // One more 50us tick
      if (irparams.rawlen >= RAWBUF) {
        // Buffer overflow
        irparams.rcvstate = STATE_STOP;
      }
      switch(irparams.rcvstate) {
      case STATE_IDLE: // In the middle of a gap
        if (irdata == MARK) {
          if (irparams.timer < GAP_TICKS) {
            // Not big enough to be a gap.
            irparams.timer = 0;
          } 
          else {
            // gap just ended, record duration and start recording transmission
            irparams.rawlen = 0;
            irparams.rawbuf[irparams.rawlen++] = irparams.timer;
            irparams.timer = 0;
            irparams.rcvstate = STATE_MARK;
          }
        }
        break;
      case STATE_MARK: // timing MARK
        if (irdata == SPACE) {   // MARK ended, record time
          irparams.rawbuf[irparams.rawlen++] = irparams.timer;
          irparams.timer = 0;
          irparams.rcvstate = STATE_SPACE;
        }
        break;
      case STATE_SPACE: // timing SPACE
        if (irdata == MARK) { // SPACE just ended, record it
          irparams.rawbuf[irparams.rawlen++] = irparams.timer;
          irparams.timer = 0;
          irparams.rcvstate = STATE_MARK;
        } 
        else { // SPACE
          if (irparams.timer > GAP_TICKS) {
            // big SPACE, indicates gap between codes
            // Mark current code as ready for processing
            // Switch to STOP
            // Don't reset timer; keep counting space width
            irparams.rcvstate = STATE_STOP;
          } 
        }
        break;
      case STATE_STOP: // waiting, measuring gap
        if (irdata == MARK) { // reset gap timer
          irparams.timer = 0;
        }
        break;
      }
    
      if (irparams.blinkflag) {
        if (irdata == MARK) {
          BLINKLED_ON();  // turn pin 13 LED on
        } 
        else {
          BLINKLED_OFF();  // turn pin 13 LED off
        }
      }
    }

    Идет запуск таймера с периодом 0,5мкс и разрешение прерываний + соответственно чтение состояний высокий/низкий уровень. А дальше уже функции разгребания полученных MARK и SPACE.

    Т.е. до функций декодирование работает просто, как лог. анализатор, читая лог. уровни каждые 50мкс и сохраняя их.
    uint8_t irdata = (uint8_t)digitalRead(irparams.recvpin);


    Аналогично можно узнать о работе других библиотек.
    Ответ написан
    Комментировать
  • В каком виде передаются данные через последовательный порт в ардуино?

    Если речь о соединении Arduino-терминал на ПК, то передаются тупо символы кодами. По сути обычный UART. Просто передает байты.

    Если надо, то при передаче программист добавляет плюшки в виде кодов исправления ошибок, ну или хотя бы контрольной суммы (CRC), с повторным запросом, в случае, если контрольная сумма не сошлась. На других устройствах соответственно это тоже должно быть реализовано.

    В случае использования конкретного протокола (например, если надыбали готовую библиотеку) данные фичи уже могут быть написаны за Вас.
    Ответ написан
    Комментировать
  • Как перенести макет Arduino?

    В чем проблема нарисовать ардуину, как самостоятельный модуль? Если не ошибаюсь, то с буквой А пойдет целая плата.

    Примерно так. Только УГО и саму букву которой будет обозначаться согласуйте с тем, кто у Вас проверять будет.
    dd22e2e11a4d4b6caebc81ecfffc45ef.jpg

    Остальные готовые датчики аналогично.

    Хотя можно извращаться и рисовать принципиалку всего подряд, но надо ли.
    В принципе там будет МК, его кварц, микруха USB-UART со своим кварцем (можно будет ее вообще при желании убрать), линейный стабилизатор и конденсаторы, разъемы.
    Ответ написан
    1 комментарий
  • Как подключить семисегментные индикаторы?

    Скорее всего распиновка будет совпадать с аналогичными индикаторами, на которые Вы найдете даташит. Единственное выяснить общий анод(+) или катод(gnd)

    В общем случае у вас будет 3 анода или катода и 7 выводов под сегменты.
    Управление идет динамической индикацией. Т.е. сначала подключаем один анод(или катод) и включаем нужные сегменты, затем второй и т.д.. На большой частоте глаз не заметит, что по факту каждая цифра включается по очереди.

    Общий анод:
    https://lib.chipdip.ru/195/DOC000195193.pdf

    Общий катод:
    https://lib.chipdip.ru/195/DOC000195397.pdf

    Определить можно элементарно либо прозвонкой мультиметра на сегмент (этого скорее всего хватит, что бы сегмент начал светится), либо через токоограничивающий резистор и источник напряжения.
    8, 9, 12 пины соответственно аноды или катоды цифр.
    Остальные выводы - сегменты.

    Если подать плюс на 8, 9 или 12 сегмент, а минус на любой оставшийся пин и будет гореть сегмент(это для прозвонки мультиметром, если тестируете от источника напряжения, например 5В, то используйте токоограничительный резистор на 200-300 Ом), то это общий анод. Если работает при смене полярности "-" на 8/9/12 пин, а плюс на один из пинов сегмента, значит общий катод.

    6 вывод не используется (у Вас его и нет)
    Ответ написан
    Комментировать
  • Как подключить к Arduino сторонние двигатели?

    А вы вообще двигатель как подключали?
    Учитывая, что про драйверы ни слова, то сразу скажу, что напрямую от ножек контроллера двигатель крутиться не будет. :)
    Нужно городить драйвер для управления двигателем/купить готовый шилд.
    Ответ написан
    Комментировать