Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'Bluetooth'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie
    • Kosz

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Znaleziono 13 wyników

  1. Witam, zwracam się o pomoc w sprawie modułu bluetooth hc 05 (link poniżej) https://botland.com.pl/pl/moduly-bluetooth/2570-modul-bluetooth-hc-05-5903351241311.html?gclid=Cj0KCQiAn8nuBRCzARIsAJcdIfPQ8LjBcnih59HeXEDxQcFq0KBOiIap5HYn692tBzV40nsWWlcnsO0aAiISEALw_wcB Wykorzystuję go do sterowania samochodzikiem razem z arduino Uno i sterownikiem silników L239D (dodaje zdjęcie). Mam z nim taki problem, że po kilkunastu sekundach samoczynnie rozłącza się z telefonem. Sprawdziłem już czy wszystkie piny są dobrze podłączone czy nie ma błędów w lutowaniu, ale na moje oko wszystko wydaje się w porządku. Do wejścia TX na module zastosowałem dzielnik napięcia a napięcie zasilania wynosi 5V. Myślę że wszystko robię poprawnie, no chyba że jest cos o czym nie wiem
  2. Po stworzeniu głośnika Bluetooth opartego o wzmacniacz 3W przyszła pora na coś mocniejszego. Celem, jaki chciałem osiągnąć było zwiększenie mocy głośnika i zachowanie jego mobilności. Udało się to osiągnąć ponad 10-krotnie. Głośnik Bodzio (bo tak został nazwany :P) ma moc 35W. Nazwa nie jest przypadkowa, ma nawiązywać do jego drewnianej obudowy, więc przyjął przydomek po sklepie z meblami. Najciekawsze jest w nim to, że został zrobiony z kolumny znalezionej na ulicy Przygotowanie Schemat budowy głośnika Bluetooth nie był mi obcy, gdyż podobny projekt już kiedyś robiłem. Pierwszą rzeczą, jaką trzeba było zrobić to dobór wzmacniacza. Kolumna ma jeden głośnik wysokotonowy i jeden niskotonowy więc wystarczy tutaj wzmacniacz mono. Znalazłem odpowiedni na allegro o mocy 35W. Niestety w wyrzuconej kolumnie nie działał głośnik niskotonowy, więc trzeba było również dokupić odpowiedni, pamiętając, aby jego moc była większa niż wzmacniacza. Wszystkie elementy są wypisane poniżej: Lista elementów: LM2940 Buck LDO (do zasilania Bluetooth) [6zł] Step Up LM2587 (do ładowania akumulatorów) [5zł] BMS 3S Li-ion Akumulatorki 18650 6 szt. [24zł] Wzmacniacz mono 35W audio TDA8932BT klasa D Złącze jack 3,5mm [5zł] Bluetooth USB audio stereo [13zł] Głośnik niskotonowy (basowy) 4Ω Głośnik wysokotonowy 4Ω Kondensatory: 22uF; 2,2uF Rezystory: 1kΩ ; 10kΩ LED czerwona i zielona Złącze uUSB Potencjometr 50kΩ logarytmiczny [5zł] Przełączniki 2 szt. Jak zwykle najpierw zabrałem się za rozrysowanie schematu oraz przemyślenie pozycji takich elementów jak potencjometr do regulacji głośności, przełączniki, wejście jack, itp. Praca Za układ zasilania odpowiada 6 sztuk akumulatorków 18650 z odzysku. Są połączone w pakiet 3S po dwie sztuki, dla zwiększenia napięcia oraz pojemności. Pojemność pojedynczego ogniwa wynosi ok. 2000mAh co daje w sumie akumulator o napięciu 12V i pojemności 4000mAh. Gdybyśmy chcieli taki kupić nowe akumulatorki do takiego pakietu to koszt wyniósłby ok. 45 zł. Proces ładowania i rozładowywania kontroluje BMS. Ważnym założeniem jest ładowanie głośnika z zasilacza 5V przez µUSB, gdyż na imprezie czy, gdziekolwiek poza domem ciężko o zasilanie 12V, a noszenie zasilacza zawsze przy sobie jest uciążliwe i zmniejsza mobilność głośnika, dlatego zdecydowałem się na ładowarkę, jaką mają wszyscy. Można było co prawda umieścić zasilacz sieciowy 12V wewnątrz obudowy, ale trzeba by było kombinować, gdzie ukryć przewód do zasilania, więc ładowanie go przez µUSB było najwygodniejszym sposobem. Napięcie z 5V jest podnoszone dość wydajnym przekształtnikiem Boost zwiększającym napięcie do 12,6V po to, aby pojedyncze ogniwo było naładowane do 4,2V oraz wydajność ładowania był na tyle duża, aby można było ładować i słuchać muzyki jednocześnie. Do linii 5V idącej z zasilacza dodana została LED koloru czerwonego, informująca o tym, że głośnik jest ładowany. Centralnym punktem schematu jest wzmacniacz, do którego schodzi się większość elementów. Sygnał dochodzi przez potencjometr do regulacji głośności oraz przełącznik SW2 do zmiany pochodzenia sygnału (BT lub jack). Wszystkie masy oczywiście są wspólne i połączone. Za zasilanie modułu Bluetooth odpowiada przetwornica Step Down LM2940, która redukuje napięcie do 5V. Nie jest ona w żaden sposób połączona z linią zasilania. Napięcie ładowania, a zasilania elementów 5V pomimo tej samej wartości odpowiada za zupełnie inne rzeczy i połączenie ich razem spowodowałoby niepotrzebne zamieszanie w układzie. Moduł Bluetooth został podłączony przez SW3 do zasilania i włącza się dopiero w momencie zmiany pochodzenia sygnału. Na wyjściu wzmacniacza znajduję się głośnik niskotonowy odpowiadający za bass oraz wysokotonowy z filtrem górnoprzepustowym opartym o kondensator 2,2 µF. Wybrałem ten rodzaj filtru, aby uniknąć stosowania rezystora mocy, przez który przechodziłby sygnał do głośnika niskotonowego w przypadku filtra dolnoprzepustowego. W prawej dolnej części schematu znajduję się jeszcze jeden układ. Łatwo można się domyślić co to jest, ale na razie nie będę zdradzał więcej szczegółów. Zostanie on omówiony, gdy całość (część, za którą odpowiedzialny jest ten układ) zostanie skończona. Lutowanie i składanie obudowy Gdy większość elementów została skompletowana, przyszedł czas w połączenie wszystkiego w całość i sprawdzenie, czy działa . Okazało się, że głośnik gra perfekcyjnie i ma naprawdę dużą moc. Kiedy całość była jeszcze prototypem można było się pobawić np. filtrem górnoprzepustowym, a dokładniej doborem kondensatora. Metodą prób doszedłem do wniosku, że wartość 2,2 µF jest najlepsza. Ze wzoru na częstotliwość graniczną filtru: f=1/2ΠRC wychodzi około 18kHz. Jednak w praktyce (nie wiem dlaczego) ta wartość jest mniejsza. Układ zasilania Układ ten został dokładnie opisany w przypadku omawiania schematu, wiec tutaj zamieszczę tylko kilka zdjęć. Co do samego łączenia elementów to zlutowane jest tak jak widać na obrazku na dole wpisu, wszystkie ogniwa złączone są taśmą izolacyjna, a całość przyklejone na klej na gorąco w rogu obudowy. Lutowanie płyty głównej Schemat PCB jeśli można go tak nazwać został zrobiony symbolicznie, gdyż montaż elementów jest robiony na oko na dużej płytce uniwersalnej. Najważniejsze w tym schemacie są linie łączenia modułów ze sobą. We wszystkich układach dolutowane uprzednio przewody zostały zastąpione goldpinami, dzięki którym można wlutować moduł w płytkę. Wszystkie złącza zostały podpisane. Został jeszcze problem, jak zamontować płytkę w środku obudowy. Po kilku próbach udało wykombinować mi się coś takiego. Śruba przyklejona do tulei dystansowej, które z kolei zostały przyklejone na klej dwuskładnikowy (klej na gorąco nie trzymał mocno) do obudowy głośnika. Taki montaż ma swój plus, gdyż bardzo łatwo jest wyjąć płytkę z głośnika w celu naprawy lub modernizacji. Montaż elementów w obudowie Za tą część powinniśmy się zabrać, zanim cokolwiek zamontujemy lub przykleimy w obudowie, gdyż będzie tutaj trochę wiercenia/cięcia co może doprowadzić do przypadkowego uszkodzenia zamontowanych elementów . Zabieramy się za wywiercenie otworów pod potencjometr, LED'y i przełączniki. Niestety ciężko mi powiedzieć jakim wiertłem wierciłem jaką dziurę, bo nigdzie tego nie zapisałem, więc trzeba dobrać odpowiednią samemu. To samo robimy z otworami na złącze jack i gniazdo ładowania. Kiedy już mamy wszystkie otwory, oczyszczamy głośnik z zabrudzeń, gdyż będziemy teraz wszystko przyklejać/przykręcać. Zamiast gniazda µUSB montowanego do obudowy użyłem takiego przewodu, ponieważ to było jedyne gniazdo, jakie miałem, które dało się wmontować. Cena gniazd montowanych na obudowę jest dość droga, więc nie kupowałem go. Zostało jeszcze przymocować głośniki do przedniego panelu. Głośnik niskotonowy został kupiony specjalnie pod otwór po poprzedniku, aby nie bawić się w powiększanie dziury. Natomiast głośnik wysokotonowy został zabrany z jakiejś starej kolumny, która kiedyś dostałem do rozbiórki. W przypadku pierwszego nie było żadnych problemów z montażem. Głośnik pasował idealnie w otwór i miał miejsce na przekręcenie go wkrętami. Z mniejszym głośniczkiem było więcej zabawy. Nie chciałem go wklejać, ponieważ w przyszłości będzie on zastąpiony innym, lepszym zamiennikiem, więc musiał być on również wkręcany. Trzeba było wywiercić w metalowej ramce otaczającej go, dziury na wkręty. Całe szczęście w otwór pod nim mieścił się na styk, więc nie trzeba było nic przerabiać w obudowie Składanie obudowy w całość Zadanie niby proste, a okazało się najtrudniejsze w całym projekcie. Wcześniej głośnik był klejony, ja natomiast nie chciałem tego robić, gdyż, potrzebuje mieć dostęp do wnętrzności, aby móc go rozwijać i modyfikować. Gdyby obudowa była projektowana przez mnie od zera to pewnie nie byłoby problemu, ponieważ zostałoby to przemyślane jeszcze w fazie planowania. Pierwszym pomysłem było wmontowanie zawiasu (takiego jak w drzwiczkach od szafki) oraz zamknięcia na kluczyk. Chciałem, aby wszystko było ukryte wewnątrz i nie psuło wyglądu głośnika, stąd decyzja o takich rozwiązaniach. Niestety po kupieniu, okazało się, że montaż ich będzie nie lada wyzwaniem. Znalezienie miejsca na zawias wewnątrz obudowy okazało się praktycznie niemożliwe. Podobnie z zamknięciem na kluczyk, trzeba by było dużo pozmieniać, a na końcu i tak by wyszło paskudnie. Tak więc ten pomysł został odrzucony. Stwierdziłem, że nie ma co kombinować i przykręcę po prostu go na śruby. Mimo prostoty nawet to rozwiązanie przysporzyło problemów. Założenie o niewidoczności mocowań wymagało ukrycia śrub pod osłonką. Nie chce się tutaj już rozpisywać, gdyż liczba podejść była dość duża, więc omówię tylko końcowe rozwiązanie. Na dole panel z głośnikami trzyma się na dwóch śrubach M5 specjalnie uciętych na długość, aby pasowały do osłonki, która od dołu trzyma się właśnie na nich. Natomiast od góry jest jedna śruba na środku, która wkręca się do nagwintowanego uprzednio kątownika. Nie dało się rozwiązać tego tak jak u dołu, ponieważ po bokach są diody i przyciski, a najkrótszy kątownik, jaki znalazłem nachodził na nie. Dodatkowo trzeba było przyciąć górę metalowej otoczki głośnika wysokotonowego, gdyż przeszkadzała ona we wkręceniu śruby. Uchwyt - projekt 3D Specjalnie na potrzebę tego głośnika zaprojektowałem uchwyt do noszenia do druku 3D. Jest on dostępny na thingiverse. Dwa wymogi, jakie miała spełnić to: nie psuć designu głośnika, czyli po prostu być w miarę ładna, oraz być składana. Z tymi wytycznymi i zarysem w wyobraźni zabrałem się za projektowanie. O ile sama rączka poszła dość gładko, to głowiłem się trochę jak ukryć mocowania, aby nie rzucały się w oczy. Wymyśliłem chyba dość ciekawą rzecz, a mianowicie przykręcamy dwa małe elementy, w które później wkładamy bolce od rączki (na których się obraca) i na samą górę jeszcze zaślepki, które maskują to wszystko. Myślę, że całość nie wygląda najgorzej, jest elegancka i zajmuje mało miejsca. Design Na koniec zostawiłem zaprojektowane naklejki na głośnik opisujące poszczególne funkcje. Naklejkę zaprojektowałem na wymiar dzięki uprzednio zrobionemu zdjęciu centralnie z góry z linijką w tle. Pozwoliło to odwzorować dokładne wymiary w programie Inkspace. Plik przygotowany do druku znajduje się w repozytorium (najlepiej na jakimś śliskim papierze, wtedy jakość jest znacznie lepsza). Po wydrukowaniu całość trzeba jeszcze powycinać. Naklejkę widoczną u góry głośnika najpierw obrysowałem cyrklem, a potem wyciąłem według linii ołówka. Całość została przyklejona na taśmę dwustronną i trzyma się bardzo dobrze. Podsumowanie: Jestem bardzo zadowolony z części elektronicznej tego głośnika. Została zbudowana profesjonalnie i nie było z nią żadnych problemów. Całość znajduje się na płytce, która jest zdejmowalna co ułatwia modernizacje. Nic nie jest łączone w pająka, a wszystkie przewody idą do płyty głównej i są podpisane, także podłączenie wszystkiego to zaledwie chwila. Jakość dźwięku jest bardzo dobra. Z głośnikami takich marek jak JBL (mowa tu o głośnikach o podobnej mocy) nie ma co konkurować, gdyż jakość elementów plus membrany pasywne tworzą nieskazitelną barwę dźwięku, ale wygrywa z nimi na pewno pod względem ceny, która jakby nie patrzeć jest prawie 10 razy mniejsza (55 zł). Natomiast z głośnikami niższych półek jak najbardziej konkuruje Wygląd w mojej opinii jest bardzo dobry. Naklejki i rączka są jak najbardziej użyteczne i pasują stylowo do całości. Jedyna rzecz konieczna do wymiany to głośnik wysokotonowy, gdyż ten, który aktualnie się znajduje pochodzi z odzysku i słuchać, że nie jest w najlepszej kondycji. Przy następnych projektach proces montażu przemyśleć na samym początku jeszcze w fazie planowanie, gdyż rozmieszczenie elementów ma potem wpływ na to, w jaki sposób całość będzie zmontowana i oszczędzi nam sporo czasu. Plany na przyszłość: Wymiana głośnika wysokotonowego Membrany pasywne, aby wzmocnić jakość dźwięku oraz zasłonić dziury z tyłu Włączanie na wodę Źródła i linki: Najnowsza wersja projektu do pobrania pod tym linkiem. Są tam wszystkie pliki niezbędne do wykonania głośnika samodzielnie. Repozytorium na GitHub https://www.ti.com/lit/ds/symlink/lm2940c.pdf https://pl.wikipedia.org/wiki/Zwrotnica_głośnikowa https://pl.wikipedia.org/wiki/Filtr_górnoprzepustowy http://kaczanowski.org/elektronika/kolumna/dwa.htm https://www.youtube.com/watch?v=H17oSRbnjnU Zapraszam również do wpisu na moim blogu
  3. Cześć wszystkim, Chciałbym przetestować pewien program który znalazłem na internecie, niestety pojawia się problem przy instalacji biblioteki na Raspberry Pi , czy ktoś jest w stanie pomóc?
  4. Witam, buduję swojego jeżdżącego robota sterowanego z aplikacji na telefon. Znalazłem w internecie poniższy kod: #include <math.h> /*BTS7960 Motor Driver Carrier*/ const int MotorRight_R_EN = 4; // Pin to control the clockwise direction of Right Motor const int MotorRight_L_EN = 5; // Pin to control the counterclockwise direction of Right Motor const int MotorLeft_R_EN = 8; // Pin to control the clockwise direction of Left Motor const int MotorLeft_L_EN = 9; // Pin to control the counterclockwise direction of Left Motor const int Rpwm1 = 6; // pwm output - motor A const int Lpwm1 = 7; // pwm output - motor B const int Rpwm2 = 2; // pwm output - motor A const int Lpwm2 = 3; // pwm output - motor B long pwmLvalue = 255; long pwmRvalue = 255; byte pwmChannel; const char startOfNumberDelimiter = '<'; const char endOfNumberDelimiter = '>'; int robotControlState; int last_mspeed; void setup(){ /* For Arduino Mega 2560 Serial1 RX - pin 19 Serial1 TX - pin 18 */ Serial1.begin(9600);//Default Bluetooth Baudrate for HC-05 //Setup Right Motors pinMode(MotorRight_R_EN, OUTPUT); //Initiates Motor Channel A1 pin pinMode(MotorRight_L_EN, OUTPUT); //Initiates Motor Channel A2 pin //Setup Left Motors pinMode(MotorLeft_R_EN, OUTPUT); //Initiates Motor Channel B1 pin pinMode(MotorLeft_L_EN, OUTPUT); //Initiates Motor Channel B2 pin //Setup PWM pins as Outputs pinMode(Rpwm1, OUTPUT); pinMode(Lpwm1, OUTPUT); pinMode(Rpwm2, OUTPUT); pinMode(Lpwm2, OUTPUT); stop_Robot(); }// void setup() void loop(){ //int i = 0; if (Serial1.available()) { processInput(); } }// void loop() void processInput (){ static long receivedNumber = 0; static boolean negative = false; byte c = Serial1.read (); switch (c){ case endOfNumberDelimiter: if (negative) SetPWM(- receivedNumber, pwmChannel); else SetPWM(receivedNumber, pwmChannel); // fall through to start a new number case startOfNumberDelimiter: receivedNumber = 0; negative = false; pwmChannel = 0; break; case 'f': // Go FORWARD go_Forward(255); //Serial.println("forward"); break; case 'b': // Go BACK go_Backwad(255); break; case 'r': turn_Right(255); break; case 'l': turn_Left(255); break; case 'c': // Top Right move_RightForward(255); break; case 'd': // Top Left move_LeftForward(255); break; case 'e': // Bottom Right move_RightBackward(255); break; case 'h': // Bottom Left move_LeftBackward(255); break; case 's': stop_Robot(); break; case 'x': pwmChannel = 1; // Rpwm1 break; case 'y': // Lpwm1 pwmChannel = 2; break; case '0' ... '9': receivedNumber *= 10; receivedNumber += c - '0'; break; case '-': negative = true; break; } // end of switch } // void processInput () void stop_Robot(){ // robotControlState = 0 if(robotControlState!=0){ //SetMotors(2); analogWrite(Rpwm1, 0); analogWrite(Lpwm1, 0); analogWrite(Rpwm2, 0); analogWrite(Lpwm2, 0); robotControlState = 0; } }// void stopRobot() void turn_Right(int mspeed){ // robotControlState = 1 if(robotControlState!=1 || last_mspeed!=mspeed){ SetMotors(1); analogWrite(Rpwm1, 0); analogWrite(Lpwm1, mspeed); analogWrite(Rpwm2, mspeed); analogWrite(Lpwm2, 0); robotControlState=1; last_mspeed=mspeed; } }// void turn_Right(int mspeed) void turn_Left(int mspeed){ // robotControlState = 2 if(robotControlState!=2 || last_mspeed!=mspeed){ SetMotors(1); analogWrite(Rpwm1, mspeed); analogWrite(Lpwm1, 0); analogWrite(Rpwm2, 0); analogWrite(Lpwm2, mspeed); robotControlState=2; last_mspeed=mspeed; } }// void turn_Left(int mspeed) void go_Forward(int mspeed){ // robotControlState = 3 if(robotControlState!=3 || last_mspeed!=mspeed){ SetMotors(1); analogWrite(Rpwm1, mspeed); analogWrite(Lpwm1, 0); analogWrite(Rpwm2, mspeed); analogWrite(Lpwm2, 0); robotControlState=3; last_mspeed=mspeed; } }// void goForward(int mspeed) void go_Backwad(int mspeed){ // robotControlState = 4 if(robotControlState!=4 || last_mspeed!=mspeed){ SetMotors(1); analogWrite(Rpwm1, 0); analogWrite(Lpwm1, mspeed); analogWrite(Rpwm2, 0); analogWrite(Lpwm2, mspeed); robotControlState=4; last_mspeed=mspeed; } }// void goBackwad(int mspeed) void move_RightForward(int mspeed){ // robotControlState = 5 if(robotControlState!=5 || last_mspeed!=mspeed){ SetMotors(1); analogWrite(Rpwm1, mspeed*0.4); analogWrite(Lpwm1, 0); analogWrite(Rpwm2, mspeed); analogWrite(Lpwm2, 0); robotControlState=5; last_mspeed=mspeed; } }// void move_RightForward(int mspeed) void move_LeftForward(int mspeed){ // robotControlState = 6 if(robotControlState!=6 || last_mspeed!=mspeed){ SetMotors(1); analogWrite(Rpwm1, mspeed); analogWrite(Lpwm1, 0); analogWrite(Rpwm2, mspeed*0.4); analogWrite(Lpwm2, 0); robotControlState=6; last_mspeed=mspeed; } }// move_LeftForward(int mspeed) void move_RightBackward(int mspeed){ // robotControlState = 7 if(robotControlState!=7 || last_mspeed!=mspeed){ SetMotors(1); analogWrite(Rpwm1, 0); analogWrite(Lpwm1, mspeed*0.4); analogWrite(Rpwm2, 0); analogWrite(Lpwm2, mspeed); robotControlState=7; last_mspeed=mspeed; } }// void move_RightBackward(int mspeed) void move_LeftBackward(int mspeed){ // robotControlState = 8 if(robotControlState!=8 || last_mspeed!=mspeed){ SetMotors(1); analogWrite(Rpwm1, 0); analogWrite(Lpwm1, mspeed); analogWrite(Rpwm2, 0); analogWrite(Lpwm2, mspeed*0.4); robotControlState=8; last_mspeed=mspeed; } }// void move_LeftBackward(int mspeed) void stopRobot(int delay_ms){ SetMotors(2); analogWrite(Rpwm1, 0); analogWrite(Lpwm1, 0); analogWrite(Rpwm2, 0); analogWrite(Lpwm2, 0); delay(delay_ms); }// void stopRobot(int delay_ms) void SetPWM(const long pwm_num, byte pwm_channel){ if(pwm_channel==1){ // DRIVE MOTOR analogWrite(Rpwm1, 0); analogWrite(Rpwm2, 0); analogWrite(Lpwm1, pwm_num); analogWrite(Lpwm2, pwm_num); pwmRvalue = pwm_num; } else if(pwm_channel==2){ // STEERING MOTOR analogWrite(Lpwm1, 0); analogWrite(Lpwm2, 0); analogWrite(Rpwm1, pwm_num); analogWrite(Rpwm2, pwm_num); pwmLvalue = pwm_num; } }// void SetPWM (const long pwm_num, byte pwm_channel) void SetMotors(int controlCase){ switch(controlCase){ case 1: digitalWrite(MotorRight_R_EN, HIGH); digitalWrite(MotorRight_L_EN, HIGH); digitalWrite(MotorLeft_R_EN, HIGH); digitalWrite(MotorLeft_L_EN, HIGH); break; case 2: digitalWrite(MotorRight_R_EN, LOW); digitalWrite(MotorRight_L_EN, LOW); digitalWrite(MotorLeft_R_EN, LOW); digitalWrite(MotorLeft_L_EN, LOW); break; } }// void SetMotors(int controlCase) I nie mogę zrozumieć jakie zdanie mają zmienne : startOfNumberDelimiter oraz endOfNumberDelimiter ? Co one w tym programie robią ?
  5. Witam, mam problem z modułem bluetooth, którego potrzebuje do projektu DIY. Wszystko normalnie działało na baudzie 9600 i wprowadzałem komendy w arduino IDE. Po wpisaniu komendy AT+RESET, której zadaniem jest reset modułu straciłem jakąkolwiek możliwość dalszej komunikacji z modułem. Dioda wskazująca na oczekiwanie parowania miga tak jak wczesniej ale nie jestem wstanie się sparować a po wpisywaniu jakikolwiek komend nie dostaje żadnej odpowiedzi. Wbudowany guzik też nie reaguje, nie wiem juz co robic :(
  6. Witam Pisze ponieważ nie mogę poradzić sobie z błędem który dostaje podczas podłączania modułu bluetooth XM-15. Przeglądałem strony w poszukiwaniu jakieś pomocy nie udało mi się tego niestety znaleźć. Jestem nowy wiec odrazu rzuciłem się na głęboka wodę nie sprawdzając tego moduły. Konfiguracja polegała na tym że podłączyłem moduł do arduino i działało to ok. Podczas pisania programów miałem problem z uruchomieniem monitora portu szeregowego. Błąd mówił ze port jest zajęty. Zacząłem szukać po internecie co to może być i znalazłem ,że może to być poprostu złe dobrana prędkość. Więc spróbowałem ja zmieniać na 9600. Na forum jest pokazane jak zrobić to z modelem HC za pomocą polecenia AT. Napisane jest tam ze po wpisaniu AT powinno wyskoczyć " AT ok ". U mnie wyskakuje " Witaj AT ! ", pisałem jakiś prosty program który miał właśnie tak dziać, że pisze coś i on ma wyświetlać Witaj + "coś "+ !. Teraz napisałem prosty program aby wgl sprawdzić czy jakoś ten moduł mogę podłączyć i dostaje błąd problemu z wgrywaniem na płytkę. Wygląda on tak : avrdude: Version 6.3-20171130 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.19.0_x86__mdqgnx93n4wtt\hardware\tools\avr/etc/avrdude.conf" Using Port : COM4 Using Programmer : arduino Overriding Baud Rate : 115200 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xe2 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xe2 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xe2 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xe2 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xe2 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xe2 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xe2 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xe2 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xe2 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xe2 avrdude done. Thank you. Problem z wgrywaniem na płytkę. Program który wgrywam jest następujący : int data; void setup() { // put your setup code here, to run once: Serial.begin(115200); } void loop() { // put your main code here, to run repeatedly: data=Serial.read(); Serial.println(data); delay(200); } Jeśli odepnę wejścia TX, RX program działa normalnie i nie żadnego problemu. Po podłączeniu modułu tylko do zasilania i uruchomieniu terminala na telefonie po wpisaniu polecenie AT dostaje jakieś znaczki których nie można przeczytać. Używam Arduino Uno. Z góry przepraszam jeśli coś namieszałem jestem początkującym i to mój pierwszy problem którego nie mogę przejść. Proszę o pomoc
  7. Witam Buduję robota na kołach. W jaki sposób rozwiązać zmianę prędkości silników ? Myślałem żeby zrobić kilka przycisków w aplikacji, wybranie powodowałoby ustawienie danej prędkości.
  8. Multimetry logujące dane na komputerze są drogie. Nie mówiąc już o miernikach monitorujących równocześnie napięcie, natężenie i moc oraz rezystancję odbiornika. Może więc warto zrobić coś takiego samemu? Projekt służy jedynie do pomiaru w obwodach prądu stałego przy NIEWIELKICH napięciach (nominalnie do 26V) i ograniczonym natężeniu (sprawdź specyfikację zastosowanego modułu). Absolutnie nie należy go stosować przy napięciu sieciowym, czy też wysokowydajnych źródłach prądu (np akumulator samochodowy pomimo bezpiecznego napiącia 13V w razie zwarcia może dostarczyć KILKASET AMPERÓW, co również może okazać się groźne)! Składniki: Arduino Nano (wbudowane gniazdo Micro USB zapewni łatwe zasilanie z powerbanku, możemy też użyć Pro Mini, które zapewni większą energooszczędność) moduł miernika z magistralą I²C INA219 wyświetlacz LCD 2x16 z konwerterem I²C LCM1602 Bluetooth - UART np w postaci modułu HC-06 czy HC-05 bezpiecznik (zastosowałem PPTC 3A) gniazdo oraz wtyki bananowe 4 mm gniazdo DC 5.5/2.1 mm- Bluetooth HC-05 oraz 06 obsługują poziom logiczny napięć 3.3V. Gotowe moduły posiadają jednak na ogół stabilizator pozwalający zasilić je bezpośrednio z 5V. Nadal pozostaje jednak problem 5V "logicznych" z wyjścia UART (czyli pinu TX) w Arduino. Najlepiej zastosować tu dzielnik napięcia lub konwerter poziomów logicznych. Ja wstawiłem szeregowo rezystor by w razie czego ograniczyć natężenie prądu. To jeszcze nie "zabiło" HC-06, ale też nie jest rozwiązaniem "podręcznikowym" i zalecanym. Port nadawczy (TX) w Bluetooth możemy za to bez obaw podłączyć bezpośrednio z odbiorczym (RX) w Arduino. Kod źródłowy w tym wypadku był prawdę mówiąc banalny do napisania, gdyż wymagał jedynie drobnych zmian przykładu dla stosowanej biblioteki. #include <Wire.h> #include <Adafruit_INA219.h> //https://github.com/adafruit/Adafruit_INA219 #include <LiquidCrystal_I2C.h> //https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library #include <Narcoleptic.h> //https://github.com/rcook/narcoleptic #define DiodeVoltageDrop 0.42 LiquidCrystal_I2C lcd(0x27, 16, 2); Adafruit_INA219 ina219; void setup(void) { Serial.begin(9600); while (!Serial) { // will pause Zero, Leonardo, etc until serial console opens delay(1); } Narcoleptic.disableTimer1(); Narcoleptic.disableTimer2(); Narcoleptic.disableADC(); Narcoleptic.disableSPI(); uint32_t currentFrequency; // Initialize the INA219. // By default the initialization will use the largest range (32V, 2A). However // you can call a setCalibration function to change this range (see comments). ina219.begin(); // To use a slightly lower 32V, 1A range (higher precision on amps): //ina219.setCalibration_32V_1A(); // Or to use a lower 16V, 400mA range (higher precision on volts and amps): //ina219.setCalibration_16V_400mA(); lcd.begin(); lcd.backlight(); } void loop(void) { // float shuntvoltage = 0; float busvoltage = 0; float current_mA = 0; // float loadvoltage = 0; float power_mW = 0; // shuntvoltage = ina219.getShuntVoltage_mV(); busvoltage = ina219.getBusVoltage_V() + DiodeVoltageDrop; current_mA = 1086.5 / 1104.0 * (ina219.getCurrent_mA() - 1.4); power_mW = abs(busvoltage * current_mA); float impedance = abs(busvoltage / current_mA * 1000.0); // power_mW = ina219.getPower_mW(); // loadvoltage = busvoltage + (shuntvoltage / 1000); Serial.print(busvoltage); Serial.print("V "); Serial.print(current_mA, 1); Serial.print("mA "); Serial.print(power_mW, 0); Serial.print("mW "); Serial.print(impedance, 1); Serial.println((char)244); lcd.clear(); lcd.print(busvoltage); lcd.print("V "); lcd.print(current_mA, 1); lcd.print("mA"); lcd.setCursor(0, 1); lcd.print(power_mW, 0); lcd.print("mW "); lcd.print(impedance, 1); lcd.print((char)244); Narcoleptic.delay(500); } Do pomiaru napięcia przez układ INA219 wymagane jest połączenie GND zasilania elektroniki z GND mierzonego obwodu. Z tego też względu nie zalecam zasilać urządzenia z gniazda USB w komputerze. W razie pomyłki możemy uszkodzić komputer! Dlatego do "kablowania" danych użyłem Bluetooth. INA219 niestety nie toleruje również odwrotnej polaryzacji - potencjał po stronie mierzonego prądu nie może być niższy względem GND. Może to doprowadzić do uszkodzenia układu. Nie jest to więc urządzenie odpowiednie do "ręcznego" pomiaru napięcia zwykłymi sondami z multimetru - niezmiernie łatwo tu o odwrotną polaryzację! Dla bezpieczeństwa wstawiłem diodę pomiędzy masą miernika a mierzonego układu. Nieco przekłamuje to pomiar napięcia (spadek napięcia na diodzie nie jest dokładnie stały, jak skorygowałem w szkicu). Za to sama konstrukcja powinna zapewnić wygodną obsługę. Z boku znajdziemy gniazdo DC do podłączenia zasilacza dla mierzonego układu oraz gniazda bananowe dla kabli "wyjściowych". Do zestawu oczywiście NIE dołączono uniwersalnego zestawu kabli pomiarowych. Musiałem więc zrobić je sobie sam Przewody z wtykiem bananowym 4 mm na wejściu są zakończone: wtykiem DC 5.5/2.1 mm (wtedy multimetr jest po prostu "przedłużaczem" zwykłego zasilacza) ponownie wtykiem bananowym, co umożliwia zastosowanie np "krokodylków" jako nakładki czy podłączenie "normalnego" multimetru celem kalibracji zaciskiem typu "hak" do bezpośredniego wpinania się w goldpiny Łatwo więc podłączymy nasze urządzenie pomiędzy zasilacz a odbiornik. Po podłączeniu komputera z modułem Bluetooth - UART utworzony jest wirtualny port szeregowy. Np dla Linuksa powstanie plik urządzenia /dev/rfcomm*. Uzyskane pomiary możemy zapisać w postaci logu np za pomocą putty czy też terminalowych narzędzi dla Linuksa. Napisałem też własny program w C++, który zapisze dane otrzymane z portu szeregowego do pliku. Skompilujemy go poprzez g++ serial2log.cpp serialib/serialib.cpp -o serial2log -std=c++17 Wcześniej należy jednak umieścić Serialib ::: Simple Serial Library w folderze serialib. Jako parametry wywoływanego programu podajemy adres portu szeregowego, baud rate oraz nazwę pliku tekstowego z logiem. Np: ./serial2log /dev/ttyUSB0 9600 log.txt Pracę kończymy w bardzo "brutalny" sposób: Ctrl + C. //g++ serial2log.cpp serialib/serialib.cpp -o serial2log -std=c++17 #include <iostream> #include <chrono> #include <thread> #include <fstream> #include <ctime> #include "serialib/serialib.h" //http://serialib.free.fr int main(int argc, char *argv[]) { if (argc != 4) { std::cout << "Usage: ./serial2log serial_port baud_rate log_file\n"; return 0; } serialib LS; // Object of the serialib class int Ret; // Used for return values char Buffer[128]; // Open serial port Ret=LS.Open(argv[1],atoi(argv[2])); // Open serial link if (Ret!=1) { // If an error occured... std::cout << "Error while opening port. Permission problem?\n"; // ... display a message ... return Ret; // ... quit the application } std::cout << "Serial port opened successfully!\n"; std::ofstream logfile; logfile.open(argv[3], std::ios::out | std::ios::app); /* Ret=LS.WriteString("AT\n"); // Send the command on the serial port if (Ret!=1) { // If the writting operation failed ... std::cout << "Error while writing data\n"; // ... display a message ... return Ret; // ... quit the application. } std::cout << "Write operation is successful \n"; */ while(1){ Ret=LS.ReadString(Buffer,'\n',128,5000); // Read a maximum of 128 characters with a timeout of 5 seconds // The final character of the string must be a line feed ('\n') if (Ret>0){ std::time_t currentTime = std::time(nullptr); std::cout << currentTime << " >> " << Buffer; // If a string has been read from, print the string logfile << currentTime << " >> " << Buffer << std::flush; } else std::cout << "TimeOut reached. No data received !\n"; // If not, print a message. std::this_thread::sleep_for(std::chrono::milliseconds(100)); } // Close the connection with the device LS.Close(); logfile.close(); return 0; } Zastosowanie: całkowanie numeryczne poboru prądu po czasie. Mamy urządzenie, którego "łakomstwo" zmienia się w czasie, a my chcemy oszacować czas jego pracy na akumulatorze. Musimy więc jakoś uśrednić jego pobór prądu. Np montaż paralaktyczny teleskopu pobiera inne natężenie prądu w trakcie podążania za ruchem dobowym nieba, a inne w trybie pozycjonowania na zadany obiekt (GoTo). Po testach będziemy mogli więc oszacować, jak długo będzie on pracował zasilany z akumulatora żelowego.
  9. Załozeniem projektu było stworzenie pojazdu czterokołowego sterowanego poprzez bluetooth, wykorzystujac wbudowany w telefon akcelerometr. Został on zbudowany na ramie starego samochodu zdalnie sterowanego, do którego zgubiona została aparatura. Głównym elementem robota jest rama robota terenowego wyposazona w silnik do napedzania osi tylnej pojazdu, oraz w silnik do skretu kołami przednimi. Po drobnych modyfikacjach została dostosowana do zamontowania płytki drukowanej oraz baterii. Zostały dodatkowo zaprojektowane i wydrukowane na drukarce 3d uchwyty na baterie. Wykorzystany został moduł arduino nano ( bazujacy na Atmedze 328P).moduł bluetooth HC-06 komunikujacy sie z arduino poprzez UART(RX,TX).Zasilany napieciem 3.3V. Zasieg modułu to około 10m.Wykorzystany został moduł L298N na podstawce umozliwiajacy sterowanie dwoma silnikami DC w obu kierunkach za pomoca 4 pinów, które mozna sterowac sygnałem PWM. Wykorzystana została bateria o napieciu 11,1V. Układ został zaprojektowany przy uzyciu oprogramowania EasyEda. w celu zwiekszenia jakosci oraz aby umiescic układ w wyznaczonym na ramie miejscu o wymiarach 50x50mm. Zaprojektowany został PCB,który został wykonany za pomoca metody termotranferu na laminacie z jednostronna warstwa miedzi Aby układ mógł zostac przylutowany metoda SMD, powyższy schemat musiał zostac wydrukowany na papierze kredowym w odbiciu lustrzanym. Nastepnie wytrawiono płytke. Jako wytrawiacz posłuzył nadsiarczan sodu (B327) zmieszany w odpowiedniej proporcji z woda. W kolejnym kroku nawiercono w płytce otwory posługujac sie wiertłem 1 mm.Nastepnie wszystkie elementy przylutowano do płytki w wyznaczonych miejscach, zrobiono to w taki sposób, aby wszystkie elementy znajdowały sie po tej samej stronie co ściezki. Program do obsługi został napisany a Arduino IDE, działa on według następującego schematu; do utworzenia interfejsu komunikujacego sie z samochodzikiem posłuzyłem sie aplikajca RoboRemo w wercji darmowej. Aplikacja wysyła do naszego modułu bluetooth dane dotyczace połozenia X oraz Y naszego telefonu. interfejs wyglada w nastepujacy sposób: Aby rozpoczać użytkowanie robota nalezy podłaczyć baterie odpowiednimi przewodami znajdujacymi sie z dołu urzadzenia (czerwony z czerwonym,niebieski z niebieskim),nastepnie uruchomić samochodzik przełaczajac przełacznik znajdujacy sie nad bateria. Po tej operacji pojazd jest gotowy do sparowania z telefonem. Aby to zrobic wystarczy kliknac przycisk "Połacz z samochodem" znajdujacy sie na ekranie. Jezeli otrzymamy bład połaczenia nalezy najpierw sparowac moduł bluetooth o nazwie "samochodzik" z naszym telefonem w ustawieniach telefonu(jezeli zostaniemy poproszeni o hasło nalezy wpisac 1234).Po udanym połaczeniu z samochodzikiem mozna przystapic do jazdy klikajac przycisk "JEDŹ!". Sterować moćna przechylajac telefon.Przechylenie przodu telefonu w dół spowoduje przyspieszenie, podniesienie -zatrzymanie, a nastepnie jazde do tyłu. Aby zmienic kierunek jazdy wystarczy przechylić telefon w prawo lub lewo. Przyciśniecie przycisku "STOP!" spowoduje zatrzymanie pojazdu. Jeszcze jedno zdjęcie pojazdu:
  10. Mój pierwszy projekt, którym jakiś czas temu zacząłem swoją przygodę z Arduino. Wężyk spustowy z interwałometrem sterowany radiowo poprzez Bluetooth. W astrofotografii popularne jest wykorzystanie techniki stackowania polegającej na łączeniu dziesiątek, czasem nawet setek zdjęć w jedno. Znacznie polepsza to stosunek sygnału do szumu. Niektóre zjawiska trwają kilka godzin (np zaćmienia, tranzyty, roje meteorów). Często też warunki atmosferyczne nie zachęcają do dłuższego pobytu na zewnątrz w środku nocy. Wyzwalacz pozwoli nam zautomatyzować rejestrację zjawisk astronomicznych. Hardware: - Arduino Pro Mini 3.3V (lub inne) - Bluetooth - UART np w postaci modułu HC-06 czy HC-05 - transoptor np PS2501 służący do zwierania obwodu, wymaga podłączenia przez stosowny rezystor (napięcie i natężenie prądu znajdziemy w dokumentacji technicznej transoptora) do pinu wyznaczonego w kodzie źródłowym (#define RelayPin). - koszyk na 3xAA - przełącznik kołyskowy do włączania - cienki kabel glośnikowy, zakończony microjackiem, wlutowany do transoptora. Pamiętajmy jednak, że również strona fotodetektora ma swoją polaryzację i transoptor powinien być podłączony do wtyczki w stosownej kolejności: Na początku do sterowania konieczne było ręczne wydawanie poleceń w terminalu. Do tego celu mogliśmy zainstalować aplikację Serial Bluetooth Terminal. e - pojedyncza ekspozycja w12 - poczekaj 12s i wykonaj zdjęcie s10i1w2 - wykonaj serię 10. zdjęć, z interwalem czasowym 1s, poczekaj 2s przed rozpoczęciem. Zawsze na końcu każdego z tych poleceń można dopisać t5, zadając czas naświetlania 5s. Samo t5 też działa. Może byc więc t5 w4t5 s10i1w2t5 Jeśli podamy własny czas naświetlania, aparat MUSI być ustawiony na czas B. #define RelayPin 13 String ReceivedData = "", numberstr; unsigned int i, character, NoExposures = 0; double exptime = 0.5, interval = 1, wait = 0; void setup() { Serial.begin(9600); pinMode(RelayPin, OUTPUT); digitalWrite(RelayPin, LOW); } void loop() { if (Serial.available() > 0) { ReceivedData = Serial.readStringUntil('\n'); ReceivedData.toLowerCase(); numberstr = ""; wait = 0; if (ReceivedData[0] == 'e' || ReceivedData[0] == 't' || ReceivedData[0] == 'w') { numberstr = extractvalue(ReceivedData, 'w'); wait = numberstr.toDouble(); if (wait != 0) { Serial.print("Wait "); Serial.print(wait); Serial.println(" s before start exposure."); } delay(wait * 1000); Serial.print("Exposure"); numberstr = extractvalue(ReceivedData, 't'); exptime = numberstr.toDouble(); if (exptime != 0) { Serial.print(" time "); Serial.print(exptime); Serial.print(" s"); } Serial.println("."); exposure(ReceivedData); } if (ReceivedData[0] == 's') { NoExposures = 0; numberstr = extractvalue(ReceivedData, 's'); NoExposures = numberstr.toInt(); numberstr = extractvalue(ReceivedData, 'i'); interval = numberstr.toDouble(); if (!interval) { interval = 1; } numberstr = extractvalue(ReceivedData, 'w'); wait = numberstr.toDouble(); Serial.print("Will make series of "); Serial.print(NoExposures); Serial.print(" images with interval "); Serial.print(interval); Serial.print(" s."); if (wait != 0) { Serial.print(" Wait "); Serial.print(wait); Serial.print(" s before start."); } numberstr = extractvalue(ReceivedData, 't'); exptime = numberstr.toDouble(); if (exptime) { Serial.print(" Exposure time "); Serial.print(exptime); Serial.println(" s."); } else Serial.println(); delay(wait * 1000); for (i = 0; i < NoExposures; i++) { Serial.print("Exposure no. "); Serial.print(i + 1); Serial.print(" from "); Serial.print(NoExposures); Serial.println("."); exposure(ReceivedData); delay(interval * 1000); } } } } String extractvalue(String inputstring, char parametr) { int character; String numberstr; for (character = 0; inputstring[character] != parametr && character < inputstring.length(); character++) { } if (inputstring[character] == parametr) { numberstr = ""; for (character++; character < inputstring.length() && inputstring[character] > 47 && inputstring[character] < 58 || inputstring[character] == '.'; character++) { numberstr = numberstr + inputstring[character]; } } return numberstr; } void exposure(String ReceivedData) { numberstr = extractvalue(ReceivedData, 't'); exptime = numberstr.toDouble(); if (exptime == 0) { exptime = 0.5; } digitalWrite(RelayPin, HIGH); delay(exptime * 1000); digitalWrite(RelayPin, LOW); } Niedawno jednak zmobilizowałem się do napisania własnej aplikacji mobilnej współpracującej z urządzeniem. Postanowiłem wykorzystać do tego środowisko Apache Cordova oraz plugin Cordova (PhoneGap) Plugin for Serial Communication over Bluetooth. Bluetooth.7zip Dlaczego taki pokraczny design? Czarne tło i czerwone napisy najmniej psują akomodację oka w ciemności. To bardzo istotne przy zastosowaniach astronomicznych. Dlaczego akurat przez wielu niezalecana Cordova? bardzo słabo znam JavaScript, a ten język jest mi potrzebny (w przeciwieństwie do Javy, w której powinno się pisać aplikacje na Androida) Cordova umożliwia bardzo proste tworzenie aplikacji DOKŁADNIE tak, jakbyśmy robili normalną stronę WWW aplikacja jest skrajnie prosta i mniejsza wydajność aplikacji hybrydowych względem natywnych nie powinna stanowić problemu Po instalacji środowiska Cordova (Windows, Linux) przechodzimy do rozpakowanego folderu z kodem programu. Możemy już skompilować program komendą cordova build. Plik instalacyjny .apk znajduje się w folderze Bluetooth/platforms/android/build/outputs. By go "usadowić na telefonie" musimy jednak wcześniej zezwolić na instalację aplikacji z nieznanych źródeł. Prawdopodobnie jeszcze łatwiej "wyklikamy" aplikację mobilną w MIT App Inventor. Fotografowanie zjawisk trwających kilka godzin stało się prostsze
  11. Jak powszechnie wiadomo, zdecydowana większość samochodów (nawet matizy) posiadają głośniki dość dobrej jakości. Oczywiście, kiedy mój znajomy pozbywał się samochodu na złom, musiałem coś z niego podebrać A oto prezentuję wam sterowniczek do głośników samochodowych DIY. Mogę też wspomnieć, że jest to mój pierwszy projekt nieoparty na mikrokontrolerze (więc dość tani). Funkcjonalność Urządzenie świetnie się nadaje na imprezy - potrzebuje dość dużo prądu, podpinamy się bezprzewodowo za pomocą bluetootha, no i wzmacniacz generuje dobre basy Całość zamyka się w małej obudowie Z23, z wyprowadzonymi złączami głośnikowymi i zasilaniem. Nie chciałem dodawać przycisków, gdyż na chwilę obecną wydawało mi się to zbędne. Urządzenie niestety wymaga aż 2 zasilaczy - 12v i 5v (obniżone do 3,3v za pomocą AMS1117), z powodu tzw. pętli mas, która zakłócała działanie układu BT, BK8000L. Sygnał audio wzmacnia PAM8610, wzmacniacz 2x15W przy impedancji 4ohm. Do wzmacniacza podłączyłem też niezależny, programowy przełącznik mute. Jak wyżej wspomniałem, do urządzenia łączymy się np. telefonem, i możemy bez problemu puścić muzykę z youtuba. Budowa Stabilizator wraz z modułem BT umieściłem na dwustronnej płytce prototypowej, zasilacz wlutowałem na stałe. Wyprowadziłem sygnały L, P i GND a resztę owinąłem taśmą kaptonową. Do wzmacniacza podłączyłem 12V bezpośrednio z zasilacza, przycisk mute do specjalnych wyprowadzeń na płytce, wyjścia podłączyłem do gniazd. Oczywiście całość w kaptonie - ochrona przed zwarciem. Później nożykiem wyrzeźbiłem w obudowie otwory na złącza, wkręciłem wszystko i zamknąłem. Efekty Na zdjęciu podłączyłem głośniki z koreańskiego samochodu Ssang Yong, o dość niskiej impedancji oraz 3 membranami. Całość połączyłem calkiem grubym kablem głośnikowym 1,5mm2. Dźwięk - czysty, basy - mocne, czyli zadanie zaliczone W przyszłości, kiedy znajdę czas (szkoła... ) na pewno pobawię się komendami AT, wydrukuję nową obudowę i dodam przyciski. Postaram się też zasilić całość 1 zasilaczem - jeżeli coś jeszcze będę modyfikował, dam znać. Na specjalną prośbę mogę wysłać filmik prezentujący działanie głośników. Pozdrawiam, Leoneq :3
  12. Witam Serdecznie, jestem nowicjuszem i proszę o pmoc. Po podłączeniu Telefonu z Androidem*dowolnego) przez bluetooth mam opcję połączeń przychodzących i wychodzących. Mogę ustawić tylko połączenia wychodzące i ustawi mi się np port com 11 a przychodzących już nie ustawię ponieważ pewnie android nie obsługuję takiej opcji. (testowałem kiedyś b2710 solid i tam mogę to ustawić bez problemu ale to już inna bajka) streszczając Czy jest możliwość połączenia się przez bluetooth za pomocą Arduino? żeby móc ustawić te połączenia w aplikacji na komputerze żeby był np com 12? dla mnie to czarna magia i się na tym nie znam dziękuję z góry?
  13. Cześć! Realizuje bezprzewodową komunikacje po protokole Modbus RTU pomiędzy PC, a Robotem i mam pytanie : jeżeli Master generuje ramkę(adres urządzenia + kod funkcji(0x03 odczyt n rejestrów) + adresy n - rejestrów + liczba rejestrów + suma_kontrolna) do SLAVE (STM32f103vct6) to... JAKI podać adres rejestru z mikrokontrolera pod, którym jest jakaś dana np. 2 bajtowa ? Przykład o co chodzi : tworzę tablice przechowującą n dwóbajtowych(np.int16_t) elementów i chciałbym w zapytaniu MASTERA podać adres np. pierwszej komórki, pytanie jaki ???? jak zadeklarować tablice w języku C w programie robota by jej adres tj. adres pierwszej komórki był stały i znany dla MASTERA(zakładam, że utworzę taką tablicę i sprawdzę np. za pomocą terminala adres pierwszej komórki &tab[0] , by potem wykorzystać ją dla informacji dla MASTERA)???? Z góry dzięki, za pomoc i proszę o pytania jeśli coś niejasno opisałem !!!
×
×
  • Utwórz nowe...