Skocz do zawartości

Pierwszy robot.


Danielos01

Pomocna odpowiedź

Usunąłem folder .github i ten komunikat nie wyskakuje ale przy wgrywaniu kodu ze strony:

http://blog.nettigo.pl/post/106789933143/adafruit-motor-shield-v2-i-silnik-krokowy

Wyskakuje coś takiego:

C:\Users\user\Documents\Arduino\sketch_nov20a\sketch_nov20a.ino:3:45: fatal error: utility/Adafruit_PWMServoDriver.h: No such file or directory

#include "utility/Adafruit_PWMServoDriver.h"

^

compilation terminated.

exit status 1

Błąd kompilacji dla płytki Arduino/Genuino Uno.

[ Dodano: 20-11-2016, 16:04 ]

Robiłe też wg tej strony:

https://learn.adafruit.com/adafruit-motor-shield/using-dc-motors

Ale wywala podobny błąd:

C:\Users\user\Documents\Arduino\ssss\ssss.ino:1:21: fatal error: AFMotor.h: No such file or directory

#include

^

compilation terminated.

exit status 1

Błąd kompilacji dla płytki Arduino/Genuino Uno.

__________

Komentarz dodany przez: Treker

Kody programów należy umieszczać przez narzędzie KOD (znajdziesz je w edytorze pod ikonką "<>"). Dzięki niemu składania programów jest automatycznie kolorowana, a wtedy wszystkim znacznie łatwiej analizować wklejone programy. Proszę to poprawić - z góry dziękuję za zrozumienie i pomoc przy utrzymaniu porządku na forum.

Link do komentarza
Share on other sites

Jeżeli nie zainstalowałeś poprawnie biblioteki to wszystko co ją wykorzystuje nie będzie się kompilowało. Może opisz jak to zrobiłeś, pokaż strukturę katalogów bibliotek itd. Przecież nikt nie wie co tam naknociłeś. Czy Twoje środowisko (Arduino IDE) widzi tę bibliotekę?

Przed chwilą ściągnąłem tego zipa z githuba. Rozpakowałem go wprost do katalogu libraries czyli tam, gdzie Arduino IDE trzyma biblioteki. Powstał nowy folder Adafruit_Motor_Shield_V2_Library-master. Zmieniłem mu nazwę wywalając "-master", ale to nie jest konieczne. Potem odpaliłem środowisko i od razu widać w nim nową bibliotekę (Plik -> Przykłady -> Adafruit Motor Shield V2 Library). Pierwszy z brzegu przykład w niej zawarty (DC Motor Test) po kliknięciu wciągnął się i skompilował się bez żadnych problemów. Wszystko zajęło 1 minutę.

Link do komentarza
Share on other sites

Sorki źle wrzuciłem bibliotekę.

Jednak po wgraniu dobrze wszystkiego na Arduino z DCMotorTest i podłaczeniu Motor Shield do osobnego zasilania tak jak tu :

http://www.scienceprog.com/drive-dc-motor-using-arduino-motor-shield/

Silnik nie kręci się.

[ Dodano: 20-11-2016, 17:54 ]

Tu jest kod, silnik podłączyłem do zacisków M1.

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"


Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 



Adafruit_DCMotor *myMotor = AFMS.getMotor(1);


void setup() {
 Serial.begin(9600);           // set up Serial library at 9600 bps
 Serial.println("Adafruit Motorshield v2 - DC Motor test!");

 AFMS.begin();  // create with the default frequency 1.6KHz


 /
 myMotor->setSpeed(150);
 myMotor->run(FORWARD);

 myMotor->run(RELEASE);
}

void loop() {
 uint8_t i;

 Serial.print("tick");

 myMotor->run(FORWARD);
 for (i=0; i<255; i++) {
   myMotor->setSpeed(i);  
   delay(10);
 }
 for (i=255; i!=0; i--) {
   myMotor->setSpeed(i);  
   delay(10);
 }

 Serial.print("tock");

 myMotor->run(BACKWARD);
 for (i=0; i<255; i++) {
   myMotor->setSpeed(i);  
   delay(10);
 }
 for (i=255; i!=0; i--) {
   myMotor->setSpeed(i);  
   delay(10);
 }

 Serial.print("tech");
 myMotor->run(RELEASE);
 delay(1000);
}

[ Dodano: 20-11-2016, 17:58 ]

Mierzyłem napięcia na M1, M2, M# i M4 względem GND i wszędzie jest około 0,17V.

Link do komentarza
Share on other sites

To może przypomnę moje poprzednie pytania na które nie padły jak dotąd żadne odpowiedzi:

"Co podłączyłeś do POWER? Tam musi być zasilanie części "silnikowej" mostków lub dajesz je przez zworkę.. Z czego zasilasz Arduino? ... Narysuj kompletny schemat tego co zrobiłeś"

I dodatkowe: co to znaczy "..i podłaczeniu Motor Shield do osobnego zasilania". Mógłbyś wyrażać się jaśniej? Wziąłeś je z dwóch gwoździ i cytryny czy maiłeś pod ręką coś innego?

Link do komentarza
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

No dobrze, ponieważ nic oczywistego nie przychodzi mi do głowy, to musisz zająć się szukaniem błędu. Czy świeci diodka sygnalizująca obecność na płytce V+? Czy możesz je zmierzyć podczas pracy programu np. na śrubach kostki zaciskowej?

Dalej: czy jesteś pewien, że program wypisuje co jakiś czas na monitorze portu szeregowego napisy "tick", "tock" i "tech"? To świadczy o prawidłowej pracy pętli głównej.

Potem - jeśli jeszcze nie masz - wciągnij schemat tego shielda i odszukaj na nim wyjścia rejestru IC3:

https://cdn-learn.adafruit.com/assets/assets/000/009/769/original/mshieldv1-schem.png

Zakładam, że Twoja płytka wygląda jakoś tak:

https://www.adafruit.com/products/81

Wyjścia rejestru IC3 są sygnałami sterującymi wszystkie cztery mostki a ściślej kierunkiem obrotów 4 silników. Jeżeli podpiąłeś się silnikiem do wyjść M1 to interesuje Cię lewa strona układu IC1. Masz tam trzy sygnały sterujące: M1A, M1B i PWM2A. Dwa pierwsze pochodzą z rejestru IC3 a trzeci wprost z procesora. Podczas pracy programu linie M1A i M1B powinny zmieniać się co ok. 5s z 0 na 1 i odwrotnie. Sygnały te masz dostępne na rządku dziurek nazwanym RN, od 1 do 8 - odszukaj je na płytce i wetknij się w odpowiednią woltomierzem. Za to na linii PWM2A powinieneś widzieć powoli rosnące i opadające napięcie - tak miernik reaguje na zmieniający się PWM. Melduj o wynikach.

Link do komentarza
Share on other sites

Więc tak,

moja płytka jest identyczna jak w tym linku.

Po włączeniu dioda świeci na zielono, jak pisałem za zaciskach M1A i M1B jest napięcie 0,17V.

W monitorze szeregowym prawidłowo wyświetla się napisy:

Adafruit Motorshield v2 - DC Motor test!

ticktocktechticktocktech.....

Mierzyłem napięcia układu IC1(znalazłem RN1 ale mam tam wlutowany czarny element i jest tam 10 nóżek):

M1A względem GND 0V

M1B względem GND 0V

GND jest brane z tego samego układu IC1

Natomiast na PWM2A mierki pokazuje skaczące napięcie miedzy 1,93V a 1,92 V.

[ Dodano: 21-11-2016, 13:26 ]

Przepiałem silnik na M3 i zmieniłem w programie też na M3 ale wszystko jest identycznie, silnik nie działa napięcia M3A i M3B 0V. W monitorze wszystko dobrze, dioda świeci.

Link do komentarza
Share on other sites

To może jest coś nie tak z definicjami (numerami) pinów w bibliotece? Nie wiemy która biblioteka obsługuje którą wersję płytki oraz czy i co zmieniali między wersjami. Z Twoich pomiarów wynika, że działający program nie macha pinami odpowiedzialnymi za kierunek ani nie zmienia wypełnienia PWM. To może tak: zapnij się minusem woltomierza na masę a plusem powoli przejedź przez wszystkie wyjścia rejestru IC3. Najłatwiej chyba jednak pomierzyć to na tym rządku otworów RNx bo masz je tam w jednym miejscu. Nawet jeśli coś tam jest wlutowane (ciekawe co to, może drabinka rezystorowa? ale po co?) Pomiary na pinach scalaka są trochę niebezpieczne, bo jak się coś omsknie to można łatwo zrobić mu zwarcie. W każdym gdy program wypisuje te swoje teksty poczekaj na każdym pinie 5-10 sekund na jakąś zmianę. Być może program wysyła jedynki i zera, ale na inne piny rejestru i steruje innym silnikiem. Możesz też przepiąć się silnikiem na każde z 4 wyjść - wyłączaj przy tym zasilanie. To samo z PWM: znajdź wszystkie 4 piny PWM z których korzysta ten shield i zmierz na nich napięcie. W przypadku prawidłowym któreś powinno zmieniać się od prawie 0V do prawie 5V. Jeśli żaden pin Rnx nie będzie się zmieniał ani żaden pin PWM nie będzie miał "trójkąta" napięcia w górę i w dół to dzieje się coś złego. Być może trzeba będzie zrobić próby z samodzielnie napisanymi, prostymi programami testowymi. Bardzo ważne, byś miał schemat swojego shielda w tej konkretnie wersji. Czy możesz wrzucić dokładne zdjęcie płytki?

Link do komentarza
Share on other sites

Twoje opisy eksperymentów i ich wyników są bardzo zdawkowe, więc ciężko wyciągać ogólne wnioski. Upewnijmy się co do faktów:

1. Odpaliłeś program z postu "20-11-2016, 17:50". Program ma dziwny znaczek '/' zaraz po AFMS.begin() więc może się nie kompilować. Dziwne są też trzy ostatnie linie w setup() - trochę bez sensu jest załączać silnik a zaraz potem go wyłączać, czy to Twoja własna inwencja? Trochę to ściema wrzucać kod inny niż ten, który rzeczywiście wgrywasz. Niepotrzebnie też modyfikujesz oryginalne programy testowe, bo właśnie w razie problemów to one są zaufanym wzorcem. Własne pomysły zostawi sobie na czas gdy już wszystko będzie działało. Mam nadzieję, że jednak udało Ci się go odpalić i jednak działa wypisując przy okazji te swoje tick, tack itd. Wiesz, jeśli robisz na biurku coś inaczej niż to nam opisujesz, to podważa zaufanie do wszystkiego co piszesz.

2. Głównym zdaniem tego programu jest powolne rozpędzenie i zatrzymanie silnika w jedną stronę a potem powtórka tego samego w drugą. To wymaga odpowiedniego wysterowania jednego z mostków dwoma sygnałami kierunku oraz powolnego wzrostu wypełnienia PWM od zera do max i z powrotem - i tak dwa razy. Kręcenie w jedną stronę zajmuje jakieś 5s, w drugą kolejne 5s a potem jest sekunda nicnierobienia.

3. Jak rozumiem byłeś wystarczająco cierpliwy by przejrzeć woltimierzem wszystkie 8 sygnałów kierunku wychodzących z rejestru przesuwającego zatrzymując się na każdym sygnale przez cały cykl pracy programu (ok 11s) oraz zmierzyć wszystkie 4 PWMy. Nie zauważyłeś zmian czegokolwiek - czy tak? Wszystkie sygnały kierunku były wciąż w stanie niskim a PWMy (wszystkie?) na jakimś dziwnym napięciu ok. 1.8V. Czy możesz to potwierdzić? To samo z zasilaniem mostków: mierzyłeś te 9V w czasie działania programu i niczego dziwnego (spadków np) nie zauważyłeś, tak?

Przemyśl dobrze odpowiedzi bo sprawdzając coś po łebkach możesz się strasznie narobić bez sensu. Opisz najdokładniej jak umiesz wyniki swoich eksperymentów krok po kroku - może wymyślę jeszcze jakieś pomiary zanim przejdziemy do porzucenia biblioteki i samodzielnego pisania własnych testów tego shielda. Trochę trudno mi uwierzyć w zupełną niekompatybilność programu z tą płytką i czuję, że gdzieś siedzi jakiś paskudny babol którego nikt nie widzi. Czy ktoś na Forum używał tego drivera do silników DC i tej biblioteki?

Link do komentarza
Share on other sites

Więc tak:

Program wgrywam z biblioteki którą ściągnąłem z internetu(wcześniejsze posty masz link):

/* 
This is a test sketch for the Adafruit assembled Motor Shield for Arduino v2
It won't work with v1.x motor shields! Only for the v2's with built in PWM
control

For use with the Adafruit Motor Shield v2 
---->	http://www.adafruit.com/products/1438
*/

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 
// Or, create it with a different I2C address (say for stacking)
// Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61); 

// Select which 'port' M1, M2, M3 or M4. In this case, M1
Adafruit_DCMotor *myMotor = AFMS.getMotor(1);
// You can also make another motor on port M2
//Adafruit_DCMotor *myOtherMotor = AFMS.getMotor(2);

void setup() {
 Serial.begin(9600);           // set up Serial library at 9600 bps
 Serial.println("Adafruit Motorshield v2 - DC Motor test!");

 AFMS.begin();  // create with the default frequency 1.6KHz
 //AFMS.begin(1000);  // OR with a different frequency, say 1KHz

 // Set the speed to start, from 0 (off) to 255 (max speed)
 myMotor->setSpeed(150);
 myMotor->run(FORWARD);
 // turn on motor
 myMotor->run(RELEASE);
}

void loop() {
 uint8_t i;

 Serial.print("tick");

 myMotor->run(FORWARD);
 for (i=0; i<255; i++) {
   myMotor->setSpeed(i);  
   delay(10);
 }
 for (i=255; i!=0; i--) {
   myMotor->setSpeed(i);  
   delay(10);
 }

 Serial.print("tock");

 myMotor->run(BACKWARD);
 for (i=0; i<255; i++) {
   myMotor->setSpeed(i);  
   delay(10);
 }
 for (i=255; i!=0; i--) {
   myMotor->setSpeed(i);  
   delay(10);
 }

 Serial.print("tech");
 myMotor->run(RELEASE);
 delay(1000);
}

Nic nie zmieniałem, to jest skopiowany cały kod.

Silnik podłączony jest do zacisków M1, Motor Shield zasilany zasilaczem, a Arduino podłączone jest przez kabel USB do komputera.

na zaciskach EXT_PWR podłączony zasilacz napięcie 7,3V stałe, zworka zdjęta.

W monitorze szeregowym wszystko działa:

Adafruit Motorshield v2 - DC Motor test!

ticktocktech

Pomiary:

1) układy IC1 i IC2 są zasilane na VCC2=7,28V(na obu tak samo), na VCC1=4,66V(na obu tak samo);

2) po prawidłowym wgraniu programu :

M1A=M1B=0V

M2A=M2B=0V

M3A=M3B=0V

M4A=M4B=0V

Nic się nie zmienia(pomiar na każdym robiłem dwa razy po ok.12s)

PWM2A=PWM2B=skacze po między 1,92V a 1,93V,
PWMA0=PWMB0= 1,94V;

Także sprawdzałem dwa razy po około 12 sekund.

Link do komentarza
Share on other sites

OK, teraz wszystko jasne, dzięki.

Cóż, to nie wygląda dobrze 🙁 Jeśli to tylko problem biblioteki, to nie ma sprawy, kod robiący to same funkcje będzie prosty do napisania samodzielnie. Gorzej, gdyby to był jakiś kłopot z płytką, ale tu za wiele rzeczy nie działa żeby to właśnie ją o to podejrzewać. Gdyby padł rejestr, to choć PWM byłby prawidłowy. Gdyby któryś pin nie stykał na przejściu Arduino-shield, to jeden sygnał by ginął, ale reszta byłaby poprawna. Gdyby procesor nie żył lub się resetował z powodu np. jakichś kłopotów z zasilaniem, to na monitorze UARTa nic by się nie działo. Dziwne.

Dziś późnym wieczorem wgram ten sam kod do mojego dyżurnego UNO (czy kompilowałeś program pod tę płytkę? - tak dla pewności..). Co prawda nie mam tego shielda, ale przynajmniej na oscyloskopie obejrzę sygnały wysyłane do rejestru przesuwającego oraz na PWMy i coś się wyjaśni. Dam znać.

----------------------------

EDIT: Trochę mało tego +5V - na granicy tolerancji. Czy po wypięciu shielda, na gołym Arduino też masz tak cienko na Vcc? Próbuję się czepiać...

----------------------------

EDIT2: No dobra, już wiem - porażka straszna. Ten shield występuje w dwóch kompletnie różnych wersjach. Wersja starsza, V1 to właśnie ta którą masz. Do niej pasuje wyłącznie ta biblioteka:

https://learn.adafruit.com/adafruit-motor-shield/library-install

Masz tu przede wszystkim opis instalacji biblioteki, ale też linki do zasad używania tego shielda, sterowania silnikami DC, krokowymi itd.

Wersja V2 tylko z nazwy przypomina tę pierwszą:

https://www.adafruit.com/products/1438

Gada z Arduino po I2C, ma inne - znacznie lepsze mostki no i wygląda inaczej. I właśnie to I2C dało mi do myślenia bo program który wgrałem wysyłał coś ciągle po tej magistrali nie ruszając żadnego innego pinu procka a w nagłówku miał Wire.h - wg Twojego schematu to zupełnie zbędne.

No to tyle. Ściągnij i wypakuj z zipa "starą" bibliotekę, zmień nazwę jej katalogu jak sugerują, odpal IDE Arduino i powinieneś ją mieć wraz z przykładami. U mnie program MotorTest wysyła sygnały do rejestru i generuje poprawny PWM o zmieniającym się wypełnieniu. Powodzenia 🙂

  • Lubię! 1
Link do komentarza
Share on other sites

Witam ponownie, znalazłem trochę czasu na zapoznanie się z Motor Shield i mam pewien problem. Mianowicie chce napisać program w którym silnik będzie kręcił się do przodu coraz szybciej, a następnie do tyłu.

Mój problem polega na tym że wyskakuje błąd ze znakiem ; ale nie wiem gdzie go brakuje.

#include

AF_DCMotor motor(2);

void setup() {

motor.setSpeed(50);

}

void loop() {

uint8_t i;

for (i=0; i<20, i++){

motor.setSpeed(i);

motor.run(FORWARD);

delay(100);

}

for (i=20; i--){

motor.setSpeed(i);

motor.run(BACKWARD);

delay(100);

}

}

komunikat:

exit status 1

expected ';' before ')' token

__________

Komentarz dodany przez: Sabre

Kody programów należy umieszczać przez narzędzie KOD (znajdziesz je w edytorze pod ikonką "<>"). Dzięki niemu składania programów jest automatycznie kolorowana, a wtedy wszystkim znacznie łatwiej analizować wklejone programy. Proszę to poprawić - z góry dziękuję za zrozumienie i pomoc przy utrzymaniu porządku na forum.

Link do komentarza
Share on other sites

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.