Четверг, 25.04.2024, 12:28
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Реклама Google
Форма входа
Категории раздела
Это нужно знать! [17]
Изучаем AVR [30]
Программаторы [12]
Необходимое ПО [8]
Готовые устройства [73]
Справочная [38]
Инструмент [0]
Технология [8]
Литература [0]
Arduino скетчи [18]
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Микроконтроллеры - это просто!
Главная » Статьи » Arduino скетчи

Карандаш + бумага = Ёмкостной датчик

Знали ли вы что можно заставить надпись сделанную простым карандашом на бумаге реагировать на прикосновение?

Очень легко!

Что понадобиться:
Простой карандаш
Резистор: ~1 МОм (один мега ом)
Канцелярская скрепка (металлическая)
Провода
Arduino


Приступаем:

- Нужно припаять к проводу скрепку (или просто обмотать его вокруг скрепки). У вас должно получиться что-то вроде этого:

- Возьмите чистый лист и нарисуйте с краю прямоугольник и хорошенько закрасьте его карандашом — сюда вы прицепите  скрепку, которая будет соединяться проводом с Arduino

- Теперь можете что-нибудь нарисовать или написать по-своему усмотрению (необходимо чтобы ваш рисунок был соединен линией с прямоугольником)

Дальше нужно соединить ваш рисунок с Arduino:

Осталось только загрузить программу в Arduino:

// Пин к которому подключен светодиод
int LEDPin = 13;
// Пин который соединен с вашим рисунком
int capSensePin = 2;
//  Величина показывает с какого значения определятся
//  нажатие на рисунок, это число можно определить экспериментально
int touchedCutoff = 60;
 
void setup(){
  Serial.begin(9600);
  // Включаем светодиод
  pinMode(LEDPin, OUTPUT);
  digitalWrite(LEDPin, LOW);
}
 
void loop(){
  // Если зафиксированно прикосновение, включаем светодиод,
  // иначе - выключаем
  if (readCapacitivePin(capSensePin) > touchedCutoff) {
    digitalWrite(LEDPin, HIGH);
  }
  else {
    digitalWrite(LEDPin, LOW);
  }
 
  // Каждые 500 мс отправляем данные в COM-порт
  if ( (millis() % 500) == 0){
    Serial.print("Capacitive Sensor on Pin 2 reads: ");
    Serial.println(readCapacitivePin(capSensePin));
  }
}
 
//  Функция readCapacitivePin
//  Вход: Номер пина к которому подключен рисунок
//  Выход: Число, от 0 до 17, показывающее величину ёмкости на пине
//  Когда вы прикасаетесь к пину ( = рисунку)
//  это число увеличивается
//  Что бы это работало, необходимо подключить
//  между пином и питанием (+5v) резистор сопротивлением ~ 1МОм
uint8_t readCapacitivePin(int pinToMeasure){
 
  volatile uint8_t* port;
  volatile uint8_t* ddr;
  volatile uint8_t* pin;
 
  byte bitmask;
  if ((pinToMeasure >= 0) && (pinToMeasure <= 7)){
    port = &PORTD;
    ddr = &DDRD;
    bitmask = 1 << pinToMeasure;
    pin = &PIND;
  }
  if ((pinToMeasure > 7) && (pinToMeasure <= 13)){
    port = &PORTB;
    ddr = &DDRB;
    bitmask = 1 << (pinToMeasure - 8);
    pin = &PINB;
  }
  if ((pinToMeasure > 13) && (pinToMeasure <= 19)){
    port = &PORTC;
    ddr = &DDRC;
    bitmask = 1 << (pinToMeasure - 13);
    pin = &PINC;
  }
 
  *port &= ~(bitmask);
  *ddr  |= bitmask;
  delay(1);
 
  *ddr &= ~(bitmask);
 
  int cycles = 16000;
  for(int i = 0; i < cycles; i++){
    if (*pin & bitmask){
      cycles = i;
      break;
    }
  }
 
  *port &= ~(bitmask);
  *ddr  |= bitmask;
 
  return cycles;
}


Вот и всё, небольшие изменения в коде (необходимо определить значение переменной int touchedCutoff под ваш рисунок) и ёмкостной датчик готов!

Категория: Arduino скетчи | Добавил: Alex (08.08.2014)
Просмотров: 2635 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2024