Доброго дня!
Вопрос дурацкий, но не могли бы вы пояснить на пальцах и конкретных примерах?
Вот у меня когда-то был телефон Nokia N72 (не суть важно), это был такой кирпич с блютусом, вайфаем и проводом, на выходном конце которого был usb. Так вот чтобы с компа залезть на телефон, необходимо устанавливать специально разработанную программу.
Теперь с другой стороны, есть принтер (вообще неважно какой) и чтобы им управлять с компьютера, необходимо установить драйвера. Там есть такие же каналы связи: usb шнурок и wi-fi в более продвинутых.
Быть может не очень хороший пример, но другой в голову не пришел.
Как я понимаю, в принтере нет своего процессора, поэтому он считается как периферийное устройство. С другой стороны в телефоне есть процессор, поэтому, если мы захотим сделать, к примеру, десктопную программу для компьютера, чтобы можно было фотографировать, нам необходимо написать одну программу на компьютер (для управления), одну программу на телефон (которая принимает сигнал и которая будет вызывать драйверы камеры), и, собственно, сами драйверы камеры (при условии, что их нет). Всё верно?
Для чего это всё нужно, мне стала интересна робототехника, но, так как пока нет никаких знаний и понимания всех процессов, я не могу даже нормально формулировать запросы. Есть опыт написания программ на компьютере и думаю, что нужно, чтобы начать делать какую-либо периферию? Быть может это всё окажется крайне сложно и я не стану этим заниматься, поэтому и прошу помощи.
Для обсуждения давайте возьмём другой пример. Я хочу сделать вентилятор с управлением через компьютер. Мне нужно регулировать скорость вращения самого пропеллера и возможность менять угол поворота. Прошу заметить, что мне сейчас не нужно готовое решение, типа покупаешь плату с двумя приводами, втыкаешь в usb и всё работает, мне нужен сам принцип действия и связи.
Пошаговые действия, если можно.
Ну и вот сейчас пойдут мои глупые рассуждения, прошу не кидаться камнями:
К примеру, покупаем привод (микромоторчик), приппаиваем к нему провод usb (или нужен переходник?) и втыкаем в комп, тогда моторчик начинает крутиться, так как есть ток, верно? Теперь, чтобы сделать включение/выключение с компьютера, и уж тем более скорость вращения, нам нужен некий контроллер. Для которого просто необходим драйвер?
Все драйвера пишутся на c++ либо ассемблере, так? Я пишу в visual studio на c#. Нельзя ли как-то обойтись без c++ и ассемблера для таких задач?
И второй уровень, если я хочу подключить wi-fi (питание тут не интересует, из розетки или батареек), то мне в вентилятор необходимо добавить сам модуль wi-fi, но чтобы теперь организовать работоспособность, необходим процессор, который будет работать с вайфаем? То есть в вентиляторе нужна управляющая программа (прошивка? программа-сервер?), а так же драйверы по управлению приводами, которые необходимо писать для этого процессора? На компьютере же у нас останется только программа с вызовом (клиент?).
Родной язык c#, нельзя ли как-то обойтись одним этим языком? Так же наткнулся на описание microsoft robotics developer studio, но конкретных примеров не нашел. Такие вещи создавались как раз, чтобы упростить решение моей задачи? Так же есть некие arduino, это и есть та плата, на которой могут быть установлены двигатели и wi-fi модуль, через которую можно будет с компьютера управлять моторами используя какой-то их высокоуровневый язык без необходимости писать драйверы?
Каша в голове, помогите, пожалуйста, привести всё в порядок.
С уважением.
В USB 4 пина: +5V, +Data, -Data и земля.
Если вы подключите двигатель к +5 и земле, он конечно сможет работать, но далеко не все материнские платы умеют отключать питание подающееся на USB, и управлять им не получится. Со скоростью все еще интереснее - скорость двигателей регулируется изменением напряжения или при помощи ШИМ. Изменять напряжение на USB вы не сможете, а попытка реализовать ШИМ отключением питания на USB может открыть врата ада.
Не морочьте голову, купите какую-нибудь *-дуину или аттини за пол доллара, и играйтесь. И начинать лучше с мигания светодиодиком - так сложнее что-нибудь сжечь.
И да, для всяких -дуин есть IDE с поддержкой кучи языков.
И второй уровень, с файфаем - есть такая штука как ESP8266 - это контроллер со встроенным вайфаем. Очень часто используется во всякой любительской электронике. Стоит в районе $2.5 - $3.
Спасибо за ответ.
Про usb, это я по незнанию, не обязательно и питать и управлять через него, просто через usb может подключаться практически вся компьютерная периферия (принтеры, дисководы и т.д.) а так же телефонные устройства (селфи-палка, да много чего). Я и подумал, что через usb самый простой способ.
Про управление питанием через компьютер я тоже понимаю, имел в виду, что не прямо из ПК мы регулируем напряжение, а мы лишь передаём сигнал. Уже внутри нашего вентилятора реализуем увеличение/уменьшение напряжения, как и замыкание-размыкание сети. И управляем этим всем через сигналы.
Как я понял, Ардуино (еще нашел Raspberry Pi и Lego Mindstorm) - это такие платы, в которых есть процессор, оперативная память, даже примитивный монитор - по сути упрощённые компьютеры. Эти платы созданы так, что они легко расширяются - можно в них втыкать моторы и упомянутый вами ESP8266 - модуль вайфая. И для них есть свои языки, как говорят, лёгкие в обучении, так? На самом деле мне этого вполне достаточно, куплю себе какой-нибудь конструктор из этих и поиграюсь.
Но у меня появился еще один вопрос. Допустим, что я собрал на ардуино такой вентилятор, написал свою программу управления на ПК с четыремя кнопками, подружил вентилятор с компьютером и всё это как-то заработало. Что нужно будет сделать, чтобы собрать аналогичный вентилятор без ардуино? К примеру для того, чтобы делать такие вентиляторы на продажу. Ардуино даёт мощь и гибкость, но я буду использовать лишь малую часть его потенциала, а за остальное всё равно придётся платить. Так вот? Изучать схемотехнику, забрать, грубо говоря, используемые мной узлы. А потом что, моя программа, написанная для ардуино не будет работать, моя программа, написанная для ПК не будет работать.
Не надо придираться к тому, что это никому не нужный вентилятор, это лишь пример. Мне очень важно понять сами принципы и дальнейшее развитие. Еще придумал другой пример, не вентилятор, а квадрокоптер. Я так понимаю, что смогу собрать квадрокоптер на ардуино. Сейчас продаются куча разных квадрокоптеров, возможно, есть и с вайфаем, возможно есть и с управлением через компьютер/телефон, но внутри них же не стоит ардуино. Что там внутри? Аналогичная плата с процессором и оперативной памятью? Но без таких широких возможностей, как в ардуино, а с узкой специализацией? Но раз есть процессор, значит, нужны и драйвера (которые написаны на c/c++ или ассемблере)? В принтере с вайфаем тоже есть плата с процессором и оперативной памятью? Значит, там есть своя внутренняя программа (на чем она написана?) и на компьютер ставится программа, чтобы он мог управлять этим принтером, так? Как это всё связывают вместе? Как это всё работает?
Как я понял, Ардуино (еще нашел Raspberry Pi и Lego Mindstorm) - это такие платы, в которых есть процессор, оперативная память, даже примитивный монитор - по сути упрощённые компьютеры. Эти платы созданы так, что они легко расширяются - можно в них втыкать моторы и упомянутый вами ESP8266 - модуль вайфая. И для них есть свои языки, как говорят, лёгкие в обучении, так?
Про лего не скажу, но там и цена странная и возможности так себе.
Ардуино - это действительно платка с контроллером и некоторой обвязкой. Экрана в базовой версии нет, но его можно подключить. Но есть упрощенные модели ардуины, в том числе китайские клоны. И самое крутое - можно купить отдельно чип контроллера, и работать напрямую с ним. Аттини стоит 30-40 центов, например.
Про языки программирования: внутри контроллера все равно будет крутиться ассемблер. Но под самые распространенные модели есть IDE и компиляторы, способные загонять туда даже программы написанные на javascript. Ардуина основана на atmega-вском чипе, а младшие версии этих чипов имеют ту-же архитектуру, только чуть помедленее, ножек поменьше и памяти поменьше. В итоге нетребовательные к ресурсам прошивки можно перенести с ардуины на аттини почти без изменений кода.
ESP8266 - не просто модуль файфая - это контроллер со встроенным файфаем. Т.е. и мозги и память и файфай - всё внутри одной вот такой штучки:
А с минимальной платкой с обвесом получится примерно так:
К примеру для того, чтобы делать такие вентиляторы на продажу.
Я какбы уже догадался, что вы хотите сделать что-то на продажу, потому и указываю цены. Attiny13 обойдутся в 28 центов/шт при покупек 10 штук на алиэкспрессе. Если закажете их тысячами у производителя - будет дешевле.
Что там внутри? Аналогичная плата с процессором и оперативной памятью?
Кристофер Ллойд, перелогиньтесь! У вас снова сломалась машина времени?
ОДНОКРИСТАЛЬНЫЕ МИКРОКОНТРОЛЛЕРЫ производятся с конца восьмидесятых, и сейчас уже стоят копейки. Там на одном кристалле и процессор и память и куча всего. atmega, attiny, stm32
SoC - System on Chip - более крутая и современная штука, но для ваших целей слишком крутая, наверное (потому что дороже). Это ядро всяких телефонов.
Есть и другое всякое, вплоть до intel edison, на котором можно win 10 запустить!
Значит, там есть своя внутренняя программа (на чем она написана?) и на компьютер ставится программа, чтобы он мог управлять этим принтером, так? Как это всё связывают вместе? Как это всё работает?
Это в комментарии не уместится. Почитайте про архитектуру вычислительных систем, про устройство процессоров.
Да, для работы с самодельной периферией придется что-то писать. Если это что-то фабричное или широко распространенное - скорее всего есть готовые решения. Примерами управления движком забит весь интернет, например.
В любом процесоре - и в вашем десктопе, и в телефоне. и в контроллере стиральной машинки "внутренняя программа" - набор машинных кодов. Ближе всего к ним идет ассемблер, но и для других языков есть компиляторы, которые генерируют машинные коды или байткод. Если вы выбираете именно по поддержке языков - присмотритесь к атмеловским контроллерам. На волне популярности ардуино было очень много всего сделано для компиляции под атмегу и аттини заодно.
К примеру, покупаем привод (микромоторчик), приппаиваем к нему провод usb (или нужен переходник?) и втыкаем в комп, тогда моторчик начинает крутиться, так как есть ток, верно? Теперь, чтобы сделать включение/выключение с компьютера, и уж тем более скорость вращения, нам нужен некий контроллер. Для которого просто необходим драйвер?
Дикая идея. Чисто теоретически можно запитать моторчик от USB, но лучше этого не делать. Даже если ты запитаешь моторчик от USB он просто будет крутится, для управления моторчиком с компьютера нужен микроконтроллер с соответствующей программой (не драйвером, учись использовать правильную терминологию) и программа управления на компьютер. Проблема в том, что МК с аппаратным USB стоят дорого, а программный USB штука для новичка сложная, но есть выход это платы Arduino (или их более дешевые и такие же надежные китайские братья). На платах Arduino есть конвертер USB-UART, т.е. при подключении такой платы к компьютеру у тебя будет обычный COM порт (вот тут тебе понадобится драйвер конвертера) с помощью которого можно обмениваться данными с МК.
Все драйвера пишутся на c++ либо ассемблере, так? Я пишу в visual studio на c#. Нельзя ли как-то обойтись без c++ и ассемблера для таких задач?
Не вижу проблемы в изучении С# и С++ ближайшие родственники. У Arduino свой язык Wiring похожий на С. Т.е. для компа пишешь на C# для Arduino на Wiring
И второй уровень, если я хочу подключить wi-fi (питание тут не интересует, из розетки или батареек), то мне в вентилятор необходимо добавить сам модуль wi-fi, но чтобы теперь организовать работоспособность, необходим процессор, который будет работать с вайфаем? То есть в вентиляторе нужна управляющая программа (прошивка? программа-сервер?), а так же драйверы по управлению приводами, которые необходимо писать для этого процессора? На компьютере же у нас останется только программа с вызовом (клиент?).
Да пожалуйста, без проблем
Родной язык c#, нельзя ли как-то обойтись одним этим языком? Так же наткнулся на описание microsoft robotics developer studio, но конкретных примеров не нашел. Такие вещи создавались как раз, чтобы упростить решение моей задачи? Так же есть некие arduino, это и есть та плата, на которой могут быть установлены двигатели и wi-fi модуль, через которую можно будет с компьютера управлять моторами используя какой-то их высокоуровневый язык без необходимости писать драйверы?
В реальном программировании программист должен знать и уметь так много, что знание языков это малозначительная мелочь. Если ты, при необходимости, не можешь освоить второй/третий язык в программировании тебе делать нечего.
Microsoft Robotics Developer Studio это совсем не то что тебе нужно в данный момент. Там пишут программы для управления роботами стоимостью за миллион долларов.
ЗЫ Если будут вопросы пиши на почту, постараюсь помочь
Спасибо за такой подробный ответ!
Выше я писал большой комментарий, в принципе, я решил поиграться с этим вашим Ардуино, но вопросы всё же еще остались.
Про usb, это я по незнанию. Про языки, я знаю несколько языков: c++, паскаль - это было в институте, но те примитивные лабораторки даже вспоминать не хочется. Серьёзно писал на ABAPe, писал на JS из-под J2SE, затем подался в веб. разработку и по сей день пишу в студии на c# (ну и js не делся никуда). Это я к тому, что проблем с программированием, конечно же, нет. Но есть такое, когда нравится язык. И я предпочту писать на нём, если будет такая возможность.
Про терминологию - как раз и пытаюсь разобраться. Микроконтроллер (МК) - это такая плата с процессором, памятью и периферией. Собственно arduino, raspberry Pi и lego Mindstorm - это всё микроконтроллеры, но со своими языками программирования (какие языки используются для более простых микроконтроллеров?) "По сути, микроконтроллер - это однокристальный компьютер, способный выполнять относительно простые задачи" (с) вики.
Вопрос, как тогда работает принтер с вай-фаем? В них же не стоят ардуино? Но в нём стоит микроконтроллер с модулем wi-fi. Внутри принтера есть программа управления, работающая как с вайфаем (программной частью), так и с приводами (аппаратной частью), на компьютер ставится программа управления принтером (драйвера на принтер). Производители принтеров же не на ардуино их делают.
Если я правильно понял, ардуино есть микроконтроллер, с которого легко начинать изучение. Но если бы, к примеру, я бы решил продавать свой вентилятор, то, чтобы запустить промышленную серию, мне нужно будет избавиться от ардуино, нужно будет поставить микроконтроллер попроще, который бы решал только нужные для вентилятора задачи. Но тогда код для ардуино на этом более простом МК не запустится, придётся писать новый код (на чём тогда?).
И как теперь быть с принтерами, на которых не было вайфая? В них вообще не было никакого микроконтроллера? Был только установленный на компьютере драйвер для принтера, все команды формировались на ПК, по проводу уже готовые пересылались в принтер и только исполнялись? То есть можно обойтись без микроконтроллера, если есть прямое подключение?
Виктор П.: Микроконтроллер (МК) это специализированная микросхема которая имеет вычислительное ядро и порты ввода вывода. Именно эта особенность отличает МК от процессоров, которые умеют только вычислять (относительно недавно процессоры научились управлять внешней памятью). arduino, raspberry Pi и lego Mindstorm это просто контроллеры (без приставки микро). Любой микроконтроллер требует обвязку минимум кварц, а некоторые и внешнюю память. Arduino содержит 8-bit МК AVR (Atmel), raspberry Pi 32-bit МК ARM, Lego NXT так же ARM.
Современные микроконтроллеры (особенно на ядре ARM) могут выполнять весьма сложные задачи, но и цена у них не малая.
Платы с МК делаются для удобства использования, популярность Arduino определяется тремя факторами: цена, простая среда разработки доступная даже школьнику и куча готовой к использованию без паяльника периферии (шильды). Цены на платы с МК ARM уже на уровне плат с AVR но нет толковой среды разработки и с подключением того же WiFi будут сложности.
Совершенно верно Arduino это то с чего нужно начинать, даже я, человек работающий с МК уже больше 20 лет предпочитаю Arduino, потому как это просто и быстро.
Arduino (как и все подобные платы) предназначены для прототипирования (экспериментов)) или мелкосерийного (до 50 шт) производства. Для серийного производства нужно разрабатывать свою плату.
Предположим тебе нужно управлять вентилятором с компьютера для этого тебе уже понадобится МК подешевле (например Atmega 8) и программный USB (кури V-USB) само собой программу придется переписывать на СИ или Assembler? казалось бы это проблема, но чудо, она у тебя уже написана, достаточно скопировать скетч Arduino в AvrStudio, кое что поправить по мелочи (если используются экраны и графика мелочи могут быть серьезными, но это все равно мелочи) и программа готова.
С чего ты взял , что в принтерах нет контроллеров? Даже в самых примитивных струйниках за 30 долларов стоит специальный процессор управления печатью, а в сложных цветных лазерниках стоят несколько процессоров производительность которых сравнима с процессорами смартфонов
Все намного проще, без лишних слов о различиях:
чтоб управлять какой либо нагрузкой в робототехнике, для нее требуется команда на подачу соответствующего напряжения, или другого сигнала. То, каким способом Вы дадите такую команду во многом зависит от цены вопроса.
Вариантов довольно много, в управляемых снарядах всем рулит химическая реакция, т.к. электроника там не справится с физикой. Ищите способ подачи Hig Level signal, который потянет нагрузку, она может быть и предварительной для коммутации внешнего питания на конечную нагрузку, с минимальными затратами на логические цепи, можно и без них, если у вас всего до пол десятка запусков. и простые процедуры On/Off и это тоже можно считать драйвером. Драйвера есть программные, есть аппаратные к примеру в аудио аппаратуре ВЧ/НЧ драйвера и т.п. Все зависит от того в какой теме Вы рулите.
В робототехнике можно применять АЦП построенное на PLC контролерах, так же можно применять IC драйвера с потоковым управлением сигналами двоичного кода...
Короче учим матчасть ;)
Драйвер это программа. Драйвер это специальная программа.
В операционной системе есть понятие прерывание, это когда сигнал поступивший на порт ввода/вывода (провод воткнутый в комп) прерывает нормальный вычислительный процесс и требует и получает немедленную приоритетную обработку. Драйвер это программа умеющая вызывать и/или обрабатывать прерывания.
Драйвер плотно работает с системой, фактически часть системы. Система написана на C, для удобства пользования системными вызовами драйверы обычно также пишут на С. Возможно писать драйверы на языках высокого уровня при наличии в языке библиотек биндингов необходимых системных вызовов, что на практике редкость.