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

Zasilanie to 6 paluszków. Rysunek specjalnie na zamówienie.

[ Dodano: 29-12-2015, 21:45 ]

Chumanista, ale w jaki sposób to może wpłynąć na czujnik jeśli zasilanie jest z innego źródła?

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.