Ничего не найдено :(

    Перцептрон

    Сконфигурируем входы нейрона
    Перцептрон

    устанавливаем первоначальные веса нейрона

    Устанавливаем первоначальное состояние нейрона

    Первоначальное состояние на входе и выходе нейрона

    Конфигурируем порты программы

    Устанавливаем скорость серийного порта 9600 бод
    а также подтягиваем две кнопки на внутреннее сопротивление командой INPUT_PULLUP и конфигурируем выход нейрона на 13 пин ардуино (можете назначить любой свободный порт также как входные нейроны).

    Основной цикл программы

    Основная программа обработки сигналов в самом нейроне и формирование выходного ответа после получения входных данных

    Обработка сигналов на входе нейрона, в принципе поэкспериментировав с кодом, вы сможете подать сигналы с чего угодно, нейрону все равно какие данные вы подадите на вход.

    Полный листинг приведен ниже, пользуйтесь и осваивайте. Сфера применения ограничена только вашей фантазией.
    Старался максимально объяснить каждую строчку кода. Сам знаю как новичкам или даже опытным программистам разберётся с чужим кодом или пытаться его адаптировать под свой проект. В дальнейших статьях постараюсь показать где я его применяю на практике. Занимаюсь Нейросетями давно и буду выкладывать свои наработки по мере возможности и время. Вопросы и комментарии можете оставлять если будут какие то вопросы то постараюсь на них ответить.
    Всем удачных самоделок!!!
    // Вход нейрона
    const int en1 = 12;//определяем вход нейрона
    const int en2 = 11;//определяем вход нейрона
    const int z_out = 13;//определяем выход нейрона
    
    // Веса нейрона
    float w1 = 0.5;//определяем веса нейрона
    float w2 = 0.3;//определяем веса нейрона
    float theta = 0.6;// сдиг нейрона для предотвращения переобучения
    
    float z = 0;//начальное состояние нейрона
    
    //Состояние входа и вихода нейрона
    int x1 = 0;//определяем состояние на входе нейрона
    int x2 = 0;//определяем состояние на входе нейрона
    int zr = 0;//определяем состояние на выходе нейрона
    
    
    void setup() {//Конфигурация портов програмы
    
      Serial.begin(9600);//скорость роботы порта
      pinMode(en1, INPUT_PULLUP);//вход первого порта
      pinMode(en2, INPUT_PULLUP);//вход второго порта
      pinMode(z_out, OUTPUT);//выходной порт
    
    }
    
    void loop() {//основной цикл програмы
    
      neyron();//обработка сигналов в самом нейроне
    
      z = ((x1 * w1) + (x2 * w2)) - theta;//перещитываем состояния на входе нейрона
    
      if (z >= 0)//если состояние нейрона после перещета больше 0 то...
      {
        digitalWrite(z_out, HIGH);//на цыфровом пине устанавливаем состояние
        zr = 1;//пишем выход нейрона как высокий
      }
      else//если нет то...
      {
        digitalWrite(z_out, LOW);//на цыфровом пине устанавливаем состояние
        zr = 0;//пишем выход нейрона как низкий
      }
      Serial.print("x1 = ");//выводим в серийный порт надпись
      Serial.print(x1);//выводим в серийный порт состояние первого входа
      Serial.print("x2 = ");//выводим в серийный порт надпись
      Serial.print(x2);//выводим в серийный порт состояние второго нейрона
      Serial.print("zr = ");//выводим в серийный порт надпись
      Serial.print(zr);//выводим состояние нейрона на выходе
      delay(50);//утанавливаем задержку
    }
    
    
    void neyron()//обработка входных сигналов поступающих в нейрон
    {
      if (digitalRead(en1) == LOW)//если после считывание первого входа состояние низкое то ...
      {
        x1 = 1;//устанавливаем на первом входе нейрона 1
      }
      else//если нет то...
      {
        x1 = 0;//устанавливаем на первом входе нейрона 0
      }
      if (digitalRead(en2) == LOW)//если после считывание первого входа состояние низкое то ...
      {
        x2 = 1;//устанавливаем на втором входе нейрона 1
      }
      else//если нет то...
      {
        x2 = 0;//устанавливаем на первом входе нейрона 0
      }
      return x1, x2;//передаем состояние входов в основной цикл
    }
    Подборки: Arduino

    Варка сургуча, смоляной рецепт

    Удобная самодельная ручка для переноски картонных коробок и не только

    Добавить комментарий

    21 комментарий
    Korolev
    Феодор_2,
    насколько давно? Я ж не смогу все комментарии просмотреть.

    Извини, дружище, но не помню, где-то 21 год. Обсуждалась какая-то статья на эту тему. Попробуй по разделам прогуляться, исключив те, которые явно не по теме.

    Феодор_2
    Korolev, насколько давно? Я ж не смогу все комментарии просмотреть.


    Razrabotchik

    Желание связать био-электронику с предлагаемой конструкцией приветствуется, но не надо опошлять идеи с реальностью. help Что хочет Автор?

    Korolev
    Феодор_2,
    Я проводил эксперименты с ОУ и светодиодом, где пытался заставить хоть как-то реагировать схему на сокращение мышцы, результатов не было, электроника молчала.

    Покопайся, здесь уже обсуждалась подобная тема. У меня в юности работала система радиоуправления на этом принципе. Но я тогда надевал на башку "корону" с проводами, и втюхивал корешам, что управляю силой мысли!  xaxa 

    Феодор_2
    wariorjam, они будут работать без видимых задержек и подвисаний? И хватит ли потенциала у мышцы, чтобы заставить ардуино реагировать? Я проводил эксперименты с ОУ и светодиодом, где пытался заставить хоть как-то реагировать схему на сокращение мышцы, результатов не было, электроника молчала.
    wariorjam Автор

    для каждой мышцы свой нейрон Приблизительно 6 входных нейронов ардуино потянет смотря что вы хотите получить. Надеюсь вы уже с кодом розабрались и научились складывать больше нейронов для выполнения задач. Жду ответа Федор_2

    Феодор_2

    Насколько больше? Меня интересует отслеживание активности мышцы (не одной) для управления внешним устройством. Оно должно повторять движение, допустим, руки в реальном времени. Для этих задач хватит Arduino pro micro?

    wariorjam Автор

    нужно больше входных данных 

    Феодор_2
    wariorjam, как это должно выглядеть в технической и материальной части?


    wariorjam Автор
    Феодор_2,


    Возможно

    Феодор_2
    wariorjam, возможно ли использовать что-то подобное как датчик активности мускулатуры? Без дорогостоящих дополнительных датчиков и с минимальной внешней элементной базой.
    Lo

    Давно искал есть ли подобное на Ардуино и от оно сдесь

    Eig

    Спасибо, очень полезно для начинающих.

    У меня уже год, наверное, лежит на полке sipeed maix dock с камерой и TFT-экраном, гораздо более приспособленный для подобных игр. Никак не могу придумать, для чего его использовать. Отслеживание кошек не предлагать.

    wariorjam Автор
    filkar2005,

    Правильно вы отметили. Но как всегда есть но. Если вы когда нибудь работали с ПИД регулятором то для подбора коофициентов нужно много времени. Эту задачу легко освоит нейросеть даже такая простая как эта. здесь нужно будет просто изменять веса и получать быстрый результат. Представленная модель это и для ознакомления и для практического использования. Ведь нейрон способен в отличии от стандартного програмирования легко адаптироватся под изменяющиеся условия среды, нежели чем при обычном програмировании с зарание определенными условиями. В данном примере это называется обучение с учителем и поверьте это саый простой и самвц наглядный способ познакомится с основами ИИ. Я сам начинал с этого. Дальше сложнее. А так вообще то подумайте в живые существа работают с намного меньшими скоростями чем современные процессоры зато какие результаты.

    filkar2005
    wariorjam,


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

    Использование написанного Вами нейрона может иметь смысл только в обучающих целях, ведь если не требуется обучать неросеть (а обучения в Вашем коде не происходит), то зачем оформлять это всё в таком виде? Достаточно подставлять результаты в нужный вам многочлен (найти который, зная какие результаты вам нужны, не сложно), меньше памяти будет занимать код. 

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

    П.С, Я в программировании самоучка, мне реально интересно.

    Вы думаете, всё так просто? Да, всё просто. Но совсем не так.
    А. Эйнштейн
    wariorjam Автор

    Если кому интересно смогу выложить например код с подключеным дальномером как пример.

    wariorjam Автор

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

    Для тех кто не разобрался как с ним работать вмето кнопок подставте данные с ваших датчиков а если нехватает двох входов то добавте себе еще и таже история относится и к выходу нейрона, определите состояния весов и получите результат. Я сам когда начинал осваивать нейросети то сразу долго немог понять смысл происходящих процесов в нейроне пока не озорило. Ето мой первый пример для роботы и демонстрации нейросети. Мозг живого существа работает на значительно меньшей скорости зато какие результаты. Перцептрон является лишь маленькой ячейкой ИИ. Живой нейрон имеет 15000 входов и 15000 выходов.

    filkar2005
    Феодор_2, к компьютеру по штатному кабелю. И открывать монитор порта из среды ардуино.
    Вы думаете, всё так просто? Да, всё просто. Но совсем не так.
    А. Эйнштейн
    Феодор_2

    Как и куда это подключать?

    filkar2005

    Не очень понятен смысл. Ардуино слишком медленное, да и в целом малоподходящее для использования нейросетей. 

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

    Вы думаете, всё так просто? Да, всё просто. Но совсем не так.
    А. Эйнштейн
    Гость Вася

    Очень интересная и познавательная статья.

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Последние комментарии

    Все комментарии