Первый исходник: Измерение сопротивления с помощью Arduino
Принцип: Падение напряжения на проводниках прямо пропорционально их сопротивлениям
Схема подключения к Arduino Nano:
Принципиальная схема:
Скейтч:
Код
#define PIN A0 //работаем с пин A0 #define RESISTOR 10000.0 //значение постоянного сопротивления Ом #define Va 5.0 // напряжение питания //ARDUINO имеет аналоговый вход. При чтении с него возвращается значение от 0 до 1023
void setup(void) { Serial.begin(9600); //для работы с COM портом }
void loop(void) { float data; //данные с A0 float V; //напряжение в средней точке
data = analogRead(PIN); //читаем Serial.print("A0 -> "); //выводим на COM порт "A0 -> " Serial.println(data); //выводим на COM порт значение A0 и переводим на новую строку V = (Va/1023.0)*data; //вычислим напряжение Serial.print("Voltage -> "); //выводим на COM порт "Voltage -> " Serial.print(V); //выводим на COM порт значение напряжения Serial.println(" V"); //выводим на COM порт " V" и переводим на новую строку
data = (1023.0 / data) - 1; //вычисляем сопротивление в Омах data = RESISTOR / data; //вычисляем сопротивление в Омах
Serial.print("Resistance -> ");//выводим на COM порт "Resistance -> " Serial.print(data); //выводим на COM порт значение сопротивления в Омах Serial.print(" Om || "); //выводим на COM порт " Om || "
data = data/1000; //вычисляем сопротивление в килоОмах
Serial.print(data); //выводим на COM порт значение сопротивления в килоОмах Serial.println(" kOm"); //выводим на COM порт " kOm" и переводим на новую строку
delay(500); //ждем пол секунды }
Данный пример будет работать с погрешностью все зависит от питания Arduino
//Turn on a digit for a short amount of time switch(digit) { case 1: digitalWrite(digit1, DIGIT_OFF); break; case 2: digitalWrite(digit2, DIGIT_OFF); break; case 3: digitalWrite(digit3, DIGIT_OFF); break; case 4: digitalWrite(digit4, DIGIT_OFF); break; }
//Turn on the right segments for this digit lightNumber(toDisplay % 10); toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS); //Display digit for fraction of a second (1us to 5000us, 500 is pretty good)
//Turn off all segments lightNumber(10);
//Turn off all digits digitalWrite(digit1, DIGIT_ON); digitalWrite(digit2, DIGIT_ON); digitalWrite(digit3, DIGIT_ON); digitalWrite(digit4, DIGIT_ON); }
while( (millis() - beginTime) < 10) ; //Wait for 20ms to pass before we paint the display again }
//Given a number, turns on those segments //If number == 10, then turn off number void lightNumber(int numberToDisplay) {