Skocz do zawartości

Czujnik ultradzwiękowy źle odczytuje wartości przy podłączniu serwa. (o.O)


Zygzak

Pomocna odpowiedź

Programowałem robota gdy zauważyłem że czujnik ultradźwiękowy źle odczytuje wartości, w końcu (po około 4 godzinach babrania się z tym) zauważyłem że gdy odłączam kabel sterujący serwem skręcającym głowę robota wszystkie wartości na monitorze szeregowym zaczynają się zgadzać 🤯 . Gdy podłączam z powrotem 5 centymetrów w realu dla czujnika zaczyna wahać się od 120 do 1350. Zadeklarowałem serwo na innym pinie i przepiąłem, bez zmian. Wymieniłem serwo, nadal to samo (ale i tak się opłacało bo robot wreszcie przestał rzucać się jak opętany i aż przyjemnie się słucha tego wziumm, wziumm na nowym serwie). Serwo jest zasilane przez przetwornice. Wyjaśni mi ktoś jakim cudem serwo może mieć wpływ na odczyty z czujnika ultradźwiękowego?

Tutaj nie dokończony program, ale wątpię żeby to była jego wina:

#include <Servo.h> 

Servo myservo; 
Servo myservo2;
Servo gonsienica1;
Servo gonsienica2;                

int CM;            //odleglosc w cm
long CZAS;         //dlugosc powrotnego impulsu w uS

int x1;           //długość pomieszczenia, z przodu
int x2;           //długość pomieszczeniani z tyłu robota   
int y1;           //szerokość pomieszczenia z lewej strony
int y2;           //szerokość pomieszczenia z prawej strony


void setup() 
{ 

 gonsienica1.attach(6);
 gonsienica2.attach(11);
 myservo2.attach(10);     // serwo podnoszące głowę 
 myservo.attach(9);       // serwo skręcające głowę

 pinMode(13, OUTPUT);     //buzer
 pinMode(12, OUTPUT);     // przekaźnik do ramienia
 pinMode(7, OUTPUT);      //przekaźnik manipulatora
 pinMode(8, OUTPUT);      //przekaźnik manipulatora
 pinMode(5, OUTPUT);      //ustawienie pinu 5 w Arduino jako wyjscie czujnika
 pinMode(4, INPUT);       //ustawienie pinu 4 w Arduino jako wejscie czujnika

 myservo.write(70);      // 100-spójrz przed siebie, 
 myservo2.write(80);      // 100-spójrz przed siebie, wyprostuj pochylenie
 gonsienica1.write(90);
 gonsienica2.write(90);

}
void loop() 
{ 
 myservo.write(0); 	      // 0-spójrz w lewo
 pomiar_odleglosci();
 delay(2000);
 y1=CM;
 myservo.write(180); 	      // 180-spójrz w prawo
 pomiar_odleglosci();
 delay(2000);
 y2=CM;
 myservo.write(70); 	  // 70-spójrz przed siebie
 myservo2.write(80);
 pomiar_odleglosci();
 delay(2000);
 x1=CM;

  if(y1<15)
 {
  gonsienica1.write(180);
  gonsienica2.write(180);
  delay(4100);
 }
 else
 {
         gonsienica1.write(0);
  gonsienica2.write(0);
  delay(4100);
 }

 gonsienica1.write(90);
 gonsienica2.write(90);
 pomiar_odleglosci();
 delay(2000);
 x2=CM;

/*


myservo.write(0); 	      // 0-spójrz w lewo
delay(1000);
myservo.write(70); 	  // 100-spójrz przed siebie
myservo2.write(0);		  //spojrz w górę
delay(1000);
myservo2.write(180);     
delay(1000);
myservo2.write(80); 	  // 100-spójrz przed siebie, wyprostuj pochylenie
myservo.write(180); 	  // 180-spójrz w prawo
delay(1000);
*/
}


void chwyc()
{
digitalWrite(7, HIGH);
delay(1050);
digitalWrite(7, LOW);
delay(2500);
digitalWrite(8, HIGH);
delay(1050);
digitalWrite(8, LOW);
}
void pomiar_odleglosci()
{
 digitalWrite(5, HIGH);      
 delayMicroseconds(10);
 digitalWrite(5, LOW);
 CZAS = pulseIn(4, HIGH);
 CM = CZAS / 58;              
}
void jedz_prosto()
{
   gonsienica1.write(180);
   gonsienica2.write(0);
   delay(1900);
   gonsienica1.write(180);       //korekcja skręcania 
   gonsienica2.write(180);
   delay(85);
} 
void jedz_wstecz()
{
gonsienica1.write(0);
   gonsienica2.write(180);
   delay(1900);
   gonsienica1.write(0);       //korekcja skręcania 
   gonsienica2.write(0);
   delay(75);
}
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Chumanista, Czemu proponujesz jeszcze ten ceramiczny? Wiem że one nie mają określonej polaryzacji, ale poza tym to kiedy je używać? Zawsze używałem elektrolitycznych.

A tym twoim wzorze to wujek google chyba nie słyszał bo go znaleźć nie umiem.

Link do komentarza
Share on other sites

Pisałem ze zmieniłem serwo na cichsze, efekt jest taki sam jak przedtem, zresztą zaraz obok, jeszcze bliżej, jest drugie serwo które steruje pochyleniem ,,głowy". Jest głośniejsze od tamtego.

[ Dodano: 29-12-2015, 22:43 ]

Chumanista, podłączyłem teraz zasilanie do serwa przez osobny stabilizator 5V dałem do niego standardowo dwa kondensatory ceramiczne i jeden duży elektrolityczny i działa, ale niezbyt podoba mi się takie rozwiązanie.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.