Skocz do zawartości

w1941srobot

Użytkownicy
  • Zawartość

    81
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    2

w1941srobot wygrał w ostatnim dniu 9 marca 2014

w1941srobot ma najbardziej lubianą zawartość!

Reputacja

3 Neutralna

O w1941srobot

  • Ranga
    4/10
  • Urodziny 08.07.1996

Informacje

  • Płeć
    Mężczyzna
  1. Witam sprzedam podwozie do robota wykonane z kątowników aluminiowych. Więcej w linku poniżej: [EDIT] NOWA CENA. MOŻLIWOŚĆ NEGOCJACJI CENY. ALLEGRO Możliwość sprzedaży poza allegro.
  2. Na schemacie mosfet to bss138. Czyli tyle wystarczy? Chcialem zabezpieczyć przed zbyt dużym prądem i napięciem. Lepiej dmuchać na zimne.
  3. Przy rpi jest dioda zenera. Z tego co wyczytałem maksymalne obciążenie pinu rpi to 16mA. Jak zastosować w tym schemacie transil?
  4. Witam, jako, że do zbudowania mojego nowego robota pozostała mi jeszcze kwestia elektroniki, napotkałem problem z zabezpieczeniem portów GPIO w Raspberry PI. Raspberry będzie działać jako komputer nadrzędny, który komunikuje się z modułami po i2C. Czy takie zabezpieczenie jest dobre? Co mogę jeszcze dodać aby ochronić raspberry? Wiadomo 100zł piechotą nie chodzi a raspberry nie ma zabezpieczonych portów. Schemat:
  5. Super wyszła ta płytka . Rozumiem, że ten laminator jeszcze grzałkę posiada i te wałki się nagrzewają. Ale widziałem jak ktoś miał prasę i do piekarnika wsadzał. Na chwile obecną żelazko wystarcza ). Tylko chyba mam jakiś kijowy papier, po namoczeniu w wodzie wymyciu i wysuszeniu na ścieżkach jest biały nalot 0.0.
  6. Powiem tak, sam sobie chyba uszkodziłem troszkę jedno serwo ponieważ po przerobieniu występuje coś takiego jak przycinanie się zębatki jeśli kręcę orczykiem(serwo działając się nie przycina przycina) . Jedno serwo kreci się minimalnie wolniej, ale nw czy to już wada fabryczna czy po przerobieniu. Nie widzę innych problemów, mój robot nie jeździ długo, tyle co pokazać go komuś albo wyjazd ze szkoły na prezentacje profilu. Teraz na 100% nie użył bym serwa jako napędu (są wolne). Zamiast serwa coś takiego Tamiya 70168 lub Silnik DC Micromotors HL149.
  7. Witam. Przedstawiam wam moje drugie dzieło: wielozadaniowy robot Witek. Jest to mój drugi robot, powstał jakieś 4 miesiące temu w celach edukacyjnych, budowa jest dużo bardziej skomplikowana od mojego pierwszego robota ( CHAOS ). Elektronika montowana jest na wytrawionym PCB( pierwszy raz wytrawiałem i wyszło według mnie całkiem fajnie ). Schematy rysowane w eagle . Robot posiada budowę modułową, czyli mamy: - płytę główną - moduł z mostkiem H - moduł z odbiornikiem RC5 (TSOP) - wyświetlacz LCD 2x16 zgodny z HD44780 - moduł czujnika linii Elektronika: Sercem robota jest uC atmega8 zasilany napięciem 5v. Sterownik silników to układ scalony l298N z diodami likwidującymi szpilki napięciowe . Odbiornik RC5 to TSOP (nie wiem dokładnie jaki ponieważ pochodzi z demontażu). Ultradźwiękowy czujnik odległości HC-SR04. Inne drobiazgi takie jak rezystory, kondensatory itp. Moduł czujnika linii składa się z: - 3x CNY70 - potencjometr 5k5 - komparator LM339 - rezystory Niestety zabrakło funduszy na akumulator i robot zasilany jest z kabla . Mechanika: Napęd to dwa przerobione serwa TowerPro SG-92R. Serwo Redox S90 do obracania czujnika odległości. Koła od zabawki, przytwierdzone do orczyków za pomocą gorącego kleju . Największym problemem przy budowie robota było napisanie programu do odbioru RC5, ale się udało . Oprogramowanie: Program napisany jest w C. Nauczyłem wielu ważnych rzeczy przy pisaniu programu do robota, ponieważ musiałem wykorzystywać przerwania i timery . Starałem się wszystko sam pisać ale niestety z braku czasu, do obsługi LCD wziąłem gotowe rozwiązanie:). Robocik posiada 3 tryby jazdy: - omijanie przeszkód - jazda po linii - zdalne sterowanie W przyszłości mam zamiar dodać do robota możliwość komunikacji radiowej i zbudować do tego odpowiedni terminal . Zdj PCB: Screeny z eagle: - płyta główna: - moduł czujnika linii (Rozmieszczenie elementów w czujniku linii wzorowane na płytce użytkownika TOLO ): - moduł mostka H: Zdjęcia robota: Filmy:
  8. Napisałem sobie taki oto kod do obsługi rc5. Jako, że chciałem na sam początek odebrać tylko całą ramkę danych i wypisać ostatnie 8 bitów danych, dałem sobie spokój ze sprawdzaniem bitów startu itp. Niestety program nie działa tak jak powinien a mianowicie nic się nie wyświetla na diodach. Pilot jest dobry gdyż używałem go kiedyś w starym robocie gdzie kod był w bascomie i działało. Odbiornik to TSOP1736. Jest to 3 wersja kodu a zarazem najprostsza (do bólu). Pierwszych 2 nie wrzucam ponieważ myślę, że nie ma takiej potrzeby. Proszę o pomoc ponieważ koniecznie sam chciałem napisać własną bibliotekę do rc5. MIKROKONTROLER - ATMEGA8 #define F_CPU 8000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> volatile char TIMER1=0; volatile char dane=0; volatile char i=0; void rc5(void) { GICR=0; for(i=0;i<=14;++i) { while(!(TIMER1==6 && TCNT0==15)); //odczekaj az wartosc czasu bedzie wybosic 1545us if(!(PIND & 0b00000100)) // sprawdz stan portu { dane=dane<<1; } else { dane=dane<<1; dane|=0b00000001; } while(!(TCNT0==242)); // odczekaj pozostaly czas do konca bitu TCNT0=0; //zerowanie tcnt0 TIMER1=0; //zerowanie zmiennej timer1 } TCCR0=0; //zatrzymanie timera TCNT0=0; //zerowanie TCNT } int main(void) { DDRD=0x00; DDRC=0xFF; PORTC=0xFF; MCUCR=0b00000010; //poziom narastajacy na int0 generuje przerwanie GICR=0b01000000; TIMSK=0b00000001; // przerwania od timera PORTC=0; sei(); while(1) { //TCCR0=0b00000010; _delay_ms(500); PORTC=dane; //wyswietlenie danych na porcie C _delay_ms(500); dane=0; GICR=0b01000000; } } SIGNAL(SIG_INTERRUPT0) { TCCR0=0b00000010; //start timera rc5(); } ISR(SIG_OVERFLOW0) { TIMER1++; //zwieksza co 255us }
  9. Witam piszę tutaj ponieważ już męczę się z tym od 6godz. i nic. Dodam, że przy okazji uczyłem się obsługi przerwań i timerów. Nie mogę sobie poradzić z obsługą czujnika HC-SR04. Już z kilkanaście razy zmieniam kod, próbuje tak i tak, swoje sposoby, czyjeś ale dalej dupa. Chce wyświetlić odl. na porcie C w atmedze gdzie mam podpiętych 6 diod. Do portu B podłączyłem pin TRIG od HC-SR04 a ECHO do INT1. TERAZ TAK: Częstotliwość taktowania mikro kontrolera wynosi 8mhz. Timer2 jest tak ustawiony (tak mi się wydaje, sam liczyłem więc może być błąd) żeby po 8 taktach wywołać przerwanie co da nam 1us. Port INT1 ustawiłem na przerwanie wywołane zmianą stanu: Reszta wyjaśni się w kodzie : Dodam jeszcze tylko że diody losowo zmieniają stan co około sekundę (tak mi się wydaje). #define F_CPU 8000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> volatile char zbocze ; // zero to stan początkowy volatile int czas ; //zmienna przechowuje czas jednostka 1 us volatile char odl; int main() { DDRC=0xFF; //c jako wejscie DDRB=0xFF; // jako wyjscie DDRD=0x00; //jako wejscie PORTC=0x00; PORTB=0x00; MCUCR|=(1<<ISC10); //przerwanie wywołane zmianą stanu GICR|=(1<<INT1); //uruchomienie przerwan int1 TIMSK|=(1<<OCIE2); //przerwanie od timera po zrownaniu z OCR2 OCR2=8; czas=0; zbocze=0; sei(); while(1) { //czas=0; _delay_ms(500); PORTB=0xFF; //uaktywnienie SC-HC04 _delay_us(15); PORTB=0x00; PORTC=odl; // Wyswietlenie czasu w 1 us. } } SIGNAL(SIG_INTERRUPT1) { if(zbocze==0) { TCCR2=0b00001001; //WGM21 ON bez preskalera, start timera zbocze=1; } else if(zbocze==1) { TCCR2=0b00001000; //WGM21 zatrzymanie timera odl=czas*340/100; czas=0; zbocze=0; } } SIGNAL(SIG_OUTPUT_COMPARE2) { ++czas; } Z góry przepraszam za błędy ale jest 2:06 i już nie daje rady :/. [ Dodano: 07-09-2013, 12:49 ] Dokonałem zmian w kodzie i teraz diody wyświetlają błędne informacje.: #define F_CPU 8000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> volatile char zbocze ; // zero to stan początkowy volatile int czas ; //zmienna przechowuje czas jednostka 1 us volatile uint8_t odl; int main() { DDRC=0xFF; //c jako wejscie DDRB=0xFF; // jako wyjscie DDRD=0x00; //jako wejscie PORTC=0x00; PORTB=0x00; MCUCR|=(1<<ISC10); //przerwanie wywołane zmianą stanu GICR|=(1<<INT1); //uruchomienie przerwan int1 TIMSK|=(1<<OCIE2); //przerwanie od timera po zrownaniu z OCR2 OCR2=8; czas=0; zbocze=0; sei(); while(1) { //czas=0; _delay_ms(500); PORTB=0xFF; //uaktywnienie SC-HC04 _delay_us(15); PORTB=0x00; _delay_ms(1); // Sprawdzę czy z opóźnieniem 15ms będzie działać PORTC=odl; // Wyswietlenie czasu w 1 us. } } SIGNAL(SIG_INTERRUPT1) { if(zbocze==0) { TCCR2=0b00001001; //WGM21 ON bez preskalera, start timera zbocze=1; } else if(zbocze==1) { TCCR2=0b00001000; //WGM21 zatrzymanie timera odl=((czas/58)*340)/2; czas=0; zbocze=0; } } SIGNAL(SIG_OUTPUT_COMPARE2) { ++czas; } [ Dodano: 07-09-2013, 16:50 ] Ale monolog :D, ale wydaje się, że atmega za szybko przypisuje wartość do PORTU C i trzeba zwiększyć wielkość opóźnienia z 1ms do około 15ms? Jak tylko przyjadę do domu to sprawdzę. Proszę o odpowiedzi . [ Dodano: 07-09-2013, 22:20 ] Dziękuje za pomoc problem rozwiązałem . Napisze może przyda się innym : #define F_CPU 8000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> volatile char zbocze ; // zero to stan początkowy volatile int czas ; //zmienna przechowuje czas jednostka 1 us volatile uint8_t odl; int main() { DDRC=0xFF; //c jako wejscie DDRB=0xFF; // jako wyjscie DDRD=0x00; //jako wejscie PORTC=0x00; PORTB=0x00; MCUCR|=(1<<ISC10); //przerwanie wywołane zmianą stanu GICR|=(1<<INT1); //uruchomienie przerwan int1 TIMSK|=(1<<OCIE2); //przerwanie od timera po zrownaniu z OCR2 OCR2=8; // przerwanie co 1us czas=0; zbocze=0; sei(); while(1) { //czas=0; _delay_ms(1000); //pomiar co 1 sec. PORTB=0xFF; //uaktywnienie SC-HC04 _delay_us(15); PORTB=0x00; _delay_ms(30); // opóźnienie max długość echa PORTC=odl; // Wyswietlenie czasu w 1 us. } } SIGNAL(SIG_INTERRUPT1) { if(zbocze==0) { TCCR2=0b00001001; //WGM21 ON bez preskalera, start timera zbocze=1; } else if(zbocze==1) { TCCR2=0b00001000; //WGM21 zatrzymanie timera odl=czas/10; czas=0; zbocze=0; } } SIGNAL(SIG_OUTPUT_COMPARE2) { ++czas; //zwiekszenie licznika }
  10. Ok, jak tylko znajdę aparat czyli dziś. Ale proszę brać pod uwagę to, że miałem problemy z drukowaniem i trzeba było markerem poprawiać . Tam gdzie czarne kropki to tylko resztki markera . Płyta główna: L298: Czujnik linii: Tsop, troszkę ocynowany:
  11. Płytki wytrawione, tylko był problem z drukarką bo musiałem w ksero a tam jak wiadomo oszczędności i trzeba było poprawiać markerem . Teraz tylko ocynować . Dziękuje wszystkim za pomoc .
  12. A nie lepiej ultradzwięki :> zamiast tsop. Fotorezystor hmm a co jak ktoś ci przyświeci latarką albo nw. światło z pola dotrze do fotorezystora, robot wykryje przeszkodę tam gdzie jej nie ma .
  13. Cały czas się uczę jak widać sam je rysuje :-> , no oprócz PCB czujnika linii bo identyczne . Myślę że nie będe już przerabiał pcb mostka Ok poprawione ale tam gdzie się nie styka sam pociągnąłem ścieżkę : [ Dodano: 26-08-2013, 17:06 ] A czy przy czujniku linii nie trzeba dać mirror dla tych czujników? [ Dodano: 26-08-2013, 18:04 ] Czy taki plik (podany w załączniku) do drukowania może być ? drukowac.rar
  14. Ok zrobiłem kopie tego czujnika co mi Pan wysłał :
×
×
  • Utwórz nowe...