Skocz do zawartości

Tablica liderów


Popularna zawartość

Pokazuje zawartość z najwyższą reputacją 31.03.2020 w Posty

  1. 1 punkt
    Kochani! Moja wariacja na temat (koszt <0,5PLN/sztuka, czas operacyjny 100s/szt): wszelkie uwagi mile widziane...
  2. 1 punkt
    Witam! Jestem Mateusz, trafiłem tutaj ponieważ planuję samodzielnie zrobić kierownice do komputera
  3. 1 punkt
    Witam wszystkich Jestem Patryk, mam 29 lat, zaczynam programować w Pythone oraz bawię się elektroniką. Mam nadzieję, że dowiem się na tym forum wielu ciekawych rzeczy. Pozdrawiam
  4. 1 punkt
    Witam, Jako, że już parę dyszek na karku i obecnie sporo czasu to zaczynam swoją przygodę z inteligentnym domem. Na początek przyszło kilka modemcu na esp8266 i kilka czujników ds18b20. Chciałbym zacząć od pomiaru temperatur z kilku miejsc: z zewnąterz, z altanki, z garażu wolnostojącego, z piętra i parteru. Ze względu na brak możliwości połączeń tych czujników kablem, musi to się odbyć po wifi z każdego modułu osobno. Od soboty próbuję spiąć to w całość po udp, ale coś mi słabo idzie, mam nadzieję, że to forum pomoże mi rozwiązać moje problemy. pozdrawiam
  5. 1 punkt
    Kolejna część kursu zakończona. Podobnie jak kolega @leepa79 również wykorzystałem krańcówki oraz czujnik HC-SR04. Z tym, że u mnie krańcówki wykrywają przeszkody przed robotem, a HC-SR04 pomaga nie wjechał w przeszkody tyłem. Tutaj kod: #define R_LIGHT_SENSOR A0 #define L_LIGHT_SENSOR A1 #define L_SIDE_SENSOR A2 #define R_SIDE_SENSOR 12 #define L_PWM 5 #define L_DIR 4 #define R_PWM 6 #define R_DIR 9 #define PWM_MAX 165 #define BUZZER 10 #define DIODA 13 #define ROZNICA_MIN -400 #define ROZNICA_MAX 400 #define trigPin 8 #define echoPin 7 bool START = false; //zmienna dla procedury startu void setup() { //konfiguracja pinów mostka H pinMode(L_DIR, OUTPUT); pinMode(R_DIR, OUTPUT); pinMode(L_PWM, OUTPUT); pinMode(R_PWM, OUTPUT); pinMode(DIODA, OUTPUT); pinMode(L_SIDE_SENSOR, INPUT_PULLUP); //koniguracja pinu jak przyckiski pinMode(R_SIDE_SENSOR, INPUT_PULLUP); randomSeed(analogRead(5)); //inicjalizacja generatora liczb losowych //konfigutacja pozostałych elementów pinMode(BUZZER, OUTPUT); digitalWrite(BUZZER, 0); //wyłączenie buzzera digitalWrite(DIODA, LOW); //wylaczenie diody pinMode(trigPin, OUTPUT); //Deklaracja pinów dla czujnika zbliżeniowego pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { int odczytLewy = analogRead(L_LIGHT_SENSOR); //odczytanie wartości z lewego czujnika int odczytPrawy = analogRead(R_LIGHT_SENSOR); //odczytanie wartości z prawego czujnika int roznica = odczytLewy - odczytPrawy; int los = random(5, 40) * 10; //wylosowanie liczby dla czasu obrotu int randomSpeed = random(2, 6) * 10; //wylosowanie predkosci jazdy do przodu if (roznica < ROZNICA_MIN) { //ewentualna korekcja skrajnych warotści róznic roznica = ROZNICA_MIN; } else if (roznica > ROZNICA_MAX) { roznica = ROZNICA_MAX; } int zmianaPredkosci = map(roznica, ROZNICA_MIN, ROZNICA_MAX, -40, 40); //zmienna pozawalająca przeliczenie odczytów z czuników na zmianę prędkości silnikó if (START == true) { //sprawdzenie warunku dla procedury staru leftMotor(30+zmianaPredkosci); //korekty prędkości zależnie od natężenia światła rightMotor(30-zmianaPredkosci); if (digitalRead(L_SIDE_SENSOR) == LOW) { //jeśli przeszkoda zostanie wykryta po lewej stronie int odleglosc = zmierzOdlegosc(); //zmienna odczytująca dystans z czujnika US if (odleglosc > 30) //jeśli odległość jest większa niż 30 cm to robot zdąży wykonać pełny zadany ruch { leftMotor(-40); rightMotor(-40); digitalWrite(BUZZER, 1); delay(1000); } else { while (odleglosc > 8) //jeśli odległość mniejsza niż 30 cm sprawdzanie kolejnych odległości do momentu osiągnięcia wartości 8 cm { leftMotor(-40); rightMotor(-40); digitalWrite(BUZZER, 1); odleglosc = zmierzOdlegosc(); //zamiana wartości odległości delay(50); } } //obrót w miejscu w prawo leftMotor(randomSpeed); rightMotor(-randomSpeed); digitalWrite(BUZZER, 0); delay(150 + los); //koniec warunku, wracamy do jazdy prosto } if (digitalRead(R_SIDE_SENSOR) == LOW) { //jeśli przeszkoda zostanie wykryta po prawej stronie //jedź wstecz i wydawaj dźwięk int odleglosc = zmierzOdlegosc(); //powtarzamy co w poprzednim warunku if (odleglosc > 30) { leftMotor(-40); rightMotor(-40); digitalWrite(BUZZER, 1); delay(1000); } else { while (odleglosc > 8) { leftMotor(-40); rightMotor(-40); digitalWrite(BUZZER, 1); odleglosc = zmierzOdlegosc(); delay(50); } } //obrót w miejscu w lewo leftMotor(-randomSpeed); rightMotor(randomSpeed); digitalWrite(BUZZER, 0); delay(150 + los); //koniec warunku, wracamy do jazdy prosto } } else if (odczytPrawy < 50) { //procedura startu po mocnym naświetleniu prawego czujnika START = !START; sygnalizacjaUruchomienia(); //wywołanie funkcji sygnalizującej uruchomienie BUZZEREM } else { //miganie diody sygnalizującej gotowość do startu MiganieNaGotowosc(); //wywołanie funkcji migającej diodą gotowości } } void leftMotor(int V) { //funkcja odpowiedzialna za sterowanie lewym silnikiem if (V > 0) { //jeśli wartość prędkości więszka od 0 V = map(V, 0, 100, 0, PWM_MAX); digitalWrite(L_DIR, 0); //do przodu analogWrite(L_PWM, V); //zadanie prędkości } else { V = abs(V); //wyciągnięcie wartości bezwzględnej V = map(V, 0, 100, 0, PWM_MAX); digitalWrite(L_DIR, 1); //do tyłu analogWrite(L_PWM, V); //zadanie prędkości } } void rightMotor(int V) { //to samo co wyżej tylko dla prawego if (V > 0) { V = map(V, 0, 100, 0, PWM_MAX); digitalWrite(R_DIR, 0); analogWrite(R_PWM, V); } else { V = abs(V); V = map(V, 0, 100, 0, PWM_MAX); digitalWrite(R_DIR, 1); analogWrite(R_PWM, V); } } void StopMotors() { //zatrzymanie silników analogWrite(L_PWM, 0); analogWrite(R_PWM, 0); } int zmierzOdlegosc() //funkcja dla mierzenia odległości przez czujnik SC { long czas, dystans; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); czas = pulseIn(echoPin, HIGH); dystans = czas / 58; return dystans; } void sygnalizacjaUruchomienia() { //sygnalizacja dźwiękowa startu int i = 0; for (i; i < 3; i++) { digitalWrite(BUZZER, HIGH); delay(200); digitalWrite(BUZZER, LOW); delay(200); } } void MiganieNaGotowosc() { //funkcja odpowiedzialna za miganie diodą gotowości digitalWrite(DIODA, HIGH); delay(100); digitalWrite(DIODA, LOW); delay(100); } A tutaj film:
Tablica liderów jest ustawiona na Warszawa/GMT+02:00
×
×
  • Utwórz nowe...