Отличие драйвера от программы в робототехнике?
================================================

 Доброго дня!  

Вопрос дурацкий, но не могли бы вы пояснить на пальцах и конкретных примерах?  

Вот у меня когда-то был телефон 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 он просто будет крутится, для управления моторчиком с компьютера нужен микроконтроллер с соответствующей программой (не драйвером, учись использовать правильную терминологию) и программа управления на компьютер. Проблема в том, что МК с аппаратным USB стоят дорого, а программный USB штука для новичка сложная, но есть выход это платы Arduino (или их более дешевые и такие же надежные китайские братья). На платах [Arduino](http://arduino.ru/) есть конвертер USB-UART, т.е. при подключении такой платы к компьютеру у тебя будет обычный COM порт (вот тут тебе понадобится драйвер конвертера) с помощью которого можно обмениваться данными с МК.  
  
**Все драйвера пишутся на c++ либо ассемблере, так? Я пишу в visual studio на c#. Нельзя ли как-то обойтись без c++ и ассемблера для таких задач?**  

Не вижу проблемы в изучении С# и С++ ближайшие родственники. У Arduino свой язык Wiring похожий на С. Т.е. для компа пишешь на C# для Arduino на Wiring  
  
**И второй уровень, если я хочу подключить wi-fi (питание тут не интересует, из розетки или батареек), то мне в вентилятор необходимо добавить сам модуль wi-fi, но чтобы теперь организовать работоспособность, необходим процессор, который будет работать с вайфаем? То есть в вентиляторе нужна управляющая программа (прошивка? программа-сервер?), а так же драйверы по управлению приводами, которые необходимо писать для этого процессора? На компьютере же у нас останется только программа с вызовом (клиент?).**  

Да пожалуйста, [без проблем](http://dalpix.com/blog/connecting-your-arduino-wifi-esp-8266-module)   
  
**Родной язык c#, нельзя ли как-то обойтись одним этим языком? Так же наткнулся на описание microsoft robotics developer studio, но конкретных примеров не нашел. Такие вещи создавались как раз, чтобы упростить решение моей задачи? Так же есть некие arduino, это и есть та плата, на которой могут быть установлены двигатели и wi-fi модуль, через которую можно будет с компьютера управлять моторами используя какой-то их высокоуровневый язык без необходимости писать драйверы?**  

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

Microsoft Robotics Developer Studio это совсем не то что тебе нужно в данный момент. Там пишут программы для управления роботами стоимостью за миллион долларов.  
  

ЗЫ Если будут вопросы пиши на почту, постараюсь помочь 

 Все намного проще, без лишних слов о различиях:  

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

Вариантов довольно много, в управляемых снарядах всем рулит химическая реакция, т.к. электроника там не справится с физикой. Ищите способ подачи Hig Level signal, который потянет нагрузку, она может быть и предварительной для коммутации внешнего питания на конечную нагрузку, с минимальными затратами на логические цепи, можно и без них, если у вас всего до пол десятка запусков. и простые процедуры On/Off и это тоже можно считать драйвером. Драйвера есть программные, есть аппаратные к примеру в аудио аппаратуре ВЧ/НЧ драйвера и т.п. Все зависит от того в какой теме Вы рулите.   

В робототехнике можно применять АЦП построенное на PLC контролерах, так же можно применять IC драйвера с потоковым управлением сигналами двоичного кода...  

Короче учим матчасть ;) 

 Драйвер это программа. Драйвер это специальная программа.  

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

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