20.7.2008

Емкостной сенсор соприкосновения на МК Atmega

Схема подключения такая:

Сам сенсор – это кусок односторонней платы, к которому припаян проводок и сверху все заклеено скотчем.

Принцип работы

Схема - RC цепь.

Выдаем на PD7 единицу. И начинаем считать обороты цикла, в котором проверяется есть ли на PC0 единица. Количество оборотов цикла будет зависеть от емкости RC цепи. Чем больше емкость, то больше времени будет требоваться, чтобы достичь единицу на PC0.

Я использовал два резистора по 1 МОм. Если поставить еще больше сопротивление, то достижение 1 на PC0 еще замедлится. В моей схеме в состоянии покоя при 12Mhz надо около 50 оборотов цикла. При 1Mhz это может быть проблемой, а может и нет, но, факт, что если надо растянуть цикл замера, то можно просто увеличить сопротивление.

Если что-то преподнести или положить на сенсор, то емкость RC цепи увеличится. Если прикоснуться пальцем, то увеличится значительно, так как человек обладает емкостью примерно в 100pF и является проводником, а цепь сама по себе емкость раз в 10 меньше. Т.е. с человеком образуется вполне достойный конденсатор на сенсоре.

Схема в сборке

Видео работы

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

Из видео может быть плохо видно, но факт, что чем сильнее давишь на пластинку, тем большее число оборотов цикла требуется для зарядки. Таким образом, такая система позволяет измерять, на сколько сильно давят на кнопку. Причем, как видно, числа довольно стабильные.

Интересно, что если убрать соединение между PD7 и PC0 вообще и просто ткнуть в PC0 сенсор, то наблюдается вот такая картина (программный код тот же):

Программа:

	//  input PC0
	DDRC &=0b11111110;
	PORTC&=0b11111110; // pul up - off

	// output pd7
	DDRD |=0b10000000;

	while(1){
		k++;
		r=0; // counter

		// out 0
		PORTD&=0b01111111;
		while(PINC&0b00000001);


		// out 1
		PORTD|=0b10000000;

		while(!(PINC&0b00000001)) r++;
		

		// out 0
		PORTD&=0b01111111;


		//output data to display
		/*
		itoa(r+2, buf,10);
		my44780_command_home(&disp1);		
		my44780_send_string(&disp1,buf);
		my44780_send_string(&disp1," ");
		itoa(k, buf,10);
		my44780_send_string(&disp1,buf);
		my44780_send_string(&disp1,"      ");
		_delay_ms(100);
		*/
	}

В идеале же хотелось бы достичь работы только с одним проводом, чтобы с него конденсатор и заряжался и проверялся, чтобы экономить ноги МК.

Комментарии
Алексей () 2010-04-06 17:57:59 #1 link
а можете выложить весь проект?
Артем Кучин (Москва, Россия) 2010-04-07 23:20:20 #2 link
нет, его 100 лет уже нет, и там целая история с подключением экрана. Основной код здесь показан.
Артур () 2011-03-07 23:32:14 #3 link
А если же мне не нужен экран, подсчет циклов, нужен только сенсор, подскажите, как будет выглядеть программа??
Добавить комментарий
Ваше имя:
город: страна:
Комментарий:

Введите код "10438" -
Сообщения не по теме будут удалены. Вопросы не по теме следует направлять по электронную почту. Ваши данные будут запомнены в cookie для удобства. HTML запрещен.

(C)1999-2021 Артем Кучин
Email: artem@artem.ru
На письма без темы или без имени отправителя не отвечаю

При использовании материалов ссылка на сайта www.artem.ru обязательна! Автор оставляет за собой право отказать в праве использования материалов на безвозмездной основе без объяснения причин. Материалы сайта защищены законом об авторских и смежных правах.

Цена домена: 1 500 000 руб.