Arduino как управлять землей

Arduino.ru

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

На суд общественности.

Решил написать небольшой материал для любителей GPS модулей и программирование микроконтроллеров. Так сказать проба пера, и определиться интересно или много букв не по существу?
Вводная часть.

В интернете очень много проектов с использованием модуля и антенны определения координат по данным Спу́тниковая систе́ма навига́ции (англ. Global Navigation Satellite System (GNSS)) или ГНСС глобальная навигационная спутниковая система. Слово GPS вошла в наш в обиход как слово Xerox название фирмы Зирокс или ксерокс, и производное отксерить. GPS Global Positioning System (Глобальная Позиционная Система) это конкретное названия системы, управляемой AFSC (Космическое командование ВВС США) Но использования GPS как синоним GNSS допускается. Да и Бог с ними.
Для тех, кто и сам с сусам:

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

Далее радостно формируют список и отправляют на сервис, который может на растровой подложки, или цифровой модели местности далее (ЦММ) отобразить координаты. Радостно отправляют СМС данные координат, или делают часы точного времени. Особо упорные, все же заставляют этот «черный ящик» перемещать свои девайсы в нужную точку.

В чем же проблема? Почему на гироскопах, акселерометрах, магнитометрах так много интересных проектов, а на Модулях GPS (здесь и далее я буду называть по «бытовому» ибо это понятие закрепилось и используется повсеместно) так мало.
Для начала совсем немного теории работы. Более подробно и умно можно почитать на просторах Рунета и Интернета.

По небесной тверди на высоте 19000км-24000км по различным орбитам с разным наклонением рыскают спутники. (высота геостационарной орбиты примерно 35800км, высота полета МКС примерно 400км) И если не вдаваться в детали они нам передают сигналы точного времени специальную информацию и альманах с эфемеридами. Альманах это такая книжка, в которой написаны данные эфемерид, а эфемериды это табличка координат спутников по времени, причем примерные(расчетные) Вот летают они вокруг земли с дикой скоростью и «пикают нам» Это все, что надо знать. Да нам они передают в одностороннем порядке, мы пассивно слушаем их Пик-Пик-Пик. Между собой и базовыми станциями корректировки они общаться, уточняют точное время свои координаты, проходят техническое обслуживание, но нам как конечному потребителю «радиослушателю» этого знать не обязательно.

Хотел кратко, получилось как всегда.

Содержание предполагаемых следующих тем:

Принцип определение координат в волшебной коробочки.
Получаемые данные.
NMEA
Форма земли и математическое ее представления.
Геоцентрическая система координат.
Упрощенное математическое представление о преобразования систем координат.
Проблема больших цЫфер
Задача о «прямой» между двумя точками на эллипсоиде вращения. Локсодрома и ортодро́ма.
От шарика до плоской карты.
Примеры решения задач перехода от работы в сферических координат в декартову на проекции эллипсоид вращения
Рассмотрим стандартную библиотеку TinyGPS и TroykaGPS
Решение прикладных задач упрошенным методом.
Оценка точности упрощенных методов.

Источник

Arduino.ru

Вопрос новичка — ардуино и земля

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

Начал заниматься адруино буквально пару дней назад. Вот после прочтения статей в Сети и подключения одного светодиода назрел вопрос о заземлении — как правильно? Т.е. допустим, хочу подключить 2 светодиода. Как быть с заземлением? Я могу в землю воткнуть провод и на него припаять выходы светодиодов? Т.е. анод светодиода подключен к резистору, который воткнут в пин адруины, а катод каждого светодиода подключен к проводу, который воткнут в землю? Это правильно? Или нужно по-другому?

Не пинайте сильно, я только учусь :)

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

Начал заниматься адруино буквально пару дней назад. Вот после прочтения статей в Сети и подключения одного светодиода назрел вопрос о заземлении — как правильно? Т.е. допустим, хочу подключить 2 светодиода. Как быть с заземлением? Я могу в землю воткнуть провод и на него припаять выходы светодиодов? Т.е. анод светодиода подключен к резистору, который воткнут в пин адруины, а катод каждого светодиода подключен к проводу, который воткнут в землю? Это правильно? Или нужно по-другому?

Не пинайте сильно, я только учусь :)

не путать тёплое с мягким: «заземление», «шина питания».

отвлекитесь от дуино и нарисуйте схему электрического фонарика с двумя лампочками и двумя кнопками — пусть прояснится в мосгу.

Источник

Arduino как управлять землей

На создание этой устройства меня сподвигла мысль собрать простую и достаточно удобную систему управления своей монтировкой DS EQ-3 с помощью микроконтроллера. Хотелось сделать её такой, чтобы можно было с комфортом визуалить и заниматься планетным астрофото. Поскольку пайкой заниматься не хотелось, взгляд упал на популярную аппаратную платформу Ардуино. Из её модулей и было решено собирать электрическую часть. Все электронные блоки и моторы были приобретены мною на интернет-портале eBay.
Что касается пульта управления, то была идея сделать его простым в управлении, чтобы не делать «распальцовку» по кнопкам пульта, как на кодовом замке подъезда, а чтобы было пропорциональное управление джойстиком, то есть, чем дальше наклоняем ручку джойстика от центрального положения, тем выше скорость поворота монтировки на соответствующей оси. Что собственно и было реализовано при написании скетча.

В итоге, получилась простая система практически ручного управления, безо всяких го-то и прочего. Прошу заметить, что я не специалист в области программирования, и с написанием скетча для Ардуино, а также сделать некоторые расчёты и детали, мне помогли другие люди, за что им огромное СПАСИБО, особенно пользователю с ником D_a_r_k_man.
Возможно в будущем добавится ещё что-то, что позволит автоматизировать какие-либо процессы, но пока имеем то, что имеем.

Система выполняет следующие функции:

  • Управление обоими осями с помощью шаговых двигателей;
  • Управление скоростью поворота с помощью джойстика;
  • Режим ведения с астрономической скоростью для одной (полярной) оси.

Принципиальная схема системы:

Описание работы программы:
Тут всё просто. После подачи питания монтировка переходит в режим дистанционного управления по командам от джойстика. Направление движения, а также скорость, задаётся ручкой джойстика. Возможно движение трубы телескопа одновременно по двум осям, правда скорость в этом случае ниже, чем поочерёдное движение по осям.
Для того, чтобы включить режим ведения со звёздной скоростью для наблюдения за выбранным объектом (по оси RA), нужно нажать на кнопку джойстика. При этом загорается красный светодиод индикации на пульте. Во время работы этого режима повороты трубы, с помощью джойстика, отключаются. Чтобы вернуться к первоначальному управлению поворотами трубы телескопа нужно повторно нажать кнопку джойстика.

Итак, из чего всё состоит:
Сердце всей системы – это, конечно же, плата Arduino UNO R3, собранная на микропроцессоре ATmega328P CH340.
Сигналы управления с неё поступают на два драйвера EasyDriver V44, собранные на микросхемах А3967, которые подходят к любым биполярным шаговым двигателям на ток до 750 мА.
По умолчанию (без установки перемычек) драйверы EasyDriver уже работают в микрошаговом режиме 1/8, который позволяет получать на моторе, делающего 200 полных шагов/оборот, 1600 микрошагов/оборот. Этот режим и был использован в работе устройства. Напряжение питания (от 6 до 30 В и ток 2А; в моём случае 28 В) на драйвера подаётся с внешнего блока питания по кабелю. Вообще, чем выше напряжение, тем выше крутящий момент на высоких скоростях.
Транзисторы, и особенно микросхемы драйверов во время работы существенно нагреваются – поэтому, в обязательном порядке, пришлось придумать их охлаждение. На корпуса этих радиоэлементов были приклеены радиаторы, а напротив самих плат драйверов, в крышку корпуса, врезан компьютерный кулер охлаждения.
Блок управления собран в корпусе из отжившего свой век компьютерного CD-рома. В нём размещены платы микроконтроллера, драйверов, стабилизатор на 12 вольт для питания кулера охлаждения (на фото его ещё нет), а также элементы коммутации.

Все разъёмы управления и питания, а также индикация, вынесены на фронтальную панель корпуса — это 2 розетки под вилки RJ-11 4P-4C для подключения моторов и одна розетка под вилку RJ-45 8P-8C для подключения пульта ДУ. Здесь же находится 5мм гнездо для подачи напряжения питания (28 вольт) на драйверы ШД, кнопка включения/выключения, светодиод индикации включения, а также выходы платы микроконтроллера Ардуино — гнездо подачи напряжения питания (5 вольт) и розетка mini USB для подключения к ПК. Если Ардуино подключено к ПК через mini USB, то 5В через отдельное гнездо можно не подавать.
Блок управления с пультом соединяется кабелем Path Сord с разъёмами RJ-45 на концах.
Сигналы управления моторами передаются через кабели RJ-11 используемые в телефонной связи. Плюс этих кабелей, кроме того, что они оснащены удобными миниатюрными разъёмами в том, что они совершенно не замерзают на морозе и остаются гибкими — не «дубеют».

Проводной пульт управления собран в корпусе вышедшего из строя радиотелефона Siemens. Отверстия оставшиеся от удалённых кнопок, дисплея и прочих внутренностей были заполнены клеем «холодная сварка». После того, как клей высох, корпус шлифовался и красился.

Внутри корпуса пульта деталей разместилось совсем немного – плата с джойстиком, светодиод индикации режима «ведения со звёздной скоростью» и разъём RJ-45 для подключения кабеля. Ручка джойстика вынесена наружу корпуса через удачно расположенное отверстие вызывного динамика телефона — нужно было только удалить его решётку.
Режим «Стоп» включается в «нейтральном», среднем, положении ручки джойстика, т.е., не трогаем джойстик – телескоп не движется.
Слежение со звёздной скоростью (горит красный светодиод на пульте), включается при нажатии на среднюю кнопку джойстика.

Источник

Arduino.ru

Пять вопросов новичка. Проблема с общей землей БП и arduino

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

Доброго времени суток.

Не так давно заинтересовался темой С++ и программированием МК (остановился на arduino mega). Покурив мануалы и потыркавшись самостоятельно вроде как сделал готовый проект (полив растений с рядом датчиком и исполняемых устройств — если будет интересно кому — выложу отдельно).

Однако, как и у любого новичка, у меня появилось несколько вопросов, на которые, к сожалению, я не смог найти адекватного ответа. So, прошу помощи:

1. Программирование. Что за тип данных «char»? (используется для получения времени из rtc с библиотекой iarduino_RTC). Почему обязательно надо зведочку и const, чтобы взять символ по индексу? Не знаю насколько это костыли, но мне удалось добиться работы следующего кода:

Время нужно в int для определения день\ночь. Прошу оценки насколько это эффективно, замудрено или же наоборот глупо :D

2. Схемотехника. Правильно ли объединять землю с МК и землю с БП постоянного тока (всегда да, или всегда нет, или есть ньюансы), правильно ли я понимаю что это единственный способ заставить работать mosfet с управлением от arduino? Можно ли объединять земли с переменного тока (БП и(или) розетка 220) и землю с МК?

3. Схемотехника. Имеем led драйвер (45в max\0,8А), лампу к нему светодиодную(9 * 3в\0,8 А), транзистор mosfet IRF3205. Соотвественно — хочется управлять нагрузкой. При объединении земли с драйвера и МК датчик температуры tmp36 начинает выдавать просто невероятную ахинею, значения скачут от -15 до +90 градусов. Без подключения драйвера значения стабильны +16 градусов, никаких скачков. В чем причина и как от этого уйти? Поможет ли установка диода между землями в направлении МК -> БП (БП -> МК)?

4. Программирование. Скорее всего нет, но я обязан спросить. Есть ли способ заставить МК ожидать, например, нажатия кнопки (логическую единицу на digital) в любом месте кода, вне зависимости от текущей позиции в программе? Или же обязательно выполнение программы должно дойти до строчки, где проверяется наличие логической единицы на определенном пине, а дальше уже if и так далее?

5. Схемотехника. Когда используется транзистор (mosfet) для управления, а когда реле? По сути их действие одинаковое. Чем черевато использовать mosfet для управления переменным током? Если да, то получается что мне нужно объединить землю с МК и ноль с розетки, или нет? Можно ли использовать для отпирания транзистора переменный ток?

Я прошу прощения за, вероятно, глупые вопросы, но самостоятельно в них разобраться так и не смог. Заранее спасибо за любую помощь.

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

4. Программирование. Скорее всего нет, но я обязан спросить. Есть ли способ заставить МК ожидать, например, нажатия кнопки (логическую единицу на digital) в любом месте кода, вне зависимости от текущей позиции в программе? Или же обязательно выполнение программы должно дойти до строчки, где проверяется наличие логической единицы на определенном пине, а дальше уже if и так далее?

С этим справляются прерывания(почти в любом учстаке кода может «возникнуть» прерывание(внешнее или внутренее) которое надо обработать).Но есть ньюансы — как правило : Interrupt Service Routine должен как можно быстрее завершиться (например в теле ISR выставить flag что кнопа х была нажата ,т.е. никаких printf внутри обработчика) а потом в основном цикле (loop) проверять состояние флага и обрабатывать — предпринимать какие то действия.

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

4. Программирование. Скорее всего нет, но я обязан спросить. Есть ли способ заставить МК ожидать, например, нажатия кнопки (логическую единицу на digital) в любом месте кода, вне зависимости от текущей позиции в программе? Или же обязательно выполнение программы должно дойти до строчки, где проверяется наличие логической единицы на определенном пине, а дальше уже if и так далее?

дополню предыдущий ответ. Кроме прерываний есть и другие решения. Конечно, «в любом месте кода» ожидать нажатия кнопки программа не может, нужно дойти до строчки, где считывается кнопка.

Однако не слишком сложно написать практически любкю программу так, чтобы строчка проверки кнопки вызывалась. скажем. 30-50 раз в секунду, что обеспечит реакцию программы на кнопки без заметных для человека задержек.

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

Отвечу, что смогу:

1. Для данного МК char это то же самое, что и byte. В представленном Вами огрызке идет указатель (прочитайте немного про си) на массив, содержащий символьное представление времени.

2. С блоком питания вопрос не понятен — БП чего и что Вы имеете в виду под словом «земля». Далее — с 220В шутки плохи — но если Вы здесь имеете в виду именно «землю», а не нейтраль, то это иногда применяется для защиты от помех. Но поскольку у нас в основном везде «глухозаземленная» нейтраль, выдающая себя за землю, лучше этого не делать. Если Вы имели в виду нейтраль, то делать этого нельзя категорически!

3. Ну тут понятно — помехи от ШИМа. Диод скорее всего не поможет, а вот дроссель с конденсатором — вполне.

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

Я хочу в копилку это собрать. Редкость, как алмаз неограненный!

1. Что за тип данных «char». Почему обязательно надо зведочку и const .

2. Правильно ли объединять землю с МК и землю с БП постоянного тока . Можно ли объединять земли с переменного тока (БП и(или) розетка 220) и землю с МК?

4. Есть ли способ заставить МК ожидать, например, нажатия кнопки (логическую единицу на digital) в любом месте кода, вне зависимости от текущей позиции в программе? Или же обязательно выполнение программы должно дойти до строчки, где проверяется наличие логической единицы на определенном пине, а дальше уже if и так далее?

5. Чем черевато использовать mosfet для управления переменным током? Можно ли использовать для отпирания транзистора переменный ток?

Я выкинул незначительную часть. Но п4 и п5 — это же просто волшебство! Нельзя портить такой материал ответами! Это же законченное произведение искусства, я бы сказал «арт-объект»!

Вот кто может дать ответ на вопрос «чем черевато (орфография автора). » так, что бы эмоциональная реакция на ответ была столь же красочной и многослойной, как сам вопрос?

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

mixail844, b707, благодарю, попробуем)

2. С блоком питания вопрос не понятен — БП чего и что Вы имеете в виду под словом «земля». Далее — с 220В шутки плохи — но если Вы здесь имеете в виду именно «землю», а не нейтраль, то это иногда применяется для защиты от помех. Но поскольку у нас в основном везде «глухозаземленная» нейтраль, выдающая себя за землю, лучше этого не делать. Если Вы имели в виду нейтраль, то делать этого нельзя категорически!

3. Ну тут понятно — помехи от ШИМа. Диод скорее всего не поможет, а вот дроссель с конденсатором — вполне.

БП — любой понижающий постоянного тока. Допустим БП 12в постоянка для питания насоса. Я немного уточню свой вопрос. Нужно ли соединять Grd МК и минус БП постоянного\переменного тока?

Имел в виду именно нейтраль, прочитал ответ и сам понял глупость вопроса.

Конденсатор с дроселем — куда впаивать? Кондер, я так понимаю, между плюсом и минусом (допустим 55в\1к мкФ), а дросель?

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

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

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

БП — любой понижающий постоянного тока. Допустим БП 12в постоянка для питания насоса. Я немного уточню свой вопрос. Нужно ли соединять Grd МК и минус БП постоянного\переменного тока?

Имел в виду именно нейтраль, прочитал ответ и сам понял глупость вопроса.

Конденсатор с дроселем — куда впаивать? Кондер, я так понимаю, между плюсом и минусом (допустим 55в\1к мкФ), а дросель?

БП, если есть возможность, то лучше не соединять. Особенно если на нем электромотор или соленоид. Соединяют, обычно из экономии, чтобы питать сразу и МК. А вот тут мы и попадаем в раздел помех. Дроссель — последовательно, конденсатор парралельно, а вместе они настроены на частоту помехи. Почитайте про борьбу с помехами в электронике — детектив!

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

5. Когда надо часто (по меркам реле) переключать. Реле на частотах выше 100 Гц быстро выходит из строя, и от него вы не добьётесь ШИМ регулировки (оно тупо не будет успевать за фреймрейтом, который видит глаз, соответственно даже если у вас будет модуляция — то заметная на глаз, что люто раздражает).

Управление транзистором от переменного тока не чревато ничем. Кроме переполюсовки. Которая будет случаться на половине частоты тока, то есть воткнёте в розетку — и 25 раз в сек будет переполюсовка. Нормальные люди делают MOSFET, который замыкает плечи + и — диодного моста, а плечи

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

Объединять исток MOSFET с минусом питания (gnd) нельзя. Не потому что если вы лапнитесь пальцем за gnd пальцем, то вас токнет ёбом, а потому что этим способом невозможно включать более одного транзистора. Захотите два — и в первом будет происходить КЗ при включении второго, во втором при вкл. первого. Лечится изолированным источником питания, на каждый транзистор свой источник. Гугланите «изолированный преобразователь», если так хочется регулировать транзистором, алсо есть маленькие китайские блоки, у них габариты примерно как большое реле, как раз с выводами для установки в плату.

4. if(flag) doShit(); — сделать если true, не делать если false и топать дальше.

while(!flag)<>; doShit(); — ждать пока не будет true, потом сделать и дальше.

3. Не надо развязывать земли диодами. Вот не надо и всё. Забудьте что у вас провод между силовой землёй и gnd Arduino. Нету его. Не. Ту. Если подключен — откусите кусачками. А потом купите такую четырёхногую микруху с надписью PC817, или что-то там 817, она дешёвая. Называется она «оптопара». Не должно быть связи по земле, это дурная привычка. Долго объяснять.

Помехи по питанию, если они остаются, лечатся встречно-параллельным диодом, фильтром низких частот (индуктивный, всмысле массивный дроссель), ёмким (всмысле сотни микрофарад) конденсатором — это глушит низкочастотные помехи, маленьким керамическим конденсатором (0.1 мкФ) — это глушит наносекундные помехи. Помехи по провалу питания лечатся ёмким конденсатором, который уже как по вашей задумке, отрезается от остальной схемы диодом Шоттки (чтобы остальная схема не жрала конденсатор). Алсо косвенно ответ на 2.

2. Объединять 220 и общий (gnd, истоки транзисторов) — как написано в 5, по ПОСТОЯННОМУ току, всмысле плюс 220, минус 220, через диодный мост, с ИЗОЛИРОВАННЫМ преобразователем, от которого это чудо питается. Управление оптопарой. Просто соединять Gnd и один из проводов розетки нельзя, будет переполюсовка f/2 раз в сек, будет КЗ при включении любых соседних не изолированных гальванически каналов.

1. char это подписанный (имеющий знак) byte, размер byte в восьмибитках — 8 бит, т. е. 2^8. Итого 256, соответсвенно byte — от 0 до 255, char от -128 до +127, ноль это положительное (не имеющее минуса) число.

* — оператор указания. То есть присваивание в *var=x; — то же самое что сказать «новый адрес var — x». Ежжи, x не должно вылезать за адресное пространство, иначе будет ошибка доступа к памяти.

& — оператор разыменования. То есть присваивание в &var=x; — то же самое что сказать «то что находится по адресу var, будет иметь значение x». Ясен барабан что var не должно указывать в стек и кучу, не должно быть совместного доступа к находящемуся в var адресе, иначе будет порча информации в памяти.

Программазм &, * — это красноглазинье, секта и более глубинно — меринье пиписьками «посмотрите я умный, я в кде пропатчил линух». Есть мастодонты. Но общаться с ними не советую, лютое ЧСВ. Есть вменяемые люди, типа wdrakula, ЕвгенийП — но если вы допустите оплошность, сказав что-нибудь тупое, поднимут на смех. Мне эта сакральная магия недоступна, я и не суюсь. Не, всмысле я пользуюсь ссылками и указателями в меру своего понимания, но чисто на уровне домохозяйки. Я знаю что с * — адрес, & — вытащить из адреса (разыменование), мне достаточно.

Источник

Adblock
detector