Witam. - jestem zielony kiedyś bawiłem się w atmedze ale to było "dawno dawno temu "
Mam problem - chciałbym wykonać program który pilnuje obroty silnika. częściowo napisałem i wiem że mam bałagan w nim ale nie wiem jak poprawnie wykonać polecenie zliczające w czasie ilość impulsów.
dokładniej układ ma wyliczyć 50 impulsów na sekundę. w przypadku za niskich obrotów przesuwa serwo o 6 stopni aż do osiągnięcia 50 impulsów na sekundę jeśli będzie ponad 50 impulsów to ma odjąć. niby ma mto napisane ale nie mam tego zliczania.
proszę o pomoc. poniżej kod
proszę o poprawienie. - dopisanie tego co brakuje.
pinMode(10, INPUT_PULLUP); - wejście sygnału zliczającego z czujnika halla do arduino
Mam problem - chciałbym wykonać program który pilnuje obroty silnika. częściowo napisałem i wiem że mam bałagan w nim ale nie wiem jak poprawnie wykonać polecenie zliczające w czasie ilość impulsów.
dokładniej układ ma wyliczyć 50 impulsów na sekundę. w przypadku za niskich obrotów przesuwa serwo o 6 stopni aż do osiągnięcia 50 impulsów na sekundę jeśli będzie ponad 50 impulsów to ma odjąć. niby ma mto napisane ale nie mam tego zliczania.
proszę o pomoc. poniżej kod
proszę o poprawienie. - dopisanie tego co brakuje.
pinMode(10, INPUT_PULLUP); - wejście sygnału zliczającego z czujnika halla do arduino
Kod:
#include <LiquidCrystal.h>
#include <Servo.h> //Biblioteka odpowiedzialna za serwa
// select the pins used on the LCD panel ustawienia pinow wyswietlacza.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
Servo serwomechanizm; //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa
int pozycja = 0; //Aktualna pozycja serwa 0-180
int pozycja1; //Aktualna pozycja serwa przy dodoawaniu konta
int pozycja2; //Aktualna pozycja serwa przy odejmowaniu konta
int obroty = 800; //Aktualna prędkość
int zmiana = 6; //Co ile ma się zmieniać pozycja serwa?
void setup() //instrukcje wykonawcze startowe jednorazowo
{
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT); // przekażnik zezwalający na uruchomienie zapłonu
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
pinMode(10, INPUT_PULLUP); // impulsy wchodzące z wałka
digitalWrite(13, LOW); // wyłącz kontrolke i przekażnik zasilania.
serwomechanizm.attach(3); //Serwomechanizm podłączony do pinu 3
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0);
lcd.print("Kontrola ukladu"); // Wysłanie tekrtu gotowości
delay(3000);
digitalWrite(12, HIGH); // włącz sygnał
delay(2000);
digitalWrite(12, LOW); // wyłącz sygnał
lcd.setCursor(0,0);
lcd.print("Gotowy do STARTU"); // Wysłanie tekstu gotowości
delay(3000);
digitalWrite(13, HIGH); // włącz kontrolke i przekażnik zasilajacy cewkę
if ( obroty < 500) {
serwomechanizm.write(pozycja); //Wykonaj ruch startowy
// obiegu pętli spełniony jest WARUNEK */
lcd.setCursor(0,1);
lcd.print("brak odczytu"); // Wysłanie tekstuo braku napędu
}
}
void loop()
{
if ( obroty < 500) {
pozycja = 0;
serwomechanizm.write(pozycja); //ustaw serwer na 0 gdy niema obrotów
}
// pentla programu.
if ( obroty < 1500) { // obrowy są niższe niż 1500
serwomechanizm.write(pozycja1); // Wykonaj ruch dodatni
lcd.setCursor(0,0);
lcd.print("Predkosc: " ); // Wysłanie tekrtu gotowości
lcd.setCursor(11,0);
lcd.print(obroty); // Wysłanie tekrtu gotowości
/* Kod wykonywany tylko, gdy w danym obiegu pętli spełniony jest WARUNEK */
}
//Kod wykonywany przy każdym obiegu pętli
// -------------------------------mm
{
if ( obroty > 1500) { // obroty są wyższe niz 1500
serwomechanizm.write(pozycja1); // Wykonaj ruch dodatni
lcd.setCursor(0,0);
lcd.print("Predkosc: "); // Wysłanie tekrtu gotowości
lcd.setCursor(11,0);
lcd.print(obroty); // Wysłanie tekrtu gotowości
/* Kod wykonywany tylko, gdy w danym obiegu pętli spełniony jest WARUNEK */
}
//Kod wykonywany przy każdym obiegu pętli
pozycja1 = pozycja + zmiana; //Zwiększenie aktualnej pozycji serwa
delay(200); //Opóźnienie dla lepszego efektu
pozycja2 = pozycja - zmiana; //Zmniejszenie aktualnej pozycji serwa
delay(200); //Opóźnienie dla lepszego efektu
// -------------------------------mm
{
if ( obroty >=1450) {
lcd.setCursor(0,1);
lcd.print("Praca ok. "); // prędkośćnie niższa niż dopuszczalna
digitalWrite(12, LOW); // wyłącz sygnał
}
else {
lcd.setCursor(0,1);
lcd.print("brak synchronizacji."); // brak odpowiedniej prędkości
digitalWrite(12, HIGH); // włącz sygnał
}
{
if ( obroty <=1550) {
lcd.setCursor(0,1);
lcd.print("Praca ok. "); // prędkośćnie niższa niż dopuszczalna
digitalWrite(12, LOW); // wyłącz sygnał
}
else {
lcd.setCursor(0,1);
lcd.print("brak synchronizacji."); // brak odpowiedniej prędkości
digitalWrite(12, HIGH); // włącz sygnał
} }
//-------------------------lll
}
}
}