Программная реализация емкостного реле на Arduino

Автор Instructables под ником ShaneCunningham предлагает реализовать емкостное реле на Arduino программно. Из дополнительных деталей потребуются только собственно емкостные датчики и резисторы. Никаких внешних аппаратных генераторов. В ПО самоделки задействованы эта и эта сторонние наработки.

Емкостные датчики — двухслойные, трёхвыводные. Мастер изготавливает их своими руками. Картонный квадрат со стороной в 300 мм оклеивает фольгой — это будет вывод, соединяемый с общим проводом. Сверху помещает картонный квадрат со стороной в 100 мм, также оклеенный фольгой. На нём слой фольги разделяет на две части по контуру, похожему на осциллограмму прямоугольных импульсов. Это будут ещё два вывода.

Каждый из изготовленных датчиков комплектует резистором на 1 МОм. Если датчик один, подключает его как показано ниже. Если же их несколько, придётся задействовать ещё выводы Arduino — по два на датчик — и учесть это в скетче.

Вот что получается у мастера:

Составляет скетч, отправляющий по последовательному интерфейсу данные, снятые с датчика:

///////////////////////////////////////

void loop() {
long total1 = cs_4_2.capacitiveSensor(30);

Serial.println(total1);

/////////////////////////////////////////

Code for Communicating with Processing over Serial

*/

int val1 = 0;

int val2 = 0;

int val3 = 0;

int inByte = 0;

CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); // 1M resistor between pins 4 & 2, pin 2 is sensor pin, add a wire and or foil if desired

CapacitiveSensor cs_4_6 = CapacitiveSensor(4,6); // 1M resistor between pins 4 & 6, pin 6 is sensor pin, add a wire and or foil

void setup() {

cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 — just as an example

cs_4_6.set_CS_AutocaL_Millis(0xFFFFFFFF);

Serial.begin(9600);

pinMode(2, INPUT);

pinMode(6, INPUT);

// pinMode(8, INPUT);

establishContact(); // send a byte to establish contact until receiver responds

void loop() {

// if we get a valid byte, read inputs:

if (Serial.available() > 0){

// get incoming byte:

inByte = Serial.read();

//long start = millis();

long total1 = cs_4_2.capacitiveSensor(30);

long total2 = cs_4_6.capacitiveSensor(30);

//long total3 = cs_4_8.capacitiveSensor(30);

//delay(10);

val1 = map(total1, 700, 2300, 0, 255); // sensor values from calibration are mapped to here — begins to detect human proximity at 700 (4" away) , hand nearly touching sensor at 2300

val2 = map(total2, 30, 175, 0, 255);

//val3 = map(total3, 0, 13000, 0, 255);

Serial.write(val1);

Serial.write(val2);

//Serial.write(val3);

//Serial.print(val1);

//delay(50);

}

void establishContact() {

while (Serial.available() <= 0) {

Serial.print('A');

delay(300); }

Дальнейший анализ поступающей информации мастер организует на ПК в среде Processing.

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

Источник (Source)

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

Источник: usamodelkina.ru

Понравилась статья? Поделиться с друзьями:
автомобильные новости
Добавить комментарий