Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'Problem'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona


TempX

  1. Dobra a więc tak robie swój pierwszy projekt czyli mój gameboy i żeby jakoś zasilić arduino kupiłem baterie lipo 1000mah 3,7v i moduł solar charger shield od seeed naładowałem baterie i podłączyłem moduł do arduino wgrałem kod na gameboya i włączyłem zasilanie a dioda na arduino sie zaswieciła na zielono lecz arduino nie wykonuje kodu czy ktoś może mi coś poradzić?
  2. Cześć, zbudowałem robota kroczącego składającego się z 12 serw. 4x serwo typu medium (Power HD HD-1160A z plastikowymi przekładniami) i 8x serwo typu micro (MG-90S z metalowymi przekładniami), serwa zasilane są battery Packiem (4x bateria AA 1,5V) 6V oraz Arduino mega, które zasilam 5V. Po wykonaniu dwóch kroków robot się zapada i serwa medium się wyłączają (serwa umieszczone na ramie robota) a serwa micro działają i wykonują dalsze ruchy nogi. Podejrzewam, że problem leży przy zasilaniu robota, battery pack dodaje masy do robota i może być niezbyt optymalnym źródłem prądu. Po podłączeniu woltomierza, miernik pokazywał ~5V zamiast wymaganego 6V. Drugim problemem mogą być serwera medium, jakich używam, przy 6V ruch obrotowy serwa wynosi 2,7 kg*cm a serwa micro nogi mają 2,2 kg*cm również przy 6V. Po ściągnięciu battery packa, robot działał dobrze do pewnego momentu, gdy się zawalił, serwa przestały być „naprężone” co wynikało by z braku odpowiedniego zasilania. Czy ktoś z Was wie, gdzie może leżeć przyczyna problemu? Z góry dziękuje. Film z działania robota oraz zdjęcie nogi w załącznkiu poniżej:
  3. Mam problem. Mianowicie budując moją stację meteo na układzie Arduino Uno natknąłem się na błąd "SSD1306 allocation failed". Wywnioskowałem, że błąd ten powoduje zbyt mała ilość pamięci RAM dla wyświetlacza oraz że tą pamięć zabierają zmienne "char" wykorzystywane w moim kodzie. Program działał, gdy występowały dwie zmienne "char", teraz zaimplementowane są trzy, a mam w planach dodać jeszcze kilka. Poniżej dodaje kod całego programu modułu odbiornika stacji, do którego podłączony jest wyświetlacz. Jeżeli ktoś miałby jakieś rady co do sposobu pisanie kodu, lub zauważył w moim jakieś błędy, proszę śmiało pisać, gdyż nie jestem specem od pisania kodu. Wolę kabelki i lutownicę. 😉 Z góry dziękuję za odpowiedź. #include <SPI.h> #include <Wire.h> #include <VirtualWire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Adafruit_BMP280.h> #include "DHT.h" #include <virtuabotixRTC.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define DHTPIN 2 // Pin, do którego podłączony jest DHT 11 #define DHTTYPE DHT11 // Typ czujnika DHT #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); Adafruit_BMP280 bmp280; DHT dht(DHTPIN, DHTTYPE); virtuabotixRTC myRTC(6, 7, 8); const int receive_pin = 3; char temperatureChar[10]; char humidityChar[10]; char pressureChar[10]; struct package { float temperature = 0.0; float humidity = 0.0; float pressure = 0.0; }; typedef struct package Package; Package data; void setup() { Serial.begin(9600); dht.begin(); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } myRTC.setDS1302Time(00, 9, 15, 6, 01, 06, 2023); // Ustawienie zegara display.display(); delay(2000); display.clearDisplay(); //Wyczyszczenie ekranu vw_set_rx_pin(receive_pin); vw_setup(500); // Bits per sec vw_rx_start(); // Start the receiver PLL running } void loop() { float h = dht.readHumidity(); // Odczyt wilgotności wewnętrznej float t = dht.readTemperature(); //Odczyt temperatury wewnętrznej if (isnan(h) || isnan(t)) { Serial.println(F("Failed to read from DHT sensor!")); return; } float hic = dht.computeHeatIndex(t, h); uint8_t buf[sizeof(data)]; uint8_t buflen = sizeof(data); if (vw_have_message()) { for (int i = 0; i < 5; i++) { myRTC.updateTime(); delay(1050); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,0); display.print(" Data: "); display.setTextSize(2); display.println(); display.println(); display.setTextColor(WHITE); display.print(myRTC.dayofmonth); display.print("/"); display.print(myRTC.month); display.print("/"); display.print(myRTC.year); display.print(" "); display.print(myRTC.hours); display.print(":"); display.print(myRTC.minutes); display.print(":"); display.print(myRTC.seconds); display.display(); display.clearDisplay(); } delay(2000); //Odczyt temperatury wewnętrznej display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Temperatura WEW.:"); display.println(); display.setTextSize(3); display.setTextColor(WHITE); display.print(t); display.print(" C"); display.display(); display.clearDisplay(); delay(2000); //Odczyt wilgotności wewnętrznej display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Wilgotnosc WEW.:"); display.println(); display.setTextSize(3); display.setTextColor(WHITE); display.print(h); display.print(" %"); display.display(); display.clearDisplay(); delay(2000); Serial.print(F("Temperatura wew.: ")); Serial.print(t); Serial.print(F("°C Wilgotność wew.: ")); Serial.print(h); Serial.print(F("% ")); Serial.println(); vw_get_message(buf, &buflen); //Odczyty z odbiornika zewnętrznego memcpy(&data,&buf,buflen); Serial.print(data.temperature); //Wypissanie odczytów na terminalu String temperatureString = String(data.temperature,1); temperatureString.toCharArray(temperatureChar,10); Serial.println(); Serial.println(data.humidity); String humidityString = String(data.humidity,1); humidityString.toCharArray(humidityChar,10); Serial.println(); Serial.print(data.pressure); String pressureString = String(data.pressure,1); pressureString.toCharArray(pressureChar,10); Serial.println(); display.setTextSize(1); //Odczyt temperatury zewnętrznej display.setTextColor(WHITE); display.setCursor(0,0); display.println("Teperatura ZEW.:"); display.println(); display.setTextSize(3); display.setTextColor(WHITE); display.print(data.temperature); display.print(" C"); temperatureString.toCharArray(temperatureChar,10); display.display(); display.clearDisplay(); delay(2000); //Odczyt wilgotności zewnętrznej display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Wilgotnosc ZEW.:"); display.println(); display.setTextSize(3); display.setTextColor(WHITE); display.print(data.humidity); display.print(" %"); humidityString.toCharArray(humidityChar,10); display.display(); display.clearDisplay(); delay(2000); //Odczyt ciśnienia display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Cisnienie.:"); display.println(); display.setTextSize(3); display.setTextColor(WHITE); display.print(data.pressure); display.print(" hPa"); pressureString.toCharArray(pressureChar,10); display.display(); display.clearDisplay(); delay(2000); } }
  4. Witam jestem na poziomie początkującym można powiedzieć nooba 😉 no i sobie działam czytam itd. kurs forbot podstawy elektroniki 1 no i nagle stop... Przy dzielniku napięcia mam pytanie bo w kursie jest taki przykład są 2 oporniki jeden ma 1kΩ a drugi ma 220Ω i jest zasilanie 3v no i dalej obliczenie Uwyj → Uzas = 3v to rozumiem dobra dalej R1+R2 = 1,22 kΩ mi wyszło 0,22 a skąd te 1 pierwsze? Następnie Uwyj = 3v • 1kΩ/1,22kΩ to rozumiem ale tamto ↑ noni mi wyszło chyba (bo to wcześniej liczyłem) 2,4590 Uwyj =2,46 V proszę czy ktoś mi wytłumaczyć proszę i przepraszam za to głupie pytanie no ale... Nie potrafie to na pewno jest takie proste... Proszę o odpowiedz pozdrawiam :)
  5. Witam wszystkich, na wstępie zaznaczę, że jestem początkującym elektronikiem oraz robię projekt do szkoły. Owym projektem jak wspomniałem w tytule jest autko na bazie Arduino UNO, L293D i modułu bluetooth HC-05 Sugerując się poradnikami postanowiłem zrobić projekt i podłączyć go według schematu poniże Już na początku napotkałem pewne problemy, ponieważ podłączenie zasilania na samą płytkę L293D (płytka jest wpięta bezpośrednio w Arduino) moduł HC-05 nie dział, więc rozdzieliłem kable i podłączyłem osobno L293D i Arduino UNO z jednego akumulatora i teoretycznie zadziałało. Lecz jak wgrałem kod (wszystko jak należy RX, tx zmieniłem i wyjąłem przed programowaniem) i połączyłem z aplikacją działa mi tylko przycisk tył i prawo. Jak klikam lewo i przód silniki zaciskają się i autko jedzie bez przerwy, a sam moduł się rozłącza i gubi zasięg z aplikacją. W czym może być problem???? Tutaj podsyłam jeszcze kod #include <AFMotor.h> //initial motors pin AF_DCMotor motor1(1); AF_DCMotor motor2(2); AF_DCMotor motor3(3); AF_DCMotor motor4(4); char command; void setup() { Serial.begin(9600); //Set the baud rate to your Bluetooth module. } void loop(){ if(Serial.available() > 0){ command = Serial.read(); Stop(); //initialize with motors stoped //Change pin mode only if new command is different from previous. //Serial.println(command); switch(command){ case 'F': forward(); break; case 'B': back(); break; case 'L': left(); break; case 'R': right(); break; } } } void forward() { motor1.setSpeed(255); //Define maximum velocity motor1.run(FORWARD); //rotate the motor clockwise motor2.setSpeed(255); //Define maximum velocity motor2.run(FORWARD); //rotate the motor clockwise motor3.setSpeed(255);//Define maximum velocity motor3.run(FORWARD); //rotate the motor clockwise motor4.setSpeed(255);//Define maximum velocity motor4.run(BACKWARD); //rotate the motor anti-clockwise } void left() { motor1.setSpeed(255); //Define maximum velocity motor1.run(BACKWARD); //rotate the motor anti-clockwise motor2.setSpeed(255); //Define maximum velocity motor2.run(BACKWARD); //rotate the motor anti-clockwise motor3.setSpeed(255); //Define maximum velocity motor3.run(FORWARD); //rotate the motor clockwise motor4.setSpeed(255); //Define maximum velocity motor4.run(FORWARD); //rotate the motor clockwise } void right() { motor1.setSpeed(255); //Define maximum velocity motor1.run(FORWARD); //rotate the motor clockwise motor2.setSpeed(255); //Define maximum velocity motor2.run(FORWARD); //rotate the motor clockwise motor3.setSpeed(255); //Define maximum velocity motor3.run(BACKWARD); //rotate the motor anti-clockwise motor4.setSpeed(255); //Define maximum velocity motor4.run(BACKWARD); //rotate the motor anti-clockwise } void Stop() { motor1.setSpeed(0); //Define minimum velocity motor1.run(RELEASE); //stop the motor when release the button motor2.setSpeed(0); //Define minimum velocity motor2.run(RELEASE); //rotate the motor clockwise motor3.setSpeed(0); //Define minimum velocity motor3.run(RELEASE); //stop the motor when release the button motor4.setSpeed(0); //Define minimum velocity motor4.run(RELEASE); //stop the motor when release the button }
  6. Witam, Jestem w 8 klasie (co pewnie da się wyczuć 🙂 ) i robię robota, który omijałby przeszkody i wracał na trasę z wykorzystaniem HC-SR04 i MPU-6050. Używam też shielda od forbota, omawianego w kursie robotyki. Nieruchomy czujnik działa prawidłowo, ale kiedy obraca się na serwie, w pozycjach około prostopadłych do tylnej osi daje odczyt 0 cm. Pozostałe odczyty są poprawne, samo podłączenie czujnika też jest w porządku, bo działa bardzo dobrze będąc nieruchomym. Założenie jest takie, żeby czujnik zamontowany na serwie wykonywał pomiary odległości wokół robota, a następnie aby serwo obróciło się tam, gdzie odległość była najmniejsza (to pozwala cały czas monitorować najbliższą przeszkodę). Cały ,,układ" jest bardzo prosty, w zasadzie można go zreplikować w 5 minut i potestować z moim kodem. Poza tym, zamieszczony plik .zip to minutowy film, który pokazuje zarówno ruchy serwa, jak i odczyty podawane na port szeregowy (Forobot nie pozwala na przesyłanie .mp4). Cały kod zdaje się działać dobrze, jedynym problemem jest to, że pomiary bywają zerowe, co sprawia, że czujnik zachowuje się bez sensu. Myślałem nad dodaniem prostego warunku: ,,Jeżeli zmierzona odległość byłaby mniejsza od minimalnej i jednocześnie większa od zera, wtedy zapisujemy ją jako nową minimalną wartość". W moim kodzie wyglądałoby to tak: if (odleglosci[x] < min_odleglosc && odleglosci[x] > 0) min_odleglosc = odleglosci[x]; Niestety, w tym przypadku robot zupełnie nie wykrywałby przeszkód bezpośrednio naprzeciwko niego, bo otrzymywałby tam pomiary 0 cm (rysunek w załącznikach). Czy ktoś wie, jak naprawić kod/elektronikę? Z góry dziękuję za pomoc. Połączenia czujnik - Arduino: Vcc - 5V Gnd - Gnd trig - D8 echo - D7 //w przod - (R_DIR, 1), (L_DIR, 0). Min. predkosc silnikow to 20 w funkcji Left- i Rightmotor. RightMotor - słabszy //w accelerate dodac zczytywanie obecnej v i porownywac z poprzednia v, plynnie zwalniac //tak naprawde wystarcza dwie zmienne: aktualna_odleglosc i max_odleglosc. Jezeli aktualna_odleglosc > max_odleglosc, staje sie max_odleglosc. Jesli nie, w ogole jej nie potrzebujemy #define L_PWM 5 #define L_DIR 4 #define R_PWM 6 #define R_DIR 9 #define PWM_MAX 165 #define v_min 20 #define trig 8 #define echo 7 #define SERWO_PIN 11 #include <Servo.h> Servo serwo; float odleglosc; float LeftMotorMargin = 5; int max_odleglosc_global = 0; int min_odleglosc_global = 100; int min_odleglosc = 100; int max_odleglosc = 0; int odleglosci [20]; int powtorzenia = 0; int v_previous = 0; int j, x; int do_usuniecia = 0; int poprzedni_kat_serwa; int czestotliwosc_obrotu_serwa = 18; int int_numer_pomiaru; void LeftMotor (int v)//funkcja sterująca silnikiem lewym z jednym argumentem, prędkością. { if (v>0) //jeżeli podana wartość jest dodatnia { v+=LeftMotorMargin; v = map(v,0,100,0,PWM_MAX);//zmieniamy wartość podaną w programie na PWM digitalWrite (L_DIR, 0);//wyznaczamy kierunek - do przodu analogWrite (L_PWM, v);//PWM równy temu, co wyznaczył uzytkownik } else//jeżeli podana liczba jest ujemna { v = abs(v);//zamieniamy liczbę na dodatnią v+=LeftMotorMargin; //v = v - LeftMotorMargin; v = map(v,0,100,0,PWM_MAX);//zmieniamy podaną wartość na PWM digitalWrite (L_DIR, 1);//wyznaczamy kierunek - do tyłu analogWrite (L_PWM, v);//PWM równy temu, co wyznaczył użytkownik } } void RightMotor (int v)//analogiocznie do lewego silnika { if (v>0) { v = map(v,0,100,0,PWM_MAX); digitalWrite (R_DIR, 1); analogWrite (R_PWM, v); } else { v = abs(v); v = map(v,0,100,0,PWM_MAX); digitalWrite (R_DIR, 0); analogWrite (R_PWM, v); } } void stopMotors()//zatrzymanie silników { analogWrite(L_PWM, 0); analogWrite(R_PWM,0); } void accelerate (int v)//funkcja na płynne przyspieszanie i zwalnianie { if (abs(v)<20)//jeżeli podana liczba jest mniejsza niż 20 { v=20; //prędkość równa się 20 (unikamy prędkości zbyt małych, by ruszyć). } Serial.println (v); if (v>v_previous)//jeżeli przyspieszamy { for (int i = v_previous; i<v; i++)//zacznij od poprzedniej wartości, zwiększaj do wyznaczonej do wyznaczonej { RightMotor(i);//do przodu LeftMotor(i); delay(50); } } if (v<v_previous)//jeżeli zwalniamy { for (int i=v_previous; i>v; i--)//zacznij od wartości poprzedniej, zmniejszaj do wyznaczonej { RightMotor(i); LeftMotor(i); delay(50); } } v_previous = v;//zapisz obecną wartość jako wyznaczoną } float pomiar_odleglosci () { float odleglosc, czas; digitalWrite (trig, LOW); delayMicroseconds (2); digitalWrite (trig, HIGH); delayMicroseconds (10); digitalWrite (trig, LOW); czas = pulseIn (echo, HIGH); odleglosc = czas / 58; return odleglosc; } void serwo_right () { min_odleglosc = 100; for (int i = poprzedni_kat_serwa; i>0; i--) { serwo.write(i); delay(10); //czujnik wychyla sie w prawo, resetujemy min_odleglosc } poprzedni_kat_serwa = serwo.read(); } void serwo_left () { odleglosci[x] = pomiar_odleglosci (); Serial.println ("odleglosc prawa"); Serial.println (x); Serial.println (odleglosci[x]); x++;//wykonujemy pierwszy pomiar (w innym wypadku miałby on miejsce dopiero po wychyleniu serwa o czestotliwosc_obrotu_serwa, czyli 18 stopni) for (int i = poprzedni_kat_serwa; i<=180; i++) { //posuwamy sie az do skrajnie lewego wychylenia (zaczynamy ze skrajnie prawego) if (x>180/czestotliwosc_obrotu_serwa) x=0; //jezeli wykonalismy pelen cykl pomiarow resetujemy ich licznik if (j>=czestotliwosc_obrotu_serwa)//kiedy czujnik skrecil o kat podany jako czestotliwosc_pomiaru (kiedy trzeba wykonac pomiar) { j=0; //resestujemy licznik umozliwiajacy wykonanie pomiaru co czestotliwosc_pomiaru odleglosci[x] = pomiar_odleglosci();//wykonujemy pomiar if (odleglosci[x]>max_odleglosc)//jezeli aktualna odleglosc jest wieksza od zapisanej jako najwieksza odleglosc, staje sie nowa najwieksza odlegloscia max_odleglosc = odleglosci[x]; if (odleglosci[x]<min_odleglosc)//jezeli aktualna odleglosc jest mniejsza od zapisanej jako najmniejsza odleglosc min_odleglosc = odleglosci[x]; if (i < 90)//kiedy czujnik jest wychylony w lewo { Serial.println ("odleglosc prawa");//wypisujemy aktualna odleglosc Serial.println (x); Serial.println (odleglosci[x]); }else //kiedy czujnik jest wychylony w prawo { Serial.println ("odleglosc lewa"); //wypisujemy aktualna odleglosc Serial.println (x); Serial.println (odleglosci[x]); } x++; //zwiekszamy licznik pomiarow } //Serial.print ("Kat serwa = "); opcjonalnie mozna odkomentowac, pozwala zobaczyc kat serwa //Serial.println (serwo.read()); serwo.write(i);//przesuwamy serwo j++;//zmieniamy licznik przesuniec, dzieki temu mozemy robic pomiary kiedy osiognie wartosc = czestotliwosc_pomiaru delay(10); } poprzedni_kat_serwa = serwo.read();//zapisujemy obecny kat obrotu jako poprzedni_kat_serwo, co pomaga w wykonywaniu innych obrotow } void serwo_mid ()//kierujemy serwo do pozycji prostopadlej do tylnej do osi { if (poprzedni_kat_serwa > 90)//jezeli serwo jest zwrocone w lewo { for (int i = poprzedni_kat_serwa; i>90; i--)//zmniejszamy, czyli idziemy do prawej { serwo.write(i); } }else //kiedy serwo jest zwrocone w lewo { for (int i = poprzedni_kat_serwa; i<90; i++)//zwiekszamy, czyli idziemy do lewej { serwo.write(i); } } poprzedni_kat_serwa = serwo.read();//zapisujemy obecny kat obrotu jako poprzedni_kat_serwo, co pomaga w wykonywaniu innych obrotow } void zadany_obrot (int kat)//obrot serwa do zadanego katu { if (poprzedni_kat_serwa > kat)//jezeli zadany kat jest na prawo od obecnego { for (int i = poprzedni_kat_serwa; i>kat; i--)//skrecamy serwo w prawo { serwo.write(i); } }else //jezeli zadany kat jest na lewo od obecnego { for (int i = poprzedni_kat_serwa; i<kat; i++)//skrecamy serwo w lewo { serwo.write(i); } } poprzedni_kat_serwa = serwo.read();//zapisujemy obecny kat obrotu jako poprzedni_kat_serwo, co pomaga w wykonywaniu innych obrotow } int numer_pomiaru ()//zczytujemy tablice odleglosci[] (wyniki pomiarow) i szukamy tego, ktory jest najmniejszy { for (int i = 0; i <180/czestotliwosc_obrotu_serwa; i++)//przeszukujemy wszystkie pomiary { if (odleglosci[i] == min_odleglosc)//jezeli odleglosc o numerze 'i' jest najmniejsza { return i;//zwracamy numer pomiaru } } } float pomiar_odleglosci_serwo()//uzywamy trzech wyzej opisanych funkcji do zrobienia pomiaru odleglosci { serwo_right(); serwo_left(); serwo_mid(); return min_odleglosc; } void setup() { //definicja pinow, start komunikacji pinMode(L_DIR, OUTPUT); pinMode(R_DIR, OUTPUT); pinMode(L_PWM, OUTPUT); pinMode(R_PWM, OUTPUT); pinMode (trig, OUTPUT); pinMode (echo, INPUT); serwo.attach(SERWO_PIN); Serial.begin (9600); serwo_mid(); } void loop() { //wypisywanie wynikow pomiarow w porcie szeregowym Serial.println ("Pomiar odleglosci"); min_odleglosc_global = pomiar_odleglosci_serwo();//sprawdzamy odleglosci od przeszkod wokol robota delay(1000); int_numer_pomiaru = numer_pomiaru();//znajdujemy najmniejszy pomiar Serial.println ("numer pomiaru"); Serial.println (int_numer_pomiaru); Serial.println ("min_odleglosc"); Serial.println (min_odleglosc_global); delay(1000); Serial.println ("zadany obrot"); zadany_obrot(int_numer_pomiaru*czestotliwosc_obrotu_serwa);//obracamy serwo do kata, na ktorym byl najmniejszy pomiar Serial.println ("kat"); Serial.println (int_numer_pomiaru*czestotliwosc_obrotu_serwa); } film z dzialania robota.zip
  7. Witam serdecznie wszystkich. Jest to mój pierwszy post na tym forum, po rozpoczęciu Waszego kursu na Forbocie o programowaniu Arduino postanowiłem spróbować swoich sił w napisaniu jakiegoś prostego programu , który chcę wykorzystać przyszłościowo. Napisałem program uwzględniając potrzebne komentarze, jednak po skompilowaniu i wgraniu programu do Arduino Uno, program nie działa według mojego założenia. Poradźcie mi proszę gdzie popełniam błędy i co muszę zmienić abym nie zszedł na zawał🙀😫. Siedzę już trzeci wieczór i dalej klops... Nie mam już pomysłów. Na dzień dzisiejszy program po uruchomieniu załącza przekaźniki w takim samym cyklu, samoczynnie bez wciskania jakiegokolwiek przycisku.. co jest nie tak? Program //test nr1 void setup() { pinMode(6, INPUT_PULLUP);//przełacznik typu krańcówka /test palcem pinMode(8, OUTPUT); //moduł płytki 1 przekażnika załączany stanem wysokim pinMode(9, OUTPUT); //moduł płytki 2 przekażnika załączany stanem wysokim pinMode(7, INPUT_PULLUP); //5V z modułu czujnika digitalWrite(6, LOW); //ustawienie portów po włączeniu zasilania digitalWrite(8, LOW);// ---------------||---------------------- digitalWrite(9, LOW);// ---------------||---------------------- digitalWrite(7, LOW); // ---------------||---------------------- } void loop() { if (digitalRead(6) == HIGH) //jeśli przycisk wciśnięty {digitalWrite(8, HIGH); //Włącz przekaźnik2 delay(1000); //utrzymaj włączony 1 sekundę {digitalWrite(8, LOW); //wyłącz przekaźnik 2 delay(1000);} //odczekaj 1 sekundę {digitalWrite(9, HIGH); //włącz przekaźnik 1 delay(5000);} //utrzymaj włączony 5 sekund }else { //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty) digitalWrite(9, LOW); //wyłacz przekaźnik 1 digitalWrite(8, LOW);} //wyłacz przekaźnik 2 if (digitalRead(9) == HIGH && digitalRead(7) == HIGH) //Jeśli na pinie 9 jest stan wysoki oraz na wejsciu pin 7 jest stan wysoki to {digitalWrite(9, LOW); //odłącz przekaźnik 1 digitalWrite(8, LOW);} //odłącz przekaźnik 2 else { //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty, brak stanu wyskoiego pin 7) digitalWrite(9, LOW); //wyłacz przekaźnik 2 digitalWrite(8, LOW); //wyłacz przekaźnik 1 } }
  8. Siema wszystkim Potrzebuje pomocy! Wykonałem płytkę #PCB nie dawno z poradnika homemade 102 Poradnik tutaj Gotowa płytka wygoda tak(zdjęcia) Sprawdziłem działa ale tylko z silnikiem 250W a z silnikiem 350W nie działa CO ZROBIĆ ŻEBY 350W DZIAŁAŁAł?? Bateria lito-jonowa #18650 #li-ion 7s6p Komponenty: Transformatory irf3205 Tranzystor S8050 npn Tranzystor S8550 pnp Kondensator 4700uF/50V Kondensator 470uF/50v Rezystor 2, 2K powinna być 2k Rezystor 1K Rezystor 4, 7R Kondensator 104 Dioda 1N4148 Dioda LED Dioda 1N4007 Układ scalony NE555 EAFLE sch i brd.rar
  9. Witam wszystkich serdecznie! Jestem całkowicie początkującą osobą jeśli chodzi o Arduino i ostatnio zauważyłem przy bawieniu się potencjometrem, że gdy zostanie podłączony do wyjścia A5, w monitorze portu szeregowego wyświetlana jest inna wartość niż w przypadku podłączenia do wyjścia A0-A4. Ktoś wie z czego to może wynikać? Czy też może to być awaria samego wejścia? Z góry dziękuję za pomoc i pozdrawiam! :)
  10. Witam, rozpoczynam naukę elektroniki od zdobywania podstaw i budowy syntezatora modularnego sterowanego napięciem (bardzo fajna baza wiedzy, zwłaszcza podstaw a temat mnie interesuje). Do zasilania musiałem zbudować prosty zasilacz symetryczny +/-12VDC zasilany gniazdkowym zasilaczem transformatorowym. Układ dość gruntownie sprawdziłem przed podłączeniem i mam na nim napięcia +11,7V oraz -12V. Prostowanie jednopołówkowe może się wydawać kiepskim rozwiązaniem jednak jest to dość standardowy projekt do tego zastosowania, na bazie: http://musicfromouterspace.com/index.php?MAINTAB=SYNTHDIY&VPW=1358&VPH=652 Wszystko wydawało się być dobrze jednak mam problem podczas prototypownia pierwszego oscylatora na bazie przerzutnika Schmitta w którym użyłem WO TL074 jako bufor na wyjściu przerzutnika. Kiedy piny zasilające WO są podłączone do masy i +12V wszystko działa dobrze lecz kiedy podłączam go do szyn +/- 12V słyszę tylko zakłócenia. Chcę rozwiązać problem zanim pójdę dalej z układem 1. Coś jest nie tak z moim zasilaniem? 2. Może być to wina samego TL074? Kupiłem je w Chinach i sprawdzałem kilka z podobnym efektem. Pisze głównie z nadzieją, że będzie to oczywiste rozwiązanie jednak jak podejrzewam, wina leży gdzieś po mojej stronie ale już nie mam pomysłu gdzie. Oscylator w obecnej formie (jak rozwiążę obecny problem rozwijam dalej): Na CV jest podawane napięcie 0-5V z klawiatury/sekwencera - układ ma w przyszłości pracowac w standardzie 1V/oktawę. Załączam nagranie różnicy dźwięku podczas zasilania V- na TL074 na masie a potem na -12V. Nagranie może być z tych głośniejszych więc proszę mieć to na uwadze. https://drive.google.com/file/d/1Aj22gcSi09Wipek-1tJJ2HbsDH03-eiC/view?usp=sharing Postarajcie się nie osiwieć przez schematy -pierwszy był pomocniczy w prostym programie którego użyłem do przeniesienia układu zasilania na veroboard a drugi z racji braku czasu nabazgrałem na szybko. Pobrałem KiCAD jednak jakoś brakuje mi czasu, żeby przyzwyczaić się do jego trochę dziwnego workflow.
  11. Witam, mam mały problem z sterowaniem serwomechanizmem za pomocą modułów bluetooth HC-05. Wartością wysyłaną jest sygnał z czujnika zginania, jest on zmapowany. Łącząc to na jednym arduino wszystko śmiga jak powinno, czyli odpowiednio zginając czujnik - rusza się serwomechanizm o dany kąt. Problem pojawia się gdy próbuję wysłać ten sygnał za pomocą bluetooth (być może kod jest zły, zaczerpnięty z internetu, ale komuś podobno działało, wstawię niżej). Moje moduły bluetooth zaprogramowałem wydaje mi się prawidłowo, jest między nimi połączenie (lecz musiałem je programować na arduino uno, bo na nano po wpisywaniu komend nic się nie działo). Domyślnie były one na 9600 baud rate. Układ z arduino nano jest moim masterem. Zmapowany sygnał z czujnika zginania wziąłem pod monitor i widać takie wartości: M332 L330 J331 K330 J331 K330 J330 Moim zdaniem powinny być same liczby, a nie jakieś cyferki dodatkowo. (może tu jest problem?) Układ z arduino uno jest slavem i biorąc pod monitor watości dostarczone tutaj otrzymuje: 13 10 83 51 51 51 10 51 Więc jakby liczby są prawidłowe, ale strasznie one skaczą i zginanie czujnika nie skutkuje zmianą tych wartości. Oto kod dla MASTERA: int val1; int state=0; void setup() { Serial.begin(9600); } void loop() { if(Serial.available() > 0){ // Checks whether data is comming from the serial port state = Serial.read(); // Reads the data from the serial por } val1 = analogRead(A0); // reads the value of the potentiometer (value between 0 and 1023) int val1map = map(val1, 0, 400, 0, 180); // scale it to use it with the servo (value between 0 and 180) Serial.println(val1map); Serial.write(val1map); delay(10); } Oto kod dla SLAVE'a: #include <Servo.h> Servo kciuk; // create servo object to control a servo int state=20; void setup() { kciuk.attach(5); // attaches the servo on pins to the servo object Serial.begin(9600); } void loop() { if(Serial.available() > 0){ // Checks whether data is comming from the serial port state = Serial.read(); } kciuk.write(state); Serial.println(state); delay(10); } Może arduino nano jakoś inaczej trzeba łączyć z bluetoothem? Ja oba bluetoothy połączyłem tak: RX z bluetooth'a do TX na arduino, TX z blue do RX na arduino, GND wiadomo do GND na arduino, Vcc do 5V na arduino. Potrzebuje pilnie pomocy i z góry dziękuję za każdą wiadomość!
  12. Witam, chcąc połączyć arduino uno, klawiaturę i 5 serwomechanizmów MG996R występują dziwne wariacje niektórych serwomechanizmów (nie zawsze tych samych).Po kilkukrotnym szybkim kliknięciu przycisków, zaczynało wariować. Miałem zaprogramowany przycisk, w którym wszystkie 5 serw pracuje w jednym momencie, wtedy jest największe zapotrzebowanie na prąd i po kilkukrotnej pracy serwomechanizmów, któreś (lub dwa) zawsze zaczynało się kręcić wokół własnej osi, bez końca. Początkowo zasilałem to baterią 9V (poprzez regulator napięcia 5V), wariowały. Stwierdziłem że potrzebny jest większy prąd, to podpiąłem to wszystko pod akumulator od ciągnika (oczywiście przez regulatory 5V), nadal to samo [w załączniku wstawiam zdjęcie połączenia, mam nadzieję że dobrze podłączam, albo tu tkwi problem?]. Potem, aby wyeliminować błędny kod, podpiąłem jedno serwo i potencjometr, na nowym kodzie (prostym) kręcąc potencjometrem, wszystko działało pięknie, lecz po jakichś 2 minutach zaczęło się kręcić w kółko. Nie mam pojęcia co może być przyczyną. Koncepcją główną jest sterowanie serwomechanizmami za pomocą zmiany rezystancji, więc w jednej chwili zazwyczaj będą pracowały wszystkie na raz. Potrzebuję pomocy i z góry dziękuję!
  13. Jestem na lekcji 3 z kursu STM32 F1 HAL i próbując pobrać sterowniki z linku podanego w kursie na stronie producenta po kliknięciu w link z maila wyskakuje mi error 403. Miał może ktoś podobny problem? Z Góry dzięki za odpowiedź.
  14. Witam wszystkich ,mam problem z drukarka ktory polega na tym ze nie dziala mi auto levelling i nie moge wypoziomowac stolu a dokladniej to ikona na ekranie nie reaguje na dotyk ktos wie od czego to moze byc ?
  15. Witam, jestem nowy więc nie wiem czy to dobry dział na forum, ale ten najbardziej był adekwatny. Otóż mam problem z komunikacją Arduino UNO z czujnikiem MPU-6050(GY-521). Głównie problem jest taki, że przy wykorzystywaniu biblioteki pana Jarzębskiego i po odpaleniu serial monitora, wyskakuje błąd: Pomimo iż, podłączyłem zgodnie z poradnikami, czyli VCC do 5V, SCL do SCL(Bądź A5), SDA do SDA(Bądź A4) oraz INT do pinu Digital 2. Ta sama sytuacja następuje przy wykorzystaniu biblioteki Jeffa Rowberga I2Cdev, tak samo próbowałem podpinać i nadal ten sam błąd: Co dziwne, czujnik jest sprawny ponieważ gdy chce wyświetlić surowe dane, to nie ma problemu i mogę je z niego normalnie odczytać.
  16. Witam. Od trzech tygodni jestem użytkownikiem maliny 4b. Ostatnio zauważyłem pewien problem i nie wiem jak go rozwiązać. Po podłączeniu do sieci wi-fi mimo że widać że połączenie jest w jakości 3/4 kreski, to po próbowaniu otworzenia jakiejkolwiek strony www, wyświetla się że nie ma internetu lub że strona jest niedostępna. Co mam robić i czy reinstalacja systemu NOOBS, może coś pomóc. Sprawdzałem również ustawienia rutera i spróbowałem zrobić to co potrafiłem. Chciałbym również zaznaczyć że ruter widzi urządzenie. Z góry dziękuję za odpowiedzi, sugestie i rozwiązania.
  17. Dzień dobry Wszystkim! Tak w skrócie, mój robot ma się poruszać po wyznaczonej ścieżce i robić mapę otoczenia wraz z pokazywaniem swojej pozycji. Mam problem z komunikacją, HC-06 mam podłączony do Arduino Mega 2560 przez RX,TX. Wysyłam dane z czujników optycznych odnośnie pozycji (pozycja już wyliczana w Arduino). Przesyłam 2 zmienne po sobie x1, y1. Arduino łączy się w 1-2 sekundy z moim telefonem, na telefonie używam Serial Bluetooth Terminal i odczyty z Arduino sa odbierane bez problemu (wysyłam około 4-6 danych/sekundę). Podczas łączenia się z komputerem trwa to 30sekund, a czasem 1-2minuty. Po stronie PC mam Bluetootha 4.0 Asusa USB-BT400 (pisze że jest kompatybilny z wersjami 2.0, 2.1, 3.0 no i 4.0... jest BLE (Low Energy). Używam do tego skryptu napisanego w Matlabie. Ta część odpowiada za samo połączenie. Działa gdyż w ustawieniach windowsa w sekcji bluetooth widzę HC-06 i mam sparowane i połączone. delete(instrfind) %zamkniecie otwartych portow w Matlabie clear all instrhwinfo('Bluetooth','HC-06') bt = Bluetooth('HC-06', 1) fopen(bt); Kolejna część kodu zajmuje się odczytem przesyłanych danych i prostym rysowaniem. tic; figure(1); x=0; xn=0; y=0; yn=0; while (true) x=fscanf(bt,'%f'); %odczyt impulsow z lewego kola y=fscanf(bt,'%f'); %odczyt impulsow z prawego kola xn=xn+x; yn=yn+y; plot(xn,yn,'black*') axis auto hold on end Dodam że czasem działa, ale głownie mam błąd z przekroczeniem czasu. Co może być przyczyną że jest taki problem z połączeniem? Poniżej screen z 2 kółek... Dzisiaj udało mi się nawiązać tylko 2 razy połączenie, a z telefonem śmiga. Tylko że na telefonie nie mam takich możliwości z odbieraniem danych i rysowaniem ich. A może jest jakaś apka na androida co by mi rysowała położenie mojego robota? Na koniec kod z Arduino. Trzymanie się lini i sterowanie silnikami wykonuje na niezależnym Arduino Nano. Próbowałem wykonywać i śledzenie linii, PID'a i odczyt z enkoderów, a także obsługę 3 czujników HC-SR04 na jednej platformie Arduino MEga2560, ale nie ogarniał (a może to mój nie zoptymalizowany kod?). Robiłem to przerwaniach, wątkach itd. Stanęło na 2 Arduino jak teraz, choć zastanawiam się nad platformą ESP32, nie wiem czy by nie było łatwiej. Proszę o pomoc. //czujniki lini #define L2_LINE_SENSOR A0 #define R2_LINE_SENSOR A1 //czujniki szczelinowe #define L_SZCZ 2 #define P_SZCZ 3 //silniki #define LMOTOR 9 #define RMOTOR 8 #define IN1 4 #define IN2 5 #define IN3 6 #define IN4 7 //czujniki ultradzwiekowe #define SechoHSCR04 51 #define StrigHSCR04 49 #define PechoHSCR04 50 #define PtrigHSCR04 48 #define LechoHSCR04 42 #define LtrigHSCR04 40 #include <Stream.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(17, 16); // RX, TX #include <Wire.h> #include <Timers.h>//watki Timers<1>akcja;//watki volatile float impL=0, impP=0, vx1=0, vy1=0; //"impL","impP"-impulsy z enkoderow; float x1=0, y1=0, r=3.25, teta=0, tetaKat=0, tetaV=0, d=6.5, l=0, L=13.30, dystansL=0, dystansP=0, dystansS=0; //"r"-promien kola; "L"-odleglosc pomiedzy kolami mierzona od osi kola int licznik=0; int blad=0, g=200, vstart=40, pochodna=0, poprzedni=0, calka=0, PID=0; //"g"-granica widzialnosci czarnej lini; "vstart"-predkosc stala float Kp=8, Kd=0.1, Ki=0.4; //nastawy regulatora PID float Ldystans=0, Sdystans=0, Pdystans=0; float doMetra=0, prawo90=0; unsigned long s=0, start=0, time=0, aktualnyCzas=0, zapamietanyCzas=0, roznicaCzasu=0;//timery String inString = ""; void setup() { //Zasilanie +++ pinMode (47, OUTPUT);//ultradzwiekowy srodek digitalWrite(47, HIGH); pinMode (46, OUTPUT);//ultradzwiekowy prawy digitalWrite(46, HIGH); pinMode (38, OUTPUT);//ultradzwiekowy lewy digitalWrite(38, HIGH); pinMode (22, OUTPUT);//szczelinowy prawy digitalWrite(22, HIGH); pinMode (23, OUTPUT);//szczelinowy lewy digitalWrite(23, HIGH); //Masa --- pinMode (53, OUTPUT);//ultradzwiekowy srodek digitalWrite(53, LOW); pinMode (52, OUTPUT);//ultradzwiekowy prawy digitalWrite(52, LOW); pinMode (44, OUTPUT);//ultradzwiekowy lewy digitalWrite(44, LOW); //--------------Czujniki optyczne pinMode(L_SZCZ, INPUT); pinMode(P_SZCZ, INPUT); l=d*PI; //Silniki pinMode (LMOTOR, OUTPUT);//lewy pinMode (IN1, OUTPUT);//przod pinMode (IN2, OUTPUT);//tyl pinMode (RMOTOR, OUTPUT);//prawy pinMode (IN3, OUTPUT);//przod pinMode (IN4, OUTPUT);//tyl analogWrite(LMOTOR, 0); //Ustawienie predkosci digitalWrite(IN1, HIGH); //Kierunek: do przodu digitalWrite(IN2, LOW); //Kierunek: do tylu analogWrite(RMOTOR, 0); //Ustawienie predkosci digitalWrite(IN3, HIGH); //Kierunek: do przodu digitalWrite(IN4, LOW); //Kierunek: do tylu //Czujniki odbiciowe pinMode(R2_LINE_SENSOR, INPUT); pinMode(L2_LINE_SENSOR, INPUT); //Czujniki ultradzwiekowe pinMode(SechoHSCR04, INPUT); pinMode(StrigHSCR04, OUTPUT); pinMode(LechoHSCR04, INPUT); pinMode(LtrigHSCR04, OUTPUT); pinMode(PechoHSCR04, INPUT); pinMode(PtrigHSCR04, OUTPUT); mySerial.begin(9600); Serial.begin(9600); s=millis(); start=millis(); time = millis(); //------------Watki------------ //akcja.attach(0, 50, wysylanie); akcja.attach(0, 250, pozycja); //akcja.attach(1, 980, hcsr04lewy); //akcja.attach(2, 990, hcsr04srodek); //akcja.attach(3, 1000, hcsr04prawy); //akcja.attach(4, 2000, stopMotors); //--------------Przerwania na enkoderach kol--------------------- attachInterrupt(digitalPinToInterrupt(2), enkoderL, LOW); attachInterrupt(digitalPinToInterrupt(3), enkoderP, LOW); } //******************************************** //*****************FUNKCJE******************** //******************************************** //-----------------Wysylanie pozycji z arduinoNano przez BT void wysylanie() { if (Serial.available() > 0) { int inChar = Serial.read(); if (inChar != '\n') { inString += (char)inChar; } else { Serial.println(inString.toFloat()); inString = ""; } } } //----------------Enkodery kol void enkoderL() { if ((millis() - time) > 5) impL++; time = millis(); } void enkoderP() { if ((millis() - time) > 5) impP++; time = millis(); } //----------------Pozycja pojazdu void pozycja() { //droga przejechana przez kazde z kol dystansL=(impL/20)*l; dystansP=(impP/20)*l; //kata o jaki obrocil sie robot tetaKat=tetaKat+((dystansP-dystansL)/L); //pozycja dystansS=(dystansP+dystansL)/2; x1=dystansS*(cos(tetaKat)); y1=dystansS*(sin(tetaKat)); //Serial.print("x1: "); mySerial.println(x1); //Serial.print("y1: "); mySerial.println(y1); //reset licznikow impL=0; impP=0; } //---------------Jazda prosto 1 metr void jedenMetr () { if (doMetra<100) { dystansL=(impL/20)*l; dystansP=(impP/20)*l; dystansS=(dystansP+dystansL)/2; analogWrite(RMOTOR, 70); //Ustawienie predkosci digitalWrite(IN3, HIGH); //Kierunek: do przodu analogWrite(LMOTOR, 70); //Ustawienie predkosci digitalWrite(IN1, HIGH); //Kierunek: do przodu doMetra=dystansS+doMetra; //reset licznikow impL=0; impP=0; Serial.println(doMetra); } else if (doMetra>=100) { analogWrite(RMOTOR, 0); //Ustawienie predkosci digitalWrite(IN3, LOW); //Kierunek: do przodu analogWrite(LMOTOR, 0); //Ustawienie predkosci digitalWrite(IN1, LOW); //Kierunek: do przodu } } //---------------Skręt w prawo 90 stopni void wPrawo90 () { if (prawo90<20.88) { dystansL=(impL/20)*l; analogWrite(RMOTOR, 0); //Ustawienie predkosci digitalWrite(IN3, LOW); //Kierunek: do przodu analogWrite(LMOTOR, 70); //Ustawienie predkosci digitalWrite(IN1, HIGH); //Kierunek: do przodu prawo90=dystansL+prawo90; //reset licznikow impL=0; impP=0; Serial.println(prawo90); } else if (prawo90>=20.88) { analogWrite(LMOTOR, 0); //Ustawienie predkosci analogWrite(RMOTOR, 0); //Ustawienie predkosci digitalWrite(IN1, LOW); digitalWrite(IN3, LOW); } } //---------------Pomiar odleglosci czujnika srodkowego void hcsr04srodek () { float czas; digitalWrite(StrigHSCR04, LOW); delayMicroseconds(2); digitalWrite(StrigHSCR04, HIGH); delayMicroseconds(10); digitalWrite(StrigHSCR04, LOW); czas = pulseIn(SechoHSCR04, HIGH); Sdystans = (czas / 58); //delay(1000); //Serial.print("\nOdleglosc-srodek: "); mySerial.println(Sdystans); } //---------------Pomiar odleglosci czujnika lewego void hcsr04lewy () { float czas; digitalWrite(LtrigHSCR04, LOW); delayMicroseconds(2); digitalWrite(LtrigHSCR04, HIGH); delayMicroseconds(10); digitalWrite(LtrigHSCR04, LOW); czas = pulseIn(LechoHSCR04, HIGH); Ldystans = (czas / 58); //delay(1000); //Serial.print("\nOdleglosc-lewy: "); mySerial.println(Ldystans); } //---------------Pomiar odleglosci czujnika prawego void hcsr04prawy () { float czas; digitalWrite(PtrigHSCR04, LOW); delayMicroseconds(2); digitalWrite(PtrigHSCR04, HIGH); delayMicroseconds(10); digitalWrite(PtrigHSCR04, LOW); czas = pulseIn(PechoHSCR04, HIGH); Pdystans = (czas / 58); //delay(1000); //Serial.print("\nOdleglosc-prawy: "); mySerial.println(Pdystans); } //---------------------Wyliczenie bledu int error () { if (analogRead(L2_LINE_SENSOR) < g && analogRead(R2_LINE_SENSOR) < g) { //nie widza lini blad=1; } else if (analogRead(L2_LINE_SENSOR) > g && analogRead(R2_LINE_SENSOR) < g) { //lewy widzi linie blad=2; } else if (analogRead(L2_LINE_SENSOR) < g && analogRead(R2_LINE_SENSOR) > g) { //prawy widzi linie blad=-2; } //Serial.print("blad: "); //Serial.println(blad); return blad; } //-----------------------------PID void regPID () { pochodna=blad-poprzedni; poprzedni=blad-poprzedni; calka=constrain(calka+blad, -50, 50); PID=round(abs((Kp*blad)+(Kd*pochodna)+(Ki*calka))); //Serial.print("PID: "); //Serial.println(PID); if (blad == 1) {//jazda prosto leftMotor(vstart); rightMotor(vstart); } else if (blad == 2) { //lewy widzi linie leftMotor(vstart-PID); rightMotor(vstart+PID); } else if (blad == -2) { //prawy widzi linie leftMotor(vstart+PID); rightMotor(vstart-PID); } } //-------------------Sterowanie silnikami void leftMotor(int V) { if (V>0) { //V=constrain(V, 0, 256); analogWrite(LMOTOR, V); //Ustawienie predkosci digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); } else { //stop //V=abs(V); analogWrite(LMOTOR, 0); //Ustawienie predkosci digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); } } void rightMotor(int V) { if (V>0) { //V=constrain(V, 0, 256); analogWrite(RMOTOR, V); //Ustawienie predkosci digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); } else { //stop //V=abs(V); analogWrite(RMOTOR, 0); //Ustawienie predkosci digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); } } void stopMotors() { analogWrite(LMOTOR, 0); //Ustawienie predkosci analogWrite(RMOTOR, 0); //Ustawienie predkosci digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); delay(1000); } //--------------PETLA GLOWNA-------------- void loop() { //jedenMetr(); //wPrawo90(); //akcja.process(); //aktualnyCzas = millis(); //roznicaCzasu = aktualnyCzas - zapamietanyCzas; //error(); //regPID(); delay(200); pozycja(); //if (roznicaCzasu >= 250UL) { //zapamietanyCzas = aktualnyCzas; //pozycja(); //hcsr04lewy(); //hcsr04srodek(); //hcsr04prawy(); //} /* float czas=millis(); Serial.println(analogRead(R2_LINE_SENSOR)); delay(1000); Serial.print(" , "); Serial.println(czas/1000); */ }
  18. Hej, próbuję przerobić kurs STM32 F1 HAL i na samym początku pojawiły się problemy, a mianowicie od kilku dni próbuję zrobić zadanie 4.1, jednak wszystkie próby kończą się niepowodzeniem. Ma może ktoś zrobione to zadanie i chciałby się nim podzielić oraz sposobem jego rozwiązania? Poniżej mój kod. Z góry dziękuję! #include "stm32f1xx.h" int main(void) { SystemCoreClock = 8000000; // taktowanie 8Mhz HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_InitTypeDef gpio; // obiekt gpio będący konfiguracją portów GPIO gpio.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4| GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9; gpio.Mode = GPIO_MODE_IT_RISING; gpio.Pull = GPIO_PULLUP; // rezystory podciągające są wyłączone gpio.Speed = GPIO_SPEED_FREQ_LOW; // wystarczą nieskie częstotliwości przełączania HAL_GPIO_Init(GPIOC, &gpio); // inicjalizacja modułu GPIOC gpio.Pin = GPIO_PIN_13; // konfigurujemy pin 13 gpio.Mode = GPIO_MODE_INPUT; // jako wejście gpio.Pull = GPIO_PULLUP; // włączamy rezystor podciągający HAL_GPIO_Init(GPIOC, &gpio); // port GPIOC while (1) { if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_RESET) { uint32_t led = 0; HAL_GPIO_WritePin(GPIOC, 1 << led, GPIO_PIN_SET); //włącz diode HAL_Delay(150); HAL_GPIO_WritePin(GPIOC, 1 << led, GPIO_PIN_RESET); //wyłącz diode if (++led >= 10) { // przejdz do nastepnej led = 0; } else { uint32_t led = 10; HAL_GPIO_WritePin(GPIOC, 1 << led, GPIO_PIN_SET); //włącz diode HAL_Delay(150); HAL_GPIO_WritePin(GPIOC, 1 << led, GPIO_PIN_RESET); //wyłącz diode if (--led >= 10) { // przejdz do nastepnej led = 10; } } } } }
  19. Witam, skończyłem podstawy elektroniki część pierwsza, teraz miałem zamiar nauczyć się podstaw Pythona i zacząć z kursem Raspberry Pi (dodam tylko, że wcześniej programowałem ok. 4 miesiące w C++ i skończyłem kursy pana Mirosława Zelenta) lecz natrafiłem na pewien problem, który ogranicza możliwość dalszego rozwijania się, problem ten związany jest z wybieraniem Interpretera mianowicie w momencie kiedy ręcznie dodaję interpreter wyskakuje mi błąd "Permission denied". Proszę o pomoc, ponieważ nie chciałbym, żeby jakieś środowisko pracy stanowiło dla mnie przeszkodę w rozwijaniu się. (Dodam również, że mam 16 lat i jestem bardzo zmobilizowany do nauki programowania). Z góry dziękuje za wszelką pomoc. Poniżej zamieszczam screeny:
  20. Witajcie! Od niedawna mam przyjemność uczenia się z kursu Elektronika 1 z fenomenalnym zestawem do tego 😄 i jestem pod takim wrażeniem że aż pojawił się mały problem. Ale od początku... trafiłem tu przez chęć kupienia Maliny. Chciałem najpierw kupić z oficjalnej strony przez Botland RPi z dodatkami (klawiatura mysz itp.) i to nawet w podobnej cenie co ten zestaw z FORBOT. Doszedłem do wniosku jednak że lepiej kupić pakiet FORBOTA bo tak przynajmniej się czegoś nauczę, i nie wydam pieniędzy w błoto a co ważniejsze nie zepsuje maliny przez własną niewiedzę. Więc zacząłem wczytywać się w kurs elektroniki i dosłownie po pierwszej lekcji kursu zamówiłem zestaw do elektroniki kurs 1. Aktualnie będę zaczynał lekcję numer 5. I zacząłem zastanawiać się nad kolejnymi kursami i powiem szczerze że nie mam pojęcia do czego przejść dalej. 1. RPi kusi, ale cenowo jest dla mnie wysoko (studiuję i nie pracuję aktualnie + brak czasu na prace przez praktyki) no i musiał bym chwilę odkładać. 2. Kurs elektroniki brzmi zachęcająco ale w sumie jest w tym drugim dziale dla zaawansowanych bardziej więc też tu sprawa nie jest prosta. 3. Kurs Arduino 1 - zaczynam się nad tym zastanawiać ale nie wiem. Z jednej strony jest tam C a mi bliżej do języków skryptowych więc z mojej wiedzy to bardzie RPi z pythonem. Ale z drugiej strony mam do napisania projekty 3 w c/c++ na studia plus minus do grudnia i mogło by mnie to zmotywować do nauki języka. (Szybkie pytanie czy w Arduino można pisać w C++ czy tylko C?) 4. Kurs lutowania, gdzie nigdy na oczy nie widziałem lutownicy na żywo może raz i raz miałem w ręce ale nie lutowałem nigdy. Też kuszące ale poziom skomplikowania wydaje się być duży. 5. Kurs techniki cyfrowej... nie wiem czy nawet można się za to brać po pierwszym kursie elektroniki i czy drugiego nie potrzeba ale też brzmi kusząco. Plan jest taki że mam zamiar przejść przez wszystkie (prosił bym o jakieś informacje odnośnie kurs micro:bit bo ten mnie najmniej z własnego opisu przekonał, do czego może mi się to przydać?) Prosiłbym o scharakteryzowanie kursów które wypisałem wyżej i jeśli ktoś chce to może ustawić plan w jakiej kolejności je realizować po tym pierwszym z elektroniki. Oraz podać zalety takiego play i ewentualnie wady. Był bym bardzo wdzięczny! Pozdrawiam Ruby
  21. czy można zrobić takie coś że jak się kliknie na guzik (zamontowany na płytce stykowej taki zwykły kwadratowy takie jak na załączonym obrazku) to np. będzie to równo znaczne z naciśnięciem klawisza A na klawiaturze dziękuję z góry za odpowiedzi
  22. //TEN DZIAŁA POPRAWNIE #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <SoftwareSerial.h> int wartoscAnalog=0; byte wartoscZmapowana=0; char info[96]; LiquidCrystal_I2C lcd(0x27,16,2); void setup() { lcd.init(); lcd.backlight(); lcd.setCursor(0,0); } void loop() { lcd.clear(); lcd.setCursor(0,0); lcd.print(wartoscZmapowana); wartoscAnalog=analogRead(A0); wartoscZmapowana=map(wartoscAnalog, 0, 1023, 0, 100); delay(1000); } // TEN ZLE WYSWIETLA #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <SoftwareSerial.h> #include "DHT.h" #define DHTTYPE DHT22 #define DHTPIN 6 #define WIATRAK 7 int wartoscAnalog=0; byte wartoscZmapowana=1; char info[96]; int buzzer=11; LiquidCrystal_I2C lcd(0x27,16,2); DHT dht(DHTPIN, DHTTYPE); void setup() { dht.begin(); //START DHT lcd.init(); lcd.backlight(); lcd.setCursor(0,0); pinMode(WIATRAK,OUTPUT); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); float f = dht.readTemperature(true); if (isnan(h) || isnan(t) || isnan(f)) { lcd.print(F("Failed to read from DHT sensor!")); return; } float hif = dht.computeHeatIndex(f, h); float hic = dht.computeHeatIndex(t, h, false); lcd.clear(); lcd.setCursor(0,0); lcd.print(wartoscZmapowana); wartoscAnalog=analogRead(A0); wartoscZmapowana=map(wartoscAnalog, 0, 1023, 0, 100); if(t>35) { wyswietlanie(); BuzzerWiatrak(); } if(wartoscZmapowana==0) { lcd.clear(); lcd.setCursor(4,0); lcd.print("alarm"); } if(wartoscZmapowana>20) { wyswietlanie(); BuzzerWiatrak(); } else { digitalWrite(WIATRAK, LOW); } //delay(1000); } void wyswietlanie() { lcd.clear(); lcd.setCursor(4,0); lcd.print("Pozar"); } void BuzzerWiatrak() { digitalWrite(WIATRAK, HIGH); tone(buzzer,450); delay(500); noTone(buzzer); delay(500); } Witam, mam problem, mianowicie mam projekcik(lcd, czujka dymu, czujka temperatury, buzzer i wiatrak). Arduino nie wyświetla poprawnie teksu( nie wyswietla wszystkiego).W momencie wykonania warunku (if) gdy np temperatura jest za wysoka wszystko działa(wyświetla prawidłowo) Natomiast gdy wgram prosty program(tylko czujka dymu i lcd) wszystko wyświetla prawidłowo. Dodam że wyświetlacz to LCD 1602 pod magistrale I2C a arduino uno klon. Macie jakieś pomysły jak to naprawic? W załączniku prześle jedno zdjecie z niewłaściwym wyświetleniem, a drugie z poprawnym(przy maly programie). Dzieki i pozdrawiam
  23. Witam serdecznie, chciałem zbudować mały pojazd, którym mógłbym sterować za pomocą telefonu. Przed złożeniem sprawdziłem czy wszystko działa i przy próbie komunikacji z telefonem potrafiłem sterować diodą (tzn. włączać i wyłączać) i wszystko działało. Niestety, po złożeniu pojazdu, silniki nie reagowały na polecenia przesyłane przez bluetooth, odłączyłem moduł i znowu spróbowałem sterować sama dioda, jednak tym razem komunikacja nie przebiegła pomyślnie. Mam napisany taki krótki program, oraz aplikacje i nie wiem w czym jest problem, więc proszę o pomoc 🙂
  24. Witam! Mam problem z tym projektem ponieważ mam podpięte wszystkie kabelki prawidłowo program i biblioteki również a działa tylko sensor (wykrywa ruch) i servomotor ("kręci tylko głową")a nie wysyła żadnego sygnału do silników. Proszę o pomoc!🙏 (Film na którym się wzorowałem https://www.youtube.com/watch?v=4CFO0MiSlM8 ) <---SCHEMAT #include <Servo.h> //Servo motor library. This is standard library #include <NewPing.h> //Ultrasonic sensor function library. You must install this library //our L298N control pins const int LeftMotorForward = 5; const int LeftMotorBackward = 4; const int RightMotorForward = 3; const int RightMotorBackward = 2; //sensor pins #define trig_pin A1 //analog input 1 #define echo_pin A2 //analog input 2 #define maximum_distance 200 boolean goesForward = false; int distance = 100; NewPing sonar(trig_pin, echo_pin, maximum_distance); //sensor function Servo servo_motor; //our servo name void setup(){ pinMode(RightMotorForward, OUTPUT); pinMode(LeftMotorForward, OUTPUT); pinMode(LeftMotorBackward, OUTPUT); pinMode(RightMotorBackward, OUTPUT); servo_motor.attach(11); //our servo pin servo_motor.write(90); delay(2000); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); } void loop(){ int distanceRight = 0; int distanceLeft = 0; delay(50); if (distance <= 20){ moveStop(); delay(300); moveBackward(); delay(400); moveStop(); delay(300); distanceRight = lookRight(); delay(300); distanceLeft = lookLeft(); delay(300); if (distance >= distanceLeft){ turnRight(); moveStop(); } else{ turnLeft(); moveStop(); } } else{ moveForward(); } distance = readPing(); } int lookRight(){ servo_motor.write(10); delay(500); int distance = readPing(); delay(100); servo_motor.write(90); return distance; } int lookLeft(){ servo_motor.write(170); delay(500); int distance = readPing(); delay(100); servo_motor.write(90); return distance; delay(100); } int readPing(){ delay(70); int cm = sonar.ping_cm(); if (cm==0){ cm=250; } return cm; } void moveStop(){ digitalWrite(RightMotorForward, LOW); digitalWrite(LeftMotorForward, LOW); digitalWrite(RightMotorBackward, LOW); digitalWrite(LeftMotorBackward, LOW); } void moveForward(){ if(!goesForward){ goesForward=true; digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorForward, HIGH); digitalWrite(LeftMotorBackward, LOW); digitalWrite(RightMotorBackward, LOW); } } void moveBackward(){ goesForward=false; digitalWrite(LeftMotorBackward, HIGH); digitalWrite(RightMotorBackward, HIGH); digitalWrite(LeftMotorForward, LOW); digitalWrite(RightMotorForward, LOW); } void turnRight(){ digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorBackward, HIGH); digitalWrite(LeftMotorBackward, LOW); digitalWrite(RightMotorForward, LOW); delay(500); digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorForward, HIGH); digitalWrite(LeftMotorBackward, LOW); digitalWrite(RightMotorBackward, LOW); } void turnLeft(){ digitalWrite(LeftMotorBackward, HIGH); digitalWrite(RightMotorForward, HIGH); digitalWrite(LeftMotorForward, LOW); digitalWrite(RightMotorBackward, LOW); delay(500); digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorForward, HIGH); digitalWrite(LeftMotorBackward, LOW); digitalWrite(RightMotorBackward, LOW); } Filmik jak działa.rar
  25. Cześć mam problem z zaprogramowaniem analogowego czujnika płomieni Waveshare. Jest to czujnik z botlandu za 10.99zł. Buduje robota na konkurs RoboRave w kategorii fire fighting. Jeżeli znacie jakiś poradnik to o podanie linku czy nazwy. Z góry dziękuje.
×
×
  • 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.