Arduino пинпоинтер

alexgard
Offline
Зарегистрирован: 07.11.2016
Здравствуйте. Нужна помощь, так как сам уже не знаю что делать..
Пытаюсь повторить проект с этого форума: http://forklg.ru/viewtopic.php?f=98&t=1100&sid=0385f06032473b94511336fd3ea96de6
 
Первоначально делал все на макетной плате. Все работало отлично, но при малейшем движении все начинало глючить. Решил сделать платку для экспериментов с катушкой и номиналами компонентов. Когда все спаял, то появился глюк. Значение баланса, равномерно и с одинаковой периодичностью уменьшается. Причем стабильно как секундомер..
 
Плату проверил раз 200.. Код не менял.
Может я просто чего то не замечаю?
Буду благодарен за любую помощь или совет!
 
Печатная плата (вид сверху):
Monday
Offline
Зарегистрирован: 01.07.2017

alexgard пишет:
Значение баланса, равномерно и с одинаковой периодичностью уменьшается. Причем стабильно как секундомер.

Нестабильна частота генератора или проблемы с частотомером ?

http://forklg.ru/viewtopic.php?f=98&t=1100&start=15#p4096

Цитата:
Lloyd » 04 апр 2016, 11:50

2. Нестабильная частота. В первой версии которую собрал на бредборде была проблема с частотой - после включения показывала что то около 22 кГц. поднося металл частота менялась в пределах всего 20- 50 Гц. Но проблема в том что после включения частота начинала плавать сама по себе. за минуту повышалась на 100 - 200 Гц, что конечно сильно усложняло определение наличия металла. Предположительно это было связано с ТКЕ конденсаторов в колебательном контуре. По расчетам это вполне могло происходить, так как обычные конденсаторы заметно меняют емкость от температуры, а в колебательном контуре даже мизерное изменение емкости кондера сильно влияет на частоту. Изучил вопрос, нашел что есть такие конденсаторы с ТКЕ классом COG, емкость которых не меняется с изменением температуры. Заказал COG конденсаторы на 0.01 мкФ и воткнул их в колебательный контур. Кондер на 0.047 тоже заменил на 0.01, просто потому что не нашел COG конденсатора на 0.047. По схеме, как я понял наминал этого конденсатора не сильно критичен. А вот плоский график COG конденсаторов сильно повлиял на работу схемы - частота теперь никуда не едет. Так что рекомендую сразу брать cog кондеры для колебательного контура.

alexgard
Offline
Зарегистрирован: 07.11.2016

Изначально так и было, но я потом поменял кондесаторы и все работало стабильно. На протяжении 5-10 минут частота вообще не менялась. А глюки начались, когда я все те же компоненты перенес на печатную плату.. 
Увы, нет возможности проверить сейчас что именно не исправно..

Monday
Offline
Зарегистрирован: 01.07.2017

alexgard пишет:
Изначально так и было, но я потом поменял кондесаторы и все работало стабильно. На протяжении 5-10 минут частота вообще не менялась. А глюки начались, когда я все те же компоненты перенес на печатную плату.. 
Увы, нет возможности проверить сейчас что именно не исправно..
Термостатируйте плату на время, а потом посмотрите какой у нее ТКЕ или ТКИ с такими развесистыми печатными дорожками.

Lexan
Offline
Зарегистрирован: 12.02.2016

Здравствуйте. Скажите удалось ли это устройство довести до ума?? А то у меня с ним похожая сетуация ))

Lexan
Offline
Зарегистрирован: 12.02.2016

Я так понял у него иззо  ТКЕ кондеров постоянно плывет частота контура. И програмно настроен он очень грубо ступенчето порогами по 30Гц. Но некак немогу разобратся как тут регулировать эти пороги..

Скеч

int pushButton = 10;
int buttonState = 0;
int frequency = 0;
int balance = 18340;
/*
  ArduinoFreqMetr v 1.0
*/
#include <FreqMeasure.h>

const int SoundPin = 7; // Пин подключения пьезоизлучателя – 9 дискретный

void setup() {
  pinMode(pushButton, INPUT_PULLUP);
 // pinMode(pushButton, INPUT);
  pinMode(8, INPUT);
  pinMode(2, OUTPUT); //red
  pinMode(3, OUTPUT); // blue
  pinMode(4, OUTPUT); // green
  pinMode(7, OUTPUT); // buzer
  Serial.begin(9600);
  FreqMeasure.begin();
}

double sum = 0;
int count = 0;


void loop() {
  if (FreqMeasure.available()) {
           // average several reading together
    sum = sum + FreqMeasure.read();
    count = count + 1;
    if (count > 30) {
      frequency = FreqMeasure.countToFrequency(sum / count);
      Serial.println(frequency);
      sum = 0;
      count = 0;
    }
  }
  //------------button-----------------
  buttonState = digitalRead(pushButton);
  if (buttonState == HIGH) {
    balance = frequency;
  };

  //----------indication----------------
  if (frequency == balance) {
    digitalWrite(4, HIGH);
    //noTone(7); // Выключаем звук

  } else {
    digitalWrite(4, LOW);
  };

  if (frequency > balance) {
    digitalWrite(2, HIGH);
    tone(SoundPin, 700);
  } else {
    digitalWrite(2, LOW);
    noTone(7); // Выключаем звук
  };

  if (frequency < balance) {
    digitalWrite(3, HIGH);
    tone(SoundPin, 100);
  } else {
    digitalWrite(3, LOW);
    noTone(7); // Выключаем звук
  };

}