управление выходным напряжением по заданному алгоритму

Тема в разделе "Закажу проект", создана пользователем foton, 22 сен 2015.

  1. foton

    foton Нуб

    Всем привет.
    Есть потребность для arduino nano реализовать следующую задачу. Необходимо задавать выходной сигнал (напряжение 0-5В) в зависимости от величины входящего напряжения (в диапазоне 0-5В) по определенному закону, а не как рассматривается во всех примерах пропорциональное соотношение через map.
    Решение этой задачи я реализовал в экселе (вложенный файл, зеленые цифры можно изменять, красные- расчетные значения) мне это надо реализовать в код на ардуино.

    Последовательность решения (прошу прощения, если буду выражаться некорректными терминами, я не специалист в этой теме)
    1. Считываем аналоговый сигнал (0-5 В)
    2. Оцифровываем (в экселе делением на 1023, в ардуино- по умолчанию)
    3. Оцифрованный сигнал делим на 4 и округляем полученное значение до целого (если не выполнять деления на 4 на мой взгляд понадобится массив из 1024 значений, делением мы уменьшаем размер массива)
    4. Задаем массив соответствия выходного ШИМ (мне требуется вот так)
    myArray[256]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,255,254,253,252,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,228,227,226,225,224,223,222,221,220,219,218,217,216,215,214,213,212,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165,16,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,13,130,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,99};
    5. Делаем выборку из массива, формируем соответсвующее выходное напряжение.

    Сомнение одно - будет ли корректно работать с таким большим массивом.

    Ну или может есть другой взгляд на решение этой задачи.
    Повторюсь - реализация на arduino nano!
    Кто готов - прошу с предложениями в личку или вотсап +7 9ноль5 913 девять5 4ноль (и там и там бываю вечерами по Москве).
     

    Вложения:

    Последнее редактирование: 23 сен 2015
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Код (C++):
    const byte analogPin = A0;
    const byte pwmPin = 0;
    const int delayValue = 100;

    byte myArray[256] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,255,254,253,252,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,228,227,226,225,224,223,222,221,220,219,218,217,216,215,214,213,212,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165,16,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,13,130,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,99};

    void setup()
    {
      pinMode(pwmPin, OUTPUT);
    }

    void loop()
    {
      analogWrite(0, myArray[analogRead(A0) / 4]);
      delay(delayValue);
    }
     
    Последнее редактирование: 23 сен 2015
    foton нравится это.
  3. Tomasina

    Tomasina Сушитель лампочек Модератор

    зачем для пинов использовать int?
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Незачем :) Набросал код на скорую руку, не задумываясь. Пускай байтами будут.
     
  5. DrProg

    DrProg Вечный нерд

    Я не понял зачем:
    в результате получится число от 0 до 1, а его еще делить на 4 потом...
     
    ИгорьК нравится это.
  6. Megakoteyka

    Megakoteyka Оракул Модератор

    Не зачем, а почему. Потому что ТС что-то где-то почитал, но еще не разобрался что к чему. Все такими были :)
     
  7. foton

    foton Нуб

    Ошибку осознал, я мыслил алгоритмом экселя, там это действие необходимо.
     
  8. foton

    foton Нуб

    Я настраивался понести материальные расходы на решение этой задачи, а тут все безовозмездно?
    Megakoteyka, напиши в приват номер телефона, я хотяб в качестве благодарности немого денег на счет закину :)
    Ну и в выходные буду схему собирать и тестировать... вдруг что подкорректировать придется.
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    Пускай сперва оно заработает как задумано, тогда и закинете.