Skocz do zawartości

Przeszukaj forum

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

  • 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 262 wyników

  1. Jest to mój pierwszy post więc witam wszystkich forumowiczów i proszę o pomoc bo jestem już mocno zdesperowany. Przeszukałem forum i internet ale nie natknąłem się na rozwiązanie mojego problemu. Zbudowałem w oparciu o podróbę Arduino Uno czujnik kąta obrotu zaginarki. Sprawa ma się następująco potencjometr wieloobrotowy, na ekranowanym przewodzie o długości 50cm, w roli dzielnika napięcia za pomocą kół zębatych odczytuje aktualną pozycję i na wyświetlaczu 7segmentowym wyświetla przyporządkowaną wartość kąta. Program się zgadza wszystko działa tak jak zaplanowałem. Problem polega na wartościach przetwornika ADC. Przy podpiętym zasilaniu po USB z laptopa czy komputera wartości przetwornika są w miarę stałe. Natomiast gdy podpinam zasilanie zewnętrzne z zasilacza impulsowego wartości wachają się +/- 4 co sprawia olbrzymi problem. Wykluczam ułożenie kabli ponieważ: przewód USB podpięty pod laptop - wszystko OK, ten sam przewód USB tak samo ułożony podpięty pod zasilacz 5v/power bank daje już spore zakłócenia. Objawy są te same przy wykorzystywaniu regulatora napięcia z płytki czyli podając zasilanie +9v na Arduino. Czy ktoś jest mnie wstanie naprowadzić jak rozwiązać problem a raczej jak stworzyć te same warunki zasilania zewnętrznego co przy zasilaniu z laptopa? Czyżby napięcie zasilania zasilaczy impulsowych +/-5% w ten sposób by się objawiało? Płytka nie jest oryginalna to fakt ale czy oryginalne Arduino w czymś by tu pomogło jeśli po zasilaniu z laptopa wszystko jest OK? W sumie to jestem trochę zdesperowany i jestem wstanie zasilać urządzenie przy pomocy uśpionego laptopa co raczej mija się z celem. A może po prostu zamiast zasilacza impulsowego zastosować trafo i wyprostować napięcie? Dziękuje za zainteresowanie i proszę o jakieś podpowiedzi rozwiązania problemu.
  2. Witam Od kilku dni bawię się arduino. Chciałem napisać program odpowiadający za sterowanie diodą i silnikiem a wielowątkowość zastąpić timerem. Niestety nie działa. Czy ktoś mógłby mi wytłumaczyć co robię źle? #include <Timers.h> //implementacja biblioteki Timers <2> watek; void migaj() { //funkcja diody digitalWrite(2, HIGH); } void silniki() { //funkcja silnika digitalWrite(3, HIGH); digitalWrite(4, LOW); } void setup() { pinMode(2, OUTPUT); //definicje pinów pinMode(3, OUTPUT); pinMode(4, OUTPUT); watek.attach(0, 2000, migaj); //wątki watek.attach(1, 5000, silniki); } void loop() { }
  3. Witam chciał bym zaprezentować , drugą "lepszą wersję " kierownicy do komputera opartej na Arduino Leonardo. Film pokazujący jak dziala kierownica i Force Feedback: Jest to wersja elektronicznie taka sama jak poprzednia, wszystko opisane wcześniej link do poprzedniej tutaj : W tej wersji zmieniłem obudowę na znacznie mniejszą , lżejszą , łatwa do zamocowania przy stole, biurku itp. Obudowa została wykorzystana z kupionej przeze mnie za 50 zł kierownicy Logitech Formula Force Ex o obrocie 180* i Force Feedback. Dzięki temu że kierownica miała już przekładnie i ogólnie jest prosta w budowie , bardzo łatwo i tanio można ją przerobić tak aby miala kąt skrętu taki jak ustawimy sobie w programie np 720*,900* i Force Feedback do tego kąta obrotu. Tutaj link do gotowego software na Arduino Leonardo , od razu mówię że na Arduino Uno nie zadziała , link do pobrania w opisie filmu: Ja zrobiłem to tak: Na początku przez środek starej przekładni , dodałem pręt gwintowany o średnicy 10mm ,do którego z jednej strony mocowana jest kierownica, a z drugiej enkoder z drukarki canon ip2770. Aby zamocować enkoder musiałem wyciąć dziure jak widać na zdjęciu poniżej : Aby enkoder nie tarł o blat , dodałem plastikowe podkładki : A tak wygląda już gotowa sama kierownica: Wyjścia enkodera i do silnika , zostały przerobione na standardowych wyjściach które były w kierownicy i wchodzą do dodatkowej skrzynki w której znajduje się reszta elektroniki czyli w sumie tylko Arduino Leonardo i sterownik silników BTS7960: Jeszcze pedal box został przerobiony na taki aby miał 3 jednakowe pedały więc musiałem dokupić drugie takie same i wyciąć jeden i dokleić tak jak na zcjeciach . Schemat podłączenia wszystkiego w linku do wcześniejszej wersji. Efekt końcowy (pedały jeszcze stare): To by było na tyle , jeśli czegoś ktoś potrzebuje , śmiało pisać
  4. Witam. Od niedawna zacząłem interesować się programowaniem oraz Arduino, i chciałbym zrobić takie coś (ale kompletnie nie wiem jak to zrobić): Klikam przycisk => silnik kręci się w prawo (3s) => przerwa (2s) => silnik kręci się w lewo (3s) => Stop. I kiedy kliknę przycisk znowu to samo od poczatku. *Arduino Leonardo *Silnik (zwykły, chiński z samochodu RC) Proszę o pomoc, będę bardzo wdzięczny.
  5. Witam serdecznie, robię coś "ala inteligentny dom" i brakowało mi gpio na malince. Podłączyłem mcp23017 i działa:) Działa jako wyjście:/ Jak zrobić żeby działało jako wyjście? A takie ważniejsze i chyba trudniejsze pytanie (jak dla mnie) to: Jak połączyć malinkę z arduino przez usb?? tak żeby arduino działało jako we/wy?? Nie liczę na gotowca, ale jakieś wskazówki. Nie jestem też jakimś tam hiper, biper, diker informatykiem. Skoro potrafiłem podłączyć mcp23017 i "ledami mrugać" to myślę że arduino podłączę jako we/wy do malinki;) Pozdrawiam serdecznie;) p.s. Zapomniałem dodać, że to wszystko obsługuję na domoticz.
  6. Witam, mam problem z płytką arduino uno którą kupiłem w zestawie do kursu. Podczas pisania programu nie mogę nadać funkcji pinu, ponieważ program nie zauważa numeru, np pinMode(8, OUTPUT), - podświetla się wszystko oprócz 8.
  7. Cześć wszystkim. Udało mi się skompletować wszystkie potrzebne rzeczy do stworzenia pewnego mechanizmu. W skrócie mówiąc jest to mechanizm, który ma za zadanie po naciśnięciu przycisku otwierać klapkę. Pozycja otwarcia/zamknięcia klapki ustawiana jest za pomocą krańcówek. Niestety pojawił mi się problem z serwem (PowerHD LF-20MG-360 standard - praca ciągła 360 stopni). W momencie kiedy ma ono otwierać/zamykać klapkę potrafi nierówno pracować. Swój układ testowy zasilam z zasilacza ustawionego na 12V, ponieważ z takiego napięcia mam zasilane krańcówki. Reszta układu zasilana jest z przetwornicy 12V/5V (Pololu D24V22F5 - przetwornica step-down - 5V 2,5A). Spróbowałem sprawdzić, czy może pojedyncze elementy w moim układzie wpływają na pracę serwa. W tym celu napisałem program, który miał załączać serwo, gdy arduino otrzymywało sygnał albo z jakiegoś przycisku, albo z jakiejś krańcówki. Z każdego sygnału serwo chodziło równo. Niestety na docelowym programie serwo cały czas chodzi nierówno, a problem potęguje się jeżeli nastawię niską prędkość obrotową (np. 94 stopnie -serwo stoi przy 91*). Próbowałem naprawić problem poprzez wstawienie na wyjściu z przetwornicy kondensatora 470uF, ale jego obecność nic nie daje. Ostatecznie zauważyłem, że zmieniając wartość "delay" w kodzie programu udaje się trochę poprawić pracę serwo. Przy delay na poziomie 225ms serwo chodzi lepiej niż na 25ms, ale nadal nie jest to praca płynna. Ustawiając duże wartości delay, tracę możliwośc precyzyjnego sterowania klapką, bo zanim sygnał z krańcówki wyłączy serwo, to silnik nadal będzie się kręcił właśnie o tą wartość "delay". Poniżej przedstawiam swój kod, schemat układu i filmiki z pracy serwa (jeden na delay 25ms, drugi na 225ms). #include<Servo.h> Servo servo; void setup() { pinMode(10, INPUT); //przelacznik M pinMode(9, INPUT); //przelacznik D pinMode(8, INPUT); //krancowka na otwarciu pinMode(7, INPUT); //krancowka na zamknieciu pinMode(3, OUTPUT); //servo pin } void loop() { //ruch przesłony if(((digitalRead(10)==HIGH || digitalRead(9)==HIGH)&&(digitalRead(8)==LOW))) { servo.attach(3); servo.write(80); delay(25);} //servo otwiera przesłone else { digitalWrite(3,LOW);} //servo nie działa if((digitalRead(10)==LOW && digitalRead(9)==LOW && digitalRead(7)==LOW)) { servo.attach(3); servo.write(100); delay(25);} //servo zamyka przesłone else { digitalWrite(3,LOW);} //servo nie działa } Jeżeli filmiki są za mało wyraźne to postaram się je wrzucić w lepszej jakości. praca uklad.rar
  8. Witam, Jestem w trakcie budowy robota typu line follower na bazie Arduino. Do wykonania przedniego panelu z czujnikami zdecydowałem się wykorzystać sensory CNY70 oraz komparatory LM311P które za zadanie mają zamieniać sygnał analogowy na cyfrowy zależnie od progu decyzji wysłanego z arduino poprzez PWM. Wiem że sygnał PWM trzeba przefiltrować i myślałem o pasywnym filtrze RC, ale nie mam pojęcia jakie powinny być wartości kondensatorów i rezystora, żeby wszystko dobrze działało i pytanie czy taki filtr jest w ogóle w stanie dobrze spełniać swoje zadanie? Jeśli nie to czym można go zastąpić? Drugie pytanie, czy wygenerowany jeden sygnał PWM z mikrokontrolera może "obskoczyć" wszystkie komparatory wyznaczając dla nich taki sam próg decyzji?
  9. Cześć, ponieważ I2C jest jednym z najprostszych szeregowych protokołów komunikacyjnych (i jest bardzo często stosowany) postanowiłem sprawdzić jak wygląda przykładowa implementacja na zestawie FPGA. Zacząłem od prostszej rzeczy, czyli implementacji "I2C slave" (poniekąd też slave jest mi bardziej przydatny do moich eksperymentów). Ponieważ projekt jest stosunkowo prosty i nie zajmuje dużo zasobów postanowiłem go przetestować na zestawie FPGA ElbertV.2 (ten używany w kursie FPGA Forbot'a). Masterem I2C będzie zwykłe "Arduino UNO" - z poziomu Arduino bardzo prosto można oprogramować komunikację po I2C z użyciem biblioteki Wire. Punktem wyjścia do implementacji "I2C Slave" jest darmowy projekt zamieszczony na stronie opencores.org. Tutaj link do projektu: https://opencores.org/projects/i2cslave Projekt ma stosunkowo prostą budowę i jest właściwie tylko szkieletem do budowy na jego podstawie bardziej skomplikowanych układów (będzie to wyjaśnione dalej). Jak przeważnie się to zdarza trzeba było dodać nowy zegar (DCMs 1 ze Spartan3A) 48 MHz (pętla PLL), ponieważ oryginalny projekt pracował z takim zegarem. Po wykonaniu potrzebnych przeróbek projekt zajmuje niecałe 30% zasobów układu Spartan3 z Elberta - patrz screen: Jak można zobaczyć na podglądzie RTL - top entity projektu ma bardzo prosty interfejs - patrz screen: Tutaj kod w Verilog'u głównego modułu projektu (już po dodaniu zegara PLL 48 MHz) `include "i2cSlave_define.v" module i2cSlaveTop ( clk, rst, sda, scl, myReg0 ); input clk; input rst; inout sda; input scl; output [7:0] myReg0; wire clk48Mhz, clkBufg; // Instantiate the module PLL clock PLL_clock PLL_48Mhz ( .CLKIN_IN(clk), .RST_IN(~rst), .CLKFX_OUT(clk48Mhz), .CLKIN_IBUFG_OUT(clkBufg) ); i2cSlave u_i2cSlave( .clk(clk48Mhz), .rst(~rst), .sda(sda), .scl(scl), .myReg0(myReg0), .myReg1(), .myReg2(), .myReg3(), .myReg4(8'h12), .myReg5(8'h34), .myReg6(8'h56), .myReg7(8'h78) ); endmodule Jak widać "i2cSlaveTop" ma trzy wejścia: clk - główny zegar projektu (w Elbercie 12 Mhz) rst - reset asynchroniczny - stanem High więc dla naszej płytki FPGA trzeba go było zanegować scl - zegar magistrali I2c , jedno wejście/wyjście (inout) sda - dane magistrali I2C i jedno wyjście (wektor 8 bitów) myReg0 - na tym wyjściu równoległym będą się pojawiać dane wysłane przez mastera I2C (Arduino UNO), dlatego podłączymy je do diod LED w zestawie Elbert, aby móc te dane łatwo obserwować. Tutaj treść pliku ucf (user constraints) dla płytki FPGA Elbert: NET "clk" LOC = P129 | IOSTANDARD = LVCMOS33 | PERIOD = 12MHz; NET "rst" PULLUP; NET "rst" LOC = P76; NET "sda" LOC = P31 | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 12; NET "scl" LOC = P32 | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 12; # myReg0 - 8 bit data NET "myReg0[7]" LOC = P46 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "myReg0[6]" LOC = P47 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "myReg0[5]" LOC = P48 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "myReg0[4]" LOC = P49 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "myReg0[3]" LOC = P50 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "myReg0[2]" LOC = P51 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "myReg0[1]" LOC = P54 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; NET "myReg0[0]" LOC = P55 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 12; Jak widać zdefiniowany jest domyślny pin zegara (12 MHz), reset - dolny z pięciu switchy, diody LED (myReg0 - dane przesłane po I2C do płytki Elbert), scl i sda 2 piny magistarli I2C (pierwsze dwa piny złącza P1 na płytce Elbert - patrz rysunek: Jeśli chodzi o piny magistrali I2C (scl, sda) od strony Arduino UNO to zaznaczyłem je fioletową obwódką na rysunku pinout'u dla UNO: Oczywiście pomiędzy zestawem FPGA (poziom logiki 3,3V) a Arduini UNO (poziom logiki 5V) trzeba wstawić na tych dwóch liniach (scl, sda) konwertery poziomów logicznych.Ja zrobiłem to za pomocą takiego konwertera poziomów (bo tylko taki miałem pod ręką) https://botland.com.pl/pl/konwertery-napiec/2523-konwerter-poziomow-logicznych-dwukierunkowy-4-kanalowy-pololu.html Tutaj zdjęcie całego układu (konwerter poziomów na płytce stykowej): Skoro połączenia mamy omówione wróćmy może do kodu projektu (Verilog). Przejdżmy do pliku "i2cSlave_define.v" plik ten jest dołączany (dyrektywa include) za pomocą linii: `include "i2cSlave_define.v" do wszystkich plików żródłowych projektu (Verilog) podobnie jak w języku C. W pliku tym mamy zdefiniowane bardzo ważne parametry modulów - patrz źródła: // ----------------------- i2cSlave_define.v -------------------- // stream states `define STREAM_IDLE 2'b00 `define STREAM_READ 2'b01 `define STREAM_WRITE_ADDR 2'b10 `define STREAM_WRITE_DATA 2'b11 // start stop detection states `define NULL_DET 2'b00 `define START_DET 2'b01 `define STOP_DET 2'b10 // i2c ack and nak `define I2C_NAK 1'b1 `define I2C_ACK 1'b0 // ---------------------------------------------------------------- // ------------- modify constants below this line ----------------- // ---------------------------------------------------------------- // i2c device address `define I2C_ADDRESS 7'h3c // System clock frequency in MHz // If you are using a clock frequency below 24MHz, then the macro // for SDA_DEL_LEN will result in compile errors for i2cSlave.v // you will need to hand tweak the SDA_DEL_LEN constant definition `define CLK_FREQ 48 // Debounce SCL and SDA over this many clock ticks // The rise time of SCL and SDA can be up to 1000nS (in standard mode) // so it is essential to debounce the inputs. // The spec requires 0.05V of hysteresis, but in practise // simply debouncing the inputs is sufficient // I2C spec requires suppresion of spikes of // maximum duration 50nS, so this debounce time should be greater than 50nS // Also increases data hold time and decreases data setup time // during an I2C read operation // 10 ticks = 208nS @ 48MHz `define DEB_I2C_LEN (10*`CLK_FREQ)/48 // Delay SCL for use as internal sampling clock // Using delayed version of SCL to ensure that // SDA is stable when it is sampled. // Not entirely citical, as according to I2C spec // SDA should have a minimum of 100nS of set up time // with respect to SCL rising edge. But with the very slow edge // speeds used in I2C it is better to err on the side of caution. // This delay also has the effect of adding extra hold time to the data // with respect to SCL falling edge. I2C spec requires 0nS of data hold time. // 10 ticks = 208nS @ 48MHz `define SCL_DEL_LEN (10*`CLK_FREQ)/48 // Delay SDA for use in start/stop detection // Use delayed SDA during start/stop detection to avoid // incorrect detection at SCL falling edge. // From I2C spec start/stop setup is 600nS with respect to SCL rising edge // and start/stop hold is 600nS wrt SCL falling edge. // So it is relatively easy to discriminate start/stop, // but data setup time is a minimum of 100nS with respect to SCL rising edge // and 0nS hold wrt to SCL falling edge. // So the tricky part is providing robust start/stop detection // in the presence of regular data transitions. // This delay time should be less than 100nS // 4 ticks = 83nS @ 48MHz `define SDA_DEL_LEN (4*`CLK_FREQ)/48 Dla nas najważniejsze są dwa parametry: `define I2C_ADDRESS 7'h3c Pierwszy to adres naszego slave'a w magistrali I2C (jest dostepnych 128 różnych adresów) - wynosi on 3C zapisany heksadecymalnie. Drugi to częstotliwość zegara - 48 MHz: `define CLK_FREQ 48 Teraz drugi plik "registerInterface": `include "i2cSlave_define.v" module registerInterface ( clk, addr, dataIn, writeEn, dataOut, myReg0, myReg1, myReg2, myReg3, myReg4, myReg5, myReg6, myReg7 ); input clk; input [7:0] addr; input [7:0] dataIn; input writeEn; output [7:0] dataOut; output [7:0] myReg0; output [7:0] myReg1; output [7:0] myReg2; output [7:0] myReg3; input [7:0] myReg4; input [7:0] myReg5; input [7:0] myReg6; input [7:0] myReg7; reg [7:0] dataOut; reg [7:0] myReg0; reg [7:0] myReg1; reg [7:0] myReg2; reg [7:0] myReg3; // --- I2C Read always @(posedge clk) begin case (addr) 8'h00: dataOut <= myReg0; 8'h01: dataOut <= myReg1; 8'h02: dataOut <= myReg2; 8'h03: dataOut <= myReg3; 8'h04: dataOut <= myReg4; 8'h05: dataOut <= myReg5; 8'h06: dataOut <= myReg6; 8'h07: dataOut <= myReg7; default: dataOut <= 8'h00; endcase end // --- I2C Write always @(posedge clk) begin if (writeEn == 1'b1) begin case (addr) 8'h00: myReg0 <= dataIn; 8'h01: myReg1 <= dataIn; 8'h02: myReg2 <= dataIn; 8'h03: myReg3 <= dataIn; endcase end end endmodule Plik ten jest o tyle ważny, że widać w nim iż w projekcie jest używanych 8 rejestrów 8-mio bitowych (cztery wejściwe i cztery wyjściowe). Ale tylko jeden rejestr jest w głównym module (implementacja jest trochę niepełna - o czym autor pisze, że jest to punkt wyjścia do własnych implementacji). Dla nas jest jedynie istotne, że dla adresu 8'h00 (czyli 0 dziesiętnie rejestr myReg0 jest obsługiwany poprawnie), będzie to istotne przy pisaniu mastera I2C na Arduino UNO. Tutaj zamieszczam działający projekt " I2C slave" (dla Elbert'a) - Xilinx ISE 14.7: I2CSlave01.zip Jeśli ktoś nie chce uruchamiać syntezy może od razu załadować za pomocą programu "Elbert V2 Configurator" plik "i2cslavetop.bin" do zestawu FPGA. Po wgraniu do zestawu FPGA Elbert pliku konfiguracji i wykonaniu połączeń z Arduino UNO możemy przejść do programu dla Arduino. Najpierw warto programem "I2C scanner" sprawdzić, czy Arduino z załadowanym programem skanera wykryje nam slave'a i2C pod adresem 0x3C. Tutaj kod progrmu "I2C scanner" - program należy skompilować za pomocą "Arduino IDE" i wgrać do płytki Arduino UNO. Kod programu: #include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); while (!Serial); // Leonardo: wait for serial monitor Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the address. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknown error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for next scan } Tak wygląda prawidłowe wykrycie slave'a (FPGA) pod adresem 0x3C na magistrali I2C przez Arduino: Jeśli to zadziała, to możemy wgrać taki krótki program mastera I2C na Arduino UNO: #include <Wire.h> void setup() { Wire.begin(); // join i2c bus (address optional for master) } byte x = 0; void loop() { Wire.beginTransmission(0x3C); // transmit to device #3C Wire.write(0); //wysylamy adres rejestru 0 (ten odczytany w kodzie Verilog) Wire.write(x); // wysylamy jeden bajt - wartosc x Wire.endTransmission(); // stop transmitting x++; delay(500); } Jeśli wszystko poszło OK, możemy obserwować na diodach zestawu Elbert zmienijącą się wartość x (inkrementowaną co jeden obieg pętli głównej programu) przesyłaną z mastera (Arduino) do slave'a (FPGA). Patrz filmik (sorry nie mogę przesłać na forbot pliku mp4 z filmem). Pozdrawiam
  10. Dzień dobry, Próbuję stworzyć platformę jeżdżącą dzięki dwóm silnikom DC sterowanym dzięki sterownikowi TB 6612 FNG. Resztę czujników mam oprogramowaną, brakuje mi tylko właśnie tego stesrownika z DC Silniki: https://botland.com.pl/pl/silniki-dc-katowe-z-przekladnia/3696-kolo-silnik-65x26mm-5v-z-przekladnia-481.html Sterownik: https://botland.com.pl/pl/sterowniki-silnikow-moduly/32-pololu-tb6612fng-dwukanalowy-sterownik-silnikow-135v1a.html Zdjęcie sterownika: Sterownik - Pin z arduino do którego jest wpięty PWMA - Digital 5 AIN2 - Digital 7 AIN1 - Digital 6 PWMB - Digital 10 BIN2 - Digital 9 BIN1 - Digital 8 STBY - Digital 13 Wszystkie GND - GND VCC - 5V z arduino. A/B[01/02] -- silniki VMOT - 5V z arduino Kod: #include <SparkFun_TB6612.h> //Motor 1 int pinAIN1 = 6; //Direction int pinAIN2 = 7; //Direction int pinPWMA = 5; //Speed //Motor 2 int pinBIN1 = 8; //Direction int pinBIN2 = 9; //Direction int pinPWMB = 10; //Speed //Standby int pinSTBY = 13; //Constants to help remember the parameters static boolean turnCW = 0; //for motorDrive function static boolean turnCCW = 1; //for motorDrive function static boolean motor1 = 0; //for motorDrive, motorStop, motorBrake functions static boolean motor2 = 1; //for motorDrive, motorStop, motorBrake functions void setup() { //Set the PIN Modes pinMode(pinPWMA, OUTPUT); pinMode(pinAIN1, OUTPUT); pinMode(pinAIN2, OUTPUT); pinMode(pinPWMB, OUTPUT); pinMode(pinBIN1, OUTPUT); pinMode(pinBIN2, OUTPUT); pinMode(pinSTBY, OUTPUT); } void loop() { //Drive both motors CW, full speed motorDrive(motor1, turnCW, 255); motorDrive(motor2, turnCW, 255); //Keep driving for 2 secs delay(2000); //Turn towards motor1: Stop Motor1, slow Motor2 motorStop(motor1); motorDrive(motor2, turnCW, 192); //Keep turning for 2 secs delay(2000); //Turn in opposite direction: Stop Motor2, slow Motor1 motorDrive(motor1, turnCW, 192); delay(250); motorStop(motor2); //Keep turning for 2 secs delay(2000); //Straighten up motorDrive(motor2, turnCW, 192); delay(500); //Put motors into Standby motorsStandby(); delay(1000); //Do a tight turn towards motor1: Motor2 forward, Motor1 reverse motorDrive(motor1, turnCCW, 192); motorDrive(motor2, turnCW, 192); //Keep turning for 2 secs delay(2000); //Apply Brakes, then into Standby motorBrake(motor1); motorBrake(motor2); motorsStandby(); //Stand still for 5 secs, then we do it all over again... delay(5000); } void motorDrive(boolean motorNumber, boolean motorDirection, int motorSpeed) { /* This Drives a specified motor, in a specific direction, at a specified speed: - motorNumber: motor1 or motor2 ---> Motor 1 or Motor 2 - motorDirection: turnCW or turnCCW ---> clockwise or counter-clockwise - motorSpeed: 0 to 255 ---> 0 = stop / 255 = fast */ boolean pinIn1; //Relates to AIN1 or BIN1 (depending on the motor number specified) //Specify the Direction to turn the motor //Clockwise: AIN1/BIN1 = HIGH and AIN2/BIN2 = LOW //Counter-Clockwise: AIN1/BIN1 = LOW and AIN2/BIN2 = HIGH if (motorDirection == turnCW) pinIn1 = HIGH; else pinIn1 = LOW; //Select the motor to turn, and set the direction and the speed if(motorNumber == motor1) { digitalWrite(pinAIN1, pinIn1); digitalWrite(pinAIN2, !pinIn1); //This is the opposite of the AIN1 analogWrite(pinPWMA, motorSpeed); } else { digitalWrite(pinBIN1, pinIn1); digitalWrite(pinBIN2, !pinIn1); //This is the opposite of the BIN1 analogWrite(pinPWMB, motorSpeed); } //Finally , make sure STBY is disabled - pull it HIGH digitalWrite(pinSTBY, HIGH); } void motorBrake(boolean motorNumber) { /* This "Short Brake"s the specified motor, by setting speed to zero */ if (motorNumber == motor1) analogWrite(pinPWMA, 0); else analogWrite(pinPWMB, 0); } void motorStop(boolean motorNumber) { /* This stops the specified motor by setting both IN pins to LOW */ if (motorNumber == motor1) { digitalWrite(pinAIN1, LOW); digitalWrite(pinAIN2, LOW); } else { digitalWrite(pinBIN1, LOW); digitalWrite(pinBIN2, LOW); } } void motorsStandby() { /* This puts the motors into Standby Mode */ digitalWrite(pinSTBY, LOW); } W kodzie nic nadzwyczajnego nie powinno się znajdować. Korzystam z biblioteki "Sparkfun'a". Sam kodo pochodzi z jego gita. @up kod działa. Jest ok. Piny są podpięte jak w zestawieniu powyżej. Z kodem się zgadzają, z tego co rozumiem ten kod. To silniki powinny się uruchomić, wykonać sekwencję opisane w komentarzach w kodzie i się zatrzymać. Nie mam pojęcia co może być nie tak. Kable do silników są przylutowane. Napięcie w bateriach, na płytce się zgadza, sprawdzone multimetrem. Mogę jeszcze spróbować dać 6V (z 4 paluszków) na sterownik, jako napięcie dla silników i może wtedy ruszy. (Zakres dla sterownika to od 4.5V do 13.5V, na napięcie dla silników). Czy możliwe, że mam złą bibliotekę do sterownika? Próbowałem napisać własne funkcje sterownika. Które ustawiały bity i sterowały silnikami przez mostki na sterowniku (nawiązując do tabelki ze strony 4 ze specyfikacji producenta -> https://www.sparkfun.com/datasheets/Robotics/TB6612FNG.pdf) @up Problem rozwiązałem. Zlutowałem piny w sterowniku (gdzieś w internecie widziałem jak ktoś tak korzystał bez zlutowanych, no mu to jakoś wyszło, nie polecam). Źródło zasilania silników zmieniłem na 4baterie AA, potem na 6baterii AA i zaczęło działać. W razie pytań zapraszam do kontaktu PW. @@up Temat do zamknięcia
  11. Cześć wszystkim Czy jest ktoś w stanie mi powiedzieć jak podłączyć zasilanie do części logicznej Modułu PCA9685 Shield Arduino. Wydaje mi się że samo nałożenie shielda na arduino nie wystarczy. Na dolnej części płytki pisze "VCC select" i mam do wyboru 3V i 5V. Jest ktoś w stanie mi powiedzieć jak mogę wybrać czy chce zasilać poprzez 3V czy 5V?
  12. Cześć wszystkim. Zakupiłem do swojego projektu przekaźnik 2 kanałowy (jak na zdjęciu). Ogólnie chciałem nim sterować za pomocą stanu wysokiego, lecz po podłączeniu okazało się, że cewka załącza się przy podaniu na pin IN stanu niskiego (ale to chyba wymaga tylko zmiany stanu sygnału w programie arduino z H na L) . Niestety nigdzie nie mogę znaleźć schematu do podłączenia takiego modułu, a mam problem z rozszyfrowaniem do czego służy pin COM. Większość schematów przedstawia przekaźniki z pinami: VCC, GND, IN1, IN2. Mój przekaźnik ma dodatkowo pin COM, na który muszę podać napięcie 5V by cewka się załączyła.
  13. Cześć, mam problem ze swoim małym projektem - Rejestrator Czasu Pracy. Jestem początkującym w programowaniu oraz w zabawach z Arduino. Przechodząc do głównego problemu zaprezentuje wam kawałek kodu w którym utknąłem. void loop() { // Sprawdzamy, czy są nowe karty if ( mfrc522.PICC_IsNewCardPresent()) { //odczyt karty if ( mfrc522.PICC_ReadCardSerial()){ unsigned long czasStart1 = 0; unsigned long czasStop1 = 0; unsigned long czas1 = 0; unsigned long czasStart2 = 0; unsigned long czasStop2 = 0; unsigned long czas2 = 0; tone(8, 2000, 100); if (mfrc522.uid.uidByte[0] == 0x09 && mfrc522.uid.uidByte[1] == 0x87 && mfrc522.uid.uidByte[2] == 0xF3 && mfrc522.uid.uidByte[3] == 0x97&& odczyt1 == 0){ lcd.setCursor(0,2); lcd.print("Wejscie "); Serial.print("Wejscie "); odczyt1++; unsigned long czasStart1 = millis(); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" "); if (hour<10) { Serial.print("0"); Serial.print(hour, DEC); } else { Serial.print(hour, DEC); } Serial.print(":"); if (minute<10) { Serial.print("0"); Serial.print(minute, DEC); } else { Serial.print(minute, DEC); } Serial.print(" "); lcd.setCursor(0,3); Serial.println("Jan Nowak "); lcd.print("Jan Nowak "); delay(1000); lcd.clear(); } else if (mfrc522.uid.uidByte[0] == 0x09 && mfrc522.uid.uidByte[1] == 0x87 && mfrc522.uid.uidByte[2] == 0xF3 && mfrc522.uid.uidByte[3] == 0x97&& odczyt1 == 1){ lcd.setCursor(0,2); odczyt1=odczyt1-1; unsigned long czasStop1 = millis(); unsigned long Czas1 = czasStop1 - czasStart1; unsigned long Czas_w_s1 = Czas1 / 1000; unsigned long posrednie = (Czas_w_s1/3600)*60; unsigned long Czas_w_h1 = Czas_w_s1/3600; unsigned long Czas_w_m1 = (posrednie%60); lcd.print("Wyjscie"); Serial.print("Wyjscie "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" "); if (hour<10) { Serial.print("0"); Serial.print(hour, DEC); } else { Serial.print(hour, DEC); } Serial.print(":"); if (minute<10) { Serial.print("0"); Serial.print(minute, DEC); } else { Serial.print(minute, DEC); } Serial.print(" "); lcd.print(" Time "); Serial.print("Jan Nowak "); Serial.print("Czas pracy "); if (Czas_w_h1 < 10) { lcd.print("0"); Serial.print("0"); lcd.print(Czas_w_h1, DEC); Serial.print(Czas_w_h1, DEC); } else { lcd.print(Czas_w_h1, DEC); Serial.print(Czas_w_h1, DEC); } lcd.print(":"); Serial.print(":"); if (Czas_w_m1<10) { lcd.print("0"); Serial.print("0"); lcd.print(Czas_w_m1, DEC); Serial.print(Czas_w_m1, DEC); Serial.println(" "); } else { lcd.print(Czas_w_m1, DEC); Serial.print(Czas_w_m1, DEC); Serial.println(" "); } lcd.setCursor(0,3); lcd.print("Jan Nowak "); delay(3000); lcd.clear(); } To jest prosty projekt do szkoły. Mam dwóch pracowników, którzy po przyjściu do pracy "odbijają się" czytnikiem. Na wyświetlaczu jest cały czas wyświetlona data, godzina oraz dzień tygodnia. Jeżeli odbiją się pierwszy raz to wyświetla się "Wejście" do pracy oraz imię i nazwisko pracownika. Jeżeli odbiją się drugi raz to zmienia się "Wejście" na "Wyjście" wyświetla się imię, nazwisko, oraz przepracowany czas!!!! No i tu są schody. Podczas pierwszego odbicia sczytuję unsigned long czasStart1 = millis(); podczas drugiego odbicia sczytuję unsigned long czasStop1 = millis(); oraz chcę od czasStop1-czasStart1 aby wyliczyć czas pracy pracownika. To wszystko jest robione w jednej funkcji void loop() { .... } ale nie przekazuje mi zmiennej czasStart1. Pomocy, jak to mogę rozwiązać inaczej?
  14. Witam, mam problem z wgraniem programu do Arduino. Po kliknięciu wgraj, wszystko się kompiluje, ale gdy rozpoczyna się wgrywanie, pasek postępu dochodzi do końca, a samo wgrywanie nie kończy się w ogóle, mogło by to trwać w nieskończoność (żadne błędy nie wyskakują). Gdy odłączę Arduino mogę dopiero zobaczyć błędy które wyskoczyły: avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x4a Nie jest to raczej związane z programem, bo na każdym wszystko dzieje się tak samo. Reinstall programu już robiłem. Proszę o pomoc i z góry dziękuję
  15. Cześć, jakiś czas temu postanowiłem zaprojektować robota, którego mógłby zbudować każdy z dostępem do drukarki 3d i dość skromnym budżetem. Rozwiązania konstrukcyjne częściowo opierałem na BCN3D MOVEO i innych podobnych konstrukcjach, jednak chciałem żeby manipulator był bardziej precyzyjny w czym miało pomóc zastosowanie łożysk w każdej z osi. Przekładnie w pierwszej i czwartej osi to wydrukowane koła zębate, przełożenia kolejno 1:7 i 1:6, w osiach 3 i 5 zastosowano przekładnie pasowe zębate, przełożenia kolejno 1:8,435 i 1:6.125. Jak widać manipulator jest jeszcze nie skończony, brak mu osi drugiej. Początkowo oś 2 i 3 miały być takie same, jednak ze względu na większe obciążenia, musiałem przeprojektować drugą oś, zastosować większy pasek (T5x10 zamiast gt2x6mm) oraz dodatkową przekładnię planetarną. Oś druga jest jeszcze w fazie projektowej. Koszt (bez kosztów przesyłki): "mechanika": silniki krokowe używane z allegro: około 40zł łożyska: około 60 zł śruby/nakrętki: około 50 zł filament do drukarki ABS 2x 1kg: 120 zł serwomechanizm do chwytaka (wziąłem jaki miałem pod ręka, ale można użyć tańszy): 50 zł co daje około 320 zł elektronika: Płytka zgodna z Arduino Mega: 40 zł RAMPS 1.4: 20 zł StepSticki : 30 zł Zasilacz 250W: 48 zł = 138 + przewody czyli powiedzmy 160 zł W sumie wyszło około 480 zł czyli trochę drożej niż planowałem jednak można przyoszczędzić np. nie kupując nowego zasilacza itp. Obecnie planuję: skończyć projekt osi drugiej i zrobić prototyp oraz przetestować go razem z całym robotem wydrukować i zamontować przekładnie planetarną do osi trzeciej dokończyć komunikację robota z ROSem przez bibliotekę rosserial arduino
  16. Witam Tworzę robota który będzie w stanie podążać za pomocą GPS za GPSem w telefonie. Aktualnie posiadam GPS NEO 6M -0-001. Problem jest jaki, że GPS ten nie jest za bardzo dokładny. W karcie katalogowej miał napisane, że dokładność wynosi około 2,5m. Dokładność ta chyba dotyczy wartości przy dostępnych 12 satelitach bo u mnie błąd to od 20m do 15m przy dostępnych 7-9 satelitach. Żeby robot działał w miarę poprawnie potrzebował bym dokładności do 5m. Nie chciałbym wydawać na moduł GPS z 200 - 300 zł więc zacząłem zastanawiać się nad modułami z glonass. Czy ktoś coś o tym wie? Czy to się nada na do mojego projektu? Jeśli tak jaki model polecacie ?
  17. Witam Mam problem z modułem GPS a dokładnie z Ublox NEO-6m. Otóż po podłączeniu modułu pod Arduino UNO wgraniu biblioteki TinyGPS oraz uruchomieniu przykładu test_with_gps_device po uruchomieniu monitora portu, zamiast danych dostaję tylko gwiazdki (***). Moduł podłączam TX pin 10 VCC 5, GND. W programie testowych zmieniam dane dotyczące Baudu oraz piny niestety bez większego rezultatu. Oglądałem filmiki oraz czytałem odnośnie podłączenia tego modułu ale nic nie pomaga. Może ktoś wie co robię nie tak.
  18. Cóż, winny się tłumaczy, po obfitości tłumaczenia można wnioskować o wadze winy. Oj @Elvis , @Elvis jak pijesz to nie śpiewaj bo fałszujesz. I żebyś nie zapomniał, łap mordę, hah
  19. Witam, zakupiłem ostatnio arduino uno, moduł ethernet enc28j60 oraz shield do sterowania silnikami DC. Bardzo mi zależy żebym mógł sterować prędkością i kierunkiem tych silników z przeglądarki internetowej z modułu ethernet podłączonego kablem do PC (chciałbym żeby był to np. wirtualny joystick, z którego obrót myszką pozwoli na sterowanie poszczególnymi silnikami). Dodam, że nie za bardzo wiem jak przesłać dane z silników do arduino oraz jak stworzyć takie sterowanie (joystick). Nigdzie nie znalazłem podpowiedzi i utknąłem w martwym punkcie z prostą stroną html i silnikami sterowanymi z poziomu programu. Wiem, że to może dość trudne zadanie, ale bardzo mi zależy na takim rozwiązaniu. Może macie jakieś porady lub wskazówki gdzie mógłbym zaczerpnąć informacji jak to zrobić?
  20. Witam. Mam problem z czujnikiem odległości. Gdy wgram program na sam czujnik to działa normalnie, ale jak dołączę do tego ekran LCD 240*240 IPS 1,3", to czujnik pokazuje mi ciągle 0cm. Ma ktos pomysł co to może być ? #define trigPin 12 #define echoPin 10 #define TFT_DC 7 #define TFT_RST 8 #define SCR_WD 240 #define SCR_HT 240 // 320 - to allow access to full 240x320 frame buffer #include <SPI.h> #include <Adafruit_GFX.h> #include <Arduino_ST7789_Fast.h> Arduino_ST7789 lcd = Arduino_ST7789(TFT_DC, TFT_RST); //Arduino_ST7789 lcd = Arduino_ST7789(TFT_DC, TFT_RST, TFT_CS); void setup(void) { Serial.begin(9600); pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście pinMode(echoPin, INPUT); //a echo, jako wejście lcd.init(SCR_WD, SCR_HT); lcd.fillScreen(BLACK); lcd.setCursor(0, 0); lcd.setTextColor(WHITE,BLUE); lcd.setTextSize(3); //lcd.println(dystans); } void loop() { long czas, dystans; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); czas = pulseIn(echoPin, HIGH); dystans = czas / 58; Serial.print(dystans); Serial.println(" cm"); lcd.println(dystans); delay(1000); }
  21. Dzień dobry Mam połączone Arduino Mega z Uno przy pomocy I2C do komunikacji. Mega jest "master", który po wciśnięciu przycisku wysyła wartość zmiennej "stan". Uno jako "slave" ma tą wartość odczytać i wykonać odpowiednie polecenie. I tu jest problem, ponieważ o ile Mega wysyła wartość (gdy sprawdzam status transmisji komendą: unsigned char statuss = Wire.endTransmission(); Serial.println (statuss); to wartość "statuss" = 0, czyli sukces) to gdy sprawdzam monitor Uno, to nic tam nie ma do wyświetlenia. Czy mógłby mi ktoś powiedzieć gdzie występuje błąd w mojej pracy ? Kod dla Mega: // Enable debug prints to serial monitor #define MY_DEBUG // Enable serial gateway #define MY_GATEWAY_SERIAL // Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender) #if F_CPU == 8000000L #define MY_BAUD_RATE 38400 #endif // Enable inclusion mode #define MY_INCLUSION_MODE_FEATURE // Enable Inclusion mode button on gateway #define MY_INCLUSION_BUTTON_FEATURE // Inverses behavior of inclusion button (if using external pullup) //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP // Set inclusion mode duration (in seconds) #define MY_INCLUSION_MODE_DURATION 60 // Digital pin used for inclusion mode button #define MY_INCLUSION_MODE_BUTTON_PIN 3 #define MY_REPEATER_FEATURE //----------------biblioteki----------------------------- #include <SPI.h> #include <MFRC522.h> //RFID RC522 #include <Wire.h> //Dla I2C #include <Bounce2.h> //Obsługa przycisków #include <MySensors.h> //------------------------------------------------------- //----------------definiowanie elementów----------------- #define BUTTON_PIN 31 #define RELAY_1 24 // Arduino Digital I/O pin number for first relay (second on pin+1 etc) #define NUMBER_OF_RELAYS 1 // Total number of attached relays #define RELAY_ON 1 // GPIO value to write to turn on attached relay #define RELAY_OFF 0 // GPIO value to write to turn off attached relay //------------------------------------------------------- //----------------zmienne-------------------------------- Bounce debouncer = Bounce(); volatile boolean stan = true; //------------------------------------------------------- //------------------------------------------------------- void before() { for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) { // Then set relay pins in output mode pinMode(pin, OUTPUT); // Set relay to last known state (using eeprom storage) digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF); } } //------------------------------------------------------- //------------------------------------------------------- void setup() { // Setup locally attached sensors delay(5000); // Setup the button. pinMode(BUTTON_PIN, INPUT_PULLUP); // After setting up the button, setup debouncer. debouncer.attach(BUTTON_PIN); debouncer.interval(5); digitalWrite(RELAY_1, LOW); //Inne Serial.begin(9600); SPI.begin(); } //------------------------------------------------------- //------------------------------------------------------- // Główna funkcja sterująca void loop() { // Send locally attached sensor data here if (debouncer.update()) { // Get the update value. int value = debouncer.read(); // Send in the new value. if(value == LOW) { stan = !stan; Serial.println(stan); Wire.beginTransmission(1); Wire.write(stan); // sends one byte Wire.endTransmission(); unsigned char statuss = Wire.endTransmission(); Serial.println (statuss); } } } //------------------------------------------------------- Kod dla Uno: //----------------biblioteki----------------------------- #include <Servo.h> //Servo #include <Wire.h> //Dla I2C //------------------------------------------------------- //----------------zmienne-------------------------------- volatile byte stan = 1; //------------------------------------------------------- //------------------------------------------------------- void setup() { Serial.begin(9600); Wire.begin(1); } //------------------------------------------------------- //------------------------------------------------------- // Główna funkcja sterująca void loop() { Wire.onReceive(czytaj); } //------------------------------------------------------- //------------------------------------------------------- void czytaj(int howMany) { if (Wire.available()) { stan = Wire.read(); // receive byte as a character Serial.println(stan); } } //------------------------------------------------------- Jeśli chodzi o połączenia to na pewno są dobrze, ponieważ gdy wczytam przykłady z biblioteki "Wire" to komunikacja działa poprawnie. Może źle korzystam z biblioteki "MySensors" ?
  22. #include <FastLED.h> // Druga biblioteka sterowania diodami #define PIN 2 // Pin do sterowania diodami #define NUMPIXELS 30 // Ilosc diod #define COLOR_ORDER RGB #define LED_TYPE WS2811 #define MAX_BRIGHTNESS 255 char OdebraneDane[20]; int indeks=0; char data; float Dioda_R = 0; // wartosc jasnosci dla diod czerwonych float Dioda_G = 0; // wartosc jasnosci dla diod zielonych float Dioda_B = 100; // wartosc jasnosci dla diod niebieskich char znak =""; int x=6; CRGB led[NUMPIXELS]; void setup() { Serial.begin(9600); FastLED.setBrightness(MAX_BRIGHTNESS); FastLED.addLeds<NEOPIXEL, PIN>(led, NUMPIXELS); FastLED.clear(); } void loop() { wybor_funkcji(); } void wybor_funkcji() { if (Serial.available() > 0 ) { if (Serial.read() == 'f') { x = 0; } Serial.println(x); } delay(200); while (x == 0){ ustawienie_koloru(); } } void ustawienie_koloru() { while (1 == 1) { x=8; Serial.print("ustawienie koloru:"); Serial.println(indeks); if (Serial.available() > 0 ) { delay(200); do{ Serial.print("przerwa"); znak = (char)Serial.read(); OdebraneDane[indeks] = znak; indeks++; } while(znak != '\n'); OdebraneDane[indeks] = 0; indeks=0; delay(200); } } } Powyżej zamieściłem kod o którym mowa. Zamieszczę również zdjęcie bloków z MIT app inventor. Aplikacja ma służyć do sterowania LED'ami. Z niewiadomej dla mnie przyczyny po wysłaniu kilka razy informacji do bluetooth poprzez moduł HC-05 wyskakuje błąd "516 - broken pipe". Aplikacja mobilna była tworzona w MIT app inventor oraz w kotlinie (android studio). Wciąż ten sam problem. Wiem, że broken pipe występuje ze względu na problem z połączeniem użytkownik-odbiorca. W blokach w MIT app inventor zamieściłem fragment, który łączy mnie z powrotem z arduino. Niestety jest to połowiczne rozwiązanie, bo ponowne łączenie trwa z 6 sekund (co jest irytujące). Ciekawe, że kiedy korzystam z aplikacji RoboRemo, wszystko działa jak należy... Ktoś miał podobny problem? Ktoś wie jak go rozwiązać?
  23. Witam. Mam problem z sterownikiem ESC do silnika BLDC. Dodatkowo silnik bardzo mi się nagrzewa po kilku sekundach pracy bez obciążenia nie da się go dotknąć. Jestem początkujący i chciałem uruchomić silnik aby w ogóle zaczął się kręcić. Wszystko się grzeje a ze sterownika poszedł nawet dym. Używam następujących podzespołów: https://abc-rc.pl/product-pol-12358-ESC-ABC-Power-Air-40A-2-3S-BEC-1A-Prosty-regulator-silnikow.html https://allegro.pl/oferta/bateria-li-po-11-1v-3s-1000mah-25c-35c-zippy-rc-7787929208?snapshot=MjAxOS0xMS0wNVQxNTo1NTozNi4wODFaO2J1eWVyO2EzNDFmMTJkMzhjYTAzMjVkNTk3ODg5NDA0NmRkNzZkOWM3ZDJhNmRiODIzZmFiNjc2MzBmOGJhOWU4MjkwYmE%3D https://pl.aliexpress.com/item/32822131805.html?src=google&src=google&albch=shopping&acnt=494-037-6276&isdl=y&slnk=&plac=&mtctp=&albbt=Google_7_shopping&aff_platform=google&aff_short_key=UneMJZVf&&albagn=888888&albcp=6459808507&albag=76872920869&trgt=743612850874&crea=pl32822131805&netw=u&device=c&gclid=Cj0KCQiA2vjuBRCqARIsAJL5a-JQrX5JscoqziVYoLqq4Xq4TNgpofR3NcNXMkl321WQCJxTgm_MvF0aAn6SEALw_wcB&gclsrc=aw.ds Użyłem podłączenia jak na filmie tylko że zwarłem A0 z 3.3V gdyż nie mam potencjometru. Czy wina jest w źle dobranym sprzęcie? Pozdrawiam
  24. Cześć, to mój pierwszy post, poza powitalnym. Przechodząc do rzeczy: problem dotyczy zakupionego joysticka (link https://allegro.pl/show_item.php?item=5152872458). Chcę stworzyć sterowany joystickiem samochód, dlatego potrzebuję odczytu analogowego osi joysticka w zakresie 0 - 1023 na Arduino, To udało mi się uzyskać, tzn program odczytuje wartości w tym zakresie. Problem polega na tym, że wartości skrajne 0 lub 1023 (w zależności od strony wychylenia) uzyskuję przy połowie wychylenia joysticka. Czyli przykładowo dla osi Y: gdy joystick jest w naturalnej pozycji środkowej, odczyt wynosi 470. Wraz z (bardzo bardzo!) delikatnym ruszeniem joysticka w górę, wartość ta rośnie stopniowo aż wychylam do połowy możliwego wychylenia i uzyskuję odczyt 1023. Dalsze zwiększanie wychylenia nic nie zmienia, pozostaje wartość 1023. Tak dzieje się w każdym kierunku (ewentualnie wartość zamiast rosnąć maleje do 0 w połowie wychylenia, w przypadku przeciwnych kierunków). I teraz pytanie: czy ja coś źle podłączyłem? Co robię źle? Kupiłem dwie sztuki tych joysticków i obie identycznie się zachowują, co sugeruje, że błąd może leżeć po mojej stronie. Pozdrawiam serdecznie, Michał
  25. Cześć, zabieramy się z kolegą do zrobienia line followera na arduino nano, chcielibyśmy się zapytać, czy jest on przygotowany poprawnie. Wszystko będzie zasilane przez Li-Pol 7.4 V. Poniżej wrzucam schematy naszego układu
×
×
  • Utwórz nowe...