
Ура ! Заработало как надо )))
использовал такой вот датчик линии
3d-diy.ru/wiki/arduino-da…datchik-linii-analogovyy/
выпаял из его светодиод инфракрасный и подключил его по данной схеме а сам датчик линии служит фотоприемником …
Подключение идет на минус катушки и на +12 вольт …
************************************************
можно было наверно оптопару использовать вместо датчика линии…
********************************************************************
#include <servo.h>
Servo servo; //объявить серво назвать servo
#include <wire.h> // Спец проект youtube — канала VirF Live Productions
#include <liquidcrystal_I2C.h> // Адрес канала www.youtube.com/c/VirFLiveProductions
LiquidCrystal_I2C lcd(0x27,16,2); // Группа посвященная каналу vk.com/virf_live_productions
unsigned long lastflash;
int RPM0, RPM, pos;
unsigned int min_pos=0; //минимальная частота оборотов
unsigned int max_pos=6000; //максимальная частота оборотов
unsigned long Volt = 0; // периодической проверки напряжения
unsigned long pozic = 0; // периодической проверки напряжения
///////////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(9600); //открыть порт
attachInterrupt(0, sens, RISING); //подключить прерывание на 2 пин при повышении сигнала
pinMode(3, OUTPUT); //3 пин как выход
digitalWrite(3, HIGH); //подать 5 вольт на 3 пин
servo.attach(4); //серво на 4 порту
/////////////////
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Start ");
RPM0=0;
///////////////////////////////////////////////////////////////////////////
}
void sens() {
RPM=60/((float)(micros()-lastflash)/500000); //расчет
lastflash=micros(); //запомнить время последнего оборота
RPM = constrain(RPM, 1, 6000);// ограничиваем RPM диапазоном от 200 до 9999
}
void loop() {
///////////////////////////////////////////////////////////////////////////
if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды
RPM=0; //считаем что RPM 0
pos=0;
servo.write(pos); //повернуть серву
lcd.setCursor(0, 1);
lcd.print("pos-");
lcd.print(pos);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print("<");
lcd.print(RPM);
lcd.print(":ob/m ~");
}
////////////////////////////////////////////////////////
if (millis()-Volt > 1000){ //Проверять напряжение раз 30 секунд
Volt=millis(); //Время последней проверки
Voltage();} // Вызываем функцию Voltage
/////////////////////////////////////////////////////////
// Serial.println(RPM); //вывод в порт
pos=map(RPM, min_pos, max_pos, 0, 180); //перевести значение от минимума до максимума в угол поворота сервы (от 0 до 180)
servo.write(pos); //повернуть серву
lcd.setCursor(0, 1);
lcd.print("pos-");
lcd.print(pos);
lcd.print(" ");
lcd.setCursor(8, 1);
lcd.print("<");
lcd.print(RPM);
lcd.print(":ob/m ~");
// Serial.println();
delay(50); //задержка для стабильности
}
void Voltage() { //В функции Voltage считаем напряжение и просадку акб
static float Vin = 0.00; //Для замера напряжения
static float Tem = 0.00; //Для замер
Vin = (analogRead(A0) * 15.0) / 1024 ; //Формула подсчета напряжения, 16.56 — значение подстройки
//Tem = (analogRead(A2) * 5.0) / 1024 ; //Формула подсчета напряжения, 16.56 — значение подстройки
Tem = analogRead(A2) ; //Формула подсчета напряжения, 16.56 — значение подстройки
Tem =(420-Tem)/1.131;
///Vout = round (Vin); // Округление
lcd.setCursor(0, 0);
lcd.print("V-");
lcd.print(Vin);
lcd.print(" /t ");
lcd.print(Tem);
lcd.print(" ");
}
//////////////////////////////////////////////////////////////////////////////////////////////////////







Комментарии 3
а возможно его переподключить вывод инфо через сервомотор vid2905 через драйвер A4988?
Не знаю
через драйвер A4988