20161002_082656

TRACKER – antena śledząca modele

Cześć, dziś chciałbym pokazać, jak od podstaw zbudować tracker- antenę śledzącą model, którym latamy. Po zainstalowaniu anteny kierunkowej na trakerze otrzymujemy możliwość latania na znaczne odległości nie martwiąc się, że "wylecimy z anteny".  Anteny kierunkowe mają bardzo wąską charakterystykę, czyli powinny być zawsze skierowane w stronę nadajnika (modelu którym latamy). Tracker spełnia właśnie taką funkcję. Głównym sercem naszej anteny jest moduł eLeReS (http://4drones.pl/?17,pl_eleres-rx-odbiornik), który po wgraniu odpowiedniego oprogramowania staje się sterownikiem anteny. Do tego, aby nasz tracker pracował niezbędne jest zastosowanie nadajnika (może to być eLeReS MOD, eLeReS MAX lub zwykły eLeReS z softem TX) i odbiornika eLeReS. Dodatkowo model musi być wyposażony w odbiornik GPS. Więcej informacji pod linkami http://rc-fpv.pl/viewtopic.php?f=4&t=5202   http://rc-fpv.pl/viewtopic.php?t=9906. Wróćmy do budowy trackera. Cała konstrukcja została wykonana z tworzywa pozyskanego ze starego baneru, który kiedyś gdzieś tam dostałem. Materiał jest bardzo dobry- świetnie się klei i obrabia. Wszystko klejone za pomocą CA. Cięcie, szlifowanie i klejenie. Gotowa antena, oblot.   Schemat połączenia.  
sam_0597

Diversity FPV RX5808 Pro – OLED 5,8GHz – 40CH – Odbiornik diversity – Podłączenie i uruchomienie

Witam, chciałbym w tym artykule pokazać jak podłączyć i uruchomić odbiornik diversity.   Do konfiguracji odbiornika służy dżojstik i wyświetlacz OLED. Wchodzimy do menu przez wciśnięcie dżojstika. Pokazuje się kilka zakładek: AUTO SEARCH Tutaj odbiornik automatycznie skanuje pasmo i wybiera najsilniejszy kanał.  Dżojstikiem możemy zmieniać kierunek skanowania poprzez przesunięcie w prawo lub w lewo. BAND SKANER Tutaj widzimy które częstotliwości są zajęte, im słupki ustawiają się wyżej tym silniejszy sygnał na danej częstotliwości. MANUAL MODE Ręczne szukanie kanału, przesunięcie dżojstika w prawo lub lewo powoduje zmianę częstotliwości na mniejszą lub większą. DIVERSITY W tej zakładce możemy sobie wybrać, czy nasz odbiornik będzie przełączał automatycznie głowicę na tą, która ma lepszy sygnał, lub możemy wybrać ręcznie, z której głowicy chcemy korzystać. Dodatkowo mamy wizualizację jakości sygnału z każdego odbiornika. SETUP MENU ORDER: FREQUENCY / CHANEL- tutaj możemy sobie wybrać czy odbiornik ma szukać po częstotliwości czy po kanałach. Jeśli przykładowo wybierzemy sobie FREQUANCY i będziemy w trybie manualnym szukać naszej częstotliwości poprzez poruszanie  dżojstika w prawo lub  lewo, to odbiornik będzie przełączał się kolejno po częstotliwościach w górę lub w dół. BEEPS: ON/OFF jeśli wyposażymy odbiornik w buzerek na 5V to możemy sobie włączyć lub wyłączyć sygnalizacje dźwiękową pracy odbiornik. SIGN: tutaj możemy wpisać sobie nasz nick (dowolna nazwa). CALIBRATE RSSI: tutaj kalibrujemy rssi głowic, w które wyposażony jest odbiornik. Najlepiej włączyć tylko jeden nadajnik na daną częstotliwość, oddalić się na około 20-30 metrów i zrobić kalibrację. Kalibracja powinna być wykonana na otwartej przestrzeni. SAVE & EXIT: Klikamy w tym miejscu po każdej zmianie parametrów, jeśli chcemy żeby zmiany były zapisane. OPIS PINÓW  2S-3S - złącze do podłączenia pakietu GND - minus zasilania, masa audio/wideo                                                                                                                                                                          5V - zasilanie odbiornika z beca 5V * - wolny pin SDA - dodatkowe złącze wyświetlacza SCL - dodatkowe złącze wyświetlacza VCC - to samo co złącze 5V                                                                                                                                                                                                     GND - minus zasilania, masa audio/video VIDEO - wyjście sygnału wideo z odbiornika GUI - wyjście na którym możemy dostać te same informacje, co na zintegrowanym wyświetlaczu OLED w formie sygnału video, czyli podłączamy do dodatkowego wejścia w goglach lub monitorze i mamy wszystkie parametry (funkcję uruchamiamy przez modyfikacje kodu programu)  AUDIO - wyjście dzwięku z nadajnika wideo lub kamery GND - minus zasilania, masa audio/video OBUDOWA ODBIORNIKA Odbiornik postanowiłem zabezpieczyć przed uszkodzeniem poprzez zrobienie obudowy. Na modelarni znalazłem kawałek blaszki miedzianej i z tego właśnie powstała obudowa. Na ostatnim zdjęciu widać dołożony stabilizator liniowy na 5V. Można również wykorzystać BEC 5V,  ponieważ fabrycznie zainstalowany stabilizator jest za słaby i może ulec uszkodzeniu. Jeśli zasilamy płytkę z 5V nie ma potrzeby dokładania stabilizatora lub beca, stosujemy je tylko wtedy gdy chcemy zasilić odbiornik napięciem większym niż 5V.   Odbiornik gotowy do pracy.   Odbiornik Diversity FPV RX5805 dostępny jest w sklepie abc-rc.pl - Kliknij tutaj aby przejść do karty produktu   
Screenshot_1

Matryca LED 8×8 sterowana przez bluetooth

Cześć, To mój trzeci i ostatni projekt dotyczący matryc LED. Będziemy sterować wyświetlanym tekstem za pomocą aplikacji na smartfona, a transmisja między Arduino i smartfonem będzie realizowana za pomocą połączenia bluetooth. Części potrzebne do realizacji projektu to: -płytka Arduino UNO http://abc-rc.pl/Arduino-UNO-R3-CH340 -matrycaLED 8x8 ze sterownikiem MAX7219 http://abc-rc.pl/MAX7219-LED-red -moduł bluetooth http://abc-rc.pl/Bluetooth-HC-06 Aplikacja do sterowania: https://goo.gl/7q3rst Program jest napisany w taki sposób aby można było użyć dowolnej liczby matryc Schemat: Sketch: #include <LedControl.h> #include <SoftwareSerial.h> int DIN = 12; int CS =  11; int CLK = 10; int ilosc_ekranow = 2; char c; String tekscik, przerwanie; bool koncz = 0; byte ascii_table[130][8]; LedControl lc=LedControl(DIN,CLK,CS,0); SoftwareSerial BTserial(3, 2); // RX | TX void wypelnij() { ascii_table[32][0]=B00000000; ascii_table[32][1]=B00000000; ascii_table[32][2]=B00000000; ascii_table[32][3]=B00000000; ascii_table[32][4]=B00000000; ascii_table[32][7]=5; ascii_table[33][0]=B00000000; ascii_table[33][1]=B01011111; ascii_table[33][2]=B00000000; ascii_table[33][7]=3; ascii_table[34][0]=B00000000; ascii_table[34][1]=B00001110; ascii_table[34][2]=B00000000; ascii_table[34][3]=B00001110; ascii_table[34][4]=B00000000; ascii_table[34][7]=5; ascii_table[35][0]=B00000000; ascii_table[35][1]=B00010100; ascii_table[35][2]=B01111111; ascii_table[35][3]=B00010100; ascii_table[35][4]=B01111111; ascii_table[35][5]=B00010100; ascii_table[35][6]=B00000000; ascii_table[35][7]=7; ascii_table[36][0]=B00000000; ascii_table[36][1]=B00100100; ascii_table[36][2]=B00101010; ascii_table[36][3]=B01111111; ascii_table[36][4]=B00101010; ascii_table[36][5]=B00100100; ascii_table[36][6]=B00000000; ascii_table[36][7]=7; ascii_table[37][0]=B00000000; ascii_table[37][1]=B01100010; ascii_table[37][2]=B01100100; ascii_table[37][3]=B00001000; ascii_table[37][4]=B00010011; ascii_table[37][5]=B00100011; ascii_table[37][6]=B00000000; ascii_table[37][7]=7; ascii_table[38][0]=B00000000; ascii_table[38][1]=B01010000; ascii_table[38][2]=B00100010; ascii_table[38][3]=B01010101; ascii_table[38][4]=B01001001; ascii_table[38][5]=B00110110; ascii_table[38][6]=B00000000; ascii_table[38][7]=7; ascii_table[39][0]=B00000000; ascii_table[39][1]=B00000011; ascii_table[39][2]=B00000101; ascii_table[39][3]=B00000000; ascii_table[39][7]=4; ascii_table[40][0]=B00000000; ascii_table[40][1]=B01000001; ascii_table[40][2]=B00100010; ascii_table[40][3]=B00011100; ascii_table[40][4]=B00000000; ascii_table[40][7]=5; ascii_table[41][0]=B00000000; ascii_table[41][1]=B00011100; ascii_table[41][2]=B00100010; ascii_table[41][3]=B01000001; ascii_table[41][4]=B00000000; ascii_table[41][7]=5; ascii_table[42][0]=B00000000; ascii_table[42][1]=B00010100; ascii_table[42][2]=B00001000; ascii_table[42][3]=B00111110; ascii_table[42][4]=B00001000; ascii_table[42][5]=B00010100; ascii_table[42][6]=B00000000; ascii_table[42][7]=7; ascii_table[43][0]=B00000000; ascii_table[43][1]=B00001000; ascii_table[43][2]=B00001000; ascii_table[43][3]=B00111110; ascii_table[43][4]=B00001000; ascii_table[43][5]=B00001000; ascii_table[43][6]=B00000000; ascii_table[43][7]=7; ascii_table[44][0]=B00000000; ascii_table[44][1]=B00110000; ascii_table[44][2]=B01010000; ascii_table[44][3]=B00000000; ascii_table[44][7]=4; ascii_table[45][0]=B00000000; ascii_table[45][1]=B00001000; ascii_table[45][2]=B00001000; ascii_table[45][3]=B00001000; ascii_table[45][4]=B00001000; ascii_table[45][5]=B00000000; ascii_table[45][7]=6; ascii_table[46][0]=B00000000; ascii_table[46][1]=B01100000; ascii_table[46][2]=B01100000; ascii_table[46][3]=B00000000; ascii_table[46][7]=4; ascii_table[47][0]=B00000000; ascii_table[47][1]=B00000010; ascii_table[47][2]=B00000100; ascii_table[47][3]=B00001000; ascii_table[47][4]=B00010000; ascii_table[47][5]=B00100000; ascii_table[47][6]=B00000000; ascii_table[47][7]=7; ascii_table[48][0]=B00000000; ascii_table[48][1]=B00111110; ascii_table[48][2]=B01000001; ascii_table[48][3]=B01000001; ascii_table[48][4]=B00111110; ascii_table[48][5]=B00000000; ascii_table[48][7]=6; ascii_table[49][0]=B00000000; ascii_table[49][1]=B01000000; ascii_table[49][2]=B01111111; ascii_table[49][3]=B01000010; ascii_table[49][4]=B00000000; ascii_table[49][7]=5; ascii_table[50][0]=B00000000; ascii_table[50][1]=B01000110; ascii_table[50][2]=B01001001; ascii_table[50][3]=B01010001; ascii_table[50][4]=B01100011; ascii_table[50][5]=B01000010; ascii_table[50][6]=B00000000; ascii_table[50][7]=7; ascii_table[51][0]=B00000000; ascii_table[51][1]=B00110001; ascii_table[51][2]=B01001011; ascii_table[51][3]=B01000101; ascii_table[51][4]=B01000001; ascii_table[51][5]=B00100001; ascii_table[51][6]=B00000000; ascii_table[51][7]=7; ascii_table[52][0]=B00000000; ascii_table[52][1]=B00010000; ascii_table[52][2]=B01111111; ascii_table[52][3]=B00010010; ascii_table[52][4]=B00010100; ascii_table[52][5]=B00011000; ascii_table[52][6]=B00000000; ascii_table[52][7]=7; ascii_table[53][0]=B00000000; ascii_table[53][1]=B00111001; ascii_table[53][2]=B01000101; ascii_table[53][3]=B01000101; ascii_table[53][4]=B01000101; ascii_table[53][5]=B00100111; ascii_table[53][6]=B00000000; ascii_table[53][7]=7; ascii_table[54][0]=B00000000; ascii_table[54][1]=B00110000; ascii_table[54][2]=B01001001; ascii_table[54][3]=B01001001; ascii_table[54][4]=B01001010; ascii_table[54][5]=B00111100; ascii_table[54][6]=B00000000; ascii_table[54][7]=7; ascii_table[55][0]=B00000000; ascii_table[55][1]=B00000111; ascii_table[55][2]=B00001001; ascii_table[55][3]=B01110001; ascii_table[55][4]=B00000001; ascii_table[55][5]=B00000011; ascii_table[55][6]=B00000000; ascii_table[55][7]=7; ascii_table[56][0]=B00000000; ascii_table[56][1]=B00110110; ascii_table[56][2]=B01001001; ascii_table[56][3]=B01001001; ascii_table[56][4]=B01001001; ascii_table[56][5]=B00110110; ascii_table[56][6]=B00000000; ascii_table[56][7]=7; ascii_table[57][0]=B00000000; ascii_table[57][1]=B00011110; ascii_table[57][2]=B00101001; ascii_table[57][3]=B01001001; ascii_table[57][4]=B01001001; ascii_table[57][5]=B00000110; ascii_table[57][6]=B00000000; ascii_table[57][7]=7; ascii_table[58][0]=B00000000; ascii_table[58][1]=B00110110; ascii_table[58][2]=B00110110; ascii_table[58][3]=B00000000; ascii_table[58][7]=4; ascii_table[59][0]=B00000000; ascii_table[59][1]=B00110110; ascii_table[59][2]=B01010110; ascii_table[59][3]=B00000000; ascii_table[59][7]=4; ascii_table[60][0]=B00000000; ascii_table[60][1]=B01000001; ascii_table[60][2]=B00100010; ascii_table[60][3]=B00010100; ascii_table[60][4]=B00001000; ascii_table[60][5]=B00000000; ascii_table[60][7]=6; ascii_table[61][0]=B00000000; ascii_table[61][1]=B00010100; ascii_table[61][2]=B00010100; ascii_table[61][3]=B00010100; ascii_table[61][4]=B00010100; ascii_table[61][5]=B00010100; ascii_table[61][6]=B00000000; ascii_table[61][7]=7; ascii_table[62][0]=B00000000; ascii_table[62][1]=B00001000; ascii_table[62][2]=B00010100; ascii_table[62][3]=B00100010; ascii_table[62][4]=B01000001; ascii_table[62][5]=B00000000; ascii_table[62][7]=6; ascii_table[63][0]=B00000000; ascii_table[63][1]=B00000110; ascii_table[63][2]=B00001001; ascii_table[63][3]=B01010001; ascii_table[63][4]=B00000001; ascii_table[63][5]=B00000010; ascii_table[63][6]=B00000000; ascii_table[63][7]=7; ascii_table[64][0]=B00000000; ascii_table[64][1]=B00111110; ascii_table[64][2]=B01000001; ascii_table[64][3]=B01111001; ascii_table[64][4]=B01001001; ascii_table[64][5]=B00110010; ascii_table[64][6]=B00000000; ascii_table[64][7]=7; ascii_table[65][0]=B00000000; ascii_table[65][1]=B01111110; ascii_table[65][2]=B00010001; ascii_table[65][3]=B00010001; ascii_table[65][4]=B00010001; ascii_table[65][5]=B01111110; ascii_table[65][6]=B00000000; ascii_table[65][7]=7; ascii_table[66][0]=B00000000; ascii_table[66][1]=B00110110; ascii_table[66][2]=B01001001; ascii_table[66][3]=B01001001; ascii_table[66][4]=B01001001; ascii_table[66][5]=B01111111; ascii_table[66][6]=B00000000; ascii_table[66][7]=7; ascii_table[67][0]=B00000000; ascii_table[67][1]=B00100010; ascii_table[67][2]=B01000001; ascii_table[67][3]=B01000001; ascii_table[67][4]=B01000001; ascii_table[67][5]=B00111110; ascii_table[67][6]=B00000000; ascii_table[67][7]=7; ascii_table[68][0]=B00000000; ascii_table[68][1]=B00011100; ascii_table[68][2]=B00100010; ascii_table[68][3]=B01000001; ascii_table[68][4]=B01000001; ascii_table[68][5]=B01111111; ascii_table[68][6]=B00000000; ascii_table[68][7]=7; ascii_table[69][0]=B00000000; ascii_table[69][1]=B01000001; ascii_table[69][2]=B01001001; ascii_table[69][3]=B01001001; ascii_table[69][4]=B01111111; ascii_table[69][5]=B00000000; ascii_table[69][7]=6; ascii_table[70][0]=B00000000; ascii_table[70][1]=B00000001; ascii_table[70][2]=B00001001; ascii_table[70][3]=B00001001; ascii_table[70][4]=B01111111; ascii_table[70][5]=B00000000; ascii_table[70][7]=6; ascii_table[71][0]=B00000000; ascii_table[71][1]=B01111010; ascii_table[71][2]=B01001001; ascii_table[71][3]=B01001001; ascii_table[71][4]=B01000001; ascii_table[71][5]=B00111110; ascii_table[71][6]=B00000000; ascii_table[71][7]=7; ascii_table[72][0]=B00000000; ascii_table[72][1]=B01111111; ascii_table[72][2]=B00001000; ascii_table[72][3]=B00001000; ascii_table[72][4]=B01111111; ascii_table[72][5]=B00000000; ascii_table[72][7]=6; ascii_table[73][0]=B00000000; ascii_table[73][1]=B01000001; ascii_table[73][2]=B01111111; ascii_table[73][3]=B01000001; ascii_table[73][4]=B00000000; ascii_table[73][7]=5; ascii_table[74][0]=B00000000; ascii_table[74][1]=B00000001; ascii_table[74][2]=B01111111; ascii_table[74][3]=B01000001; ascii_table[74][4]=B01000000; ascii_table[74][5]=B00100000; ascii_table[74][6]=B00000000; ascii_table[74][7]=7; ascii_table[75][0]=B00000000; ascii_table[75][1]=B01000001; ascii_table[75][2]=B00100010; ascii_table[75][3]=B00010100; ascii_table[75][4]=B00001000; ascii_table[75][5]=B01111111; ascii_table[75][6]=B00000000; ascii_table[75][7]=7; ascii_table[76][0]=B00000000; ascii_table[76][1]=B01000000; ascii_table[76][2]=B01000000; ascii_table[76][3]=B01000000; ascii_table[76][4]=B01111111; ascii_table[76][5]=B00000000; ascii_table[76][7]=6; ascii_table[77][0]=B00000000; ascii_table[77][1]=B01111111; ascii_table[77][2]=B00000010; ascii_table[77][3]=B00001100; ascii_table[77][4]=B00000010; ascii_table[77][5]=B01111111; ascii_table[77][6]=B00000000; ascii_table[77][7]=7; ascii_table[78][0]=B00000000; ascii_table[78][1]=B01111111; ascii_table[78][2]=B00010000; ascii_table[78][3]=B00001000; ascii_table[78][4]=B00000100; ascii_table[78][5]=B01111111; ascii_table[78][6]=B00000000; ascii_table[78][7]=7; ascii_table[79][0]=B00000000; ascii_table[79][1]=B00111110; ascii_table[79][2]=B01000001; ascii_table[79][3]=B01000001; ascii_table[79][4]=B01000001; ascii_table[79][5]=B00111110; ascii_table[79][6]=B00000000; ascii_table[79][7]=7; ascii_table[80][0]=B00000000; ascii_table[80][1]=B00000110; ascii_table[80][2]=B00001001; ascii_table[80][3]=B00001001; ascii_table[80][4]=B00001001; ascii_table[80][5]=B01111111; ascii_table[80][6]=B00000000; ascii_table[80][7]=7; ascii_table[81][0]=B00000000; ascii_table[81][1]=B01011110; ascii_table[81][2]=B00100001; ascii_table[81][3]=B01010001; ascii_table[81][4]=B01000001; ascii_table[81][5]=B00111110; ascii_table[81][6]=B00000000; ascii_table[81][7]=7; ascii_table[82][0]=B00000000; ascii_table[82][1]=B01000110; ascii_table[82][2]=B00101001; ascii_table[82][3]=B00011001; ascii_table[82][4]=B00001001; ascii_table[82][5]=B01111111; ascii_table[82][6]=B00000000; ascii_table[82][7]=7; ascii_table[83][0]=B00000000; ascii_table[83][1]=B00110001; ascii_table[83][2]=B01001001; ascii_table[83][3]=B01001001; ascii_table[83][4]=B01001001; ascii_table[83][5]=B01000110; ascii_table[83][6]=B00000000; ascii_table[83][7]=7; ascii_table[84][0]=B00000000; ascii_table[84][1]=B00000001; ascii_table[84][2]=B00000001; ascii_table[84][3]=B01111111; ascii_table[84][4]=B00000001; ascii_table[84][5]=B00000001; ascii_table[84][6]=B00000000; ascii_table[84][7]=7; ascii_table[85][0]=B00000000; ascii_table[85][1]=B00111111; ascii_table[85][2]=B01000000; ascii_table[85][3]=B01000000; ascii_table[85][4]=B01000000; ascii_table[85][5]=B00111111; ascii_table[85][6]=B00000000; ascii_table[85][7]=7; ascii_table[86][0]=B00000000; ascii_table[86][1]=B00011111; ascii_table[86][2]=B00100000; ascii_table[86][3]=B01000000; ascii_table[86][4]=B00100000; ascii_table[86][5]=B00011111; ascii_table[86][6]=B00000000; ascii_table[86][7]=7; ascii_table[87][0]=B00000000; ascii_table[87][1]=B00111111; ascii_table[87][2]=B01000000; ascii_table[87][3]=B00111000; ascii_table[87][4]=B01000000; ascii_table[87][5]=B00111111; ascii_table[87][6]=B00000000; ascii_table[87][7]=7; ascii_table[88][0]=B00000000; ascii_table[88][1]=B01100011; ascii_table[88][2]=B00010100; ascii_table[88][3]=B00001000; ascii_table[88][4]=B00010100; ascii_table[88][5]=B01100011; ascii_table[88][6]=B00000000; ascii_table[88][7]=7; ascii_table[89][0]=B00000000; ascii_table[89][1]=B00000111; ascii_table[89][2]=B00001000; ascii_table[89][3]=B01110000; ascii_table[89][4]=B00001000; ascii_table[89][5]=B00000111; ascii_table[89][6]=B00000000; ascii_table[89][7]=7; ascii_table[90][0]=B00000000; ascii_table[90][1]=B01000011; ascii_table[90][2]=B01000101; ascii_table[90][3]=B01001001; ascii_table[90][4]=B01010001; ascii_table[90][5]=B01100001; ascii_table[90][6]=B00000000; ascii_table[90][7]=7; ascii_table[91][0]=B00000000; ascii_table[91][1]=B01000001; ascii_table[91][2]=B01000001; ascii_table[91][3]=B01111111; ascii_table[91][4]=B00000000; ascii_table[91][7]=5; ascii_table[93][0]=B00000000; ascii_table[93][1]=B01111111; ascii_table[93][2]=B01000001; ascii_table[93][3]=B01000001; ascii_table[93][4]=B00000000; ascii_table[93][7]=5; ascii_table[94][0]=B00000000; ascii_table[94][1]=B00000100; ascii_table[94][2]=B00000010; ascii_table[94][3]=B00000001; ascii_table[94][4]=B00000010; ascii_table[94][5]=B00000100; ascii_table[94][6]=B00000000; ascii_table[94][7]=7; ascii_table[95][0]=B00000000; ascii_table[95][1]=B01000000; ascii_table[95][2]=B01000000; ascii_table[95][3]=B01000000; ascii_table[95][4]=B01000000; ascii_table[95][5]=B00000000; ascii_table[95][7]=6; ascii_table[123][0]=B00000000; ascii_table[123][1]=B01000001; ascii_table[123][2]=B00110110; ascii_table[123][3]=B00001000; ascii_table[123][4]=B00000000; ascii_table[123][7]=5; ascii_table[124][0]=B00000000; ascii_table[124][1]=B01111111; ascii_table[124][2]=B00000000; ascii_table[124][7]=3; ascii_table[125][0]=B00000000; ascii_table[125][1]=B00001000; ascii_table[125][2]=B00110110; ascii_table[125][3]=B01000001; ascii_table[125][4]=B00000000; ascii_table[125][7]=5; ascii_table[126][0]=B00000000; ascii_table[126][1]=B00001000; ascii_table[126][2]=B00010000; ascii_table[126][3]=B00001000; ascii_table[126][4]=B00001000; ascii_table[126][5]=B00010000; ascii_table[126][6]=B00000000; ascii_table[126][7]=7; } void setup(){ Serial.begin(9600); BTserial.begin(9600); for (int i=0;i<ilosc_ekranow;i++)    //petla inicjalizujaca matryce { lc.shutdown(i,false);      // wyjscie z trybu uspienia lc.setIntensity(i,1);      // ustawienie jasnosci lc.clearDisplay(i);        // czyszczenie ekranu } /*for (int j1=0; j1<90; j1++)      //petla do wypelnienia ascii { for (int i1=0; i1<8; i1++) { ascii_table[i1][j1]=0; } }*/ } void loop(){ wypelnij(); if (nastepny() == 0) { while (koncz!=1) { odbierz_tekst(); } Serial.println(tekscik); slideAscii(tekscik); } else { koncz = 0; tekscik = ""; } } void odbierz_tekst() { if (BTserial.available()) { c = BTserial.read(); if (c=='#') { koncz=1; return; } else {tekscik += c;} } if (tekscik=="*12|99|99|") {tekscik="";} } bool nastepny() { przerwanie = ""; if (BTserial.available()) { c = BTserial.read(); przerwanie += c; if (przerwanie != "" ) {return 1;} return 0; } } void printAscii(int ekran, int indeks)        //funkcja do stałego napisu { int i = 0; for(i=0;i<8;i++) { lc.setRow(ekran,i,ascii_table[indeks][i]); delay(50); } } int ile_lini(String tekst)              //funkcja liczaca ilosc lini do wyswietlenia { int liczbowa[tekst.length()];                   //tablica zbierajaca liczby char znakowa[tekst.length()];                   //tablica zbierajaca znaki int linie;                                        //zmienna pomocnicza liczaca linie tekst.toCharArray(znakowa, tekst.length()+1);     //zamiana stringa na tablice char for (int i=0; i<tekst.length();i++) { liczbowa[i]=zamien_ascii(znakowa[i]);             //zamiana znakow na liczby linie = linie + ascii_table[liczbowa[i]][7];      //zliczenie ile lini z 7 pola ascii } return linie; } void slideAscii(String tekst) { int lini = ile_lini(tekst);                         //ilosc lini tekstu byte pattern[lini+(16*ilosc_ekranow)];              //tablica ktora finalnie bedziemy wyswietlac int liczbowa[tekst.length()];                         //fragment przekopiowany z funkcji ile_lini char znakowa[tekst.length()];                         // tekst.toCharArray(znakowa, tekst.length()+1);         // for (int i=0; i<tekst.length();i++)                   // {                                                 // liczbowa[i]=zamien_ascii(znakowa[i]);           // //Serial.println(liczbowa[i]);                  // }                                               // int licznik = 0;                                      //zmienna liczaca ktory raz petla sie wypelnia for (int k=0;k<(8*ilosc_ekranow);k++)                 //wypelnienie pierwszego ekranu w pattern B00000000 { pattern[licznik]=B00000000; //Serial.println(pattern[licznik]); licznik++; } for (int i=0; i<tekst.length();i++)                             //wypelnianie napisem tablicy pattern {                                                           //zalezne od dlugosci tekstu //Serial.print("liczba: "); //Serial.println(i); for (int j=ascii_table[liczbowa[i]][7]; j>0;j--)          //oraz od ilosci lini w danym znaku { pattern[licznik] = ascii_table[liczbowa[i]][j-1]; //Serial.println(pattern[licznik]); licznik++; } } for (int k=0;k<(8*ilosc_ekranow);k++)                 //wypelnanie koncowego ekranu w pattern B00000000 { pattern[licznik]=B00000000; //Serial.println(pattern[licznik]); licznik++; } for(int k=0;k<(lini+(8*ilosc_ekranow));k++) { int pasy=0; for (int i=0;i<ilosc_ekranow;i++)                     //petla wypisujaca na matrycy { for (int j=0;j<8;j++)                         //petla wewnetrzna wypisujaca na matrycy { lc.setRow(i,j,pattern[pasy+k]);           //lc.setRow funkcja wypisujaca pasy++;                                   //pattern jest obiektem ktory wypisujemy }                                         //pasy poniewaz jest to dodatkowa petla liczaca }                                                 // +k aby napis mogl sie przesuwac delay(30);                                                  //opoznienie czyli predkosc przesuwania sie tekstu } } int zamien_ascii(char znak)       //zamiana znaku na ascii { if (znak==' '){return 32;} if (znak=='!'){return 33;} if (znak=='"'){return 34;} if (znak=='#'){return 35;} if (znak=='$'){return 36;} if (znak=='%'){return 37;} if (znak=='&'){return 38;} if (znak=='('){return 40;} if (znak==')'){return 41;} if (znak=='*'){return 42;} if (znak=='+'){return 43;} if (znak==','){return 44;} if (znak=='-'){return 45;} if (znak=='.'){return 46;} if (znak=='/'){return 47;} if (znak=='0'){return 48;} if (znak=='1'){return 49;} if (znak=='2'){return 50;} if (znak=='3'){return 51;} if (znak=='4'){return 52;} if (znak=='5'){return 53;} if (znak=='6'){return 54;} if (znak=='7'){return 55;} if (znak=='8'){return 56;} if (znak=='9'){return 57;} if (znak==':'){return 58;} if (znak==';'){return 59;} if (znak=='<'){return 60;} if (znak=='='){return 61;} if (znak=='>'){return 62;} if (znak=='?'){return 63;} if (znak=='@'){return 64;} if (znak=='A'){return 65;} if (znak=='B'){return 66;} if (znak=='C'){return 67;} if (znak=='D'){return 68;} if (znak=='E'){return 69;} if (znak=='F'){return 70;} if (znak=='G'){return 71;} if (znak=='H'){return 72;} if (znak=='I'){return 73;} if (znak=='J'){return 74;} if (znak=='K'){return 75;} if (znak=='L'){return 76;} if (znak=='M'){return 77;} if (znak=='N'){return 78;} if (znak=='O'){return 79;} if (znak=='P'){return 80;} if (znak=='Q'){return 81;} if (znak=='R'){return 82;} if (znak=='S'){return 83;} if (znak=='T'){return 84;} if (znak=='U'){return 85;} if (znak=='V'){return 86;} if (znak=='W'){return 87;} if (znak=='X'){return 88;} if (znak=='Y'){return 89;} if (znak=='Z'){return 90;} if (znak=='['){return 91;} if (znak==']'){return 93;} if (znak=='^'){return 94;} if (znak=='_'){return 95;} if (znak=='{'){return 123;} if (znak=='|'){return 124;} if (znak=='}'){return 125;} if (znak=='~'){return 126;} return 32; } Całość jest jasno wytłumaczona na filmie: https://www.youtube.com/watch?v=Cuyy03axaqo
Screenshot_2

Matryca LED sterowana klawiaturą membranową

Cześć, To mój drugi projekt dotyczący matryc LED, tym razem wyświetlany tekst będziemy wprowadzać za pomocą klawiatury membranowej. W dużej części korzystamy tutaj z programu z poprzedniego wpisu na temat Matrycy LED z przesuwającym, wcześniej ustawionym tekstem. Części potrzebne do realizacji projektu to: płytka Arduino UNO matrycaLED 8x8 ze sterownikiem MAX7219 klawiatura membranowa Program jest napisany w taki sposób aby można było użyć dowolnej liczby matryc Schemat: Sketch:   #include <LedControl.h> #include <Keypad.h> int DIN = 12; int CS =  11; int CLK = 10; int ilosc_ekranow = 2; //String tekscik = "PRZYKLADOWY TEKST: WWW.ABC-RC.PL"; char po_zamianie; String napis; byte ascii_table[130][8]; LedControl lc=LedControl(DIN,CLK,CS,0); const byte ROWS = 4; //four rows const byte COLS = 4; //four columns //define the cymbols on the buttons of the keypads char hexaKeys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','S','D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad //initialize an instance of class NewKeypad Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void wypelnij() { ascii_table[32][0]=B00000000; ascii_table[32][1]=B00000000; ascii_table[32][2]=B00000000; ascii_table[32][3]=B00000000; ascii_table[32][4]=B00000000; ascii_table[32][7]=5; ascii_table[33][0]=B00000000; ascii_table[33][1]=B01011111; ascii_table[33][2]=B00000000; ascii_table[33][7]=3; ascii_table[34][0]=B00000000; ascii_table[34][1]=B00001110; ascii_table[34][2]=B00000000; ascii_table[34][3]=B00001110; ascii_table[34][4]=B00000000; ascii_table[34][7]=5; ascii_table[35][0]=B00000000; ascii_table[35][1]=B00010100; ascii_table[35][2]=B01111111; ascii_table[35][3]=B00010100; ascii_table[35][4]=B01111111; ascii_table[35][5]=B00010100; ascii_table[35][6]=B00000000; ascii_table[35][7]=7; ascii_table[36][0]=B00000000; ascii_table[36][1]=B00100100; ascii_table[36][2]=B00101010; ascii_table[36][3]=B01111111; ascii_table[36][4]=B00101010; ascii_table[36][5]=B00100100; ascii_table[36][6]=B00000000; ascii_table[36][7]=7; ascii_table[37][0]=B00000000; ascii_table[37][1]=B01100010; ascii_table[37][2]=B01100100; ascii_table[37][3]=B00001000; ascii_table[37][4]=B00010011; ascii_table[37][5]=B00100011; ascii_table[37][6]=B00000000; ascii_table[37][7]=7; ascii_table[38][0]=B00000000; ascii_table[38][1]=B01010000; ascii_table[38][2]=B00100010; ascii_table[38][3]=B01010101; ascii_table[38][4]=B01001001; ascii_table[38][5]=B00110110; ascii_table[38][6]=B00000000; ascii_table[38][7]=7; ascii_table[39][0]=B00000000; ascii_table[39][1]=B00000011; ascii_table[39][2]=B00000101; ascii_table[39][3]=B00000000; ascii_table[39][7]=4; ascii_table[40][0]=B00000000; ascii_table[40][1]=B01000001; ascii_table[40][2]=B00100010; ascii_table[40][3]=B00011100; ascii_table[40][4]=B00000000; ascii_table[40][7]=5; ascii_table[41][0]=B00000000; ascii_table[41][1]=B00011100; ascii_table[41][2]=B00100010; ascii_table[41][3]=B01000001; ascii_table[41][4]=B00000000; ascii_table[41][7]=5; ascii_table[42][0]=B00000000; ascii_table[42][1]=B00010100; ascii_table[42][2]=B00001000; ascii_table[42][3]=B00111110; ascii_table[42][4]=B00001000; ascii_table[42][5]=B00010100; ascii_table[42][6]=B00000000; ascii_table[42][7]=7; ascii_table[43][0]=B00000000; ascii_table[43][1]=B00001000; ascii_table[43][2]=B00001000; ascii_table[43][3]=B00111110; ascii_table[43][4]=B00001000; ascii_table[43][5]=B00001000; ascii_table[43][6]=B00000000; ascii_table[43][7]=7; ascii_table[44][0]=B00000000; ascii_table[44][1]=B00110000; ascii_table[44][2]=B01010000; ascii_table[44][3]=B00000000; ascii_table[44][7]=4; ascii_table[45][0]=B00000000; ascii_table[45][1]=B00001000; ascii_table[45][2]=B00001000; ascii_table[45][3]=B00001000; ascii_table[45][4]=B00001000; ascii_table[45][5]=B00000000; ascii_table[45][7]=6; ascii_table[46][0]=B00000000; ascii_table[46][1]=B01100000; ascii_table[46][2]=B01100000; ascii_table[46][3]=B00000000; ascii_table[46][7]=4; ascii_table[47][0]=B00000000; ascii_table[47][1]=B00000010; ascii_table[47][2]=B00000100; ascii_table[47][3]=B00001000; ascii_table[47][4]=B00010000; ascii_table[47][5]=B00100000; ascii_table[47][6]=B00000000; ascii_table[47][7]=7; ascii_table[48][0]=B00000000; ascii_table[48][1]=B00111110; ascii_table[48][2]=B01000001; ascii_table[48][3]=B01000001; ascii_table[48][4]=B00111110; ascii_table[48][5]=B00000000; ascii_table[48][7]=6; ascii_table[49][0]=B00000000; ascii_table[49][1]=B01000000; ascii_table[49][2]=B01111111; ascii_table[49][3]=B01000010; ascii_table[49][4]=B00000000; ascii_table[49][7]=5; ascii_table[50][0]=B00000000; ascii_table[50][1]=B01000110; ascii_table[50][2]=B01001001; ascii_table[50][3]=B01010001; ascii_table[50][4]=B01100011; ascii_table[50][5]=B01000010; ascii_table[50][6]=B00000000; ascii_table[50][7]=7; ascii_table[51][0]=B00000000; ascii_table[51][1]=B00110001; ascii_table[51][2]=B01001011; ascii_table[51][3]=B01000101; ascii_table[51][4]=B01000001; ascii_table[51][5]=B00100001; ascii_table[51][6]=B00000000; ascii_table[51][7]=7; ascii_table[52][0]=B00000000; ascii_table[52][1]=B00010000; ascii_table[52][2]=B01111111; ascii_table[52][3]=B00010010; ascii_table[52][4]=B00010100; ascii_table[52][5]=B00011000; ascii_table[52][6]=B00000000; ascii_table[52][7]=7; ascii_table[53][0]=B00000000; ascii_table[53][1]=B00111001; ascii_table[53][2]=B01000101; ascii_table[53][3]=B01000101; ascii_table[53][4]=B01000101; ascii_table[53][5]=B00100111; ascii_table[53][6]=B00000000; ascii_table[53][7]=7; ascii_table[54][0]=B00000000; ascii_table[54][1]=B00110000; ascii_table[54][2]=B01001001; ascii_table[54][3]=B01001001; ascii_table[54][4]=B01001010; ascii_table[54][5]=B00111100; ascii_table[54][6]=B00000000; ascii_table[54][7]=7; ascii_table[55][0]=B00000000; ascii_table[55][1]=B00000111; ascii_table[55][2]=B00001001; ascii_table[55][3]=B01110001; ascii_table[55][4]=B00000001; ascii_table[55][5]=B00000011; ascii_table[55][6]=B00000000; ascii_table[55][7]=7; ascii_table[56][0]=B00000000; ascii_table[56][1]=B00110110; ascii_table[56][2]=B01001001; ascii_table[56][3]=B01001001; ascii_table[56][4]=B01001001; ascii_table[56][5]=B00110110; ascii_table[56][6]=B00000000; ascii_table[56][7]=7; ascii_table[57][0]=B00000000; ascii_table[57][1]=B00011110; ascii_table[57][2]=B00101001; ascii_table[57][3]=B01001001; ascii_table[57][4]=B01001001; ascii_table[57][5]=B00000110; ascii_table[57][6]=B00000000; ascii_table[57][7]=7; ascii_table[58][0]=B00000000; ascii_table[58][1]=B00110110; ascii_table[58][2]=B00110110; ascii_table[58][3]=B00000000; ascii_table[58][7]=4; ascii_table[59][0]=B00000000; ascii_table[59][1]=B00110110; ascii_table[59][2]=B01010110; ascii_table[59][3]=B00000000; ascii_table[59][7]=4; ascii_table[60][0]=B00000000; ascii_table[60][1]=B01000001; ascii_table[60][2]=B00100010; ascii_table[60][3]=B00010100; ascii_table[60][4]=B00001000; ascii_table[60][5]=B00000000; ascii_table[60][7]=6; ascii_table[61][0]=B00000000; ascii_table[61][1]=B00010100; ascii_table[61][2]=B00010100; ascii_table[61][3]=B00010100; ascii_table[61][4]=B00010100; ascii_table[61][5]=B00010100; ascii_table[61][6]=B00000000; ascii_table[61][7]=7; ascii_table[62][0]=B00000000; ascii_table[62][1]=B00001000; ascii_table[62][2]=B00010100; ascii_table[62][3]=B00100010; ascii_table[62][4]=B01000001; ascii_table[62][5]=B00000000; ascii_table[62][7]=6; ascii_table[63][0]=B00000000; ascii_table[63][1]=B00000110; ascii_table[63][2]=B00001001; ascii_table[63][3]=B01010001; ascii_table[63][4]=B00000001; ascii_table[63][5]=B00000010; ascii_table[63][6]=B00000000; ascii_table[63][7]=7; ascii_table[64][0]=B00000000; ascii_table[64][1]=B00111110; ascii_table[64][2]=B01000001; ascii_table[64][3]=B01111001; ascii_table[64][4]=B01001001; ascii_table[64][5]=B00110010; ascii_table[64][6]=B00000000; ascii_table[64][7]=7; ascii_table[65][0]=B00000000; ascii_table[65][1]=B01111110; ascii_table[65][2]=B00010001; ascii_table[65][3]=B00010001; ascii_table[65][4]=B00010001; ascii_table[65][5]=B01111110; ascii_table[65][6]=B00000000; ascii_table[65][7]=7; ascii_table[66][0]=B00000000; ascii_table[66][1]=B00110110; ascii_table[66][2]=B01001001; ascii_table[66][3]=B01001001; ascii_table[66][4]=B01001001; ascii_table[66][5]=B01111111; ascii_table[66][6]=B00000000; ascii_table[66][7]=7; ascii_table[67][0]=B00000000; ascii_table[67][1]=B00100010; ascii_table[67][2]=B01000001; ascii_table[67][3]=B01000001; ascii_table[67][4]=B01000001; ascii_table[67][5]=B00111110; ascii_table[67][6]=B00000000; ascii_table[67][7]=7; ascii_table[68][0]=B00000000; ascii_table[68][1]=B00011100; ascii_table[68][2]=B00100010; ascii_table[68][3]=B01000001; ascii_table[68][4]=B01000001; ascii_table[68][5]=B01111111; ascii_table[68][6]=B00000000; ascii_table[68][7]=7; ascii_table[69][0]=B00000000; ascii_table[69][1]=B01000001; ascii_table[69][2]=B01001001; ascii_table[69][3]=B01001001; ascii_table[69][4]=B01111111; ascii_table[69][5]=B00000000; ascii_table[69][7]=6; ascii_table[70][0]=B00000000; ascii_table[70][1]=B00000001; ascii_table[70][2]=B00001001; ascii_table[70][3]=B00001001; ascii_table[70][4]=B01111111; ascii_table[70][5]=B00000000; ascii_table[70][7]=6; ascii_table[71][0]=B00000000; ascii_table[71][1]=B01111010; ascii_table[71][2]=B01001001; ascii_table[71][3]=B01001001; ascii_table[71][4]=B01000001; ascii_table[71][5]=B00111110; ascii_table[71][6]=B00000000; ascii_table[71][7]=7; ascii_table[72][0]=B00000000; ascii_table[72][1]=B01111111; ascii_table[72][2]=B00001000; ascii_table[72][3]=B00001000; ascii_table[72][4]=B01111111; ascii_table[72][5]=B00000000; ascii_table[72][7]=6; ascii_table[73][0]=B00000000; ascii_table[73][1]=B01000001; ascii_table[73][2]=B01111111; ascii_table[73][3]=B01000001; ascii_table[73][4]=B00000000; ascii_table[73][7]=5; ascii_table[74][0]=B00000000; ascii_table[74][1]=B00000001; ascii_table[74][2]=B01111111; ascii_table[74][3]=B01000001; ascii_table[74][4]=B01000000; ascii_table[74][5]=B00100000; ascii_table[74][6]=B00000000; ascii_table[74][7]=7; ascii_table[75][0]=B00000000; ascii_table[75][1]=B01000001; ascii_table[75][2]=B00100010; ascii_table[75][3]=B00010100; ascii_table[75][4]=B00001000; ascii_table[75][5]=B01111111; ascii_table[75][6]=B00000000; ascii_table[75][7]=7; ascii_table[76][0]=B00000000; ascii_table[76][1]=B01000000; ascii_table[76][2]=B01000000; ascii_table[76][3]=B01000000; ascii_table[76][4]=B01111111; ascii_table[76][5]=B00000000; ascii_table[76][7]=6; ascii_table[77][0]=B00000000; ascii_table[77][1]=B01111111; ascii_table[77][2]=B00000010; ascii_table[77][3]=B00001100; ascii_table[77][4]=B00000010; ascii_table[77][5]=B01111111; ascii_table[77][6]=B00000000; ascii_table[77][7]=7; ascii_table[78][0]=B00000000; ascii_table[78][1]=B01111111; ascii_table[78][2]=B00010000; ascii_table[78][3]=B00001000; ascii_table[78][4]=B00000100; ascii_table[78][5]=B01111111; ascii_table[78][6]=B00000000; ascii_table[78][7]=7; ascii_table[79][0]=B00000000; ascii_table[79][1]=B00111110; ascii_table[79][2]=B01000001; ascii_table[79][3]=B01000001; ascii_table[79][4]=B01000001; ascii_table[79][5]=B00111110; ascii_table[79][6]=B00000000; ascii_table[79][7]=7; ascii_table[80][0]=B00000000; ascii_table[80][1]=B00000110; ascii_table[80][2]=B00001001; ascii_table[80][3]=B00001001; ascii_table[80][4]=B00001001; ascii_table[80][5]=B01111111; ascii_table[80][6]=B00000000; ascii_table[80][7]=7; ascii_table[81][0]=B00000000; ascii_table[81][1]=B01011110; ascii_table[81][2]=B00100001; ascii_table[81][3]=B01010001; ascii_table[81][4]=B01000001; ascii_table[81][5]=B00111110; ascii_table[81][6]=B00000000; ascii_table[81][7]=7; ascii_table[82][0]=B00000000; ascii_table[82][1]=B01000110; ascii_table[82][2]=B00101001; ascii_table[82][3]=B00011001; ascii_table[82][4]=B00001001; ascii_table[82][5]=B01111111; ascii_table[82][6]=B00000000; ascii_table[82][7]=7; ascii_table[83][0]=B00000000; ascii_table[83][1]=B00110001; ascii_table[83][2]=B01001001; ascii_table[83][3]=B01001001; ascii_table[83][4]=B01001001; ascii_table[83][5]=B01000110; ascii_table[83][6]=B00000000; ascii_table[83][7]=7; ascii_table[84][0]=B00000000; ascii_table[84][1]=B00000001; ascii_table[84][2]=B00000001; ascii_table[84][3]=B01111111; ascii_table[84][4]=B00000001; ascii_table[84][5]=B00000001; ascii_table[84][6]=B00000000; ascii_table[84][7]=7; ascii_table[85][0]=B00000000; ascii_table[85][1]=B00111111; ascii_table[85][2]=B01000000; ascii_table[85][3]=B01000000; ascii_table[85][4]=B01000000; ascii_table[85][5]=B00111111; ascii_table[85][6]=B00000000; ascii_table[85][7]=7; ascii_table[86][0]=B00000000; ascii_table[86][1]=B00011111; ascii_table[86][2]=B00100000; ascii_table[86][3]=B01000000; ascii_table[86][4]=B00100000; ascii_table[86][5]=B00011111; ascii_table[86][6]=B00000000; ascii_table[86][7]=7; ascii_table[87][0]=B00000000; ascii_table[87][1]=B00111111; ascii_table[87][2]=B01000000; ascii_table[87][3]=B00111000; ascii_table[87][4]=B01000000; ascii_table[87][5]=B00111111; ascii_table[87][6]=B00000000; ascii_table[87][7]=7; ascii_table[88][0]=B00000000; ascii_table[88][1]=B01100011; ascii_table[88][2]=B00010100; ascii_table[88][3]=B00001000; ascii_table[88][4]=B00010100; ascii_table[88][5]=B01100011; ascii_table[88][6]=B00000000; ascii_table[88][7]=7; ascii_table[89][0]=B00000000; ascii_table[89][1]=B00000111; ascii_table[89][2]=B00001000; ascii_table[89][3]=B01110000; ascii_table[89][4]=B00001000; ascii_table[89][5]=B00000111; ascii_table[89][6]=B00000000; ascii_table[89][7]=7; ascii_table[90][0]=B00000000; ascii_table[90][1]=B01000011; ascii_table[90][2]=B01000101; ascii_table[90][3]=B01001001; ascii_table[90][4]=B01010001; ascii_table[90][5]=B01100001; ascii_table[90][6]=B00000000; ascii_table[90][7]=7; ascii_table[91][0]=B00000000; ascii_table[91][1]=B01000001; ascii_table[91][2]=B01000001; ascii_table[91][3]=B01111111; ascii_table[91][4]=B00000000; ascii_table[91][7]=5; ascii_table[93][0]=B00000000; ascii_table[93][1]=B01111111; ascii_table[93][2]=B01000001; ascii_table[93][3]=B01000001; ascii_table[93][4]=B00000000; ascii_table[93][7]=5; ascii_table[94][0]=B00000000; ascii_table[94][1]=B00000100; ascii_table[94][2]=B00000010; ascii_table[94][3]=B00000001; ascii_table[94][4]=B00000010; ascii_table[94][5]=B00000100; ascii_table[94][6]=B00000000; ascii_table[94][7]=7; ascii_table[95][0]=B00000000; ascii_table[95][1]=B01000000; ascii_table[95][2]=B01000000; ascii_table[95][3]=B01000000; ascii_table[95][4]=B01000000; ascii_table[95][5]=B00000000; ascii_table[95][7]=6; ascii_table[123][0]=B00000000; ascii_table[123][1]=B01000001; ascii_table[123][2]=B00110110; ascii_table[123][3]=B00001000; ascii_table[123][4]=B00000000; ascii_table[123][7]=5; ascii_table[124][0]=B00000000; ascii_table[124][1]=B01111111; ascii_table[124][2]=B00000000; ascii_table[124][7]=3; ascii_table[125][0]=B00000000; ascii_table[125][1]=B00001000; ascii_table[125][2]=B00110110; ascii_table[125][3]=B01000001; ascii_table[125][4]=B00000000; ascii_table[125][7]=5; ascii_table[126][0]=B00000000; ascii_table[126][1]=B00001000; ascii_table[126][2]=B00010000; ascii_table[126][3]=B00001000; ascii_table[126][4]=B00001000; ascii_table[126][5]=B00010000; ascii_table[126][6]=B00000000; ascii_table[126][7]=7; } void setup(){ for (int i=0;i<ilosc_ekranow;i++)    //petla inicjalizujaca matryce { lc.shutdown(i,false);      // wyjscie z trybu uspienia lc.setIntensity(i,1);      // ustawienie jasnosci lc.clearDisplay(i);        // czyszczenie ekranu } /*for (int j1=0; j1<90; j1++)      //petla do wypelnienia ascii { for (int i1=0; i1<8; i1++) { ascii_table[i1][j1]=0; } }*/ } void loop(){ wypelnij(); zczytanie_z_klawiatury(); while(customKeypad.getKey()!='D'){ slideAscii(napis);} napis=""; } void printAscii(int ekran, int indeks)        //funkcja do stałego napisu { int i = 0; for(i=0;i<8;i++) { lc.setRow(ekran,i,ascii_table[indeks][i]); delay(50); } } int ile_lini(String tekst)              //funkcja liczaca ilosc lini do wyswietlenia { int liczbowa[tekst.length()];                   //tablica zbierajaca liczby char znakowa[tekst.length()];                   //tablica zbierajaca znaki int linie;                                        //zmienna pomocnicza liczaca linie tekst.toCharArray(znakowa, tekst.length()+1);     //zamiana stringa na tablice char for (int i=0; i<tekst.length();i++) { liczbowa[i]=zamien_ascii(znakowa[i]);             //zamiana znakow na liczby linie = linie + ascii_table[liczbowa[i]][7];      //zliczenie ile lini z 7 pola ascii } return linie; } void slideAscii(String tekst) { int lini = ile_lini(tekst);                         //ilosc lini tekstu byte pattern[lini+(16*ilosc_ekranow)];              //tablica ktora finalnie bedziemy wyswietlac int liczbowa[tekst.length()];                         //fragment przekopiowany z funkcji ile_lini char znakowa[tekst.length()];                         // tekst.toCharArray(znakowa, tekst.length()+1);         // for (int i=0; i<tekst.length();i++)                   // {                                                 // liczbowa[i]=zamien_ascii(znakowa[i]);           // //Serial.println(liczbowa[i]);                  // }                                               // int licznik = 0;                                      //zmienna liczaca ktory raz petla sie wypelnia for (int k=0;k<(8*ilosc_ekranow);k++)                 //wypelnienie pierwszego ekranu w pattern B00000000 { pattern[licznik]=B00000000; Serial.println(pattern[licznik]); licznik++; } for (int i=0; i<tekst.length();i++)                             //wypelnianie napisem tablicy pattern {                                                           //zalezne od dlugosci tekstu //Serial.print("liczba: "); //Serial.println(i); for (int j=ascii_table[liczbowa[i]][7]; j>0;j--)          //oraz od ilosci lini w danym znaku { pattern[licznik] = ascii_table[liczbowa[i]][j-1]; //Serial.println(pattern[licznik]); licznik++; } } for (int k=0;k<(8*ilosc_ekranow);k++)                 //wypelnanie koncowego ekranu w pattern B00000000 { pattern[licznik]=B00000000; Serial.println(pattern[licznik]); licznik++; } for(int k=0;k<(lini+(8*ilosc_ekranow));k++) { int pasy=0; for (int i=0;i<ilosc_ekranow;i++)                     //petla wypisujaca na matrycy { for (int j=0;j<8;j++)                         //petla wewnetrzna wypisujaca na matrycy { lc.setRow(i,j,pattern[pasy+k]);           //lc.setRow funkcja wypisujaca pasy++;                                   //pattern jest obiektem ktory wypisujemy }                                         //pasy poniewaz jest to dodatkowa petla liczaca }                                                 // +k aby napis mogl sie przesuwac delay(30);                                                  //opoznienie czyli predkosc przesuwania sie tekstu } } int zamien_ascii(char znak)       //zamiana znaku na ascii { if (znak==' '){return 32;} if (znak=='!'){return 33;} if (znak=='"'){return 34;} if (znak=='#'){return 35;} if (znak=='$'){return 36;} if (znak=='%'){return 37;} if (znak=='&'){return 38;} if (znak=='('){return 40;} if (znak==')'){return 41;} if (znak=='*'){return 42;} if (znak=='+'){return 43;} if (znak==','){return 44;} if (znak=='-'){return 45;} if (znak=='.'){return 46;} if (znak=='/'){return 47;} if (znak=='0'){return 48;} if (znak=='1'){return 49;} if (znak=='2'){return 50;} if (znak=='3'){return 51;} if (znak=='4'){return 52;} if (znak=='5'){return 53;} if (znak=='6'){return 54;} if (znak=='7'){return 55;} if (znak=='8'){return 56;} if (znak=='9'){return 57;} if (znak==':'){return 58;} if (znak==';'){return 59;} if (znak=='<'){return 60;} if (znak=='='){return 61;} if (znak=='>'){return 62;} if (znak=='?'){return 63;} if (znak=='@'){return 64;} if (znak=='A'){return 65;} if (znak=='B'){return 66;} if (znak=='C'){return 67;} if (znak=='D'){return 68;} if (znak=='E'){return 69;} if (znak=='F'){return 70;} if (znak=='G'){return 71;} if (znak=='H'){return 72;} if (znak=='I'){return 73;} if (znak=='J'){return 74;} if (znak=='K'){return 75;} if (znak=='L'){return 76;} if (znak=='M'){return 77;} if (znak=='N'){return 78;} if (znak=='O'){return 79;} if (znak=='P'){return 80;} if (znak=='Q'){return 81;} if (znak=='R'){return 82;} if (znak=='S'){return 83;} if (znak=='T'){return 84;} if (znak=='U'){return 85;} if (znak=='V'){return 86;} if (znak=='W'){return 87;} if (znak=='X'){return 88;} if (znak=='Y'){return 89;} if (znak=='Z'){return 90;} if (znak=='['){return 91;} if (znak==']'){return 93;} if (znak=='^'){return 94;} if (znak=='_'){return 95;} if (znak=='{'){return 123;} if (znak=='|'){return 124;} if (znak=='}'){return 125;} if (znak=='~'){return 126;} return 32; } void zczytanie_z_klawiatury() { char tekst[20]; String znak[10]; int i=0; int j=0; bool koniec=0; while (koniec==0) { char customKey = customKeypad.getKey(); if (customKey) { tekst[i] = customKey; Serial.println("znak jaki dostalismy"); Serial.println(tekst[i]); if (tekst[i]=='S') { koniec=1; for (int k=0; k<j+1;k++) { if (znak[k] == "1")      {po_zamianie='.'; napis += po_zamianie;} if (znak[k] == "11")     {po_zamianie=','; napis += po_zamianie;} if (znak[k] == "111")    {po_zamianie='!'; napis += po_zamianie;} if (znak[k] == "1111")   {po_zamianie='?'; napis += po_zamianie;} if (znak[k] == "2")      {po_zamianie='A'; napis += po_zamianie;} if (znak[k] == "22")     {po_zamianie='B'; napis += po_zamianie;} if (znak[k] == "222")    {po_zamianie='C'; napis += po_zamianie;} if (znak[k] == "3")      {po_zamianie='D'; napis += po_zamianie;} if (znak[k] == "33")     {po_zamianie='E'; napis += po_zamianie;} if (znak[k] == "333")    {po_zamianie='F'; napis += po_zamianie;} if (znak[k] == "4")      {po_zamianie='G'; napis += po_zamianie;} if (znak[k] == "44")     {po_zamianie='H'; napis += po_zamianie;} if (znak[k] == "444")    {po_zamianie='I'; napis += po_zamianie;} if (znak[k] == "5")      {po_zamianie='J'; napis += po_zamianie;} if (znak[k] == "55")     {po_zamianie='K'; napis += po_zamianie;} if (znak[k] == "555")    {po_zamianie='L'; napis += po_zamianie;} if (znak[k] == "6")      {po_zamianie='M'; napis += po_zamianie;} if (znak[k] == "66")     {po_zamianie='N'; napis += po_zamianie;} if (znak[k] == "666")    {po_zamianie='O'; napis += po_zamianie;} if (znak[k] == "7")      {po_zamianie='P'; napis += po_zamianie;} if (znak[k] == "77")     {po_zamianie='Q'; napis += po_zamianie;} if (znak[k] == "777")    {po_zamianie='R'; napis += po_zamianie;} if (znak[k] == "7777")   {po_zamianie='S'; napis += po_zamianie;} if (znak[k] == "8")      {po_zamianie='T'; napis += po_zamianie;} if (znak[k] == "88")     {po_zamianie='U'; napis += po_zamianie;} if (znak[k] == "888")    {po_zamianie='V'; napis += po_zamianie;} if (znak[k] == "9")      {po_zamianie='W'; napis += po_zamianie;} if (znak[k] == "99")     {po_zamianie='X'; napis += po_zamianie;} if (znak[k] == "999")    {po_zamianie='Y'; napis += po_zamianie;} if (znak[k] == "9999")   {po_zamianie='Z'; napis += po_zamianie;} if (znak[k] == "A")      {po_zamianie='1'; napis += po_zamianie;} if (znak[k] == "AA")     {po_zamianie='2'; napis += po_zamianie;} if (znak[k] == "AAA")    {po_zamianie='3'; napis += po_zamianie;} if (znak[k] == "B")      {po_zamianie='4'; napis += po_zamianie;} if (znak[k] == "BB")     {po_zamianie='5'; napis += po_zamianie;} if (znak[k] == "BBB")    {po_zamianie='6'; napis += po_zamianie;} if (znak[k] == "C")      {po_zamianie='7'; napis += po_zamianie;} if (znak[k] == "CC")     {po_zamianie='8'; napis += po_zamianie;} if (znak[k] == "CCC")    {po_zamianie='9'; napis += po_zamianie;} if (znak[k] == "0")      {po_zamianie=' '; napis += po_zamianie;} if (znak[k] == "00")     {po_zamianie='0'; napis += po_zamianie;} } Serial.println("tablica po zamianie:"); /* for (int k=0; k<j+1;k++) { Serial.print(po_zamianie[k]); }*/ Serial.println(""); Serial.println("napis:"); Serial.println(napis); } if (tekst[i]=='*') { j++; i=0; } else { Serial.print("znak["); Serial.print(j); Serial.println("]"); znak[j]=znak[j]+tekst[i]; Serial.println(znak[j]); i++; } Serial.println("uzyskana tablica"); for (int k=0; k<j+1; k++) { Serial.println(znak[k]); } Serial.println(""); } } }   Całość jest jasno wytłumaczona na filmie: https://www.youtube.com/watch?v=VOWYsQDwFF0   Polecamy:  Płytka stykowa  Arduino UNO R3
Screenshot_2

Przesuwający tekst – MATRYCA LED 8×8

Cześć, Mój projekt w założeniu miał wyświetlać przesuwający się tekst na matrycach LED 8x8. Części potrzebne do realizacji projektu to: -płytka Arduino UNO http://abc-rc.pl/Arduino-UNO-R3-CH340 -matrycaLED 8x8 ze sterownikiem MAX7219 http://abc-rc.pl/MAX7219-LED-red Program jest napisany w taki sposób aby można było użyć dowolnej liczby matryc Schemat:   Sketch: #include <LedControl.h> int DIN = 12; int CS =  11; int CLK = 10; int ilosc_ekranow = 2; String tekscik = "PRZYKLADOWY TEKST: WWW.ABC-RC.PL"; byte ascii_table[130][8]; LedControl lc=LedControl(DIN,CLK,CS,0); void wypelnij() { ascii_table[32][0]=B00000000; ascii_table[32][1]=B00000000; ascii_table[32][2]=B00000000; ascii_table[32][3]=B00000000; ascii_table[32][4]=B00000000; ascii_table[32][7]=5; ascii_table[33][0]=B00000000; ascii_table[33][1]=B01011111; ascii_table[33][2]=B00000000; ascii_table[33][7]=3; ascii_table[34][0]=B00000000; ascii_table[34][1]=B00001110; ascii_table[34][2]=B00000000; ascii_table[34][3]=B00001110; ascii_table[34][4]=B00000000; ascii_table[34][7]=5; ascii_table[35][0]=B00000000; ascii_table[35][1]=B00010100; ascii_table[35][2]=B01111111; ascii_table[35][3]=B00010100; ascii_table[35][4]=B01111111; ascii_table[35][5]=B00010100; ascii_table[35][6]=B00000000; ascii_table[35][7]=7; ascii_table[36][0]=B00000000; ascii_table[36][1]=B00100100; ascii_table[36][2]=B00101010; ascii_table[36][3]=B01111111; ascii_table[36][4]=B00101010; ascii_table[36][5]=B00100100; ascii_table[36][6]=B00000000; ascii_table[36][7]=7; ascii_table[37][0]=B00000000; ascii_table[37][1]=B01100010; ascii_table[37][2]=B01100100; ascii_table[37][3]=B00001000; ascii_table[37][4]=B00010011; ascii_table[37][5]=B00100011; ascii_table[37][6]=B00000000; ascii_table[37][7]=7; ascii_table[38][0]=B00000000; ascii_table[38][1]=B01010000; ascii_table[38][2]=B00100010; ascii_table[38][3]=B01010101; ascii_table[38][4]=B01001001; ascii_table[38][5]=B00110110; ascii_table[38][6]=B00000000; ascii_table[38][7]=7; ascii_table[39][0]=B00000000; ascii_table[39][1]=B00000011; ascii_table[39][2]=B00000101; ascii_table[39][3]=B00000000; ascii_table[39][7]=4; ascii_table[40][0]=B00000000; ascii_table[40][1]=B01000001; ascii_table[40][2]=B00100010; ascii_table[40][3]=B00011100; ascii_table[40][4]=B00000000; ascii_table[40][7]=5; ascii_table[41][0]=B00000000; ascii_table[41][1]=B00011100; ascii_table[41][2]=B00100010; ascii_table[41][3]=B01000001; ascii_table[41][4]=B00000000; ascii_table[41][7]=5; ascii_table[42][0]=B00000000; ascii_table[42][1]=B00010100; ascii_table[42][2]=B00001000; ascii_table[42][3]=B00111110; ascii_table[42][4]=B00001000; ascii_table[42][5]=B00010100; ascii_table[42][6]=B00000000; ascii_table[42][7]=7; ascii_table[43][0]=B00000000; ascii_table[43][1]=B00001000; ascii_table[43][2]=B00001000; ascii_table[43][3]=B00111110; ascii_table[43][4]=B00001000; ascii_table[43][5]=B00001000; ascii_table[43][6]=B00000000; ascii_table[43][7]=7; ascii_table[44][0]=B00000000; ascii_table[44][1]=B00110000; ascii_table[44][2]=B01010000; ascii_table[44][3]=B00000000; ascii_table[44][7]=4; ascii_table[45][0]=B00000000; ascii_table[45][1]=B00001000; ascii_table[45][2]=B00001000; ascii_table[45][3]=B00001000; ascii_table[45][4]=B00001000; ascii_table[45][5]=B00000000; ascii_table[45][7]=6; ascii_table[46][0]=B00000000; ascii_table[46][1]=B01100000; ascii_table[46][2]=B01100000; ascii_table[46][3]=B00000000; ascii_table[46][7]=4; ascii_table[47][0]=B00000000; ascii_table[47][1]=B00000010; ascii_table[47][2]=B00000100; ascii_table[47][3]=B00001000; ascii_table[47][4]=B00010000; ascii_table[47][5]=B00100000; ascii_table[47][6]=B00000000; ascii_table[47][7]=7; ascii_table[48][0]=B00000000; ascii_table[48][1]=B00111110; ascii_table[48][2]=B01000001; ascii_table[48][3]=B01000001; ascii_table[48][4]=B00111110; ascii_table[48][5]=B00000000; ascii_table[48][7]=6; ascii_table[49][0]=B00000000; ascii_table[49][1]=B01000000; ascii_table[49][2]=B01111111; ascii_table[49][3]=B01000010; ascii_table[49][4]=B00000000; ascii_table[49][7]=5; ascii_table[50][0]=B00000000; ascii_table[50][1]=B01000110; ascii_table[50][2]=B01001001; ascii_table[50][3]=B01010001; ascii_table[50][4]=B01100011; ascii_table[50][5]=B01000010; ascii_table[50][6]=B00000000; ascii_table[50][7]=7; ascii_table[51][0]=B00000000; ascii_table[51][1]=B00110001; ascii_table[51][2]=B01001011; ascii_table[51][3]=B01000101; ascii_table[51][4]=B01000001; ascii_table[51][5]=B00100001; ascii_table[51][6]=B00000000; ascii_table[51][7]=7; ascii_table[52][0]=B00000000; ascii_table[52][1]=B00010000; ascii_table[52][2]=B01111111; ascii_table[52][3]=B00010010; ascii_table[52][4]=B00010100; ascii_table[52][5]=B00011000; ascii_table[52][6]=B00000000; ascii_table[52][7]=7; ascii_table[53][0]=B00000000; ascii_table[53][1]=B00111001; ascii_table[53][2]=B01000101; ascii_table[53][3]=B01000101; ascii_table[53][4]=B01000101; ascii_table[53][5]=B00100111; ascii_table[53][6]=B00000000; ascii_table[53][7]=7; ascii_table[54][0]=B00000000; ascii_table[54][1]=B00110000; ascii_table[54][2]=B01001001; ascii_table[54][3]=B01001001; ascii_table[54][4]=B01001010; ascii_table[54][5]=B00111100; ascii_table[54][6]=B00000000; ascii_table[54][7]=7; ascii_table[55][0]=B00000000; ascii_table[55][1]=B00000111; ascii_table[55][2]=B00001001; ascii_table[55][3]=B01110001; ascii_table[55][4]=B00000001; ascii_table[55][5]=B00000011; ascii_table[55][6]=B00000000; ascii_table[55][7]=7; ascii_table[56][0]=B00000000; ascii_table[56][1]=B00110110; ascii_table[56][2]=B01001001; ascii_table[56][3]=B01001001; ascii_table[56][4]=B01001001; ascii_table[56][5]=B00110110; ascii_table[56][6]=B00000000; ascii_table[56][7]=7; ascii_table[57][0]=B00000000; ascii_table[57][1]=B00011110; ascii_table[57][2]=B00101001; ascii_table[57][3]=B01001001; ascii_table[57][4]=B01001001; ascii_table[57][5]=B00000110; ascii_table[57][6]=B00000000; ascii_table[57][7]=7; ascii_table[58][0]=B00000000; ascii_table[58][1]=B00110110; ascii_table[58][2]=B00110110; ascii_table[58][3]=B00000000; ascii_table[58][7]=4; ascii_table[59][0]=B00000000; ascii_table[59][1]=B00110110; ascii_table[59][2]=B01010110; ascii_table[59][3]=B00000000; ascii_table[59][7]=4; ascii_table[60][0]=B00000000; ascii_table[60][1]=B01000001; ascii_table[60][2]=B00100010; ascii_table[60][3]=B00010100; ascii_table[60][4]=B00001000; ascii_table[60][5]=B00000000; ascii_table[60][7]=6; ascii_table[61][0]=B00000000; ascii_table[61][1]=B00010100; ascii_table[61][2]=B00010100; ascii_table[61][3]=B00010100; ascii_table[61][4]=B00010100; ascii_table[61][5]=B00010100; ascii_table[61][6]=B00000000; ascii_table[61][7]=7; ascii_table[62][0]=B00000000; ascii_table[62][1]=B00001000; ascii_table[62][2]=B00010100; ascii_table[62][3]=B00100010; ascii_table[62][4]=B01000001; ascii_table[62][5]=B00000000; ascii_table[62][7]=6; ascii_table[63][0]=B00000000; ascii_table[63][1]=B00000110; ascii_table[63][2]=B00001001; ascii_table[63][3]=B01010001; ascii_table[63][4]=B00000001; ascii_table[63][5]=B00000010; ascii_table[63][6]=B00000000; ascii_table[63][7]=7; ascii_table[64][0]=B00000000; ascii_table[64][1]=B00111110; ascii_table[64][2]=B01000001; ascii_table[64][3]=B01111001; ascii_table[64][4]=B01001001; ascii_table[64][5]=B00110010; ascii_table[64][6]=B00000000; ascii_table[64][7]=7; ascii_table[65][0]=B00000000; ascii_table[65][1]=B01111110; ascii_table[65][2]=B00010001; ascii_table[65][3]=B00010001; ascii_table[65][4]=B00010001; ascii_table[65][5]=B01111110; ascii_table[65][6]=B00000000; ascii_table[65][7]=7; ascii_table[66][0]=B00000000; ascii_table[66][1]=B00110110; ascii_table[66][2]=B01001001; ascii_table[66][3]=B01001001; ascii_table[66][4]=B01001001; ascii_table[66][5]=B01111111; ascii_table[66][6]=B00000000; ascii_table[66][7]=7; ascii_table[67][0]=B00000000; ascii_table[67][1]=B00100010; ascii_table[67][2]=B01000001; ascii_table[67][3]=B01000001; ascii_table[67][4]=B01000001; ascii_table[67][5]=B00111110; ascii_table[67][6]=B00000000; ascii_table[67][7]=7; ascii_table[68][0]=B00000000; ascii_table[68][1]=B00011100; ascii_table[68][2]=B00100010; ascii_table[68][3]=B01000001; ascii_table[68][4]=B01000001; ascii_table[68][5]=B01111111; ascii_table[68][6]=B00000000; ascii_table[68][7]=7; ascii_table[69][0]=B00000000; ascii_table[69][1]=B01000001; ascii_table[69][2]=B01001001; ascii_table[69][3]=B01001001; ascii_table[69][4]=B01111111; ascii_table[69][5]=B00000000; ascii_table[69][7]=6; ascii_table[70][0]=B00000000; ascii_table[70][1]=B00000001; ascii_table[70][2]=B00001001; ascii_table[70][3]=B00001001; ascii_table[70][4]=B01111111; ascii_table[70][5]=B00000000; ascii_table[70][7]=6; ascii_table[71][0]=B00000000; ascii_table[71][1]=B01111010; ascii_table[71][2]=B01001001; ascii_table[71][3]=B01001001; ascii_table[71][4]=B01000001; ascii_table[71][5]=B00111110; ascii_table[71][6]=B00000000; ascii_table[71][7]=7; ascii_table[72][0]=B00000000; ascii_table[72][1]=B01111111; ascii_table[72][2]=B00001000; ascii_table[72][3]=B00001000; ascii_table[72][4]=B01111111; ascii_table[72][5]=B00000000; ascii_table[72][7]=6; ascii_table[73][0]=B00000000; ascii_table[73][1]=B01000001; ascii_table[73][2]=B01111111; ascii_table[73][3]=B01000001; ascii_table[73][4]=B00000000; ascii_table[73][7]=5; ascii_table[74][0]=B00000000; ascii_table[74][1]=B00000001; ascii_table[74][2]=B01111111; ascii_table[74][3]=B01000001; ascii_table[74][4]=B01000000; ascii_table[74][5]=B00100000; ascii_table[74][6]=B00000000; ascii_table[74][7]=7; ascii_table[75][0]=B00000000; ascii_table[75][1]=B01000001; ascii_table[75][2]=B00100010; ascii_table[75][3]=B00010100; ascii_table[75][4]=B00001000; ascii_table[75][5]=B01111111; ascii_table[75][6]=B00000000; ascii_table[75][7]=7; ascii_table[76][0]=B00000000; ascii_table[76][1]=B01000000; ascii_table[76][2]=B01000000; ascii_table[76][3]=B01000000; ascii_table[76][4]=B01111111; ascii_table[76][5]=B00000000; ascii_table[76][7]=6; ascii_table[77][0]=B00000000; ascii_table[77][1]=B01111111; ascii_table[77][2]=B00000010; ascii_table[77][3]=B00001100; ascii_table[77][4]=B00000010; ascii_table[77][5]=B01111111; ascii_table[77][6]=B00000000; ascii_table[77][7]=7; ascii_table[78][0]=B00000000; ascii_table[78][1]=B01111111; ascii_table[78][2]=B00010000; ascii_table[78][3]=B00001000; ascii_table[78][4]=B00000100; ascii_table[78][5]=B01111111; ascii_table[78][6]=B00000000; ascii_table[78][7]=7; ascii_table[79][0]=B00000000; ascii_table[79][1]=B00111110; ascii_table[79][2]=B01000001; ascii_table[79][3]=B01000001; ascii_table[79][4]=B01000001; ascii_table[79][5]=B00111110; ascii_table[79][6]=B00000000; ascii_table[79][7]=7; ascii_table[80][0]=B00000000; ascii_table[80][1]=B00000110; ascii_table[80][2]=B00001001; ascii_table[80][3]=B00001001; ascii_table[80][4]=B00001001; ascii_table[80][5]=B01111111; ascii_table[80][6]=B00000000; ascii_table[80][7]=7; ascii_table[81][0]=B00000000; ascii_table[81][1]=B01011110; ascii_table[81][2]=B00100001; ascii_table[81][3]=B01010001; ascii_table[81][4]=B01000001; ascii_table[81][5]=B00111110; ascii_table[81][6]=B00000000; ascii_table[81][7]=7; ascii_table[82][0]=B00000000; ascii_table[82][1]=B01000110; ascii_table[82][2]=B00101001; ascii_table[82][3]=B00011001; ascii_table[82][4]=B00001001; ascii_table[82][5]=B01111111; ascii_table[82][6]=B00000000; ascii_table[82][7]=7; ascii_table[83][0]=B00000000; ascii_table[83][1]=B00110001; ascii_table[83][2]=B01001001; ascii_table[83][3]=B01001001; ascii_table[83][4]=B01001001; ascii_table[83][5]=B01000110; ascii_table[83][6]=B00000000; ascii_table[83][7]=7; ascii_table[84][0]=B00000000; ascii_table[84][1]=B00000001; ascii_table[84][2]=B00000001; ascii_table[84][3]=B01111111; ascii_table[84][4]=B00000001; ascii_table[84][5]=B00000001; ascii_table[84][6]=B00000000; ascii_table[84][7]=7; ascii_table[85][0]=B00000000; ascii_table[85][1]=B00111111; ascii_table[85][2]=B01000000; ascii_table[85][3]=B01000000; ascii_table[85][4]=B01000000; ascii_table[85][5]=B00111111; ascii_table[85][6]=B00000000; ascii_table[85][7]=7; ascii_table[86][0]=B00000000; ascii_table[86][1]=B00011111; ascii_table[86][2]=B00100000; ascii_table[86][3]=B01000000; ascii_table[86][4]=B00100000; ascii_table[86][5]=B00011111; ascii_table[86][6]=B00000000; ascii_table[86][7]=7; ascii_table[87][0]=B00000000; ascii_table[87][1]=B00111111; ascii_table[87][2]=B01000000; ascii_table[87][3]=B00111000; ascii_table[87][4]=B01000000; ascii_table[87][5]=B00111111; ascii_table[87][6]=B00000000; ascii_table[87][7]=7; ascii_table[88][0]=B00000000; ascii_table[88][1]=B01100011; ascii_table[88][2]=B00010100; ascii_table[88][3]=B00001000; ascii_table[88][4]=B00010100; ascii_table[88][5]=B01100011; ascii_table[88][6]=B00000000; ascii_table[88][7]=7; ascii_table[89][0]=B00000000; ascii_table[89][1]=B00000111; ascii_table[89][2]=B00001000; ascii_table[89][3]=B01110000; ascii_table[89][4]=B00001000; ascii_table[89][5]=B00000111; ascii_table[89][6]=B00000000; ascii_table[89][7]=7; ascii_table[90][0]=B00000000; ascii_table[90][1]=B01000011; ascii_table[90][2]=B01000101; ascii_table[90][3]=B01001001; ascii_table[90][4]=B01010001; ascii_table[90][5]=B01100001; ascii_table[90][6]=B00000000; ascii_table[90][7]=7; ascii_table[91][0]=B00000000; ascii_table[91][1]=B01000001; ascii_table[91][2]=B01000001; ascii_table[91][3]=B01111111; ascii_table[91][4]=B00000000; ascii_table[91][7]=5; ascii_table[93][0]=B00000000; ascii_table[93][1]=B01111111; ascii_table[93][2]=B01000001; ascii_table[93][3]=B01000001; ascii_table[93][4]=B00000000; ascii_table[93][7]=5; ascii_table[94][0]=B00000000; ascii_table[94][1]=B00000100; ascii_table[94][2]=B00000010; ascii_table[94][3]=B00000001; ascii_table[94][4]=B00000010; ascii_table[94][5]=B00000100; ascii_table[94][6]=B00000000; ascii_table[94][7]=7; ascii_table[95][0]=B00000000; ascii_table[95][1]=B01000000; ascii_table[95][2]=B01000000; ascii_table[95][3]=B01000000; ascii_table[95][4]=B01000000; ascii_table[95][5]=B00000000; ascii_table[95][7]=6; ascii_table[123][0]=B00000000; ascii_table[123][1]=B01000001; ascii_table[123][2]=B00110110; ascii_table[123][3]=B00001000; ascii_table[123][4]=B00000000; ascii_table[123][7]=5; ascii_table[124][0]=B00000000; ascii_table[124][1]=B01111111; ascii_table[124][2]=B00000000; ascii_table[124][7]=3; ascii_table[125][0]=B00000000; ascii_table[125][1]=B00001000; ascii_table[125][2]=B00110110; ascii_table[125][3]=B01000001; ascii_table[125][4]=B00000000; ascii_table[125][7]=5; ascii_table[126][0]=B00000000; ascii_table[126][1]=B00001000; ascii_table[126][2]=B00010000; ascii_table[126][3]=B00001000; ascii_table[126][4]=B00001000; ascii_table[126][5]=B00010000; ascii_table[126][6]=B00000000; ascii_table[126][7]=7; } void setup(){ Serial.begin(9600); for (int i=0;i<ilosc_ekranow;i++)    //petla inicjalizujaca matryce { lc.shutdown(i,false);      // wyjscie z trybu uspienia lc.setIntensity(i,1);      // ustawienie jasnosci lc.clearDisplay(i);        // czyszczenie ekranu } /*for (int j1=0; j1<90; j1++)      //petla do wypelnienia ascii { for (int i1=0; i1<8; i1++) { ascii_table[i1][j1]=0; } }*/ } void loop(){ wypelnij(); slideAscii(tekscik); } void printAscii(int ekran, int indeks)        //funkcja do stałego napisu { int i = 0; for(i=0;i<8;i++) { lc.setRow(ekran,i,ascii_table[indeks][i]); delay(50); } } int ile_lini(String tekst)              //funkcja liczaca ilosc lini do wyswietlenia { int liczbowa[tekst.length()];                   //tablica zbierajaca liczby char znakowa[tekst.length()];                   //tablica zbierajaca znaki int linie;                                        //zmienna pomocnicza liczaca linie tekst.toCharArray(znakowa, tekst.length()+1);     //zamiana stringa na tablice char for (int i=0; i<tekst.length();i++) { liczbowa[i]=zamien_ascii(znakowa[i]);             //zamiana znakow na liczby linie = linie + ascii_table[liczbowa[i]][7];      //zliczenie ile lini z 7 pola ascii } return linie; } void slideAscii(String tekst) { int lini = ile_lini(tekst);                         //ilosc lini tekstu byte pattern[lini+(16*ilosc_ekranow)];              //tablica ktora finalnie bedziemy wyswietlac int liczbowa[tekst.length()];                         //fragment przekopiowany z funkcji ile_lini char znakowa[tekst.length()];                         // tekst.toCharArray(znakowa, tekst.length()+1);         // for (int i=0; i<tekst.length();i++)                   // {                                                 // liczbowa[i]=zamien_ascii(znakowa[i]);           // //Serial.println(liczbowa[i]);                  // }                                               // int licznik = 0;                                      //zmienna liczaca ktory raz petla sie wypelnia for (int k=0;k<(8*ilosc_ekranow);k++)                 //wypelnienie pierwszego ekranu w pattern B00000000 { pattern[licznik]=B00000000; Serial.println(pattern[licznik]); licznik++; } for (int i=0; i<tekst.length();i++)                             //wypelnianie napisem tablicy pattern {                                                           //zalezne od dlugosci tekstu //Serial.print("liczba: "); //Serial.println(i); for (int j=ascii_table[liczbowa[i]][7]; j>0;j--)          //oraz od ilosci lini w danym znaku { pattern[licznik] = ascii_table[liczbowa[i]][j-1]; //Serial.println(pattern[licznik]); licznik++; } } for (int k=0;k<(8*ilosc_ekranow);k++)                 //wypelnanie koncowego ekranu w pattern B00000000 { pattern[licznik]=B00000000; Serial.println(pattern[licznik]); licznik++; } for(int k=0;k<(lini+(8*ilosc_ekranow));k++) { int pasy=0; for (int i=0;i<ilosc_ekranow;i++)                     //petla wypisujaca na matrycy { for (int j=0;j<8;j++)                         //petla wewnetrzna wypisujaca na matrycy { lc.setRow(i,j,pattern[pasy+k]);           //lc.setRow funkcja wypisujaca pasy++;                                   //pattern jest obiektem ktory wypisujemy }                                         //pasy poniewaz jest to dodatkowa petla liczaca }                                                 // +k aby napis mogl sie przesuwac delay(30);                                                  //opoznienie czyli predkosc przesuwania sie tekstu } } int zamien_ascii(char znak)       //zamiana znaku na ascii { if (znak==' '){return 32;} if (znak=='!'){return 33;} if (znak=='"'){return 34;} if (znak=='#'){return 35;} if (znak=='$'){return 36;} if (znak=='%'){return 37;} if (znak=='&'){return 38;} if (znak=='('){return 40;} if (znak==')'){return 41;} if (znak=='*'){return 42;} if (znak=='+'){return 43;} if (znak==','){return 44;} if (znak=='-'){return 45;} if (znak=='.'){return 46;} if (znak=='/'){return 47;} if (znak=='0'){return 48;} if (znak=='1'){return 49;} if (znak=='2'){return 50;} if (znak=='3'){return 51;} if (znak=='4'){return 52;} if (znak=='5'){return 53;} if (znak=='6'){return 54;} if (znak=='7'){return 55;} if (znak=='8'){return 56;} if (znak=='9'){return 57;} if (znak==':'){return 58;} if (znak==';'){return 59;} if (znak=='<'){return 60;} if (znak=='='){return 61;} if (znak=='>'){return 62;} if (znak=='?'){return 63;} if (znak=='@'){return 64;} if (znak=='A'){return 65;} if (znak=='B'){return 66;} if (znak=='C'){return 67;} if (znak=='D'){return 68;} if (znak=='E'){return 69;} if (znak=='F'){return 70;} if (znak=='G'){return 71;} if (znak=='H'){return 72;} if (znak=='I'){return 73;} if (znak=='J'){return 74;} if (znak=='K'){return 75;} if (znak=='L'){return 76;} if (znak=='M'){return 77;} if (znak=='N'){return 78;} if (znak=='O'){return 79;} if (znak=='P'){return 80;} if (znak=='Q'){return 81;} if (znak=='R'){return 82;} if (znak=='S'){return 83;} if (znak=='T'){return 84;} if (znak=='U'){return 85;} if (znak=='V'){return 86;} if (znak=='W'){return 87;} if (znak=='X'){return 88;} if (znak=='Y'){return 89;} if (znak=='Z'){return 90;} if (znak=='['){return 91;} if (znak==']'){return 93;} if (znak=='^'){return 94;} if (znak=='_'){return 95;} if (znak=='{'){return 123;} if (znak=='|'){return 124;} if (znak=='}'){return 125;} if (znak=='~'){return 126;} return 32; } Całość jest jasno wytłumaczona na filmie: https://www.youtube.com/watch?v=vL3h7gUxsD0  
20160707_182941

Pokojowy schładzacz powietrza.

Witajcie, chciałem się podzielić swoim nowym projektem a jest nim mini klimatyzacja. Słoneczko ostatnimi dniami niemiłosiernie grzeje, a temperatura w moim pokoju (na poddaszu) rośnie w oczach! Aby dało się spokojnie spać postanowiłem wykonać pokojową mini klimatyzację, urządzenie, które chociaż trochę schłodzi powietrze w pokoju. Szperając w internecie znalazłem wiele różnych konstrukcji od prostszych po te bardziej rozbudowane. Ja z braku finansów i czasu postanowiłem wykorzystać rzeczy, które już posiadałem i moim wzorem był przykład "klimy" z wykorzystaniem lodu. W swoim projekcie postanowiłem wykorzystać właśnie lód, którego mam jak lodu xd. Konstrukcja jest prosta złożona z uszczelnionego klejem na gorąco zasilacza komputerowego (samej obudowy), wentylatora (który był w nim zamontowany oryginalnie), oraz aluminiowych przegród w środku, które mają za zadanie oddawać zimno z zimnej wody po rozpuszczeniu się lodu. Nad wszystkim czuwa arduino uno które gromadzi informacje z dwóch czujników temperatury (dallas DS18B20) i wyświetla je na wyświetlaczu lcd 16x2. Jeden termometr mierzy temperaturę w pokoju i jeżeli ta wzrośnie powyżej ustawionej za pomocą potencjometru lub pilota to arduino uruchamia wentylator po przez przekaźnik (chciałem użyć tranzystora, lecz brakło już miejsca na płytce stykowej). Uruchamia się przekaźnik i zamyka obwód wentylatora, który tłoczy ciepłe powietrze do naszej obudowy po brzegi wypełnionej lodem. Drugi termometr mierzy i wyświetla temperaturę schłodzonego powietrza przez naszą klimatyzację. Jeżeli nasz zapas lodu się skończy, (a wysytarcza on na ok. od 40 do 100min. w zależności od temperatury w pokoju), wtedy powietrze, które wychodzi z naszej klimy staje się cieplejsze. Wtedy tą zmianę odczytuje nasz czujnik i jeżeli temperatura powietrza z naszej klimatyzacji jest o 1 stopień niższa niż pokojowa to arduino uruchamia buzer, lub diodę LED które informują nas, iż zapas lodu się skończył. System ten ma swoje wady ale i zalety. Do zalet na pewno można zaliczyć: schładza temperaturę powietrza i wytwarza chłodny, przyjemny powiew. jest mało prądożerny. prosty w obsłudze i budowie. nawet daje radę Jednak nie jest doskonały i oto jego wady: słaba wydajność (przez to, że jest energooszczędny). zwiększa wilgotność powietrza. trzeba uzupełniać zapasy lodu. Mój system nie został jeszcze kompleksowo sprawdzony pod względem wydajności, ponieważ teraz gdy ukończyłem projekt temperatury zewnętrzne były nie za wysokie, lecz podzielę się obserwacjami z weekendu. A więc tak temperatura zewnętrzna w południe osiągnęła 23 stopnie a w pokoju panowały przyjemne 22 stopnie. Nie było potrzeby włączać urządzenia, lecz chciałem przetestować swój ukończony system. Powiem tak w słoneczne dni temperatura w pokoju rośnie do wieczora, słońce nagrzewa wnętrze pokoju, a jak mamy włączone urządzenie no to efektu brak, no może nie tyle brak co jest on mizerny. Zdecydowanie lepiej radzi sobie po zachodzie słońca. Wtedy to zaobserwowałem spadek temperatury w moim pokoju o ok 0,5 stopnia co 25-30min. Przy wymiarach mojego pokoju a jest on dość sporawy (ok. 5 x 4,5 x 2,5m.). W mniejszych pomieszczeniach efektywność wzrośnie. Następnego dnia gdy na zewnątrz panowało 29 stopni a w moim pokoju 25 to sytuacja wyglądała następująco. Lód topniał ciut szybciej a temperatura wyjściowa spadła do 14 stopni, lecz na kilkanaście minut i wraz z roztapiającym się lodem wzrastała co jest gorszą wiadomością. Także tempo schładzania bardziej nagrzanego powietrza wydłużało się. I nasz system automatycznie potrzebuje więcej czasu i lodu aby schłodzić nasz pokój i jeżeli nie kładziesz się spać o 21 to system zdąży trochę schłodzić nasz pokój o parę stopni. Resztę obserwacji będę dodawał w komentarzach.  A oto parę fotek projektu:
serwo-turnigy-tg9e-9g-1-5kg

Serwo sterowane czujnikiem odległości

  Witam, chciałbym zaprezentować prosty projekt, w którym pozycja serwa zależy od wskazań czujnika odległości. Dzięki temu serwo może wskazywać na miejsce, w którym aktualnie znajduje się jakiś przedmiot. Jak to działa? Przy pomocy czujnika odległości odczytujemy wartość jaka dzieli nasz przedmiot od sensora. Znając tę wielkość oraz obszar działania naszego czujnika możemy wyznaczyć kąt o jaki ma się obrócić serwo, by zaczął wskazywać na dany przedmiot. Kąt obliczyłem dzieląc odległość przedmiotu od czujnika przez długość na jakiej ma działać czujnik oraz mnożąc tę wartość razy 180. Co potrzebujemy? płytka Arduino  Uno - http://abc-rc.pl/Arduino-UNO-R3-CH340 płytka stykowa zasilacz 12V - tutaj pozyskany ze starego dekodera czujnik odległości  - http://abc-rc.pl/Czujnik-HC-SR04 serwo stabilizator http://abc-rc.pl/stabilizator-l7805cv-5v-1-5a-to-220 zworki
glowne

Zamek szyfrowany na Arduino

Witam, chciałbym przedstawić projekt prototypu zamka szyfrowanego na platformie Arduino. Czego potrzebujemy: Arduino Serwomechanizm (dla stabilności układu proponuję podłączyć przy pomocy dodatkowego zasilania razem ze stabilizatorem napięcia i kondensatorami filtrującymi) Wyświetlacz, w naszym przypadku jest to 4x20, może być również 2x16, podłączony przez I2C. Płytka stykowa Zworki   Projekt zawiera interfejs wprowadzania hasła przy pomocy klawiatury membranowej, który jest wyświetlany na wyświetlaczu 4x20. Hasło jest ustawiane w kodzie programu. Serwo jest naszym zamkiem, które przy poprawnym wprowadzeniu hasła,  gdy chcemy otworzyć zamek, zmienia swój kąt o 90 stopni. W przypadku, kiedy nasz sejf jest otwarty i wprowadzimy hasło ponownie, położenie serwa zmieni się o 90 stopni w odwrotnym kierunku, czyli wróci do pozycji początkowej. Na wyświetlaczu zostają wyświetlane komunikaty typu "Sejf zamknięty", "Sejf otwarty" lub "Zle haslo". Możemy to wszystko zmieniać i edytować na własne potrzeby w kodzie programu. Projekt można rozbudować na wiele różnych sposobów np. dodając czytnik kart i w ten sposób otwierać nasz zamek, dodać czujniki ruchu/ kontaktrony i stworzyć np. prosty alarm. By ułatwić i zachęcić do rozwoju tego projektu zamieszczam poniżej swój kod programu, który może pomóc przy korzystaniu z wpisywania hasła, wyświetlaniu komunikatów itp.   Schemat podłączenia:     Zrzuty ekranu z kodu programu:                                                          
SAM_0329

Penguin V2 – czyli w jak zrobić sobie samolot pod FPV, prezentacja dla ABC-RC.pl

Witam Chciałbym w tym artykule pokazać, jak zbudować model przeznaczony do lotów FPV. Do tego celu wykorzystam samolot Penguin V2 który dostałem do testów ze sklepu ABC-RC.pl. Model jest dedykowany pod FPV dzięki swojej budowie, ale zacznijmy od początku czyli od rozpakowania paczki.   Penguin przyszedł świetnie zapakowany, zresztą jak każdy produkt który kupiłem w ABC-RC, a jestem tam stałym klientem. Model jest zapakowany w oryginalny karton, każdy element jest osobno zafoliowany. Skrzydła są praktycznie gotowe- wklejone dźwigary oraz zainstalowana przedłużka do serwa. Naszym zadaniem jest zamocowanie orczyków. Wykonanie wzorowe. Z jednej strony to fajnie, że skrzydła są już poklejone, ale w planach miałem montaż nadajnika video i odbiornika RC na skrzydłach, co wiąże się w tym przypadku z ciągnięciem dodatkowych kabli. W takiej sytuacji musiałem zmienić plany. Stateczniki- przy sterze poziomym należy wkleić dźwigar i przykręcić orczyk. Ster pionowy jest praktycznie gotowy, przykręcamy tylko orczyk. Wielkim plusem modelu jest sposób instalacji stateczników. Wystarczy tylko jedna śrubka. Kadłub jako jedyny element całego modelu przychodzi nie sklejony- i dobrze bo można co nieco pozmieniać. Naszym zadaniem jest wklejenie pokładu, wręgi silnika i sklejenie oby dwóch połówek. Ja jednak poprawiłem trochę fabrykę i serwo od steru wysokości zainstalowałem na samym sterze, a w miejscu przewidzianym pod serwo wkleiłem tylko węgiel jako wzmocnienie. Przeglądając cały model stwierdziłem że jest to najsłabszy element i należy go wzmocnić. Na zdjęciu widzimy wklejoną rurkę o przekroju 10mm, przeciętą na połowę. Kabina- bardzo pozytywne wrażenie zrobiła ma mnie kopułka kabiny. Wykonana z twardego tworzywa, wygląda na solidną, powinna być bardzo wytrzymała, a co za tym idzie dobrze chronić kamerę. Niestety trochę waży.  Producent przygotował już sklejkę do montażu pantilta. Instalacja serw- model wyposażony będzie w serwa Corony. Dokładnie będą to serwa CS-929MG, o sile 2Kg i metalowych trybach. Serwa w statecznikach wkleiłem na klej z zestawu. Przy okazji widzimy jak zainstalowane jest serwo przeniesione z kadłuba na ster wysokości. Serwa w skrzydłach zamocowałem na piankę dwustronną dodatkowo wzmocniłem brzegi super glue. Pamiętajmy żeby wcześniej ustawić serwo w pozycje neutralną i zainstalować orczyk. Później będzie problem z wkręceniem śrubki. Silnik- jako napęd będzie wykorzystany silnik EMAX GT2820/05 o mocy 540W. Regulator, sprawdzony w boju HobbyKing 50A wyposażony w SBEC 4A. Instalacja regulatora i silnika- pod mocowanie silnika podłożyłem po jednej podkładce dołączonej do zestawu. Podkładki są podłożone pod górne ramiona krzyżaka, co spowodowało, że silnik ma praktycznie zerowy kont. W praniu wyjdzie czy będzie ok. Regulator idealnie zmieścił się w komorze do niego przeznaczonej. Serce Penguina- autopilot, który będzie dowodził samolotem to APM 2.5. Wersja ta świetnie nadaje się do samolotu, ponieważ wyposażona jest w wewnętrzny kompas. W przypadku samolotu mamy sporo miejsca na rozmieszczenie elementów, więc nie powinno być problemu z zakłóceniami. APM będzie zamocowany na podstawce wyposażonej w wibroizolatory. Podstawkę wykonałem wycinając ją z laminatu 1mm. Wcześniej przed sklejeniem pokładu i kadłuba wywierciłem otwory i zainstalowałem podstawkę. Wygląda to tak.     Autopilot będzie połączony z odbiornikiem przez sygnał PPM. W tym celu zwieramy piny sygnałowe input 2 z 3 w APM-ie, a sygnał PPM podłączamy do wejścia nr. 1. Podłączenie serw- serwa i regulator łączymy pod odpowiednie wyjścia kontrolera. wyjście 1 - lotki,  2 - wysokość,  3 - silnik, 4 - ster kierunku Następnie łączymy APM-a do komputera i przystępujemy do konfiguracji.                                                                                                         Pierwszą czynnością jest wybranie odpowiedniego portu na którym zainstalował się nasz autopilot. Następnie musimy wgrać odpowiednia wersję oprogramowania do kontrolera, w naszym przypadku jest to PLANE. Jak wgrać odpowiedni soft można zobaczyć na innych filmach na ABC-RC. My skupimy się tylko na konfiguracji naszego samolotu. Pierwszą czynnością jaką musimy zrobić to kalibracją drążków. Otwieramy odpowiednia zakładkę i postępujemy zgodnie z instrukcją. Za pomocą ENDPOINT-ów ustawiamy zakres pracy danego kanału, czyli min 1100 a max 1900. Bardzo ważne jest ustawienie środkowej pozycji, służy do tego celu parametr MIDPOINT który musimy odszukać w aparaturze a następnie ustawić wartość 1500. Dla wszystkich kanałów robimy identycznie. Następnie kalibrujemy akcelerometr i poziom samolotu, konfigurator informuje nas krok po kroku co trzeba zrobić. Ostatnią rzeczą którą należy wykonać to przypisanie odpowiednich trybów lotu do naszego przełącznika. APM używa kanału 8 do przełączania trybów. Nie możemy też zapomnieć o kalibracji kompasu. Model obracam o 360 stopni z każdej strony modelu. Zdjęcie poglądowe na przykładnie trikoptera. Instalacja, konfiguracja i uruchomienie sprzętu FPV Montaż czujnika prądu- wykorzystałem czujnik o prądzie maksymalnym 90A, z zintegrowaną przetwornicą do zasilania autopilota i innych podzespołów. Jak widać na drugim zdjęciu oryginalna przetwornica została usunięta i zostały wyprowadzone przewody na zewnętrzny BEC. Oryginalna wtyczka od PowerModułu została również usunięta, a piny sygnałowe od kontroli prądu i napięcia  zostały wyposażone w przewody, które powędrują pod odpowiednie wejścia APM-a. Ale o tym później. Zdecydowałem się na usunięcie oryginalnej przetwornicy, ponieważ była kiepskiej jakości, napięcie pływało w zakresie 4,8-5V a w piku spadało nawet do 4,6V. Jest to niedopuszczalne i mogło doprowadzić do rozbicia modelu. Do pierwszego oblotu w celu zasilania APM-a wykorzystam BEC zainstalowany w regulatorze. W tym celu trzeba zainstalować zworkę w przeznaczonym do tego celu miejscu, czyli JP1. Zworka jest przy pinach output 1,2. W wersji finalnej w celu zasilenia APM-a, osd, gps-a, odbiornika i radiomodemu będzie dodatkowa przetwornica 5V, a serwa będzie zasilać SBEC z regulatora. Wróćmy do pinów kontroli napięcia i prądu. Sygnały której sobie wcześniej wyprowadziłem podpinam pod odpowiednie wejścia APM-a które wcześniej sobie zamapowałem. Czyli tak jak na obrazku, Kontrola prądu wybieramy parametr nr. 2 (pin A2 na APM-ie) i kontrola napięcia parametr nr.1 (pin A1 na APM-ie) Dodatkowo musimy parametr BATT_MONITOR ustawić na 4 tak żeby nasz kontroler wiedział że ma odczytywać prąd i napięcie z czujnika. Ostatnim zadanie jest odpowiednie skalibrowanie czujnika, przydatny w tym celu jest Watt Meter, na przykład taki Kliknij tutaj aby przejść do strony sklepowej produktu Instalacja GPS-a Odbiornik podłączamy do gniazda do tego celu przeznaczonego czyli z napisem GPS, w przypadku APM-a mamy do wyboru dwie wtyczki, złącze starego i nowego typu. Wybieramy właściwe dla naszego odbiornika. Dodatkowo sprawdzamy w programie czy mamy dobrze ustawiony GPS, polecam opcje AUTO czyli parametr nr. 1 GPS dobrze jest zamocować z dala od zakłóceń, czyli silnika i regulatora. Ja zamontuje go na belce ogonowej za pomocą taśmy dwustronnej. OSD Moduł OSD podłączamy pod złącze opisane jako Telem na obudowie APM-a. Najlepiej do tego użyć takiego kabelka Kliknij tutaj aby przejść do strony sklepowej produktu Dlaczego wybrałem kabelek Y-OSD, o tym za chwilę. OSD możemy zasilić z napięcia 5V lub podając 12V od strony wyj/wyj wideo. Ja wybiorę pierwszą opcje czyli 5V.                            Podłączenie polega na doprowadzeniu trzech przewodów, czyli podpinamy z naszego kabelka Y-OSD 5V, GND i linie TX. RX nie jest potrzebne, ponieważ OSD nie wysyła danych tylko odbiera. Sam moduł przykleję na taśmę dwustronną.   Dystrybucja zasilania - BEC-i Za zasilanie urządzeń zainstalowanych w samolocie będą odpowiadać dwie przetwornice. Jedna na 5V, druga na 12V. 5V do zasilania autopilota, odbiornika, osd, gps-a i pewnie jeszcze coś dojdzie :) 12V przeznaczone jest do zasilania kamery i nadajnika wizji, można też wykorzystać do zasilenia OSD ale wtedy musimy pamiętać żeby odłączyć 5V. Zastosowałem dokładnie takie przetwornice Kliknij tutaj aby przejść do strony sklepowej produktu Stosuje te przetwornice od dawna i spisują się idealnie.   Instalacja odbiornika  Odbiornik jaki zastosuje pracować będzie na częstotliwości 435MHz, wyposażony jest w sygnał PPM i RSSI. Do komunikacji z APM-em potrzebować będzie 4 żyłowego przewodu. Ja zastosowałem kabel od starej myszki, lekki i wystarczająco długi. Wykorzystane sygnały to 5V - czerwony przewód, GND- czarny przewód, PPM - biały przewód i RSSI - zielony przewód. Dwóch pierwszych myślę że nie trzeba opisywać. PPM to suma wszystkich sygnałów w jednym przewodzie który podłączamy do wejścia input 1 w kontrolerze. Musimy pamiętać aby założyć zworkę na piny input 2 i input 3 w przeciwnym razie APM nie wykryje sygnału. RSSI podłączamy do wejścia A0. Podobnie jak to było w przypadku czujnika prądu mapujemy wejście w programie. Parametr RSSI_PIN ustawiamy na 0, RSSI_RANGE na 3,3V ponieważ mój odbiornik działa w takim standardzie. Czyli 3,3V to 100% zasięgu a 0V to 0% zasięgu. Telemetria  W temacie o OSD pisałem że zastosowałem kabel Y-OSD. Jedna wtyczka została wykorzystana do osd a druga zostanie wykorzystana do przesyłania telemetrii. Zastosowałem radiomodemy na częstotliwości 900MHz. Moduł Ground podłączamy do usb i ewentualnie instalujemy sterowni. Moduł AIR podłączamy do wolnej wtyczki z portu TELEM. Musimy wykorzystać cztery przewody, ponieważ radiomodem działa w dwie strony, czyli wysyła i odbiera informację. Łączymy 5V, GND, TX i RX. Trzeba pamiętać że sygnały krosujemy, czyli TX z przewodu idzie do RX radio modemu i odwrotnie. Wtyczkę przykleiłem z boku kadłuba ponieważ radiomodem będę używać tylko do konfiguracji, ustalania misji przelotu. Nie zamierza korzystać z niego podczas lotu więc będzie demontowany. Jeśli chodzi o telemetrie to dodatkowo wyprowadziłem sygnał TX z modułu GPS i podłączyłem do wejścia RX w odbiorniku. Sygnał ten wykorzystam do anteny śledzącej. PanTilt Do poruszania kamerą zastosowałem taki pantilt Kliknij tutaj aby przejść do strony sklepowej produktu z serwami hxt900. Do sterowania kamerą wykorzystam 6 i 7 kanał. Czyli jedno z serw podłączamy do kanału outputs 6 a drugie do outputs 7. Musimy jeszcze odpowiednio przygotować do tego APM-a. W zakładce RC6_FUNCTION wybieramy parametr 1 (RCPassThru). Podobnie robimy z kanałem RC7_FUNCTION. Po takim zabiegu autopilot będzie wysyłał na kanał 6 i 7 taką samą wartość jaką dostanie z nadajnika. Sama kamera zasilana będzie z wcześniej przygotowanej przetwornicy na 12V. Nadajnik wideo  Ostatnim elementem jest zainstalowanie nadajnika wizji. Ja użyłem takiego Kliknij tutaj aby przejść do strony sklepowej produktu Zamontowałem go na kopułce kabiny, miejsce w sam raz do niego przygotowane. Nadajnik podobnie jak kamera zasilany będzie z przetwornicy 12V.   PENGUIN uzbrojony w FPV i gotowy do lotu !!!   Pogoda idealna na loty, tylko u mnie problem, noga w  gipsie i na razie niestety nie mam jak jechać oblatać model. Postaram w miarę możliwości wybrać się jakoś na loty i wtedy coś więcej napisze jak się lata FPV Pingwinkiem. Oczywiście dołączę kilka filmów z lotów . No i udało się polatać.     Model Penguin FPV V2 dostępny jest w sklepie ABC-RC.PL - Kliknij tutaj aby przejść do strony sklepowej produktu        
PicsArt_06-13-01.56.25

Arduino platforma mobilna własnej konstrukcji na IR.

Już od najmłodszych lat fascynowały mnie urządzenia elektroniczne a zwłaszcza zabawki zdalnie sterowane RC. Zawsze chciałem zbudować samodzielnie taki pojazd, a teraz marzenie stało się rzeczywistością gdy mam do dyspozycji mikrokontroler ARDUINO UNO. Ale najpierw trzeba było się wiele, wiele nauczyć aby w ogóle móc myśleć o takim projekcie. Po paru tygodniach zabawy z pisaniem wierszy poleceń postanowiłem zrealizować dziecięce marzenie. A więc najpierw zgromadziłem potrzebne elementy jakie będą mi potrzebne do budowy "platformy mobilnej". A więc wygrzebałem zestaw napędowy z jakiegoś autka, zestaw metalowych płytek śrub i nakrętek z których budowało się czołg, trzecie kółko z krzesła brata, nie mówcie mu ciekawe kiedy zauważy jego brak :) Po zgromadzeniu wszystkich potrzebnych części mechanicznych i złożeniu ich przyszła kolej na części elektroniczne. A więc nasz mikrokontroler, następnie znalazłem dwa tranzystory MOSFET polowe z zasilacza komputerowego,  dwie diody Zenera i odbiornik podczerwieni z radia. Po złożeniu projektu przyszedł czas na napisanie programu. To nie była prosta sprawa, ale po paru godzinach mój sketch był już wgrany do mikrokontrolera a więc przyszła pora na jazdę testową. Lecz nie wszystko poszło po dobrej myśli, samochodzik odbierał tylko jedną komendę i nie reagował na inne. I zaczęła się jazda pod górkę co poszło nie tak? Przecież wszystko jest poprawnie podłączone, a więc wina programu. Modyfikowałem go, przerabiałem, pisałem dodatkowe warunki, lecz to nic nie dało. Za każdym razem był ten sam efekt. Właśnie wtedy doszło do mnie że program musi być dobry i sprawdziłem czy w ogóle nasz kontroler i odbiornik podczerwieni odbierają sygnały z pilota. Okazało się, iż po odłączeniu silników wszystko działało poprawnie.  W monitorze szeregowym pojawiały się komendy jakie wysyłałem z pilota. Czytałem wiele for i dowiedziałem się, iż przyczyną wszystkich moich problemów były zakłócenia które produkowały silniki. Jestem nowicjuszem dlatego przestrzegam wszystkich z tego miejsca przed ZAKŁÓCENIAMI!!! Ponieważ potrafią skomplikować nie jeden projekt. Rozwiązaniem mojego problemu było zastosowanie paru kondensatorów. Tutaj przedstawiam i szczegółowo opisuję projekt:
stacjaa

Stacja meteo

STACJA METEO Witam, wraz z kolegą postanowiliśmy stworzyć projekt stacji meteo na platformie arduino. Głównym założeniem projektu była nauka obsługi czujników. Stacja posiada funkcję badania temperatury, wilgotności powietrza, opadów deszczu, natężenia światła oraz wilgotności gleby.     SPOSÓB DZIAŁANIA: Do wyświetlania informacji początkowo planowaliśmy użyć wyświetlacza LCD, jednak doszliśmy do wniosku że nie ma takiej potrzeby więc informacje są wyświetlane w konsoli. W przyszłości zamierzamy jednak rozwinąć nasz projekt, informacje dotyczące pogody będą wysyłane do aplikacji w telefonie komórkowym. Dzięki czujnikowi wilgotności gleby który jest umieszczony w doniczce, jesteśmy informowani o konieczności podlania kwiatka. Tak jak wspomnieliśmy stacja ma również mierzyć temperaturę, wilgotność powietrza, sprawdzać zachmurzenie oraz informować o opadach. Jeśli chodzi o natężenie światła to ustaliliśmy trzy tryby: słonecznie, lekkie zachmurzenie, pochmurnie jest to możliwe dzięki fotorezystorowi. Wilgotność powietrza jest pokazywana w procentach. Co do opadów atmosferycznych, jeśli takowe występują dostajemy o tym informacje. CZEGO POTRZEBUJEMY: Do realizacji naszego układu użyliśmy : - płytka Arduino  Uno - http://abc-rc.pl/Arduino-UNO-R3-CH340, - zworki, - rezystory, - czujnik temperatury i wilgotności - http://abc-rc.pl/DHT11, - czujnik wilgotności gleby - http://abc-rc.pl/Arduino-FC-28, - czujnik deszczu - http://abc-rc.pl/Detektor-wody-FC-37, - fotorezystor, - płytka stykowa   OPROGRAMOWANIE: W razie potrzeby możemy udostępnić nasz kod, jednakże jest on stosunkowo prosty do napisania.  
samochodzik

Samochodzik sterowany joystickiem od playstation

Witam, chciałbym opisać swój projekt sterowanego samochodu. To prosta zabawka, która pozwoliła mi się cofnąć do dzieciństwa. Różnica polegała na tym, że sam wybrałem funkcje jakie ma mój samochód. Co prawda może nie wygląda on lepiej od większości sterowanych samochodów, ale proces tworzenia był niezwykle pasjonujący. Do stworzenia samochodu bezprzewodowo sterowanego użyłem: arduino uno Pad  razem z odbiornikiem serwo dioda RGB 2 silniki + 2 koła diody czerwone diody pomarańczowe diody białe buzer 2 koła sztywne balsa sterownik silników l298   Do sterowania samochodzikiem posłużyłem się joystickiem od playstation. Jedna gałka odpowiada sterowania prędkością silników, druga służy do skręcania. Dzięki takiemu rozwiązaniu samochód potrafi skręcać w prawo lub w lewo z maksymalną prędkością. Dodatkowo przy skręcaniu świeci się dioda, która przypomina kierunkowskaz w prawdziwym samochodzie. również kiedy samochód stoi świecą się światła stopu, kiedy cofa - światło wsteczne. Przy wciśnięciu odpowiedniego guzika w padzie, zapalają się światła przednie. Jako klakson użyłem buzer. Na spodzie samochodu znajduje się dioda RGB która w tym przypadku może przyjąć jeden z 9 kolorów i efektownie podświetla podłoże. Do skręcania użyłem serwo, które dostosowuje się do położenia gałki joysticka. Do serwa przymocowałem oś do której przykręcone są dwa silniki. Dzięki takiemu rozwiązaniu samochód nie musi być sterowany przez kierunek obrotów silników.   Karoseria powstała z wycięcia balsy. Jest ona lekka, łatwa do cięcia i klejenia. Można w prosty sposób wywiercić otwory na diody, wyciąć odpowiednie dziury na wyjścia z arduino, co pozwoliło mi na wprowadzanie poprawek w kodzie w dowolnym momencie. Balsę okleiłem samoprzylepnym materiałem, aby bardziej przypominał samochód - konkretniej pick up. Zarówno arduino jak i sterownik przykręciłem do podwozia samochodu, aby w czasie jazdy nic się nie przemieszczało i przypadkowo nie rozłączyło.   Podsumowując, samochodzik sterowany bezprzewodowo to prosty projekt, który może być waszym pierwszym projektem stworzonym na arduino. Pozwala nauczyć się sterować silnikami, serwem, diodami czyli wszystkim co jest niezbędne na początku zabawy z mikrokontrolerami tego typu. Polecam każdemu stworzyć coś takiego :)  
głowne

Lampka dla ukochanej osoby sterowana pilotem na Arduino.

Witam, chciałbym tutaj przedstawić projekt lampki sterowanej pilotem na platformie Arduino.   Jak działa: Lampka jest sterowana pilotem, którym możemy regulować jasnością (przyciski +/-) i zmieniać kolory świecenia diod RGB (przyciski z cyframi). Jest 8 trybów, czerwony, niebieski, zielony i mieszanina czerwony/niebieski, zielony/czerwony itp. Buzzer jest opcjonalnie dodany by sygnalizować sytuację, w której regulujemy jasnością i mamy już maksymalny zakres, ale klikamy dalej przycisk "+".  Lampka posiada 34 poziomy jasności mniej lub bardziej widzialne dla oka. Czego potrzebujemy: Arduino -  http://abc-rc.pl/Arduino-UNO-R3-CH340 Pilot z odbiornikiem IR  - http://abc-rc.pl/VS18388-MP3 Diody RGB - w moim przypadku 6 sztuk. Płytka stykowa Zasilacz - 12V, w tym przypadku wzięty ze starego routera sieciowego. Rezystory - obliczone w zależności od tego jaki kolor zapalamy, ile diod chcemy podłączyć i jak to zrobimy. Buzzer (opcjonalnie) -  http://abc-rc.pl/YMD-12065G-5V Kable połączeniowe - głównie męsko - żeńskie. Pudełko - możemy wybrać dowolne, w zależności od przeznaczenia i od tego co mamy. W moim przypadku było to opakowanie po czekoladkach :) Oprogramowanie: Co do samego kodu to polecam poszukać w Internecie przykładów na Arduino związanych z obsługą pilota, diody RGB i sprawa staje się stosunkowo prosta. Jakby ktoś potrzebował pomocy to udostępnię kod. Jakby ktoś chciał się pobawić to można dodać płynne przechodzenie między kolorami, inne tryby itp. Podsumowanie: Bardzo polecam zrobienie takiej lampki, wiele nie kosztuje. W moim przypadku zasięg pilota to około 8m. Wieczorem lampka daje super klimat, ukochanej bardzo się podoba :) Oczywiście obudowa w kształcie serca to tylko przykład i każdy może zrobić coś dla siebie w zależności od potrzeb.
11ecf95b503b273fmed

FOX z Multiplexa – pierwszy model RC

FOX motoszybowiec RC Chciałem tutaj przedstawić szczegółową relacje z budowy oraz oblotu modelu FOX z przeróbką na model z napędem i sterowaniem RC.   Zacznę od narzędzi które będą mi potrzebne w najbliższym czasie. Chyba najważniejszą rzeczą tutaj jest bardzo ostry nóż (odpada kuchenny albo scyzoryk), warto zainwestować w dobre nożyki (polecam firmę OLFA). Najlepszym narzędziem jest jednak skalpel chirurgiczny. Pracę zaczynam od wycięcia lotek w sterze kierunku i skrzydłach. Ster wysokości obcinam na całej długości na szerokość (przy kadłubie) 16mm Lotki w skrzydłach mają szerokość 18mm i długość 130mm Następnie w wyciętych lotkach obcinam brzeg łączący się ze statecznikiem na całej długości tak aby uzyskać ostrą równą krawędź. Chodzi o to że na tej krawędzi będzie wykonany zawias lotki. Ostra krawędź ma zostać od góry skrzydła lub statecznika. Lotki do steru i skrzydła ja przykleiłem na klei UHU POR. Posmarowałem przylegające rogi lotki i steru cienką warstwą kleju, odczekałem 5min i razem złączyłem. Jest to metoda dość łatwa i wbrew pozorom mocna, i to za mocna. Na początek nie polecam tej metody gdyż przy większej ilości kleju lotka pracuje bardzo ciężko. Zalecam wykonać to na taśmie klejącej tak jak zrobiłem to w modelu pierwszym (FOX szybowiec). Dobrze jest przed przyklejeniem taśmy wcześniej posmarować to miejsce klejem UHU POR i zaczekać 30min. Aby lotka steru mogła swobodnie pracować w kadłubie należy dokonać wycięcia kawałka statecznika pionowego. Kolejną ważną rzeczą którą trzeba zrobić jest przygotowanie miejsca w kadłubie modelu. Jako że ma to być model z napędem z przodu dociąży mi silnik i muszę dać większy akumulator, a to spowoduję problemy ze zbyt ciężkim dziobem (nie będzie można modelu dobrze wyważyć) Dlatego inaczej jak poprzednio wyciąłem kadłub. Zrobiłem tak że zciąłem na grubości około 10mm dół kadłuba na długości od dziobu do około 20mm za skrzydłem. Jest wtedy dostęp do całej długości modelu i można bardzo ładnie wyciąć miejsce na sprzęt. Po zrobieniu wycięcia wkleiłem na nowo przednią część spodu kadłuba. W tej części mam dostęp od góry poprzez kabinkę. Po wstępnym sprawdzeniu okazało się że prawdopodobnie akumulator musi być wmontowany pod skrzydłem w okolicy środka ciężkości., dlatego w tej części zrobię demontowany spód. Natomiast prawdopodobnie kabinka zostanie przyklejona na stałe. SERWO steru wysokości no-name 4,5g Zdecydowałem się na danie serwa z tyłu modelu (aby dociążyć tył) Należy więc wyciąć miejsce na serwo ( po uprzednim dokładnym przypasowanie, aby zbyt nie osłabić kadłuba). Serwo jest tylko wciśnięte nie ma potrzeby go inaczej mocować. Przewód od serwa wpuszczamy w nacięcie zrobione w kadłubie (nożem na głębokość 4mm) Robimy Popychacze do lotek Teraz pokaże jak zrobić łatwe popychacze do lotek Potrzebny będzie cienki drut stalowy (najlepiej 0.8mm) ja użyłem na ster wysokości 0.6mm na lotki 0.8mm, oraz dość twarda izolacja z kabla o otworze wewn. około 1mm. Wszystko pokazane na zdjęciach. Tak wykonany popychacz można stosować w małych modelach i jest łatwy do zakładania i zdejmowania. Po zamontowaniu w koszulkę należy dać krople cyjanoakrylu (uważać aby nie zalać serwa lub dźwigni lotek). Tutaj po zamocowaniu jednej strony popychacza w serwie i równym ustawieniu serwa i lotki na zero znaczymy miejsce zagięcia drutu. Następnie zakładamy na drut odcinek 20mm koszulki z kabla i zaginamy drugą stronę popychacza, i obcinamy niepotrzebny kawałek drutu. Następnie w koszulkę wkładamy drugi kawałek drutu (około 50mm), który stanowi dla popychacza zawleczkę po włożeniu do dźwigni lotki. A tak wygląda gotowe w modelu. Montujemy SILNIK i regulator - outrunner F2418 2350KV waga 17g http://abc-rc.pl/p/9/716/silnik_-_f2418_2350kv_-_outrunner-silniki_elektryczne.html REGULATOR  10A - np. http://abc-rc.pl/p/6/599/esc_10a_-_regulator-regulatory_esc-wyposażenie_rc.html ja wykorzystałem regulator  MAG 8 ESC 12A Tower Pro Jako że nie posiada on demontowanego uchwytu, musiałem go inaczej przykręcić. Wykorzystałem dość długie śrubki (jakaś pozostałość po zabawce) M1,5 dł. 30m. Obciąłem główki i po zrobieniu otworków w dziobie modelu wkleiłem je na cyjanopanie. Należy tylko przy tym uważać aby klej nie zakleił całego gwintu, najlepiej posmarować wystający gwint smarem. Teraz wystarczy wkręcić nakrętki które ustalają pozycje i ułożenie silnika i przykręcić silnik (to była najtrudniejsza rzecz do wykonania) Teraz taką samą metodą jak do steru wysokości robię popychacze do lotek w skrzydle Wcześniej ustaliłem miejsce na serwo lotek. Dałem je przed skrzydłem aby ruch popychaczy był maksymalnie prostopadły do zawiasu lotek. Przepusty w kadłubie na popychacze można zrobić rozgrzanym zapalniczką kawałkiem drutu, należy tylko uważać i przetestować na jakimś kawałku jak to wytapia (aby nie zrobić zbyt dużej dziury) Przy tych popychaczach jest wykonane dodatkowe wygięcie w kształcie „V”, umożliwia ono regulacje długości popychacza poprzez doginanie i odginanie tego wygięcia. Przy lotkach skrzydła musiałem zastosować taką możliwość bo są one wykonane na jednym serwie i nie ma możliwości ustawienia zera (przy pomocy nadajnika) dla obu lotek osobno. Na tym etapie model tak wygląda Tu mały filmik poglądowy o działaniu lotek w modeliku FOXa   Z regulatora zdjąłem osłonkę i zdecydowałem się na przylutowanie przewodów silnika bezpośrednio do regulatora (mniej obytym z lutownicą odradzam takie podłączanie). Zrobiłem tak dlatego aby zmniejszyć wagę (chciałem przód mieć jak najlżejszy) oraz ładniej prowadzone są wtedy kable od silnika. Przewody od regulatora do akumulatora też zostały wymienione na gotowe ze złączem. Śmigło i mocowanie śmigła ŚMIGŁO – GWS 5x3  - http://abc-rc.pl/p/10/598/śmigło_ep-5030_(5x3)-śmigła.html Mocowanie śmigła (silnik miał ośkę z gwintem) Teraz mając zamontowane większość podzespołów na swoim miejscu (brak tylko odbiornika, ale ono pójdzie pod S.C.) mogę ustalić dokładne miejsce na akumulator. Przez przesuwanie akumulatora przód tył znalazłem miejsce w którym środek ciężkości znajdował się 51mm od natarcia skrzydła. AKUMULATOR można np taki - http://abc-rc.pl/p/44/698/74v_860mah_20c_(40c)_-_ge_power_-_li-pol-akumulatory_i_pakiety-zasilanie_.html W tym miejscu powiększyłem wycięcie aby zmieścił się cały akumulator w kadłubie. Na długości całego akumulatora zdecydowałem się na trwałe przyklejenie spodu. Wzmocni to tę część kadłuba, osłabioną przez wycięcie na akumulator. Po przedłużeniu przewodu do serwa wysokości i wprowadzeniu do wnętrza kadłuba, umieściłem w kadłubie pod skrzydłem odbiornik i podłączyłem wszystko. Sprawdziłem całość urządzeń czy działa właściwie, czy dźwignie serw mają ustawienia zerowe we właściwym miejscu, oraz czy właściwie działa odbiornik i regulator z silnikiem. Po pozytywnym teście nastąpił montaż końcowy: - przyklejenie skrzydeł i statecznika do kadłuba ( przejechałem na składaniu kadłuba ze skrzydłem i sterem klejem UHU POR) - unieruchomienie serwa lotek poprzez zaklejenie klejem UHU POR (nie stosować rzadkiego CA) - przykręcenie dźwigni do serw - wyciąłem kanały na wentylacje przedniej komory szybowca (w kabince) - dokleiłem z EPP dodatkowe przegrody wewnątrz kadłuba (dla wzmocnienia) - wykonałem zawias z taśmy klejącej do otwieranej pokrywy kadłuba, a zmykanie z taśmy izolacyjnej - dopasowałem mały kołpaczek gumowy z GWS na śmigło A tak wygląda to w całości Masa gotowego do lotu modelu wynosi 133g. Testując silnik to ciąg jest wystarczający do lotu pionowego na 3/4gazu. Wg producenta ciąg silnika na śmigle 5x3 to 165g przy 5A. Teraz zostało naładować pakiet i model można testować.   Uwagi odnośnie własności lotnych modelu. - moc silnika wystarczająca do lotu pionowego - spokojny lot na 1/3 do ½ gazu (jak ES) - model jest samostateczny jak ES - nie lubi dużych wychyleń steru wysokości (dlatego konieczna korekta wychyleń steru wysokości) – traci siłę nośną i przepada na skrzydło. Po ograniczeniu wychyleń nie udało mi się go wprowadzić w taki stan - bardzo dobrze lata jako szybowiec - szeroki zakres prędkości (potrafi latać szybko – mocny silnik oraz szybować) - pokracznie wychodzą beczki (to nie jest akrobat – brak symetrii i konstrukcja) - pętle są bardzo ładne i czyste Reasumując bardzo fajny modelik do polatania, mały, tani (przedstawię wyposażenie i koszt budowy), bardzo łatwy w sterowaniu (jak Easy Star), i bardzo odporny (mój miał kilka twardych spotkań z ziemią- zero uszkodzeń) oraz czas lotu 20-30min. Jedyną wadą modelu jest to że jest mały, nie da się latać wysoko i daleko (tylko po co) Jedyne co zauważyłem to lecąc spokojnie model myszkuje na boki, tak jakby drgał mi ster kierunku (którego nie mam sterowanego). Ale przypuszczam że może to być wina dość długiej anteny wystającej z tyłu modelu. Tutaj zdjęcia i filmik z lotu   UWAGI do modelu W modelach bez wzniosu (lub końcówek -uszu) aby wykonać zakręt na lotkach wystarczy lotki wychylić na chwilę, model się przechyla i można wykonać zakręt sterem wysokości. A w tym modelu tak nie jest, lotki muszą być wychylone cały czas, z tym że aby model pochylić trzeba wychylić mocnej, aby potem trochę zmniejszyć wychylenie. Nie jest to takie proste dla kogoś kto zaczyna latanie. Ja się zorientowałem o tym dopiero wczoraj gdy w zakręcie musiałem oderwać prawą rękę od aparatury (model 1). Uważam że dla kogoś kto zacząłby przygodę z modelarstwem na tym modelu należy zrezygnować z lotek na rzecz steru kierunku. Model będzie wtedy bardzo podobny do ES (no może poza prędkością lądowania) Sterowanie sterem kierunku wyjdzie na dobre temu modelikowi. Pełny artykuł - http://pfmrc.eu/viewtopic.php?t=7200
BLADE_micro_104

Micro Blade acrobat 3D z EPP

Chciałbym tutaj przedstawić modelik którym dość dużo latam przez ostatnie dni.  I tak oto latam takim oto maleństwem a to strona producenta http://www.freeair.cz/Microblade.html  Parametry modelu:  Rozpiętość – 600mm  Długość - 590mm  Waga do lotu – 128g  Zasilanie – lipol 2S 650mAh  Regulator – ESC 12A  Silnik - MYSTERY 2730 1000kv 10A  Śmigło – GWS 7/6 (nadwymiarowe)  Jak już wcześniej wspomniałem jest to model do agresywnego latania 3D najlepiej w hali lub przy bezwietrznej pogodzie. Lata się nim świetnie, można zrobić wszystko co tylko się umie i nie tylko. Sam nawet nie wiedziałem że potrafię takie harce wyczyniać. Silnik w nim zamontowany ma ciąg ponad 300g i do wagi tego modelu jest to szatan, zapas mocy bardzo duży. Jako że model ma bardzo duże pow. sterowe to można pętlę wykonać w miejscu. Zawis żaden problem, wyważenie do tyłu i model sam chcę latać jak śmigłowiec, tak samo harier.  Model idealnie do polatania koło domu lub na boisku.  Jedynym problemem modelu to zbyt wiotki kadłub, przy ostrych reakcjach sterem i lotkami ogon nie nadąża za skrzydłami. Ale już robię wzmocnienia z prętów węglowych.  A oto kilka zdjęć z budowy modelu.    Wcześniej napisałem "jest to model do agresywnego latania 3D najlepiej w hali lub przy bezwietrznej pogodzie" Błąd on świetnie lata przy wietrze, dziś wylatałem dwa pakiety przy dość silnym wietrze, jak na ten model. Dzięki nad wymiarowemu silnikowi mogłem sobie bez problemu harcować przy takiej pogodzie. Naprawdę przednia zabawa. Polecam mały modelik i dość fajny wiaterek. Więcej zdjęć http://picasaweb.google.p...icroBladeEPP02#
micro model fw-190

Micro Model FW-190 – budowa

Model FW-190 z firmy COX Model maleństwo, 49cm rozpietości, wykonany z delikatnej pianki (tłoczonego depronu). Oto co otrzymujemy w zestawie W zestawie mamy:  - skrzydła, połówki kadłuba, stateczniki z lotkami  - oklejona kabinka, osłona silnika  - silnik szczotkowy 180, płytka z wyłącznikiem zasilania i gniazdem do ładowarki, przewód do ładowarki  - dwa zapasowe śmigła i mała drobnica.  Całość bez silnika i drugiego śmigła waży 57g  Chciałbym zmieścić się w wadze do lotu około 110-120g. Oto jak zamontowałem serwo do lotek skrzydła (wycięty otwór w skrzydle na serwo, micro dźwignie wklejone w lotki, lotki odcięte i od skrzydła i przyklejone na taśmie samoprzylepnej) Zrezygnowałem ze sterowania sterem kierunku. Ster wysokości zrobiony tak samo jak lotki na skrzydłach. Połówki sterów połączone cienkim drutem. Pokleiłem też stateczniki, oraz okleiłem je dla wzmocnienia taśmą klejącą, na zdjęciu to nie zbyt ładnie wygląda ale to dlatego że lampa błyskowa daje odbicia. Zrobiłem też pierwsze spasowanie całości, to u boku swojego większego kuzyna. No i jest. Model został zmontowany, wpakowałem to co miałem. Oto i on. Wyszedł przycięzki 142g, w środku silnik z zestawu 180 szczotka, regler z rozbiórki, dwa micro serwa 5g i aku WOW 500mAh 20C. Dzisiaj nastąpił ten dzień, pierwszy lot modelu FW-190 Micro. Byłem prawie pewny że to będzie krótki (5s) lot. Model lata jak na swoją wagę bardzo fajnie, po wytrymowaniu, prowadzi się jak za rączkę, może jest trochę szybki, ale reakcje na lotki ma bardzo pewne i lata stabilnie. Co ciekawe bardzo dobrze szybuje, wyłączyłem mu silnik licząc że doleci do mnie a ten przeleciał na koniec pola. Prezentacja modeli po lotach. (alianci w trudnej sytuacji)   A tak modelik lata