Skocz do zawartości

Czujnik ultradźwiękowy jako system bezpieczeństwa


cieszyn

Pomocna odpowiedź

No właśnie tak: czujnik umieszczony z przodu pojazdu patrzący do przodu, jakaś lampka zapalająca się gdzieś między prędkościomierzem a obrotomierzem sygnalizująca że przeszkoda jest za blisko w stosunku do drogi hamowania i tyle. Nie będzie Ci przeszkadzało w kręceniu kierownicą a i skrypt żaden nawet nie potrzebny bo i jak diodka miałby zakłócać sterowanie pojazdem. Użyteczność żadna, sonar jest za wolny i ma za mały zasięg, ale przy prędkości 5km/h na parkingu zadziała. Zadanie wykonane.

Link do komentarza
Share on other sites

chodziło mi o pojazd RC

  if (webClickRequest.indexOf("?lewo") > 0) {
           delay(20);
           lewo();
           delay(500);
           zatrzymaj();
         }
         else if (webClickRequest.indexOf("?plewo") > 0) {
           if (uS >= 5)  {
             delay(20);
             zatrzymaj;
             Serial.print("Odleglosc: ");
             Serial.print(uS / US_ROUNDTRIP_CM);
             Serial.println("cm");
             delay(500);

           }
           {
             delay(20);
             plewo();
           }
         }

         else if (webClickRequest.indexOf("?przod") > 0) {
           if (uS >= 5)  {
             delay(20);
             zatrzymaj;
             Serial.print("Odleglosc: ");
             Serial.print(uS / US_ROUNDTRIP_CM);
             Serial.println("cm");
             delay(500);

           }
           {
             delay(20);
             przod();
           }
         }

to jest fragment kodu, problem w tym, że pojazd nie reaguje na przeszkody

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

Niestety nie mam pojęcia jak to ma wyglądać, bo nie wiem ani co to za język programowania, ani jakich bibliotek używa, ani na czym się ma wykonywać, a moja kryształowa kula akurat wyczerpała baterie i nie działa. Polecam przeczytać instrukcję do tego twojego pojazdu RC, czymkolwiek on jest.

Link do komentarza
Share on other sites

oki, arduino uno r3, programuję w aplikacji arduino ©

postaram się rozjaśnić,

w momencie kiedy kliknę jedź prosto pojazd jedzie, ale chciałbym aby jadąc badał odległość i w razie napotkania przeszkody zatrzymał się, próbowałem zastosować pętlę, ale efekt był taki, że nie mogłem zmienić kierunku jazdy tylko pętla blokowała.

Link do komentarza
Share on other sites

poniżej zamieszczam kod, problem w tym, że chyba mi czujnik ultradźwiekowy nie mierzy odległości

#include <SPI.h>
#include <Ethernet.h>


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 14);

EthernetServer server(80);

String webClickRequest;

#include <NewPing.h>
int in1 = 7;
int in2 = 6;
int enA = 5;
int in3 = 8;
int in4 = 9;
int led1 = A3;
int led2 = A2;
#define TRIGGER_PIN  A4
// Deklaracja pinu Arduino do ktorego podlaczony jest Trig
#define ECHO_PIN     A5
// Deklaracja pinu Arduino do ktorego podlaczone jest Echo
#define MAX_DISTANCE_CM 250 
// Deklaracja maksymalnego zasiegu pomiaru.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE_CM); 
int odlegloscsonaru;      

void setup()
{

 Serial.begin(9600);

 // ustaw wszystkie piny sterownika silnikĂłw na output

 Ethernet.begin(mac, ip);
 server.begin();
 Serial.print("adres ip serwera: ");
 Serial.println(Ethernet.localIP());
             pinMode(led1, OUTPUT);
             pinMode(led2, OUTPUT);



}


void loop() {
 EthernetClient client = server.available();
 if (client) {
   while (client.connected()) {
     if (client.available()) {
       char c = client.read();


       //read the incoming HTTP request
       if (webClickRequest.length() < 100) {

         //store the request to a string
         webClickRequest += c;

       }


       if (c == '\n') {


         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();
         client.println("<HTML>");
         client.println("<HEAD>");
         client.println("<TITLE>Panel sterowania pojazdem autonomicznym</TITLE>");
         client.println("<STYLE>");
         client.println("body{margin:50px 0px; padding:0px; text-align:center;}");
         client.println("h1{text-align: center; font-family:\"TRAJAN PRO\",Arial, Helvetica, sans-serif; font-size:24px;}");
         client.println("a{text-decoration:none; width:75px; height:50px; border-color:black; font-family:\"TRAJAN PRO\",Arial, Helvetica, sans-serif; padding:6px; background-color:#a4eaa9; text-align:center; border-radius:10px 10px 10px; font-size:24px;}");
         client.println("a:link {color:white;}");
         client.println("a:visited {color:white;}");
         client.println("a:hover {color:blue;}");
         client.println("a:active {color:white;}");
         client.println("</STYLE>");
         client.println("</HEAD>");
         client.println("<BODY>");
         client.println("<H1>Panel sterowania pojazdem autonomicznym</H1>");
         client.println("<br />");
         client.println("<br />");
         client.println("<a href=\"/?plewo\"\">DO PRZODU W LEWO</a>");
         client.println(" ");
         client.println("<a href=\"/?przod\"\">DO PRZODU</a>");
         client.println(" ");
         client.println("<a href=\"/?pprawo\"\">DO PRZODU W PRAWO</a>");
         client.println("<br />");
         client.println("<br />");
         client.println("<br />");
         client.println("<a href=\"/?lewo\"\">LEWO</a>");
         client.println(" ");
         client.println("<a href=\"/?zatrzymaj\"\">STOP</a>");
         client.println(" ");
         client.println("<a href=\"/?prawo\"\">PRAWO</a>");
         client.println("<br />");
         client.println("<br />");
         client.println("<br />");
         client.println("<a href=\"/?tlewo\"\">DO TYLU W LEWO</a>");
         client.println(" ");
         client.println("<a href=\"/?tyl\"\">DO TYLU</a>");
         client.println(" ");
         client.println("<a href=\"/?tprawo\"\">DO TYLU W PRAWO</a>");
         client.println("</BODY>");
         client.println("</HTML>");


         delay(1);
         client.stop();


         if (webClickRequest.indexOf("?lewo") > 0) {
           delay(10);
           lewo();
           delay(500);
           zatrzymaj();
         }
         else if (webClickRequest.indexOf("?plewo") > 0) {

             delay(10);
             plewo();
         }

         else if (webClickRequest.indexOf("?przod") > 0 && (odlegloscsonaru >3 || odlegloscsonaru <0 )) {

             delay(10);
             przod();

         }
         else if (webClickRequest.indexOf("?pprawo") > 0) {

             delay(10);
             pprawo();
         }

         else if (webClickRequest.indexOf("?prawo") > 0) {
           delay(10);
           prawo();
           delay(500);
           zatrzymaj();
         }

         else if (webClickRequest.indexOf("?tlewo") > 0) {
           delay(10);
           tlewo();
         }

         else if (webClickRequest.indexOf("?tyl") > 0) {
           delay(10);
           tyl();
         }

         else if (webClickRequest.indexOf("?tprawo") > 0) {
           delay(10);
           tprawo();

         }
         else if (webClickRequest.indexOf("?zatrzymaj") > 0) {
           delay(10);
           zatrzymaj();
         }

         webClickRequest = "";

       }
     }
   }
 }
}
//funkcje
void prawo()
{
 digitalWrite(in3, LOW);
 digitalWrite(in4, HIGH);
 digitalWrite(led1, LOW);
 digitalWrite(led2, LOW);
}
void lewo()
{
 digitalWrite(in3, HIGH);
 digitalWrite(in4, LOW);
 digitalWrite(led1, LOW);
 digitalWrite(led2, LOW);
}
void przod() {
 digitalWrite(in1, LOW);
 digitalWrite(in2, HIGH);
 digitalWrite(led1, LOW);
 digitalWrite(led2, HIGH);
}
void tyl()
{
 digitalWrite(in1, HIGH);
 digitalWrite(in2, LOW);
 delay(70);
 digitalWrite(led1, LOW);
 delay(70);
 digitalWrite(led1, HIGH);
 delay(20);
 digitalWrite(led2, LOW);
}
void tlewo()
{
 digitalWrite(in1, HIGH);
 digitalWrite(in2, LOW);
 digitalWrite(in3, HIGH);
 digitalWrite(in4, LOW);
 digitalWrite(led1, HIGH);
 digitalWrite(led2, LOW);
}
void tprawo()
{
 digitalWrite(in1, HIGH);
 digitalWrite(in2, LOW);
 digitalWrite(in3, LOW);
 digitalWrite(in4, HIGH);
 digitalWrite(led2, HIGH);
 digitalWrite(led2, LOW);
}
void plewo()
{
 digitalWrite(in1, LOW);
 digitalWrite(in2, HIGH);
 digitalWrite(in3, HIGH);
 digitalWrite(in4, LOW);
 digitalWrite(led1, LOW);
 digitalWrite(led2, HIGH);
}
void pprawo()
{
 digitalWrite(in1, LOW);
 digitalWrite(in2, HIGH);
 digitalWrite(in3, LOW);
 digitalWrite(in4, HIGH);
 digitalWrite(led1, LOW);
 digitalWrite(led2, HIGH);
}
void zatrzymaj()
{
 digitalWrite(in1, LOW);
 digitalWrite(in2, LOW);
 digitalWrite(in3, LOW);
 digitalWrite(in4, LOW);
 digitalWrite(led2, HIGH);
 delay(70);
 digitalWrite(led2, LOW);
 delay(70);
 digitalWrite(led2, HIGH);
 delay(20);
}
void odleglosc()
{
 delay(50);     
 int uS;  
 uS = sonar.ping();
 odlegloscsonaru=(uS / US_ROUNDTRIP_CM);
 Serial.print(odlegloscsonaru); 
if (uS<=3 || uS>0){

digitalWrite(in1, LOW);
 digitalWrite(in2, LOW);

 }
else if (uS>3 || uS<0){
 }
}

void omin()
{
}

[ Dodano: 05-03-2016, 18:04 ]

Link do komentarza
Share on other sites

Nawet jeśli czujnik działa poprawnie (co można sprawdzić bardzo prostym programem więc nie wiem z czym masz problem), to Twój program wygląda na zdalnie sterowaną zabawkę. Tak jest napisany i tak działa - wykonuje wyłącznie proste polecenia, zero autonomii. A teraz chcesz by samochodzik nagle zmądrzał i robił coś samodzielnie. To wcale nie jest proste przy dotychczasowym podejściu, bo z jednowątkowego kodu typu czekaj_na_komendę-wykonaj-wróć_do_początku chcesz zrobić coś co będzie wykonywało Twoje polecenia i jednocześnie śledziło otoczenie. Zastanów się jak to zrobić w ogólności. Być może będzie to wymagało przebudowania całego kodu i zmiany podejścia do tego jak piszesz swoje programy i jak myślisz o ich wykonywaniu w procesorze. Do tego co zrobiłeś, łatwo autonomicznych zachowań nie wbudujesz bo przy jednowątkowym kodzie albo zabawka przestanie reagować na komendy (gdy będzie robić coś samodzielnie) albo nie zauważy przeszkody bo wykonuje głównie jakiś delay.

  • Lubię! 1
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.