18 заметок с тегом

Electronic

«Калибровка» термодатчиков

9 мая 2016, 13:55

Для основной и дополнительной миссий в нашем спутнике CanSat будет использоваться несколько термодатчиков. А именно:

  1. DS18b20 — находится внутри спутника, входит в базовый набор и обязательную миссию;
  2. DS18b20 — будет находится снаружи спутника, входит в дополнительную миссию;
  3. BMP085 — термодатчик в составе датчика давления, будет находится внутри спутника, входит в дополнительную миссию.


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

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

Спутник с подключенными термодатчиками, а также ртутный термометр были помещены в «термокамеру», туда же поместили вентилятор для усиления конвекции:

Для понижения температуры в «термокамеру» поместили замороженные овощи. После того как температура опустилась ниже 16-ти градусов по Цельсию, овощи убрали, дождались стабилизации температуры. Затем начали постепенное нагревание с помощью лампы накаливания, яркость которой регулируется реостатом.
Спутник передавал данные по радиоканалу, прием велся на компьютере через терминал. Данные с ртутного термометра снимали вручную. Результаты измерений:

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

Тестирование GPS модуля.

26 января 2016, 17:53

Сегодня тестировали работу GPS модуля ( Ublox neo 6M ). Он будет использован для определения местоположения спутника после его приземления. Координаты будут передаваться при помощи GSM модуля.
Вот так выглядит сам GPS приемник:

Питается модуль от 3,3 В, логические уровни у него тоже 3,3В. На плате, которую мы купили смонтирован сам модуль, память для сохранения настроек, стабилизатор питания и конвертер логических уровней. Т. о. плату можно подключить непосредственно к МК. Для тестов мы подключили модуль к компьютеру через USB2UART преобразователь.

С сайта производителя была скачана программа, которая отображает информацию, принимаемую с GPS приемника.

Информация с модуля передается в виде строк по протоколу NMEA:

Вся информация нам не нужна, достаточно только строки GPGGA
GGA — GPS Данные о местоположении
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
$GPGGA, hhmmss.ss, 1111.11, a, yyyyy.yy, a, x, xx, x.x, xxx, M, x.x, M, x.x, xxxx*hh

  1. Гринвичское время на момент определения местоположения.
  2. Географическая широта местоположения.
  3. Север/Юг (N/S).
  4. Географическая долгота местоположения.
  5. Запад/Восток (E/W).
  6. Индикатор качества GPS сигнала:
    0 = Определение местоположения не возможно или не верно;
    1 = GPS режим обычной точности, возможно определение местоположения;
    2 = Дифференциальный GPS режим, точность обычная, возможно определение местоположения;
    3 = GPS режим прецизионной точности, возможно определение местоположения.
  7. Количество используемых спутников (00-12, может отличаться от числа видимых).
  8. Фактор Ухудшения Точности Плановых Координат (HDOP).
  9. Высота антенны приёмника над/ниже уровня моря.
  10. Единица измерения высоты расположения антенны, метры.
  11. Геоидальное различие — различие между земным эллипсоидом WGS-84 и уровнем моря(геоидом), ”-” = уровень моря ниже эллипсоида.
  12. Единица измерения различия, метры.
  13. Возраст Дифференциальных данных GPS — Время в секундах с момента последнего SC104 типа 1 или 9 обновления, заполнено нулями, если дифференциальный режим не используется.
  14. Индификатор станции, передающей дифференциальные поправки, ID, 0000-1023.
  15. Контрольная сумма строки.
    Пример сообщения:
    $GPGGA,004241.47,5532.8492,N,03729.0987,E,1,04,2.0 ,-0015,M,,,,*31

С помощью программы мы настроили, чтобы модуль выдавал только строки GPGGA.

Теперь необходимо подключить GPS модуль к микроконтроллеру и научиться принимать и обрабатывать информацию на нем.

Схема питания спутника.

14 января 2016, 15:44

В стандартном конструкторе питание спутника организовано через батарейку 9В Крона.
Поскольку микроконтроллер и датчики (коме радиомодуля — 3,3B) потребляют 5В, то необходим преобразователь.
В стандартном конструкторе использован линейный преобразователь LM7805.

На вход ему подается напряжение от 7 до 20В, на выходе получаем стабилизированные 5В. Поскольку стабилизатор линейный, то входной и выходной токи равны, при этом «лишняя», неиспользуемая энергия выделяется в виде тепла. Не трудно подсчитать, что если из 9В кроны 4В идет на обогрев, то в лучшем случае КПД такого устройства будет примерно 55%, это минус. Плюс в том что такой предобразователь позволяет пропускать токи до 1.5 Ампер. Но в нашем спутнике такие токи не ожидаются, максимум если насобирается 200-250 мА.

Другой вариант — использоватье повышающий ступенчатый преобразователь напряжения, например MAX756. На вход принимает напряжение от 0.7В до напряжения выхода (т. е. 3.3 или 5), на выходе соответственно 3.3В или 5В (можно выбрать). Т. е., можно поставить два пальчиковых аккумулятора по 1.2 — 1.5 В, соединить их последовательно и повысить напряжениедо 5В. Производитель заявляет КПД 87% при токе 200мА — это плюс, так же есть встроенная функция контроля заряда батареи; минус — максимальный ток всего 300мА. Но для нашего случая такого тока вполне себе достаточно.

UPD. Выяснилось, что GSM модуль, который мы собираемся использовать Sim800L, и который в покое потребляет около 0.7мА, может потреблять в активном режиме, например, отправка СМС, до 2 А. Надо думать теперь, что с этим делать. Либо надо найти аналигичный ступенчатый преобразователь, но мощнее, либо поставить третий аккумулятор последовательно и напрямую запитать GSM модуль (ему надо от 3.4В до 4.4В).

Испытания датчиков для CanSat 2016

11 января 2016, 23:33

Наша команда ТОК. Продолжает подготовку к чемпионату CanSat 2016. Мы участвуем в регулярной лиге чемпионата, поэтому обязательно должны использовать конструктор, который предоставляют организаторы.

Поскольку конструктора у нас пока нет, а есть только на половину работающая( об этом дальше) плата с датчиками, было решено для экспериментов использовать имеющийся микроконтроллер Atmega8:

Из датчиков у нас есть

  • цифровой термосенсор DS18B20 (интерфейс 1-wire)
  • еще один термосенсор DS18B20 в защищенном исполнении для наружного применения
  • аналоговый датчик давления MPX5100 (на выходе измеряется напряжение)
  • и цифровой датчик давления, со встроенным датчиком температуры BMP085 (интерфейс I2C)

Идея такая: один термосенсор находится внутри корпуса спутника и используется для основной миссии проекта — измерение зависимости температуры от высоты, второй термосенсор находится снаружи спутника и измеряет температуру воздуха там, затем сравниваем результаты. Точность измерения датчиков, заявленная производителем — 0,0625 С. Аналоговый датчик давления находится внутри спутника. Оба датчика (MPX5100 и DS18B20) смонтированы на одной плате.

Для вывода информации использовали небольшой ЖК дисплей (16х2), который тоже подключили к микроконтроллеру.
Вот схема соединения элементов:

Собрано все было на макетке, так что выглядит не очень презентабельно.

Показания датчиков t1 — «внешний термометр», t2 — «внутренний», t3 — встроенный в BMP085 (он меряет температуру с точностью до десятых градуса). Как видно, показания первого и третьего термометра примерно похожи, а вот второй (который с платы) как-то выбивается из общей массы.

Аналогично с аналоговым датчиком давления, как-то его показания не сходятся с цифровым, откалиброванным на заводе. По показаниям датчика BMP085 с помощью барометрической формулы была рассчитана высота «над уровнем моря». Как видно на первом этаже высота примерно 185 метров, на третьем — 192 метра, что и ожидалось увидеть (разница примерно 7 метров).

Все исходные тексты программы и проект в CodeVisionAVR здесь .

Первые испытания парашюта

8 января 2016, 16:19

3-го января проводили испытания парашюта. Запускали с общего балкона высотного дома с 17-го этажа.

Присутствовали: я, Арсений, Федор, Александр Николаевич Зайцев, Дмитрий Крутов.

Полет «спутника» длился примерно 22 секунды, что соответствует средней скорости спуска примерно 6 м/с. Так как нам надо 5 м/с, то стоит либо увеличить площадь парашюта, либо уменьшить площадь центрального отверстия.

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

Строим робота

7 мая 2013, 14:40

Мы строим робота.

Идея робота такая:

  • Робот должен быть более-менее автономным;
  • Необходима возможность дистанционного управления роботом (в идеале напрямую с телефона);
  • Робот должен самостоятельно объезжать препятствия;
  • Хочется иметь на борту видеокамеру, которая тоже должна дистанционно управляться и передавать изображение в режиме реального времени (хотя, опцию записи видео тоже можно предусмотреть);
  • Изображение желательно получать также на телефон (но это, наверное, мечты).

Работы по созданию робота мы разделили на следующие этапы:

  1. Сборка движущего механизма.
  2. Установка «доп. оборудования» (сенсоры и актуаторы).
  3. Программирование микроконтроллера
  4. Программирование внешних устройств (телефона или компьютера) для управления роботом и получения и обработки информации, поступающей с сенсоров робота.

В процессе сборки и совершенствования робота пункты 2 и 3 будут выполнятся в цикле.
В принципе, можно купить уже готового робота или готовый комплект для сборки и программировать уже его. Но, во-первых, это не так интересно. Процесс проектирования и создания робота своими руками сам по себе затягивает. Во-вторых, при самостоятельном проектировании робота можно предусмотреть какие-то конструктивные особенности, чтобы робот удовлетворял потребностям его создателя. Правда, с точки зрения затрат, этот способ может выйти дороже.

Мы выбрали средний путь — узловая сборка, приобрели узлы и из них сделали робота. Решили делать гусеничного, поскольку проще в управлении, ну и «внедорожные» качества имеются. Для сборки использовали следующие компоненты:

  1. Редукторная коробка для двух моторов, и сами моторы. Tamiya Twin Motor Gearbox (TAM70097).
  2. Платформа для крепления и крепеж. — Tamiya Universal Plate Set (TAM70157).
  3. Гусеницы и колеса с осями. — Tamiya Track and Wheel Set (TAM70100)
  4. Металлический конструктор.

Приступаем к сборке. Все узлы комплектуются очень подробными инструкция по сборке, написанные мелким японским шрифтом с картинками.

Редукторную коробку можно собрать с разным передаточным числом: 58:1 или 203:1. Мы собрали 203:1, чтобы нагрузка на моторы была меньше, да и с учетом груза, который мы хотим запихать в тележку, тяга у шасси должна быть побольше. Коробка состоит из двух симметричных блоков шестеренок.

После сборки коробки в нее вставляются моторчики. К моторам надо не забыть припаять провода.

Блок устанавливается на платформу. После этого к валам, идущим от редуктора, крепятся ведущие колеса, остальные колеса крепятся на платформу.

После сборки подсоединили к проводам для проверки батарейку, использовали обычную крону на 9В — ездит.
На этом сборка шасси окончена, дальше будем собирать управляющие конструкции.

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

IMG_0321.jpg

Зоотроп (Zoetrope)

5 мая 2013, 9:34

В этом проекте мы будет делать «движущиеся картинки». Они будут двигаться вперед и назад с помощью Arduino, к которому мы подключим электромотор, H-bridge и ... неподвижные картинки.

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

Конструкция его довольно простая. Это цилиндр, в верхней части цилинда делаются небольшие прямоугольные отвестия-прорези. В нижней части цилиндра (там где прорезей нет) на внутренней его стороне закрепляется полоска с картинками, которые будут «двигаться». Надо смотреть на картинки через прорези. Когда цилиндр начинает вращаться картинки начинают «оживать». Выглядит вот так:

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

В нашем проекте «Вертушка с моторчиком» мотор вращался только в одном направлении. Если поменять полярность питания, подаваемого на двигатель, то он начнет вращаться в противоположную сторону. Не очень практично каждый раз, когда нам требутся поменять направление вращения двигателя, переключать проводки двигателя. Для автоматизации этой задачи придумали специальный компонент, который называется H-bridge. H-bridge — это интегральная микросхема, схема, которая содержит множество элементов, плотно «упакованных» в  в один комнонент. С помощью интегральных микросхем можно составлять достаточно сложные схемы, состоящие из легко заменяемых компонентов. Например, H-bridge, который мы будем использовать в этом проекте, содержит внутри несколько транзисторов. Чтобы собрать его, может понадобится еще одна макетная плата.
Для доступа к «внутренностям» интегральной схемы используются пины (выходы), расположенные по ее бокам. Разные компоненты имеют разное количество выходов, и не все из них используются в конкретной схеме. Для удобства выходы интегральных схем нумеруются, нумерация выводов ведется против часовой стрелки, начиная от первой ножки, находящейся под ключом, который может иметь вид засечки или углубления.

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

Выходы 1 и 9 предназначены для включения и выключения двигателей, если их подключить к  выходам Arduino с ШИМ, то можно управлять скоростью вращения двигателей. Выходы 2 и 7, и 10 и 15 управляют направлением вращения двигателей, первого и второго соответственно (парами). Если на выход 2 подать HIGH, а на выход 7 LOW, то мотор будет вращаться в одну сторону, наоборот — в другую сторону. Если на эти выходы подать одинаковый сигнал (LOW или HIGH) то мотор вращаться не будет. То же и для второго двигателя. К выходам 3 и 6 подключается один мотор (напряжением на этих выходах управляют 2-й и 7-й), к выходам 10 и 15 — второй мотор. Выход 8 соединяют с положительным полюсом источника питания двигателей. Выход 16 — с положительным полюсом источника питания микросхемы (5В). Выходы 4, 5, 12, 13 подключаются на «землю», они же используются для теплоотвода от схемы (в нашем случае нагрев был небольшой, так как подлючили только один двигатель и не надолго, а вообще греется она хорошо, может понадобиться радиатор).

Схема, которую мы будет собирать с использованием H-Bridge L293D:

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

Собираем схему

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

const int motorenablepin=9;//пин для пуска мотора
const int directionpin1=3;//первый пин для направления мотора
const int directionpin2=2;//второй пин для направления мотора
const int onoffswitchpin=5;//пин с кнопкой для пуска/останова мотора
const int directionswitchpin=4;//пин с кнопкой для смены направления мотора
const int potens=A0;//пин с потенциометром
int potensVal=0;//значение с потенциометра

//переменные для отражения текущего состояния мотора
int onoffswitchSt=0;//текущее состояние кнопки для пуска мотора
int directionswitchSt=0;//текущее состояние кнопки для смены направления мотора
int previosonoffswitchst=0;//предыдущее состояние кнопки запуска мотора (надо для определения смены состояния кнопки
int motorenabled=0;//запущен ли в текущий момент мотор
int motorSp=0;//скорость мотора
int motordirection=1;//направление мотора
int prevdirectionswitchpinst=0;//предыдущее состояние кнопки смены направления 
//мотора (надо для определения смены состояния кнопки

void setup(){
  pinMode (motorenablepin,OUTPUT);//инициализация пинов
  pinMode (directionpin1, OUTPUT);
  pinMode (directionpin2,OUTPUT);
  pinMode (onoffswitchpin,INPUT);
  pinMode (directionswitchpin,INPUT);
  digitalWrite(motorenablepin,LOW);//выключаем мотор на всякий случай
}
void loop (){

  onoffswitchSt=digitalRead(onoffswitchpin);//текущее состояние кнопки запуска мотора
  delay(1);
  directionswitchSt=digitalRead(directionswitchpin );//текущее состояние кнопки смены направления мотора
  potensVal= analogRead(potens);//считываем значение потенциометра
  motorSp=map(potensVal,0,1023,0,254);//преобразуем значение в скорость мотора

  if (onoffswitchSt != previosonoffswitchst){//если состояние кнопки поменялось
    if(onoffswitchSt==HIGH){//и она нажата
      motorenabled=!motorenabled;//меняем состояние мотора на противоположное
    }
    previosonoffswitchst=!previosonoffswitchst;//меняем предыдущее состояние кнопки на противоположное
  }
  if (directionswitchSt != prevdirectionswitchpinst){//аналогично для направления вращения
    if(directionswitchSt==HIGH){
      motordirection=!motordirection;
    }
    prevdirectionswitchpinst=!prevdirectionswitchpinst;
  }
  //в зависимости от значения переменной, определяющей состояние мотора запускаем 
  //мотор с нужной скоростью или останавливаем его
  if(motorenabled==1){
    analogWrite(motorenablepin,motorSp);
  }
  else{
    digitalWrite(motorenablepin,LOW);
  }
  //в зависимости от значения переменной, определяющей направление вращения мотора устанавливаем направление
  if(motordirection==1){
    digitalWrite(directionpin1,HIGH);
    digitalWrite(directionpin2,LOW);
  }
  else{
    digitalWrite(directionpin1, LOW);
    digitalWrite(directionpin2,HIGH);
  }
}

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

Теперь осталось собрать непоследственно сам Зоотроп. Используем диск, который мы делали для предыдущего проекта. Приделаем к нему цилиндр с прорезями и картинки.

На этом видео можно попытаться увидеть как работает Зоотроп.

Ctrl + ↓ Ранее