Добрый день, подскажите код "считывания" электрических сигналов с пьезопластины... Я так понимаю, что это напряжение? спасибо.
Сначала вам нужно узнать точные электронные характеристики вашей пластины. Потом, скорее всего, придется собрать собрать усилитель сигнала. И только потом можно будет думать о коде.
На форуме и вообще в интеренет полно тем про самодельные ударные на ардуино. Смотрите, что там люди делают.
Таким не убью ардуинку? Или резисторы нужны все таки... Или резисторы там нужны для градации барабанов? Посмотрел, кода сложные считывание с нескольких пьезиков...еще я так понял что делятся по силе сигнала... Мне бы просто код считывания с одного и вывода на монитор порта... Я так понимаю, это считывание с аналового пина?
Правильно понимаю, что надо найти код, который программирует вольтметр? А это аналоговый вход? Оно? Код (C++): // программа измерения напряжения // на аналоговых входах A0 и A1 #include <MsTimer2.h> #define MEASURE_PERIOD 500 // время периода измерения #define R1 15. // сопротивление резистора R1 #define R2 4.22 // сопротивление резистора R2 int timeCount; // счетчик времени float u1, u2; // измеренные напряжения void setup() { Serial.begin(9600); // инициализируем порт, скорость 9600 MsTimer2::set(1, timerInterupt); // прерывания по таймеру, период 1 мс MsTimer2::start(); // разрешение прерывания } void loop() { // период 500 мс if ( timeCount >= MEASURE_PERIOD ) { timeCount= 0; // чтение кода канала 1 и пересчет в напряжение u1= ((float)analogRead(A0)) * 5. / 1024. / R2 * (R1 + R2); // чтение кода канала 2 и пересчет в напряжение u2= ((float)analogRead(A1)) * 5. / 1024. / R2 * (R1 + R2); // передача данных через последовательный порт Serial.print("U1 = "); Serial.print(u1, 2); Serial.print(" U2 = "); Serial.println(u2, 2); } } // обработка прерывания 1 мс void timerInterupt() { timeCount++; }
А вот еще попроще Код (C++): #include <LiquidCrystal.h> LiquidCrystal lcd(7, 8, 9, 10, 11, 12); int analogInput = 0; float vout = 0.0; float vin = 0.0; float R1 = 100000.0; // сопротивление R1 (100K) float R2 = 10000.0; // сопротивление R2 (10K) int value = 0; void setup(){ pinMode(analogInput, INPUT); lcd.begin(16, 2); lcd.print("DC VOLTMETER"); } void loop(){ // считывание аналогового значения value = analogRead(analogInput); vout = (value * 5.0) / 1024.0; vin = vout / (R2/(R1+R2)); if (vin<0.09) { vin=0.0;// обнуляем нежелательное значение } lcd.setCursor(0, 1); lcd.print("INPUT V= "); lcd.print(vin); delay(500); }
Вы правы... почитал... Отцифровывает в диапазоне от 0 до 1023. А как узнать чему соответствует 1023??? Допустим я мерю напряжение от пьезо пластины, как понять какой максимальное у нее напряжение? Как понять чему реально сооответствует 1023? Или это надо калибровать и назначать?
в абдурине - напряжению питания. А вообще настраивается так, как программисту удобно. Да. В твоем случае - нет. Для чего? Достаточно знания того, что это максимальное значение из всех возможных.
Нужно ещё раз почитать про analogRead, только уже нормальный источник найдите в амперке вики, arduino.ru или arduino.cc
Вроде проясняется... Скажите, а можно ли analogRead(A0); в течении кода менять на write. Иными словами одним пьезиком и излучать и принимать?
Ответ "можно". Ознакомьтесь с pinMode, digitalWrite и analogWrite. Обратите внимание, что analogRead и analogWrite работают не со всеми пинами и они разные