шаблоны сайт визитка joomla
Скачать шаблоны Joomla 3.5 бесплатно
Вы находитесь здесь:Главная»КУРСЫ»КУРСЫ ПОВЫШЕНИЯ КВАЛИФИКАЦИИ»Показать содержимое по тегу: Робототехника - Толтек Плюс - Учебный центр в г.Стерлитамак

Датчик линии QTR8

Пятница, 10 ноября 2017 10:27

В этой статье мы познакомим вас с деатчиков линии QTR8. Датчики производятся двух типов: цифровой (QTR8RC)  и аналаговый (QTR8A). Датчик линии QTR8 имеет имеет 8  инфракрасных светодиодов и  фототранзисторов в парах, расположенных с шагом 9,5 мм. Это позволяет с легкостью. определять черную линию. Пары светодиодов подключены последовательно для двукратного снижения тока потребления. А так же светодиоды могут отключаться для добавления чувствительности или для функции энергосбережения. Каждый сенсор имеет отдельный цифровой выход.

Описание датчика QTR8RC: 

Основное назначение модуля Pololu QTR-8RC - определение времени. На этом модуле равномерно располагаются с промежутком в 9,5 мм восемь сенсоров-пар содержащих источник инфракрасного сигнала (светодиод) и приемника сигнала (фототранзистор). В каждой цепи фототранзистора используется разряд конденсатора, который позволяет цифровой линии ввода-вывода микроконтроллера считывать аналоговый отражённый инфракрасный сигнал путем измерения времени разряда конденсатора. Более короткое время разряда конденсатора является показателем большего отражения..

Все выходы независимы, но светодиоды расположены в парах, чтобы уменьшить в двое текущее энергопотребление. По желанию МОП-транзистор может управлять светодиодами, для этого на него подается с контакта LEDON сигнал высокого уровня - МОП-транзистор включает светодиоды, когда сигнал низкого уровня - выключает светодиоды. Выключение светодиодов полезно для того, чтобы ограничить потребляемую мощность, когда датчики не находятся в использовании или для того, чтобы изменить эффективную яркость светодиодов посредством управления ШИМ.

Принципиальная схема модуля QTR8 представлена:

Принципиальная схема модуля QTR8RC 

Спецификация: 

  • Рабочее напряжение: 3,3 - 5 В
  • Потребляемый ток: 100 мА
  • Тип выходного сигнала: аналоговый
  • Оптимальное расстояние обнаружения: 3 мм
  • Максимальное расстояние обнаружения: 6 мм
  • Размер (без штыревых разъёмов): 75,0 х 12,7 х 3,2 мм
  • Вес (без штыревых разъёмов): 3,1 гр


Использование: 

У датчика Pololu QTR-8RC выходной сигнал измеряется цифровой линией ввода/вывода. Это обеспечивается за счёт измерения времени разряда конденсатора через фототранзистор. У такого измерения есть несколько преимуществ, особенно в сочетании со способностью модуля Pololu QTR-8RC выключать питание светодиодов:

  • Нет необходимости в аналого-цифровом преобразователе.
  • Улучшенная чувствительность, обусловленная делителем напряжения на аналоговом выходе.
  • Параллельное чтение данных нескольких датчиков доступно на большинстве микроконтроллеров.
  • Параллельное чтение данных позволяет оптимизировать использование опции включения питания светодиодов.

Последовательность шагов считывания данных с датчика:

  • 1. Включите ИК-светодиоды (опционально).
  • 2. Установите вывод микроконтроллера как выходной с высоким логическим уровнем.
  • 3. Конденсатору ёмкостью в 10 нФ требуется, по меньшей мере, 10 мкс для зарядки.
  • 4. Установите вывод как входной (высокое сопротивление).
  • 5. Измерьте время разрядки конденсатора, оно будет равно времени ожидания установки низкого уровня на выводе.
  • 6. Отключите ИК-светодиоды (опционально).

Эти этапы обычно могут выполняться параллельно на нескольких линиях ввода/вывода.

На поверхности с сильной отражательной способностью, время разряда может быть всего лишь несколько десятков микросекунд, со слабой отражательной способностью - до нескольких миллисекунд. Точное время зависит характеристик вашего микроконтроллера. Стандартное время считывания равно 1 мс (т.е. не измеряются слабые различия между поверхностями с плохой отражательной способностью), что позволяет работать на частоте до 1 кГц всех 8 датчиков. Если низкочастотной дискретизации достаточно, существенная экономия энергии может быть реализована путем выключения светодиодов. Например, если 100 Гц частота дискретизации приемлема, то светодиоды могут быть выключены до 90% времени, снижая среднее потребление тока от 100 мА до 10 мА.

Для работы с датчиком мы будем пользоваться библиотекой QTRSensors.h. Скачайте и установите. Необходимо помнить, что корневая папка с файлами библиотеки должна называться QTRSensors (тоже имя, что у заголовочного файла).

Основные методы библиотеки QTRSensors:

Конструктор объекта  QTRSensorsRC 

// создание объекта для цифрового датчика QTR8RC подключенного к цифровым входам от 2 до 9
QTRSensorsRC qtrrc((unsigned char[]) {2, 3, 4, 5, 6, 7, 8, 9}, 8);

 // создание объекта для цифрового датчика QTR8RC подключенного к цифровым входам от 3 до 10 и эммитером, подключенным кконтакту 2. TIMEOUT = 2500 мкс

QTRSensorsRC qtrrc((unsigned char[]) {3, 4, 5, 6, 7, 8, 9, 10}, 8, 2500, 2);

Получение показаний датчика

//считываем показания с датчика qtrrc и записываем в массив sensorValues

qtrrc.read(sensorValues);

//считываем калиброванные показания с датчика qtrrc и записываем в массив sensorValues

qtrrc.readCalibrated(sensorValues);

Калибровка датчика

//считать показания со всех датчиков 10 раз за 2500 т.е. на один шаг приходится 25 мс

qtrrc.calibrate();      

//возвращается максимаьное значение i-ого сенсора

qtrrc.calibratedMaximumOn[i];

//возвращается минимальное значение i-ого сенсора

qtrrc.calibratedMinimumOn[i];

Пример 1. Вывод показаний датчика на экран

Задание. Датчик линии QTR8RC подключен к контактам от 3 до 10. Эмиттер подключен ко 2. Каждую секунду считывайте показания датчика и выводите их на экран в одну строку.

 #include <QTRSensors.h>

// датчик будет возвращать значени от 0 (максимум отражения) до 2500 (минимум отражения).

#define NUM_SENSORS   8     // колчество сенсоров

#define TIMEOUT       2500  // ожидание  2500 микросекунд, по умолчанию значение в конструкторе равно 2000

#define EMITTER_PIN   2     // пин к которому подключён эмиттер

// сенсоры  от 0 до 7 подключены к контактам от 3 до 10

QTRSensorsRC qtrrc((unsigned char[]) {3, 4, 5, 6, 7, 8, 9, 10}, NUM_SENSORS, TIMEOUT, EMITTER_PIN);

unsigned int sensorValues[NUM_SENSORS];

void setup(){

  delay(500);

  Serial.begin(9600); // включить монитор порта

  delay(1000);

}

void loop(){

  // считать значение с сенсоров

  qtrrc.read(sensorValues);

  // вывести значения на экран от 0 до 2500, где 0 обозначает  максимальную отражатательную  способность,  а 2500 - минимальную

  for (unsigned char i = 0; i < NUM_SENSORS; i++) {

    Serial.print(sensorValues[i]);

    Serial.print('\t'); // составить в колонки

  }

  Serial.println();

   delay(250);

}

Пример 2. Вывод калиброванных показаний датчика на экран

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

Задание. Датчик линии QTR8RC подключен к контактам от 3 до 10. Эмиттер подключен ко 2. Откалибруйте датчик. Каждую секунду считывайте откалтиброванные показания датчика и выводите их на экран в одну строку.

#include <QTRSensors.h>

#define NUM_SENSORS   8

#define TIMEOUT       2500 

#define EMITTER_PIN   2

QTRSensorsRC qtrrc((unsigned char[]) {3, 4, 5, 6, 7, 8, 9, 10}, NUM_SENSORS, TIMEOUT, EMITTER_PIN);

unsigned int sensorValues[NUM_SENSORS];

void setup(){

  delay(500);

  pinMode(13, OUTPUT);

  digitalWrite(13, HIGH);    // включить светодиод на Arduino

//во время калибровки перемещайте датчик линии с самой яркой поверхности в самую темную. продалжайте эти действия во время всей калибровки датчика

  for (int i = 0; i < 400; i++)  // калибровка займёт около 10 секунд = 400*25мс=10000мс

  {

    qtrrc.calibrate();       // считать показания со всех датчиков 10 раз за 2500 т.е. на один шаг приходится 25 мс

  }

  digitalWrite(13, LOW);     // выключить светодиод на Arduino

  Serial.begin(9600);

//вывести минимальное значение каждого сенсора

  for (int i = 0; i < NUM_SENSORS; i++)

  {

    Serial.print(qtrrc.calibratedMinimumOn[i]);

    Serial.print(' ');

  }

  Serial.println();

  // вывести максимальное значение каждого сенсора

  for (int i = 0; i < NUM_SENSORS; i++)

  {

    Serial.print(qtrrc.calibratedMaximumOn[i]);

    Serial.print(' ');

  }

  Serial.println();

  Serial.println();

  delay(1000);

}

void loop(){

  qtrrc.readCalibrated(sensorValues);

  for (unsigned char i = 0; i < NUM_SENSORS; i++)

  {

    Serial.print(sensorValues[i]);

    Serial.print('\t');

  }

  Serial.println();

  delay(250);

}

Пример 3. Движение по черной линии. Нахождение центра масс

Движение по линии можно осуществить при помощи одного или двух цифровых датчиков, используя релейный регулятор. Но это не позволит достичь высоких результатов. Желательно для езды по линии надо иметь датчик, позволяющий не только эту линию определить, но и сказать, насколько мы отклонились от нее. Эту задачу поможет решить нам использование датчика линии QTR8RC. 

Пусть робот оснащен линейкой из n датчиков полосы (a1, a2,…, an), расположенных равномерно на расстояниях xi от некоторой начальной точки. 

линейка датчиков

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

формула центра масс

Величина xc и будет определять координаты центра определяемой линии относительно линейки. Характерно, что нас не интересуют характер величины сигналов ai. Все это оказывает влияние на работу регулятора (например, ПИД-регулятора), на вход которого и будет подаваться ошибка, равная разности центра датчика линии  и центра масс определяемой линии. Подав на вход регулятора вычисленное выше значение ошибки, мы получим управляющий сигнал u(t). Работать с ним уже будете в зависимости от конструкции вашего робота – притормаживая или ускоряя двигатели в зависимости от знака величины u(t) и ее абсолютного значения.

Составим программу нахождения центра масс определяемой линии относительно линейки. (использование метода центра масс при движение по линии будет рассматриваться ниже)

#include <QTRSensors.h>

#define NUM_SENSORS   8

#define TIMEOUT       2500 

#define EMITTER_PIN   2

double xc = 0;

double s = 0;

QTRSensorsRC qtrrc((unsigned char[]) {3, 4, 5, 6, 7, 8, 9, 10}, NUM_SENSORS, TIMEOUT, EMITTER_PIN);

unsigned int sensorValues[NUM_SENSORS];

void setup(){

  delay(500);

  pinMode(13, OUTPUT);

  digitalWrite(13, HIGH);    

  for (int i = 0; i < 400; i++){

    qtrrc.calibrate(); 

  }  

  digitalWrite(13, LOW);   

  Serial.begin(9600);

}

void loop(){

  qtrrc.readCalibrated(sensorValues);

    

  for (unsigned char i = 0; i < NUM_SENSORS; i++)  {

    xc = xc + (i+1)*sensorValues[i];

    s = s + sensorValues[i];

  }

  if (s!=0) {

     xc = xc/s;

     Serial.println(xc);

     xc = 0;

     s = 0;

   } 

}


В сезоне 2017/18 фестиваля «РобоФест Стерлитамак 2018» Региональный учебно-тренировочный сбор состоится 1 декабря 2017 года в городе Стерлитамак.


3D моделирование и 3D печать

Понедельник, 02 октября 2017 10:47

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


Количество мест на новый учебный год будет ограниченным


Краткие данные курсов повышения квалификации для педагогов

Категория слушателей: школьные учителя, руководители кружков робототехники;

Форма обучения: очно - заочная;

Режим обучения: четыре недели, очные занятия каждую пятницу с 10:00 до 17:00;

Объем учебной программы: 72 часа;

Документ об окончании обучения: удостоверение о повышении квалификации установленного образца;

Регистрация на курс: непрерывно на сайте;

Начало занятий: старт образовательных групп раз в два месяца, при условии формирования группы; ближайший запуск 1 декабря 2017 г.

Стоимость курса: 4 000 руб.

Программы курсов повышения квалификации для педагогов

  • Курс "Робототехника на базе Ардуино. Начинающие"
  • Курс "Робототехника на базе Ардуино. Продвинутые"
  •  Курс "Робототехника на базе Лего ЕВ3. Начинающие"
  •  Курс "Робототехника на базе Лего ЕВ3. Продвинутые"

Работа шагового двигателя и описание драйвера

Для практических задач с точным перемещением объекта обязательно требуется шаговый двигатель. Это мотор, который перемещает свой вал в зависимости от заданных шагов в программе контроллера.  Чаще всего их применяют в станках ЧПУ, робототехнике, манипуляторах, 3D-принтерах.

Мы же с вами рассмотрим конкретный двигатель Nema 17 с драйвером управления  L298N.

3302 0 Big

Спецификация Nema 17:

Тип мотора Биполярный шаговый двигатель
Число фаз 2
Рабочее напряжение 5-12 вольт
Частота 100 Гц
Частота под нагрузкой > 600 Гц
Крутящий момент > 42 мН*м
Угол шага

1,8'

Вес 28 г


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

Управляющие входы IN1,IN2,IN3,IN4 подключаются к любым дискретным выводам Arduino Uno. Выводы для подключения внешнего источника питания. Рекомендую запитывать отдельной батареей, так как нагрузка может возрастать до 1 А. Только не забудьте переставить джампер на внешнее питание двигателя. 

Схема сборки на Fritzing

Схему подключений я представлю в визуальной схеме.

L298N Stepper 1024x735

Описание кода программы

Для управления шаговыми моторами мы будем использовать библиотеку Stepper.h

#include <Stepper.h>

const int stepsPerRevolution = 200; // эта переменная показывает количество шагов для одного оборота мотора

// описываем пины мотора с 8 по 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
  // задаём скорость:
  myStepper.setSpeed(60);
  // описываем порт вывода информации
  Serial.begin(9600);
}

void loop() {
  // делаем 200 шагов в одну сторону
  Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);

  // делаем 200 шагов в другую сторону
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}


Наши робототехники - лучшие в Республике!

Понедельник, 20 февраля 2017 16:49

 18 февраля в Стерлитамаке произошло замечательное  событие - "Робофест"! Наши ребята смогли здесь "развернуться вовсю" и  заняли три первых и два вторых места.


РобоФест - Стерлитамак 2017

Понедельник, 21 ноября 2016 14:00

18 февраля 2017 г.  второй раз состоялся региональный робототехнический фестиваль "РобоФест-Стерлитамак 2017", организаторами которого выступили АНО ПДО Учебный Центр «Толтек Плюс» и Стерлитамакский филиал Башкирского Государственного Университета при поддержке Министерства образования Республики Башкортостан .


Наши роботы - лучшие в стране!

Понедельник, 25 июля 2016 17:05

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


25 июня состоялся III Общегородской пикник! Интересное и яркое мероприятие!


Страница 1 из 4

Новости о нас

КАЖДУЮ ПЯТНИЦУ - бесплатное занятие по 3D-моделированию с 16:40 до 18:10. Только для учащихся нашего технопарка! Подробнее
 Региональный отборочный фестиваль "Робофест-Стерлитамак 2018" состоится 25-26 января в г.... Подробнее
В сезоне 2017/18 фестиваля «РобоФест Стерлитамак 2018» Региональный учебно-тренировочный сбор... Подробнее
ВНИМАНИЕ учащимся! Объявляем конкурс рисунков на тему "Робот моей мечты", который пройдет по двум... Подробнее
В нашем технопарке Толтек СФ БашГУ пройдут открытые ОТБОРОЧНЫЕ СОРЕВНОВАНИЯ для ВСЕХ возрастов и... Подробнее

Наши партнеры

 TZOyoOCZ8y0 logotip novy SF BashGU  utv logo  CityMoll  VolnoeDelo