Skocz do zawartości

Czujnik ultradźwiękowy jako system bezpieczeństwa


Pomocna odpowiedź

Napisano

witam, chciałbym się zapytać jak skryptowo uwzględnić zabezpieczenie przed kolizjami pojazdu mając na uwadze, że pomiar miałby się odbywać przy jeździe na wprost i cyklicznie a przy tym nie zakłócał sterowania pojazdem

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.

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

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.

cieszyn, podaj więcej konkretnych informacji na jakim sprzęcie pracujesz i w czym programujesz, bo inaczej ciężko pomagać...

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.

cieszyn, i to jest jasny opis? Nadal nie wiemy, co programujesz. Czy kod jest gotowy, czy piszesz go od zera itd.

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 ]

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

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...