Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


Pomocna odpowiedź

To może ja na szybko, żebyś z niecierpliwości nie popełnił błędu:

  • Napięcie na VIN w Arduino wręcz powinno być wyższe od 5V i to co najmniej o 1V, ale nie wyższe niż jakieś 12V. Zatem zakres 6-12V jest OK. Wszystko co poniżej spowoduje, że wewnętrzny stabilizator nie będzie w stanie zrobić dobrych 5V (na Vcc) potrzebnych do pracy procesora.
  • Nie, do zasilania potencjometru nie możesz użyć niczego większego niż 5V, bo w zasadzie układy scalone bardzo nie lubią doprowadzania do ich pinów sygnałów wyższych niż ich zasilanie. Jeśli zatem procesor na swoim Vcc ma 5V, to na żadnej jego nóżce nie powinno pojawić się więcej niż jakieś 5.2V i to jest absolutnie nieprzekraczalna granica. Gdybyś zasilał swój procesor np. z 3.3V (dużo płytek tak teraz ma, np. ESP32, moduły na STM32 czy choćby Arduino MINI w wersjach 3.3V), to wtedy granicą oporu byłoby ok. 3.5V. Czasem, naprawdę rzadko scalaki są do wysokich napięć przystosowane (np. jakieś wzmacniacze pomiarowe czy pewnego rodzaju specjalne przetworniki ADC), ale procesor na pewno nie. Podając napięcie wyższe niż 5V na jego wejście analogowe spowodujesz, że spali się nie tylko ten pin procesora, ale masz sporą szansę na zniszczenie wszystkich układów na płytce. Także.. ostrożnie.
  • Jeśli wyniki pomiarów ADC są takie jak opisałeś, a układ jest połączony poprawnie to faktycznie wskazuje to na uszkodzenie potencjometru. Ostateczną weryfikacją byłby pomiar napięcia "produkowanego" przez potencjometr zwykłym multimetrem. Zaczep się minusem woltomierza (zakres np. 20V) na masie GND a plusem na suwaku potencjometru i obracaj gałką. Jednoczesnie możesz puścić program mierzący i wypisujący wyniki z ADC - będziesz miał porównanie. Jeśli wskazania miernika potwierdzą to co widzi ADC, tj. jeśli na początku ruchu będzie wciąż mało a potem nagle skoczy do 4V i więcej, to będzie to ostateczny dowód. Jeśli natomiast nie, właśnie znalazłeś jakiś błąd w swoim układzie i sprawdź dokładnie połączenia.
  • Lubię! 2
Link to post
Share on other sites
Dnia 23.11.2020 o 08:04, Achtenbob napisał:

@Treker

Właśnie chodziło mi o to czy mogłoby być większe napięcie niż 5V.

 

Wartość ADC, zakres 0-1023.

Miałem to samo, sprawdź czy dobrze podłączyłeś potencjometr (zdjęcie masz przy zadaniu 4.1), u mnie też wyszło to że jeden z potencjometrów miałem uszkodzony.

Link to post
Share on other sites

Witam

Po podłączeniu serwa mam taki błąd:

 

C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\PC\Documents\Arduino\libraries -fqbn=arduino:avr:uno -vid-pid=2341_0043 -ide-version=10813 -build-path C:\Users\PC\AppData\Local\Temp\arduino_build_122065 -warnings=all -build-cache C:\Users\PC\AppData\Local\Temp\arduino_cache_994445 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose C:\Program Files (x86)\Arduino\libraries\Servo\examples\Sweep\Sweep.ino
C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\PC\Documents\Arduino\libraries -fqbn=arduino:avr:uno -vid-pid=2341_0043 -ide-version=10813 -build-path C:\Users\PC\AppData\Local\Temp\arduino_build_122065 -warnings=all -build-cache C:\Users\PC\AppData\Local\Temp\arduino_cache_994445 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose C:\Program Files (x86)\Arduino\libraries\Servo\examples\Sweep\Sweep.ino
Using board 'uno' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
Using core 'arduino' from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
Detecting libraries used...
"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "C:\\Users\\PC\\AppData\\Local\\Temp\\arduino_build_122065\\sketch\\Sweep.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Error while detecting libraries included by C:\Users\PC\AppData\Local\Temp\arduino_build_122065\sketch\Sweep.ino.cpp
Generating function prototypes...
"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\variants\\standard" "C:\\Users\\PC\\AppData\\Local\\Temp\\arduino_build_122065\\sketch\\Sweep.ino.cpp" -o "C:\\Users\\PC\\AppData\\Local\\Temp\\arduino_build_122065\\preproc\\ctags_target_for_gcc_minus_e.cpp" -DARDUINO_LIB_DISCOVERY_PHASE
avr-g++: error: device-specs/specs-atmega328p: No such file or directory
exit status 1
Błąd kompilacji dla płytki Arduino Uno.


 

Edytowano przez Gieneq
Link to post
Share on other sites

@Piotrrrek witam na forum 🙂 może odpowiedź nie będzie zbyt ambitna, ale spróbuj przeinstalować Arduino IDE, bo problem jest w samej kompilacji, czyli po stronie komputera. Z logu istotne jest to: 

Cytat

error: device-specs/specs-atmega328p: No such file or directory

Jeżeli tak to nie pomoże to pomyślimy co dalej. Poza tym podaj:

  • system,
  • wersję i rodzaj instalacji Arduino IDE.
Link to post
Share on other sites
29 minut temu, Gieneq napisał:

@Piotrrrek witam na forum 🙂 może odpowiedź nie będzie zbyt ambitna, ale spróbuj przeinstalować Arduino IDE, bo problem jest w samej kompilacji, czyli po stronie komputera. Z logu istotne jest to: 

Jeżeli tak to nie pomoże to pomyślimy co dalej. Poza tym podaj:

  • system,
  • wersję i rodzaj instalacji Arduino IDE.

Przeinstalowałem i znowu jest błąd 

mam windows 10 home / 64bit

arduino-1.8.13-windows 

 

Link to post
Share on other sites
19 godzin temu, Treker napisał:

@Piotrrrek wklej proszę dla formalności dokładny kod, który próbujesz skompilować. Czy mamy rozumieć, że inne programy kompilują się bez żadnego problemu?

To jest gotowy przykład sweep. Żadnego programu nie moge kompilować. Próbowałem z wyłączonym antywirusem i dalej jest problem. Coś jest z komputerem bo na innym kompie wszystko działa. 

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}


 

Link to post
Share on other sites
(edytowany)

Cześć,

Zadanie domowe 5.4
Program działa poprawnie do momentu przesunięcia ramienia serwa w zadaną pozycję. Po tym działaniu następuje nieoczekiwany powrót do pozycji 0 (pomimo, że nie ma takiej instrukcji).

Czy podzieli się ktoś wiedzą, dlaczego, tak się dzieje?
(Z mojego przeprowadzonego śledztwa wyszło mi, że przez zmienną int ale nie rozumiem dlaczego po wykonaniu instrukcji program w pętli nadpisuje: pozycja = 0.)
 

#include <Servo.h> //Biblioteka odpowiedzialna za serwa
 
Servo serwomechanizm;  //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa 
int pozycja = 0; //zmienna, przechowujaca pozycje serwa
 
void setup() 
{ 
  serwomechanizm.attach(9);  //Serwomechanizm podłączony do pinu 9
  Serial.begin(9600);
  Serial.println("Podaj pozycje w ktora mam przesunac serwo [0-180]: "); // polecenie dla uzytkownika
  delay(50);
} 

 
void loop() 
{  
  if(Serial.available()>0) // Czy dane zostaly odebrane?
  {
    pozycja = Serial.parseInt(); // Zapisz dane pod zmienna
    delay(50);
    Serial.println("Pozycja serwa podana przez uzytkownika: " + pozycja); // info dla usera
    Serial.println(pozycja);
      if (pozycja<=180 && pozycja>=0) //sprawdzenie, czy wpisana wartosc znajduje sie w zakresie ruchu
      {
      serwomechanizm.write(pozycja); // wykonanie ruchu w zadana pozycje
      }
      else
      {
      Serial.println("Podales wartosc, ktora jest poza zakresem ruchu serwomechznizmu"); //info dla uzytkownika o zlej wartosci oczekiwanej pozycji
      Serial.println("Podaj pozycje w ktora mam przesunac serwo [0-180]: ");
      delay(50);
      }
  }
}                     

    

ScreenHunter 904.png

Edytowano przez KonTui
Link to post
Share on other sites

@KonTui witam na forum 🙂 Błąd ten prawdopodobnie pochodzi z ustawień monitora portu szeregowego. Prawdopodobnie masz tam ustawione (w rozwijanym okienku), że ma być dodawany znak końca linii. Zmień to ustawienie, aby program nie dodawał żadnych informacji na końcu linii i sprawdź wtedy 🙂

  • Pomogłeś! 1
Link to post
Share on other sites
18 minut temu, Treker napisał:

@KonTui witam na forum 🙂 Błąd ten prawdopodobnie pochodzi z ustawień monitora portu szeregowego. Prawdopodobnie masz tam ustawione (w rozwijanym okienku), że ma być dodawany znak końca linii. Zmień to ustawienie, aby program nie dodawał żadnych informacji na końcu linii i sprawdź wtedy 🙂

Dzięki ! Teraz działa prawidłowo.

  • Lubię! 1
Link to post
Share on other sites

@Adder witam na forum i dziękuję za miłe słowa, cieszę się, że kurs jest pomocny! Dobry pomysł na projekt, eksperymentuj dalej - powodzenia 🙂

  • Lubię! 1
Link to post
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

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!

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