Универсальный Ардуино пробник

man_200
Offline
Зарегистрирован: 29.04.2016

Сюда бы еще измеритель емкости и индуктивности

Получился бы нефиговый пинцет

svm
Offline
Зарегистрирован: 06.11.2016

man_200 пишет:

Сюда бы еще измеритель емкости и индуктивности

Получился бы нефиговый пинцет

В случае с переключением режимов, измерение емкостей не проблема ,если использовать решение от Димакса http://arduino.ru/forum/apparatnye-voprosy/kak-kontrolirovat-obryv-provoda-datchika-kondensator-na-kontse#comment-161133  цена вопроса- 1 резистор, или пины перекинуть. У меня это достаточно проблематично из-за конструктивных "особенностей". Но в следующей реинкарнации учту. Грубо большие индуктивности наверное тоже удастся оценить. Неплохо еще-бы малой кровью ESR добавить.

 

Andry Smart
Offline
Зарегистрирован: 06.09.2016

подскажите в чем трабл.  переделал скетч под Adafruit библиотеку (руссифицырованную) .  работает как надо но переключивши в режим вольтметра гаснет экран и выводит напряжение, если на щупе что то есть. а если нет то пустой экроан. Замучился искать косяк

 


#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <FreqCount.h> 
#include <PWM.h>
#define OLED_RESET 4 
//------------------------------------------------------------ПЕРЕМЕННЫЕ------------
Adafruit_SSD1306 display(OLED_RESET); 
 volatile unsigned int int_tic=0; 
 volatile unsigned long tic; 
 long adc_buff,tau_svet,t_svet;
 float u_del,u_izm,rez;
 byte ri,rr,rs,prob,svet;// режим измерения

 
//###########################################################    Делаем все, что нужно при запуске
void setup()
{
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    display.cp437(true);
    display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(1,0);
    display.setTextColor(WHITE);
    pinMode(10, OUTPUT);
    display.println(utf8rus("ПРОБНИЧЕК"));
    display.display(); 
    delay(1000);
    display.clearDisplay();
    TCCR1A=0; TIMSK1 = 1<<TOIE1; //прерывание по переполнению
    }
    ISR (TIMER1_OVF_vect){ int_tic++;
    }
//---------------------------------------------------------------------------------------------------------------------
void loop() 
{
  rs=0;  
svet=0;
prob=1;
start:
    pinMode(2, INPUT);// 2 пин высокий импеданс
    pinMode(3, INPUT);// 3 пин высокий импеданс
    pinMode(4, INPUT);// 4 пин высокий импеданс
    display.clearDisplay();

//*******************************************************************
svet:// фиксация длительности вкючения кнопки подсветки
if (analogRead(A0)>100 && svet==0){t_svet=millis();svet=1;goto svet;}
if (analogRead(A0)>100 && svet==1)goto svet;
if (analogRead(A0)<10  && svet==1){tau_svet=millis()-t_svet;
if (tau_svet<400){rr++;prob=0;rs=0;} //короткое нажатие выбор режима
if (tau_svet>800){rr=0;prob=1;}      //очень длинное  нажатие возврат к пробнику
if (tau_svet>450)rr=0;               //длинное  нажатие
svet=0;t_svet=0;}
//************** измерение выборочных величин ************************
if (rr==0)goto probn;
if (rr==1){show_menu();voltmeter();}
if (rr==2){show_menu();ommeter();}
if (rr==3){show_menu();f_meter();ri=0;}
if (rr>3){show_menu();goto probn;}
vdspl();
if (prob==0)goto start;
probn:;//******************** РЕЖИМ ПРОБНИКА ****************************
//****************************  ЧАСТОТОМЕР ******************************************
test_F();     //  Тест наличия импульсов с F>5 Гц.
if (tic>1) {  // Если есть импульсы измеряем частоту
f_meter();
goto ind;
}
//**************************** Вольтметр ******************************************
voltmeter();
if (adc_buff > 150) goto ind;   //если есть напряжения выводим - иначе измеряем сопротивление

//**************************** ОММЕТР ********************************************
//rezist:

ommeter();
//*************************** ИНДИКАЦИЯ ************************************
ind:;
vdspl();// Вывод на дисплей 
if (rr==1) voltind ();
 display.display(); 
goto start;
}
void show_menu(){
if (rs==0){

display.clearDisplay();
display.setTextSize(2);
display.setCursor(0,0);
if (rr>3){display.println(utf8rus(" ПРОБНИК "));rr=0;}
if (rr==1)display.println(utf8rus(" ВОЛЬТМЕТР "));
if (rr==2)display.println(utf8rus(" ОММЕТР "));
if (rr==3)display.println(utf8rus("ЧАСТОТОМЕР "));
display.display();
delay(500);


rs=rr;}}
//**************************************************************************
// вывод на  SSD1306
void vdspl()
{ 
if (rez> 7999999 || rez<0){         //ХЗ что на входе

display.clearDisplay();
display.setCursor(1,0);
display.println(utf8rus(" -------"));
display.print(utf8rus(" на входе"));
display.display();
digitalWrite(10,0);
goto vdsp;
}  

display.setCursor(1,0);
if (rez==0)goto vdsp;
if (ri==5 && rez >=0 && rez < 70){;   //Щупы 3акорочены или сопроивление < 70 Om
                                    
display.clearDisplay();
display.setCursor(1,0);
display.println(utf8rus("КОРОТЫШ"));
display.print(rez,1);
display.println("         ");
if (ri==2 ||ri==3) display.println(" KOhm    ");  
else display.println(" Ohm     ");  
display.display(); 
digitalWrite(10,1); 
delay(100);

goto vdsp;
}
digitalWrite(10,0);
if (ri==0){
  display.setCursor(1,0);
display.print (int(rez));
display.println("              ");
display.print("HZ          ");
display.display();
goto vdsp;
}
if (rs==3)goto vdsp;
if (ri==1){;                        // Вывод напряжения

display.clearDisplay();
display.setCursor(1,0);
display.print(rez,2);
display.println("           ");
display.print(utf8rus("ВОЛЬТ   "));
display.display();

goto vdsp;
}
if (ri==2 ||ri==3) rez=rez/1000;    // Вывод сопртивления
display.setCursor(1,0);

display.print(rez,1);
display.println("         ");
if (ri==2 ||ri==3) display.println(" KOhm    ");  
else display.println(" Ohm     ");                    
vdsp:;
display.display();
//display.clearDisplay();
}
// измерение напряжения питания
  long readVcc() {
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  uint8_t low = ADCL; // сначала нужно прочесть ADCL - это запирает ADCH
  uint8_t high = ADCH; // разлочить оба
  float result = (high<<8) | low;
  //result = (1.03357 * 1023.0*1000) / result;
  result =1057342.11/ result;
  return result;
}


void voltmeter(){// *************** ВОЛЬТМЕТР *****************
   ri=1; 
  analogReference(INTERNAL);// включаем внутренний ИОН 1.1 В
  pinMode(2, INPUT); 
  pinMode(3, INPUT); 
  pinMode(4, OUTPUT); // выводим на 4 пин 0
  digitalWrite(4,0);         // устанавливая его в 0(включаем нижний резистор делителя)
  delay(2);
adc_buff=0;
for (int n=0; n<=255; n++ ) {
adc_buff+= analogRead(A1); }
adc_buff >>=4; // 16368 полная шкала 14bit
rez= (float)adc_buff/16368.0*5.29;// - реальный коэфф делителя
}
//****************************************************************************
void ommeter(){                                       // *************** ОММЕТР *****************
     
//R=20 kOm  
ri=2;
pinMode(2, INPUT);          // 2 пин высокий импеданс
pinMode(3, INPUT);          // 3 пин высокий импеданс
pinMode(4, OUTPUT);         // 4 пин выход
digitalWrite(4,1);          // переводим его в 1 подключаем измерительный резистор 20 kOm
analogReference(DEFAULT);   // подключаем опорное 5 В  
delay(2);

// измеряем полное напряжение на делителе под нагрузкой
//**************************************************************
adc_buff=0;
for (int n=0; n<=255; n++ ) {
adc_buff+= analogRead(A1); }
adc_buff >>=4;
u_del= (float)adc_buff;

// измеряем напряжение на измеряемом резисторе
//**************************************************************
adc_buff=0;
for (int n=0; n<=255; n++ ) {
adc_buff+= analogRead(A3); }
adc_buff >>=4;
u_izm= (float)adc_buff;
rez= float(u_izm*20000)/float(u_del-u_izm);// для 20 kOm
if (u_izm>4000){;//Если значение достоверно - вывод на индикацию
goto vyv;
}

//#############################  4,7 kOm  ######################################
ri=3;
pinMode(4, INPUT);         // 4 пин высокий импеданс
pinMode(3, OUTPUT);        // 3 пин выход
digitalWrite(3,1);         // переводим его в 1 подключаем измерительный резистор 4.7 kOm
analogReference(DEFAULT);// подключаем опорное 5 В  
delay(2);

// измеряем полное напряжение на делителе под нагрузкой
//**************************************************************
adc_buff=0;
for (int n=0; n<=255; n++ ) {
adc_buff+= analogRead(A2); }
adc_buff >>=4;
u_del= (float)adc_buff;

// измеряем напряжение на измеряемом резисторе
//**************************************************************
adc_buff=0;
for (int n=0; n<=255; n++ ) {
adc_buff+= analogRead(A1); }
adc_buff >>=4;
u_izm= (float)adc_buff;
rez= float(u_izm*4750)/float(u_del-u_izm);// для 4,7 kOm
if (u_izm>4000){;
goto vyv;
}

 //#############################  500 Om  ######################################
 
  analogReference(DEFAULT);// подключаем опорное 5 В
  ri=4;
  pinMode(3, INPUT);         // 3 пин высокий импеданс
  pinMode(2, OUTPUT);        // 2 пин выход
  digitalWrite(2,1);         // переводим его в 1 подключаем измерительный резистор 500 Ом 
  delay(2);


// измеряем полное напряжение на делителе под нагрузкой
//**************************************************************
adc_buff=0;
for (int n=0; n<=255; n++ ) {
adc_buff+= analogRead(A3); }
adc_buff >>=4; 
u_del= (float)adc_buff;

// измеряем напряжение на измеряемом резисторе
//**************************************************************
// сначала при опорном 5 В
adc_buff=0;
for (int n=0; n<=255; n++ ) {
adc_buff+= analogRead(A1); }
adc_buff >>=4;
 u_izm= (float)adc_buff;
rez= float(u_izm*500)/float(u_del-u_izm);// для 500 om
if (u_izm >4000){
goto vyv;
}
//Если  точность не удовлетворяет переходим на опорное 1,1 В
// измеряем полное напряжение на делителе под нагрузкой при опорном 5 В
//**************************************************************
ri=5;
adc_buff=0;
for (int n=0; n<=255; n++ ) {
adc_buff+= analogRead(A3); }
adc_buff >>=4;
u_del= (float)adc_buff/16368*(float)readVcc();

// измеряем напряжение на измеряемом резисторе
analogReference(INTERNAL);// подключаем опорное 1.1 В
delay(2);
adc_buff=0;
for (int n=0; n<=255; n++ ) {
adc_buff+= analogRead(A1); }
adc_buff >>=4; 
u_izm= (float)adc_buff/16368*1100;
(rez)= float(u_izm*500)/float(u_del-u_izm);
vyv:;
}


void init_fm(){// ********* конфигурация входов частотомера *******
ri=0;
pinMode(4, OUTPUT);        // выводим на 4 пин 0
digitalWrite(4,0);         // загрубляем вход (борьба с наводками)
//pinMode(4, INPUT);       // если нужна макс. чувствительность
pinMode (5,INPUT);         // вход сигнала T1 (для atmega168/328)
}
void f_meter(){//-------------------------------------------------*******************ЧАСТОТОМЕР********************
ri=0;
if (analogRead(A0)>100)rr=0;prob=1;goto vf;// ПРОВЕРКА КНОПКИ
init_fm();  
int_tic=0; TCNT1 = 0;
TCCR1B = (1<<CS10)|(1<<CS11)|(1<<CS12);//тактировани от входа Т1
delay(1000);// Время измерения
TCCR1B=0;
tic= ((uint32_t)int_tic<<16) | TCNT1; //сложить что натикало
rez=tic;
vf:;
}


void test_F(){// ----------------------------------------------******* Тест наличия импульсов с F>5 Гц.********
init_fm();
ri=0;
int_tic=0; TCNT1 = 0;
TCCR1B = (1<<CS10)|(1<<CS11)|(1<<CS12);//тактировани от входа Т1
delay(50);// Тестовый замер (срабатывает> 5 Гц  устойчиво)
TCCR1B=0;
tic= ((uint32_t)int_tic<<16) | TCNT1; //сложить что натикало
rez=tic;
}

void voltind ()
{
  
  display.clearDisplay();
display.setCursor(1,0);
display.print(rez,2);
display.println("           ");
display.print(utf8rus("ВОЛЬТ   "));
display.display();
  
  
  
  
  }   
// ---------------------------------------------------------------------перекодировка русских символов

/* Recode russian fonts from UTF-8 to Windows-1251 */
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };

  k = source.length(); i = 0;

  while (i < k) {
    n = source[i]; i++;

    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}

 

Andry Smart
Offline
Зарегистрирован: 06.09.2016

еще планирую резистор делителя для измерени я напряжения 4.7к заменить на 1.3 (увеличить диапазон входного напряжения до 16в) вход ардуинки думаю защитить стабилитроном на 5в на всякий случай. пин 4.

в каком режиме еще этот резистор используется? где мне код поправить?

svm
Offline
Зарегистрирован: 06.11.2016

Поставьте в 142 и 339 строкач  вывод в сериал, и посмотрите что там при отсутствии входного напряжения. Однозначно что-то с выводом на дисплей.

svm
Offline
Зарегистрирован: 06.11.2016

Andry Smart пишет:

еще планирую резистор делителя для измерени я напряжения 4.7к заменить на 1.3 (увеличить диапазон входного напряжения до 16в) вход ардуинки думаю защитить стабилитроном на 5в на всякий случай. пин 4.

в каком режиме еще этот резистор используется? где мне код поправить?

Кажется, только в частотомере, для борьбы с наводками строка 307 в Вашем коде. Но он закорачивает вход частотомера не напрямую, а через резистор 47 кОм, так-что ни на что  это изменение не повлияет.

А что так грубо коротыш фиксируете < 70 Ом. Строка 116.

Andry Smart
Offline
Зарегистрирован: 06.09.2016

Спасибо. буду разбираться.

А коротыш то для удобства.  сопротивление подберу экспериментально. to добавил вывод сопротивления в режиме коротыша. это по принцыпу знаменитого мультиметра DT830 (там тоже по моему до 70 ом пищалка работает). визульно проконтролировать удобно.

удобно на слух прозванивать катушки реле, клапанов, лампочек в автомобилях.

кстати оператор Tone в моем коде не хочет компилировать. не пойму почему.

svm
Offline
Зарегистрирован: 06.11.2016

В принципе для автоэлектрики - логично. А с TONE непонятно.

Andry Smart
Offline
Зарегистрирован: 06.09.2016
вот при попытке компиляции с tone выдает ошибку
 
Arduino: 1.8.2 (Windows 10), Плата:"Arduino Nano, ATmega328"
 
Archiving built core (caching) in: C:\Users\836D~1\AppData\Local\Temp\arduino_cache_753701\core\core_arduino_avr_nano_cpu_atmega328_0c812875ac70eb4a9b385d8fb077f54c.a
Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':
 
(.text+0x0): multiple definition of `__vector_7'
 
libraries\FreqCount\FreqCount.cpp.o (symbol from plugin):(.text+0x0): first defined here
 
Andry Smart
Offline
Зарегистрирован: 06.09.2016

я тут подумал. А можно ведь резистор не менять. Достаточно сделать проверку, если скажем результат больше 4,5в то произвести измерение с опорным напряжением в 5в.  по моему в пультоскопе данная идея реализована.

 

svm
Offline
Зарегистрирован: 06.11.2016

Все-таки опорное 1.1 В более стабильное. Если конструкция еще не собрана, то лучше резистор подобрать.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Andry Smart пишет:

кстати оператор Tone в моем коде не хочет компилировать. не пойму почему.

Потому что tone() использует для генерации аппаратный timer 0, который уже занят библиотекой FreqCount. Если Вы не собираетесь менять частоту звучания, проще поставить активный зуммер (active buzzer). Там достаточно подать на пин HIGH и он будет сам пищать.

svm
Offline
Зарегистрирован: 06.11.2016

Jeka_M пишет:

Потому что tone() использует для генерации аппаратный timer 0, который уже занят библиотекой FreqCount. 

Кстати, я не обратил внимания, зачем там эта библиотека? Частотомер ее не использует. И для чего PWM.h?

Andry Smart
Offline
Зарегистрирован: 06.09.2016

библиотеки попали изза моей невнимательности. это с пультоскопа. одна для измерения частоты а другая для генератора сигнала ШИМ.

закомментировал их и стал компилировать. только звук приятней но тише. вернулся к пищалке с генератором.

 

а вот с иникацией так и не разобрался. в режиме вольтметр черный экран при отсутствии сигнала на входе. (это если его включить кнопкой)

Andry Smart
Offline
Зарегистрирован: 06.09.2016

подскажите сильно ли упадет точность измерения сопротивдений, при изменении напряжения питания? хочу запитать схему от аккумулятора 3.6-4.2в  без преобразователя

svm
Offline
Зарегистрирован: 06.11.2016

Andry Smart пишет:

подскажите сильно ли упадет точность измерения сопротивдений, при изменении напряжения питания? хочу запитать схему от аккумулятора 3.6-4.2в  без преобразователя

Теоретичски, напряжение питания не должно влиять, т.к. при расчетах используется соотношение напряжений, а не абсолютные значения.

Andry Smart
Offline
Зарегистрирован: 06.09.2016

подскажите еще такой момент. поставлю я в цепь делителя для измерения напряжения резистор на 1к вместо 4к7 .  смогу по идее до 20в измерять. вопрос в следующем не будет ли опасно это напряжение для порта с резисторами на 500 ом? и спасет ли стабилитрон ?

сам порт D2 думаю в состоянии высокого импенданса не пострадает а вот А3 не выгорит ли?

svm
Offline
Зарегистрирован: 06.11.2016

Andry Smart пишет:

вопрос в следующем не будет ли опасно это напряжение для порта с резисторами на 500 ом? и спасет ли стабилитрон ?

сам порт D2 думаю в состоянии высокого импенданса не пострадает а вот А3 не выгорит ли?

 Если посмотреть схему портов Ардуино, то там присутствуют защитные диоды. При напряжении менее 5В они запереы и никакого влияния не оказывают. Если больше, то они открываются и напряжение на пине порта ограничивается напряжением питания + падение напряжения на открытом диоде. Возникает вопрос, какой ток выдержат эти диоды? Согласно закона Ома при 20 В и нагрузке 500 ом ток будет 40 мА, теоретически должно прокатить, но что будет на самом деле покажет время. Я бы не стал рисковать и  убрал диапазон измерения с резистором 500 Ом,немного потеряв в точности измерении малых сопротивлений

Andry Smart
Offline
Зарегистрирован: 06.09.2016

А если поставить как в схеме порта параллельно диоды? Вместо нижнего даже стабилитрон.
На низких сопротивлениях точность важна для автопробника

svm
Offline
Зарегистрирован: 06.11.2016

Andry Smart пишет:
А если поставить как в схеме порта параллельно диоды? Вместо нижнего даже стабилитрон. На низких сопротивлениях точность важна для автопробника

Защитить наверное получится, но при напряжении выше 5В, или напряжения стабилизации стабилитрона, не повлияет-ли на работу измеряемых цепей?

Andry Smart
Offline
Зарегистрирован: 06.09.2016

ладно посмотрю попробую диапазон 500ом выбросить. может меня точность устроит.

похоже получается у меня скрестить с пультоскопом.  катастрофически не хватает времени этим заниматься но все же иногда получается.

 

решил питать схему без преобразователя от аккумулятора (литийионного) при измерении напряжения а также в пультоскопе использую опорное только 1.1в ...

решил все же два диапазона сделать по напряжению. до5в и до20в. пин 2 освободился и теперь он управляет так же как пин 4 резистором только уже на 1к для диапазона до 20в. 

частотомер уберу. (в режиме пультоскопа показывает и частоту)

 

программер из меня не очень . код пока не эффективен. боюсь все задуманное в атмегу 328 не влезет.

Andry Smart
Offline
Зарегистрирован: 06.09.2016

не получается выбросить резистор на 500ом.  через него ведь и остальные диапазоны измекряют. например по входу А3 змеряется напряжение при подключенном резиторе на 20к.

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

Andry Smart
Offline
Зарегистрирован: 06.09.2016

получается надо оставить лишь один режим измерения сопротивления. это с подключенным 4к7 к питанию а считывать напряжение на измеряемом резиторе через 20к.  тут точно точность будет не очень.

может имеет смысл вместо 500 ом установить 4к7, естественно подправиви формулу в коде? точность будет лучше или нет смысла?

svm
Offline
Зарегистрирован: 06.11.2016

Andry Smart пишет:

получается надо оставить лишь один режим измерения сопротивления. это с подключенным 4к7 к питанию а считывать напряжение на измеряемом резиторе через 20к.  тут точно точность будет не очень.

может имеет смысл вместо 500 ом установить 4к7, естественно подправиви формулу в коде? точность будет лучше или нет смысла?

По сравнению с входным сопротивлением аналогового входа (десятки мегаом), 20 кОм никакой погрешности не внесут. Можно оставить один резистор для измерения сопротивлений, взяв его допустим в 1 кОм. Тогда естественно точность на малых и больших значениях пострадает, можно будет доверять где-то от 50 Ом до 100 кОм, но риск спалить вход от 20 вольт практически сведется к "0" Это не измерительный прибор, а пробник, поэтому без усложнения схемы высоких требований к нему предъявлять не стоит

Electronik83
Offline
Зарегистрирован: 06.12.2015

Хм, подписался....

empirevv
Offline
Зарегистрирован: 09.11.2018

Супер. Подпишусь

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Подскажите,а максимальные параметры по измерениям какие?Максимальное измеряемое наряжение и частота?

svm
Offline
Зарегистрирован: 06.11.2016

Частота 4 МГц, напряжение в автопробнике до 20 В, в Ардуино пробнике желательно не более 5-6 В. 

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Благодарю.Будет ли развитие проекта и дальше?

svm
Offline
Зарегистрирован: 06.11.2016

fly245 пишет:

Благодарю.Будет ли развитие проекта и дальше?

Пока все устраивает. Если в новогодние праздники с будуна, какая идея придет , то что нибудь добавим. Но это будет другая конструкция, т.к. в этот корпус уже ничего не впихнуть. Только программно.

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

день добрый, давно темка не обновлялась, автор не стал дальше проект развивать?

Andry Smart
Offline
Зарегистрирован: 06.09.2016

так автор сделал то, что хотел. а я так и не доделал.

умер дисплей. потом раздавил вообще прототип. (наступил случайно)

собираюсь купить новое железо спаять. и продолжить делать автопробник.

правда посещают меня грешные мысли все же на stm32 сделать ...но страшновато. а вдруг я с ним не разберусь.

svm
Offline
Зарегистрирован: 06.11.2016

Xumuk пишет:

день добрый, давно темка не обновлялась, автор не стал дальше проект развивать?

Запал пропал.

В принципе все устраивает, но при поиске неисправностей или демонтаже деталей с плат доноров чувствуется острая необходимость хотя-бы грубого  измерения емкостей и особенно ESR. Из недстатков сегодняшней констукции - мелковат корпус. И в руке неудобно лежит и найти в бардаке трудно. Измерение емкостей несколько раз пытался реализовать чисто программно, но все время что-то отвлекает. Несколько человек начинали делать этот пробник. Может у них что-то более функциональное получилось.

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

как я понял у Вас есть 3д принтер, на нем какой угодно корпус можно сделать=))а в бардаке можно найти наприменив яркий цвет корпуса=)

а запал это да бывает такое дело)))) 

ромашка
ромашка аватар
Offline
Зарегистрирован: 01.05.2019

Xumuk пишет:

как я понял у Вас есть 3д принтер, на нем какой угодно корпус можно сделать=))а в бардаке можно найти наприменив яркий цвет корпуса=)

а запал это да бывает такое дело)))) 

Оранжевый подойдет? ))) https://youtu.be/iFZO_ymd4HQ  


#include <Adafruit_SSD1306.h>
#include "arduinoFFT.h" //github.com/kosme/arduinoFFT

arduinoFFT FFT = arduinoFFT();

const uint16_t samples = 128; //This value MUST ALWAYS be a power of 2
double vReal[samples];
double vImag[samples];

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

void setup()
{
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)
}

void loop()
{
  int scale = analogRead(A2);
  double samplingFrequency = 100*(scale/100)+10;
  double dt_us = 1000000/samplingFrequency;
  unsigned long tb = micros();
  int i;

  for(i=0; i<samples; i++)
  {
  vReal[i] = analogRead(A1);
  vImag[i] = 0;
  while(micros() - tb < dt_us) {}
  tb += dt_us;
  }

  FFT.Windowing(vReal, samples, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
  FFT.Compute(vReal, vImag, samples, FFT_FORWARD);
  FFT.ComplexToMagnitude(vReal, vImag, samples);
  double P = FFT.MajorPeak(vReal, samples, samplingFrequency);

  float vm=0;

  for (i=2; i<samples/2; i++)
  {
  vm = vm<vReal[i] ? vReal[i] : vm;
  }

  for (i=2; i<samples/2; i++)
  {
  display.fillRect(i, 32-vReal[i]/vm*32, 1, vReal[i]/vm*32+1, WHITE);
  }


  display.setTextColor(WHITE);
  display.setCursor(60,1);
  display.print("Peak:");
  int precision = P<10 ? 1 : 0;
  display.print(P,precision);
  display.println("Hz");

  display.setCursor(60,10);
  display.print("0..");
  display.print(samplingFrequency/2,0);
  display.println("Hz");

  display.display();
  display.clearDisplay();
  }

 

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

ромашка пишет:

Xumuk пишет:

как я понял у Вас есть 3д принтер, на нем какой угодно корпус можно сделать=))а в бардаке можно найти наприменив яркий цвет корпуса=)

а запал это да бывает такое дело)))) 

Оранжевый подойдет? ))) https://youtu.be/iFZO_ymd4HQ  


#include <Adafruit_SSD1306.h>
#include "arduinoFFT.h" //github.com/kosme/arduinoFFT

arduinoFFT FFT = arduinoFFT();

const uint16_t samples = 128; //This value MUST ALWAYS be a power of 2
double vReal[samples];
double vImag[samples];

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

void setup()
{
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)
}

void loop()
{
  int scale = analogRead(A2);
  double samplingFrequency = 100*(scale/100)+10;
  double dt_us = 1000000/samplingFrequency;
  unsigned long tb = micros();
  int i;

  for(i=0; i<samples; i++)
  {
  vReal[i] = analogRead(A1);
  vImag[i] = 0;
  while(micros() - tb < dt_us) {}
  tb += dt_us;
  }

  FFT.Windowing(vReal, samples, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
  FFT.Compute(vReal, vImag, samples, FFT_FORWARD);
  FFT.ComplexToMagnitude(vReal, vImag, samples);
  double P = FFT.MajorPeak(vReal, samples, samplingFrequency);

  float vm=0;

  for (i=2; i<samples/2; i++)
  {
  vm = vm<vReal[i] ? vReal[i] : vm;
  }

  for (i=2; i<samples/2; i++)
  {
  display.fillRect(i, 32-vReal[i]/vm*32, 1, vReal[i]/vm*32+1, WHITE);
  }


  display.setTextColor(WHITE);
  display.setCursor(60,1);
  display.print("Peak:");
  int precision = P<10 ? 1 : 0;
  display.print(P,precision);
  display.println("Hz");

  display.setCursor(60,10);
  display.print("0..");
  display.print(samplingFrequency/2,0);
  display.println("Hz");

  display.display();
  display.clearDisplay();
  }

 

d cnh

в строке 55 ошибка после цифры 10?

и еще в стркое 43

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Xumuk пишет:

в строке 55 ошибка после цифры 10?

строка синтаксически нормальная, без ошибок.  логику не отслеживал. 

читать "Тернарный оператор Си"

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

DetSimen пишет:

Xumuk пишет:

в строке 55 ошибка после цифры 10?

строка синтаксически нормальная, без ошибок.  логику не отслеживал. 

читать "Тернарный оператор Си"

спасибо, почитаю, не знал о таком

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

интересно Andry Smart доделал свой автомобильный пробник или нет

svm
Offline
Зарегистрирован: 06.11.2016

ромашка пишет:

Оранжевый подойдет? ))) https://youtu.be/iFZO_ymd4HQ  


Так у него рожа и так оранжевая (фото пост #187)? Все равно теряется. Кстати - оранжевый млй любимый цвет. У меня и токарник оранжевый и два фрезера. Дело в том, что мне достался ящик оранжевой аэрозольной краски. Друг хотел "Газель" подкрасить, но тон немного не подошел.

Andry Smart
Offline
Зарегистрирован: 06.09.2016

та был на процентов 80 готов а потом я его сломал. вот собираюсь возобновить

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

Andry Smart пишет:

та был на процентов 80 готов а потом я его сломал. вот собираюсь возобновить

а вы уже реализовали на нем осцилограф?Тот код,что вы выкладывали, у меня просто есть все детальки, думал залить код или нет проверить

Andry Smart
Offline
Зарегистрирован: 06.09.2016

ну код на 90 процентов готов. схема уже перетерпела кучу изменений.

изменил измерения сопротивления (увеличил сопротивления одного из резисторов).

сделал два режима 0-5в и 0-21в (и переключается кнопкой но програмно (хочу реализовать автопереключение, что бы от кнопки избавится)).

сам режим пробника переключается кнопкой осциллограф/пробник

в пробнике оставил прозвонку, сопротивление, напряжение а частотомер выбросил (частоту показывает осциллограф)

код не успел отладить и поубирать глюки. да и не помню какой исходник из множества самый готовый .

в воскресение выходной вот и покопаюсь. а дисплейчик на днях должен у меня  появится.

 

продолжу все таки его делать. уж очень не хватает в работе...

 

svm
Offline
Зарегистрирован: 06.11.2016

С днем победы. Добьем гада.

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

svm пишет:

С днем победы. Добьем гада.

спасибо!Взаимно!

Andry Smart
Offline
Зарегистрирован: 06.09.2016

сегодня выходной, а "Новая почта" типа работаетю но только толку нет. А я надеялся в выходной получу дисплей и буду химичить.

а посылка прийдет только завтра. А руки чешутся.

Andry Smart
Offline
Зарегистрирован: 06.09.2016

и всех с победой.

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

Andry Smart пишет:

сегодня выходной, а "Новая почта" типа работаетю но только толку нет. А я надеялся в выходной получу дисплей и буду химичить.

а посылка прийдет только завтра. А руки чешутся.

Ждем с нетерпением=) 

п.с. и вас с праздником=)

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

Всем Привет=))) подниму немного тему, а то уже долеко ушла=))) Уважаемый Andry Smart не делали чего нового с пробником?)

satelit 2
Offline
Зарегистрирован: 04.12.2016

у меня уже как год лежит пылиться недоделанный. впринципе доделанный, калибровать только надо. а сейчас еще вспомнил, что не помню где находиться исходный скетч, печально. большой плюс, что он гдето на этой ветке форума или я могу скачать последнюю версию. правда мой собран на трехсемисегментном индикаторе, для практичности, ронять можно, или запустить в кого нибудь