Skocz do zawartości

silver2001

Użytkownicy
  • Zawartość

    36
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O silver2001

  • Ranga
    3/10

Informacje

  • Płeć
    Mężczyzna
  • Zainteresowania
    robotya
  1. Cześć, napisałem program w którym steruje prędkością silnika radiowo dla arduino : nadajnik ( arduino nano ): #include <VirtualWire.h> // definiujemy piny #define led_pin 13 #define transmit_pin 8 #define pot_pin A0 void setup() { vw_set_tx_pin(transmit_pin); vw_setup(2000); pinMode(led_pin, OUTPUT); } void loop() { int pot = analogRead(pot_pin); String toSend = (String(pot, DEC)); char msg[23]; // tworzymy tablicę typu char toSend.toCharArray(msg, toSend.length() + 1); digitalWrite(led_pin, HIGH); vw_send((uint8_t *)msg, strlen(msg)); vw_wait_tx(); digitalWrite(led_pin, LOW); delay(100); } odbiornik ( arduino mega ): #include <VirtualWire.h> #define led_pin 10 #define receive_pin 13 #define pwm_pin 9 void setup() { Serial.begin(9200); Serial.println("setup"); vw_set_rx_pin(receive_pin); vw_setup(2000); vw_rx_start(); pinMode(led_pin, OUTPUT); pinMode(pwm_pin, OUTPUT); } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) { int i,pwm,wartosc; String liczba; digitalWrite(led_pin, HIGH); for (i = 0; i < buflen; i++) { liczba+=char(buf[i]); } wartosc = liczba.toInt(); pwm = map(wartosc,0,1023,0,255); Serial.println (pwm); analogWrite(pwm_pin, pwm); digitalWrite(led_pin, LOW); if(digitalRead(pwm < 120)) { digitalWrite(30,LOW); digitalWrite(32,HIGH); } if(digitalRead(pwm > 150 )) { digitalWrite(30,HIGH); digitalWrite(32,LOW); } if(digitalRead(pwm > 120 && pwm < 150)) { digitalWrite(30,LOW); digitalWrite(32,LOW); } } } Problem w tym ze między wartością 120 a 150 pwm-a silnik kręci się, a nie powinien a po za tymi wartościami w ogóle się nie kręci. O co chodzi w tym ?
  2. Toteż zrobiłem, wykorzystałem do tego program na servo ( poszedłem trochę na łatwiznę ) : #include <Servo.h> Servo myservo; int potpin = 0; int val; void setup() { Serial.begin(9200); Serial.println("setup"); myservo.attach(9); } void loop() { val = analogRead(potpin); val = map(val, 0, 1023, 0, 180); Serial.println(val); myservo.write(val); delay(15); if(val > 150 ) { digitalWrite(8,HIGH); digitalWrite(7,LOW); } if(val < 150 ) { digitalWrite(8,LOW); digitalWrite(7,HIGH); } } W ten sposób działa.
  3. witam, mam problem ze sterowaniem silnika pwm'em. Jako nadajnik używam Arduino Nano, odbiornik to Arduino Mega, moduł radiowy ( nadajnik - odbiornik ) 433mHz a sterownik silników to L298N. Otóż dla nadajnika mam wgrany program : #include <VirtualWire.h> // definiuje piny #define led_pin 11 #define transmit_pin 8 #define pot_pin A0 void setup() { // przygotowuje potrzebne informacje dla biblioteki vw_set_tx_pin(transmit_pin); vw_setup(2000); pinMode(led_pin, OUTPUT); } void loop() { int pot = analogRead(pot_pin); String toSend = (String(pot, DEC)); // tekst wiadomości char msg[23]; // tworzymy tablicę typu char toSend.toCharArray(msg, toSend.length() + 1); // konwertuje tekst do tablicy charów digitalWrite(led_pin, HIGH); // zapalam LED vw_send((uint8_t *)msg, strlen(msg));// wysyłam vw_wait_tx(); digitalWrite(led_pin, LOW); // gaszę LED delay(100); // czekam } a dla odbiornika : #include <VirtualWire.h> #define led_pin 10 #define receive_pin 13 #define pwm_pin 9 void setup() { Serial.begin(9200); Serial.println("setup"); // przygotowuje potrzebne informacje dla biblioteki vw_set_rx_pin(receive_pin); vw_setup(2000); vw_rx_start(); // startuje odbieranie danych pinMode(led_pin, OUTPUT); pinMode(pwm_pin, OUTPUT); } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) { int i,pwm,wartosc; String liczba; digitalWrite(led_pin, HIGH); //zapalam LED // w pętli zczytujemy dane z odbiornika for (i = 0; i < buflen; i++) { liczba+=char(buf[i]); // wiadomość } wartosc = liczba.toInt(); pwm = map(wartosc,0,1023,0,255); Serial.print(wartosc);// Debug Serial.print(" "); Serial.println (pwm); analogWrite(pwm_pin, pwm); digitalWrite(led_pin, LOW); // gaszę LED digitalWrite(8,HIGH); } } Więc na czym polega mój problem. Otóż, chcę sterować silnikiem w ten sposób, ze między wartością 0 a 150 pwm'u silnik kręci się w jedną stronę ( zwiększając prędkość bo steruję pwm'em ) a jeśli wartość jest większa niż 150, silnik kręci się w drugą stronę, ale prędkość się zwiększa aż dojdzie do maksymalnej ( bo wciąż ruszam gałką potencjometru ) więc postanowiłem w takim wypadku dodać funkcje : if( pwm < 150) { digitalWrite(8,HIGH); digitalWrite(7,LOW); } if( pwm > 150) { digitalWrite(8,LOW); digitalWrite(7,HIGH); } po dodaniu tych 2 funkcji do programu, silnik kręci się tak jak by w ogóle ich nie widział - kręci się tylko w 1 stronę. Pomierzyłem miernikiem, pin 7 jest ciągle na stanie wysokim i nie zmienia wartości na niską
  4. Em, po podłączeniu omomierza do jednej "pary" pinów - rośnie, a po podłączeniu do drugiej "pary " - maleje. Oczywiście przesuwam wajchą w tą samą stronę mierząc opór
  5. Łączy sie w tym znaczeniu że tylko między tymi pinami zmienia sie rezystancja
  6. Potencjometry kupiłem tu : http://allegro.pl/ShowItem2.php?item=6634976725 A co do mierzenia, pomierzyłem, i z tego co zaobserwowałem, wyszlo mi że jeden pin łączy sie z pinem na przeciwko po skosie, a drugi pin ( który jest obok pierwszego ) takze łączy się z pinem na przeciwko po skosie. Na rysunku wygląda to tak : __________ Komentarz dodany przez: Sabre _allegro
  7. Cześć Kupiłem sobie potencjometr suwakowy, który posiada 4 piny a nie 3 tak jak potencjometr obrotowy i nie wiem gdzie podpiąć masę, 5v i "sygnał" , nie wiem również jak to sprawdzić, a w internecie ciężko coś znaleźć na ten temat. Ma ktos moze jakis schemat zasady działania takiego potencjometru ?
  8. założyłem inne konto ( z prywatnych przyczyn ) bez polskich znaków, i wyświetla mi się teraz to : libraries\VirtualWire\VirtualWire.cpp.o (symbol from plugin): In function `crc16_update(unsigned int, unsigned char)': (.text+0x0): multiple definition of `__vector_11' libraries\Servo\avr\Servo.cpp.o (symbol from plugin):(.text+0x0): first defined here collect2.exe: error: ld returned 1 exit status exit status 1 Błąd kompilacji dla płytki Arduino Nano. Co teraz ?
  9. mam coś takiego : ale chyba nie ma w tym nic co powinno mi pomóc. A jeśli jest, to nie bardzo wiem gdzie..
  10. Witam, mam problem z kompilacją mojego szkicu w arduino IDE. Chodzi o to, że kiedy do programu dodam 2 biblioteki, wyskakuje błąd i pisze w nim " błąd przy kompilacji szkicu". Dodam, że z jedną biblioteką wszystko ładnie działa. Próbowałem również zainstalować jeszcze raz IDE, ale to nic nie dało. Zmiana płytki z nano ( którą programuje ) na uno lub mega również nic nie daje.
  11. Witam wszystkich , jak wygląda kod, który sterował by pwm'em bezprzewodowo ? Konkretnie mówie o komunikacji radiowej( nadajnik - odbiornik ). Tak wiec z przyciskami sobie juz poradziłem, ale jak sterować tym nieszczęsnym pwm'em ?
  12. Więc, musze użyć pinu " command " w odbiorniku jako przerwanie do arduino ? Czy innego ?
  13. Programuje Arduino Uno w Arduino IDE. Marooned, dzieki juz wiem jak to zrobić.
  14. Siema koledzy chcę sterować moim robotem joystickiem, im większe wychylenie drążka tym większa prędkość silnik. Jak wygląda warunek odpowiedzialny za coś takiego ?
  15. Przeczytałem ten artykuł o przerwaniach, ale to działa tak że 1 przerwanie na cały program ? Z tego co tam czytałem można dodać max 2 przerwania dla arduino UNO. W przykładach w tym artykule jest pokazany program który obsługuje tylko alarm - jest krótki a moj program " troszkę " dłuższy i ma więcej niż 1 warunek. Gdzie wstawić to przerwanie ?
×
×
  • Utwórz nowe...