Arduone kit
Урок №9 Датчик изгиба
В этом опыте, мы используем Flex Sensor, или "Датчик Изгиба"
В этом опыте, мы используем Flex Sensor, или "Датчик Изгиба". Его основа - пластиковая полоска с нанесенным слоем угля. Также как у переменного резистора у него меняется сопротивление, но вместо поворота ручки, вам приходится сгибаете его, тем самым изменяя сопротивление. Для обнаружения этих изменений мы снова используем "делитель напряжения". Наклоняя "Датчик" в одном направлении, он изгибается, и чем больше он изгибается, тем выше становится его сопротивление. Приблизительный интервал изменений от 10 кОм до 35 ком. В этой схеме мы будем использовать Flax Sensor для контроля положения сервопривода
Схема подключения
Скетч
// Подключите библиотеку сервопривода для добавления функций управления:

#include <Servo.h> 

// Создание "объекта" Servo, с именем servo1. Каждый "объект" может
// иметь одно имя с помощью которого можно обращаться к конкретному
// сервоприводу через весь скетч. Максимально количество
// сервоприводов которыми можно управлять может быть 12:

Servo servo1;

// Задать аналоговый порт для считывания показаний с датчика изгиба:

const int flexpin = 0; 


void setup() 
{ 
  // Используйте окно монитора порта для отладки программы:
   
  Serial.begin(9600);

  // Включение управления сервоприводом на pin 9:

  servo1.attach(9);
} 


void loop() 
{ 
  int flexposition; // Значение входного сигнала с аналогового порта.
  int servoposition;// Выходное значение для сервы.

  // Прочитать положение гибкого датчика (от 0 до 1023):
  
  flexposition = analogRead(flexpin);

  // Мы уже знаем, рабочий диапазон значений функции analogRead()
  // 0-1023. Значения "делителя напряжения" получаемого с Датчика
  // изгиба, который мы используем, будет приблизительно 600-900.
  // Для сервы нужен диапазон градусов от 0 до 180...
  // Эта проблема решается с помощью двух полезных функций
  // о которых шла речь в опыте №6 - map() и constrain().
  // ...таким образом "конвертируем" диапазон значений 600-900
  // в значения градусов для сервопривода от 0 до 180.
  
  // Небольшая ремарка:
  // В некоторых наборах в комплекте нет датчика изгиба, это
  // из за его дорогой стоимости, но вам не стоит расстраиваться
  // для того чтобы разобраться с этим опытом вы можете вместо
  // него поставить фоторезистор не меняя ничего в схеме и ваш
  // серводвигатель будет менять свое положение в зависимости
  // освещенности датчика.
  // Единственное что вам нужно будет поправить это вот эта
  // строка:
  // servoposition = map(flexposition, 870, 1000, 0, 180);
  // значения 870 и 1000 взяты из монитора порта, 870 - наибольшая
  // освещенность датчика, 1000 - наименьшая (темнота)
  
  servoposition = map(flexposition, 600, 900, 0, 180);
  servoposition = constrain(servoposition, 0, 180);

  // Теперь мы отдаем команды "серве", чтобы она
  // установилась в определенную позицию:

  servo1.write(servoposition);

  // Каждый гибкий датчик имеет слегка различное, свое сопротивление,
  // Цифры 600-900 очень приблизительные, а нам бы хотелось точности.
  // Для точной настройки мы будем использовать COM порт, значения
  // которого мы увидим в окне Serial Monitor (Монитора порта):
  
  Serial.print("sensor: ");
  Serial.print(flexposition);
  Serial.print("  servo: ");
  Serial.println(servoposition);
  
  // Обратите внимание, что все перечисленные выше строки
  // используют команду "print", за исключением последней "Println".
  // Это позволяет ставить получаемые значения на той же линии, что
  // и надписи ("sensor: "), ("  servo: "), и только в конце отправляет
  // окончательную команду "возврат каретки", чтобы перейти к следующей
  // строке.

  // После загрузки скетча в Arduino, включите Serial Monitor 
  // (значок увеличительного стекла в правом углу панели инструментов). 
  // Вы сможете увидеть изменяемые значения датчика. Запишите значения
  // не искривленного датчика и в максимальном искривлении, т.е.
  // минимальное и максимальное значение. Впишите полученные вами
  // значения вместо 600 и 900 в функции map() выше, тем самым вы
  // повысите точность сопоставления гибкого датчика с точностью
  // поворота сервопривода.
  
  delay(20);  // пауза 20мс между обновлением значений "servo"
} 

Что вы должны увидеть:
Вы должны увидеть поворот серводвигателя в соответствии с тем, на сколько много вы изогнули гибкий датчик. Если схема не работает, убедитесь в том, что все собрано правильно, а также загружен ли код в Arduino, или просмотрите советы по устранению неполадок ниже
Возможные трудности:
Servo не поворачивается
Даже в цветных проводах идущих от серво легко ошибиться. Возможно ощибка в этом.
Servo не движется, как ожидалось Датчик предназначен для изгиба в одом направлении, попытайтесь изгибать полоску в противоположную сторону.
Малый диапазон поворота Servo Вам нужно попытаться изменить диапазон значений в функции map().
Применение в жизни:
Яркий пример применения датчиков изгиба это игровые консоли Nintendo "Power Glove". Это был первый игровой видео контроллер, который использовал имитацию движения рук на экране в реальном времени