АрдуЛисп – это революционное решение для олимпиадной и соревновательной образовательной робототехники, основанное на использовании блочного языка программирования и скриптового языка программирования – ЛИСП.

Интерфейс программы АрдуЛисп
Интерфейс программы АрдуЛисп

Все известные решения в области образовательной робототехники в мировой практике имеют возрастной порог:

  • либо 7+ – для быстрого вхождения, в котором используется блочный визуальный язык программирования от компании GoogleBlockly (Блокли). Так Blockly является основой оболочки Scratch (Скретч).

  • либо 14+ – использование скриптовых языков программирования: С++,Java, Python, Lua.

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

Компания Лего, в своё время озадачилась этой проблемой. Так появились конструкторы Lego Spike, которые можно программировать как на Scratch так и на microPython. Однако microPython имеет также порог вхождения 14+. Об этом свидетельствуют производители отечественной IoT платы от компании PinLab на базе микроконтроллера ESP8266.

Всё же, наибольший интерес представляет образовательная робототехника на основе Ардуино, поскольку тут можно достичь знаний языка программирования С++ и возможности работать над проектами любой сложности. Но это базовое решение требует высокого порога вхождения, не менее 14+.

Для снижения порога вхождения в программирования платформы Ардуино на С++ существует отечественное решение - Ardublock, среда в которой можно составить программу в виде блоков и автоматически получить её аналог на языке С++. Это довольно хорошее решение, но оно обладает некоторыми недостатками, к сожалению, в большинстве случаев связанными непосредственно с политикой автора. Но здесь мы на этом останавливаться не будем...

Языки программирования Python, Java, Lua могут также использоваться в Ардуино-проектах, превращая плату в интерпретатор этих языков, что можно расценивать как модельное преимущество, в отличии от компилируемого С++. Недостатком использования этих языков программирования является то, что им требуется более мощный микроконтроллер, например, ESP или STM. Кроме того, эти решения требуют всё-равно возрастного порога 14+.

Язык программирования ЛИСП, «открытый» Джоном Маккарти в 50-х годах прошлого века, способен решить проблему 11+. Следует отметить, что Джоном Маккарти является автором понятия AI (Искусственный Интеллект). То есть его язык программирования изначально создавался для реализации AI подхода в ЛИСП-машинах. Сейчас это совсем не очевидно. Но с другой стороны можно точно сказать, что из любой Ардуино-совместимой платы, в современных условиях, можно сделать интерпретатор языка ЛИСП, т.е. ЛИСП-машину. Для этого нужно обратить своё внимание на проект - uLisp.

LISP, в отличие от других интерпретируемых языков - Python, Java, Lua, в версиях для микроконтроллеров, имеет свои преимущества.

Во-первых, как уже было отмечено, ЛИСП-машину можно собрать из любой платы Ардуино на базе микроконтроллеров AVR, даже на Arduino Nano! Конечно, здесь оптимальным решением будет использование Arduino Mega, но всё же!

Во-вторых, при использовании Arduino UNO, Nano или Mega, мы можем позволить себе задействовать симулятор электрических схем - SimulIDE в качестве среды для экспериментов. Для этого потребовалось добавить в SimulIDE плагин UDP-serial и коррекцию работы с UTF-8.

Работа ЛИСП программы в SimulIDE
Работа ЛИСП программы в SimulIDE

В-третьих, язык программирования uLisp достаточно простой в сравнении с microPython и другими интерпретаторами. Здесь нет пересечения множества парадигм, что оптимально для начинающих программистов. С другой стороны, изначально ЛИСП считается языком функционального программирования, однако при реализации uLisp на Blockly практически 100% всего императивного функционала в нём беспроблемно реализуется.

Перечислим преимущества оболочки АрдуЛисп в сравнении с Ardublock:

  • Не нужно компилировать программу. Программы uLisp запускаются в режиме интерпретатора.

  • Генерируемый язык программирования uLisp более простой, по сравнению с аналогами, что позволяет снизить потенциальный барьер при обучении программированию при переходе от блочного программирования к скриптовому.

  • Возможность использовать имена переменных и функций на кириллице.

  • Возможность выполнять программу непосредственно в симуляторе - SimulIDE через плагин UDP-serial.

Выбор порта для работы с АрдуЛисп и SimulIDE, либо платой Arduino
Выбор порта для работы с АрдуЛисп и SimulIDE, либо платой Arduino
  • Более продуманный функционал для обучения непосредственно программированию, в том числе и для решения олимпиадных задач. Например, грамотное наследования от класса библиотеки Adafruit GFX позволяет использовать единый минимальный набор визуальных блоков Blockly для работы с различными устройствами вывода графической информации.

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

  • Запуск оболочки из ОС Linux, кроме web-версии и версии Wndows. Для обмена данными с COM-портом в АрдуЛисп реализована оболочка на базе Qt (WebEngine) и как альтернатива – flask web-server на базе - Python.

  • Свободно распространяемый продукт с открытым исходным кодом (скачать с gitverse.ru)

    Проект светильника, выполненный с учеником 4-го класса с использованием АрдуЛисп, Arduino Mega и WS2812
    Проект светильника, выполненный с учеником 4-го класса с использованием АрдуЛисп, Arduino Mega и WS2812

Из сравнительных недостатков, которые ограничивают использование оболочки АрдуЛисп прямо сейчас — это недостаток обучающих материалов, которыми изобилует Ardublock. Поэтому в настоящий момент идёт работа над насыщением электронного учебника АрдуЛисп с примерами проектов под платы IoT Pinlab и Arduino Mega в SimulIDE.

Решение олимпиадной задачи для Ардуино учеником 5-го класса, с использованием АрдуЛисп и IoT PinLab
Решение олимпиадной задачи для Ардуино учеником 5-го класса, с использованием АрдуЛисп и IoT PinLab

Постскриптум

Джон Маккарти создавал свой язык программирования – ЛИСП на заре информатизации для решения задачи Искусственного Интеллекта, автором понятия которого он и является. В современном мире эту функцию заменили другие инструменты, а сам язык остался не очень востребованным. Однако его простота функционала и способность, в версии для микроконтроллеров, из любой «железяки» получить ЛИСП-машину, позволяют решить проблему подготовки программистов, начиная с младшего возраста, при переходе от блочного программирования к скриптовому. Кто знает, как изменится Мир, если в недалёком будущем мы получим большое количество ЛИСП-программистов, с его, всё еще, недооценёнными возможностями?

Комментарии (10)


  1. beswalod
    24.10.2025 06:30

    либо 14+ – использование скриптовых языков программирования: С++,Java, Python, Lua.

    С каких пор Плюсы и Ява стали скриптовыми?


    1. osdlab Автор
      24.10.2025 06:30

      Понятие script в английском языке имеет более широкую нотацию, чем в русском NLP.
      Да, действительно С++ и Java не являются языками для написания скриптов. С другой стороны сказать, что все интерпретаторы - это только скриптовые языки программирования тоже неправильно.
      В статье под скриптом понимается написание программы на любом ЯП на латинице, что очень проблематично для детей, например, дошкольного возраста.
      Из этих соображений С++ и Java - скриптовые ЯП компиляторы, а Python, Javascript, PHP - скриптовые ЯП интерпретаторы.
      К нескриптовым подходам в программировании тогда можно отнести Scratch(Blockly), XOD, FLProg, HiAsm и прочее.


      1. beswalod
        24.10.2025 06:30

        А, вы использовали слово "скриптовый" в противоположность "визуальному", ок. Тут, наверное, да, более подходящего слова не найти


  1. RodionGork
    24.10.2025 06:30

    Революция опоздавшая эдак на 50 лет. Мне симпатичен LISP но "образовательным" его считать - ну это суровый перебор.

    Я бейсик интерпретируемый в ардуину устраивал. С телефона чтобы интерактивно программировать. Ну всё равно не то чтобы очень удобно. А тут еще скобочки и слова диковинные.


    1. osdlab Автор
      24.10.2025 06:30

      Вот тут эту тему уже поднимали на профессиональном уровне. Вывод: АрдуБейсик - не очень приемлемое образовательное решение. Интересно использовать конструкцию goto, но в итоге автор перешёл к в выбору чистого ASMа. Возможно автору той статьи эта тема зайдёт, поскольку в uLsip, на некоторых микроконтроллерах, можно прям на ASMe в реальном режиме времени, извиняюсь, "фигачить"!

      По поводу выбора LISP позвольте раскрою тему в следующем комментарии. Пока что отмечу, что, во-первых, мы имеем дело не с LISP, а с uLisp и, во-вторых, изначально я предлагаю работать не с uLisp а с АрдуЛисп - обёрткой Blockly для uLisp, а это довольно легко для начинающих.


  1. Wolf4D
    24.10.2025 06:30

    За идею большой плюс, а выбор языка - сомнителен. Лисп весьма хардкорен для молодого мозга. Вам нужны седые дети? :)


    1. punzik
      24.10.2025 06:30

      Лисп так-то намного проще других языков. С страх скобочек - это какая-то нездоровая фобия.


      1. teakettle
        24.10.2025 06:30


    1. osdlab Автор
      24.10.2025 06:30

      По поводу выбора языка программирования. Тут долгая история.
      Веду кружок по робототехнике. Пытаюсь научить детей программированию. С++ - самоцель. Но опыт показывает, что программирование на достаточно высоком уровне можно давать с 1-го класса. У меня школьник с 3-го класса "рвёт" олимпиады по программированию Ардуино за счёт того, что освоил Ardublok. Но перейти к С++ не может - не тот это инструментарий для этого возраста. microPython? Там тоже не легче!
      Сын в четвёртый пошёл. У него нет таких способностей как у моего олимпиадника. Но задач для Arduino мне много выдумал. Я с ним договорился, что делаю ему комфортную среду для программирования, а дальше она сам делает свои придуманные проекты, ну с подсказками конечно ;). Ardublock сразу отмёл, поскольку интуиция и опыт работы с ним говорили о том, что потом всё равно придётся эти проекты самому допиливать. Короче перебрал всё что можно было бы упаковать в Blockly: microPython, Node MCU, Espruino. И остановился на uLisp, который изначально не воспринимал в серьёз. Однако это оказалось самым адекватным решением для ребёнка. В итоге Работаю над АрдуЛисп чуть больше года. Не всё там пока работает как надо, в процессе, но то что уже получилось самого меня впечатляет. uLisp залюбил и пытаюсь интегрировать его в другие проекты... А в скобочках есть особая магия, которую можно использовать для прокачки собственного NLP, но это уже совсем другая история ;)...
      P.S. Мой олимпиадник уже в 5-м классе, а это означает, что он попадает уже в старшую группу, а тут нужно соревноваться, в том числе, с 11-классниками (со средней группой у нас не заморачиваются). Отучаю, помаленьку от Ardublock в сторону АрдуЛиспа, моя задача в том, чтобы к весне он смог тоже "порвать" эту категорию. Олимпиадные задачи для Ардуино достаточно простые из-за того что С++ тяжело даётся. Нужен адекватный инструментарий. Поэтому - всё реально!


      1. osdlab Автор
        24.10.2025 06:30

        И ещё. Умельцы под uLisp уже операционки пишут (Новости от мюЛиспа: Опубликована uos - ОС написанная на мюЛисп для компьютера T-Deck (модуль связи на ESP32-C3))!