Skocz do zawartości

krzywy187

Użytkownicy
  • Zawartość

    30
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O krzywy187

  • Ranga
    3/10

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Sosnowiec
  • Zawód
    Mechatronik

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. To mógłbym w sumie zmienić silniki na Nema 17, dość popularne i tanie które z odzysku kosztują około 15 zł. W przypadku doboru silników gdzieś czytałem że nie patrzy się na napięcie pracy tylko oporność cewki. Czy to prawda ? Jeśli tak to dlaczego i jak obliczyć przy jakim napięciu może to pracować.
  2. O tych stratach już słyszałem, wezmę to pod uwagę, czyli zakładam że podłączone silniki 5V będą wymagały mocniejszego zasilacza podpiętego na shieldzie, ok. 2V więcej ? Mały ploter to znaczy pole robocze o wymiarach A5, silniki będą musiały uciągnąć na szynach około 350-450 g (masa jednej z osi) a do grawerowania użyję długopis na początku do testów, potem zostanie zastąpiony laserem z odzysku lub jakimś laserkiem małej mocy.
  3. Witam, mam zamiar zbudować mały ploter cnc na bazie Arduino. Sporo przeglądałem w sieci i jakoś padło na silniki Unipolarne 28BYJ-48 5V oraz sterownik Shield L293D. Generalnie padło na wybór takiego sterownika żeby można było podłączyć te silniki bez modyfikacji (A4988 obsługuje bipolarne). W sieci widzę dużo działających projektów na tym shieldzie ale przeglądając wiele różnych stron natykam się negatywnymi opiniami na temat budowy plotera na bazie L293D shielda, widziałem na yt wiele działających projektów tak więc mam mętlik 1. Czy Shield L293D nadaje się do budowy plotera ? 2. Który gbrl controller najlepiej nadaje się do tej płytki ? 3. Czy 28BYJ-48 dadza radę czy to tylko słaba zabawka ?
  4. Na początek chyba zacznę od czegoś co jest w cenie dobrego piwa czyli FS100A na 433 Mhz, jak zacznie banglać to zacznę inwestować. Dobrym wyborem wydaje mi sie też nRF24L01 bo dość często widze go w projektach. Znalazłem też trochę kodu z projektu zdalnego czujnika do bojlera o TUTAJ gdzioe wysyłane są dwie wartości i używana jest biblioteka Virtual Wire
  5. Im mniej roboty tym lepiej, więc mógłbym dołożyć do lepszych odbiorników i nadajników. Fakt, mój błąd jeśli chodzi a w jaki sposób to działa. Najważniejsze żeby spełniało założenie przysłania informacji w prosty sposób. Pewnie też posiłkując się jakaś biblioteką, może coś polecacie ? I jakie moduły są najmniej obsługowe
  6. Dzięki za odpowiedź już wiem na czym bazować. Polecacie jeszcze jakieś rozwiązanie? Chodzi mi o słowa kluczowe jakis tematów z C++ którymi dało się to też zrobić, później sobie doszukam informacji na ten temat, lubię też uczyć się przy okazji.
  7. Witam Na wstępie powiem że nie idę na łatwiznę i przeszukałem mnóstwo materiałów w sieci na temat wysyłania danych po UART. Znalazłem albo kompletnie nic albo konkrety, które nie zostały wytłumaczone dokładnie np: LINK1 LINK2 Wszystko sprowadza się do kodu, czyli jak wysłać, zdefiniować poprawnie ramkę i również ją odczytać a potem rozdzielić na konkretne zmienne. Zamierzam jedną "paczką danych" wysłać 4 wartości różnych potencjometrów. Największy problem jest z odczytem, program który potrafi zrozumieć odebraną ramkę. Projekt zakłada arduino nadajace z modułem rf i potencjometrami oraz arduino odbierajace czyli arduino z odbiornikiem rf, zwyczjane sterowanie do robota a moduł radiowy zapewnia spory zasięg. Może ktoś ma dobre źródło wiedzy na ten temat albo potrafi przykładowo część kodu zademonstrować byłbym wdzięczny. Pozdrawiam
  8. Powiem krótko. Da się. Oczywiście zaoszczędzić i mieć satysfakcję z tego że się zbudowało coś samemu, ale latające pojazdy wymagają czegoś więcej. Na etapie programowania może być ciężko bo dron musi myśleć sam (utrzymanie się nad ziemią) i wykonywać polecenia pilota. Spróbuj czegoś prostszego najpierw albo faktycznie skorzystaj z forów modelarskich. Ale szczerze kup jjrc h31 na Ali. Za 100 zl z hakiem masz prostego i wodoodpornego drona.
  9. W sumie może lepiej podpiąć start pod jeden przycisk a pod inne np załączenie ledów czy jakiś inny bajer. Może w przyszłości rozbudujesz i pod jednym przyciskiem zrobisz wykonywanie programu dla sumo a na innych reczne sterowanie lub coś innego. Ale wracając do tematu masz prosty przykład który możesz ślepo kopiować, wiadomo wszystko musisz zrobić pod siebie. Tylko pamietaj że w miejscu adresu musisz wpisać adres ir danego przycisku (na necie jest dużo detektorów kodu jak coś) a poniżej wykonywany kod. Mój program służył do włączenia i wyłączenia diody za pomoca jednego przycisku. Analogicznie wers z case'm wystarczy skopiować wpisać adres i co ma się dziać, tylko ilość przycisków na pilocie cię ogranicza. #include <IRremote.h> #define irPin 2 IRrecv irrecv(irPin); decode_results results; int stan; void setup() { Serial.begin(9600); irrecv.enableIRIn(); pinMode(5, OUTPUT); } void loop() { if (irrecv.decode(&results)) { switch (results.value) { case 0xFFA25D: Serial.println("1"); stan = !stan; digitalWrite(5, stan); delay(250); break; } irrecv.resume(); } }
  10. typowy program skanujący i2c pokazuje własnie adres 0D jak i inne sketche które znalazłem w internecie. Jedynie co to mówisz to przyda mi się program który pracuję pod konkretnym adresem który go sprawdza. Zgaduje że nie ma nic gotowego i muszę coś wymyśleć xd
  11. Witam, mam problem z w/w czujnikiem, dla nie wtajemniczonych jest to magnetometr, dzięki niemu można skonstruować kompas. Problem polega na tym że gdy podłącze do arduino i wgram jakikolwiek przykładowy program to wartości xyz zawsze pokazuje albo tylko same zera albo jedynki, np. że x=1 y=1 z=1. Sprawdzałem podłączenie kilka razy, zasilanie itp. Wykrywa adres 0d gdy wgram i2c scanner ale domyślnie te moduły chyba działają na adresie 1E. Załaczam program na którym bazowałem. Jest to ten sam którym bawił się Elektromaras na yt i jemu działało xd /* Include the standard Wire library */ #include <Wire.h> /* The I2C address of the module */ #define HMC5803L_Address 0x1E /* Register address for the X Y and Z data */ #define X 3 #define Y 7 #define Z 5 void setup() { Serial.begin(9600); /* Initialise the Wire library */ Wire.begin(); /* Initialise the module */ Init_HMC5803L(); delay(300); } void loop() { /* Read each sensor axis data and output to the serial port */ Serial.print("X="); Serial.print(HMC5803L_Read(X)); Serial.print(" "); Serial.print("Y="); Serial.print(HMC5803L_Read(Y)); Serial.print(" "); Serial.print("Z="); Serial.println(HMC5803L_Read(Z)); /* Wait a little before reading again */ delay(200); } /* This function will initialise the module and only needs to be run once after the module is first powered up or reset */ void Init_HMC5803L(void) { /* Set the module to 8x averaging and 15Hz measurement rate */ Wire.beginTransmission(HMC5803L_Address); Wire.write(0x00); Wire.write(0x70); /* Set a gain of 5 */ Wire.write(0x01); Wire.write(0xA0); Wire.endTransmission(); } /* This function will read once from one of the 3 axis data registers and return the 16 bit signed result. */ int HMC5803L_Read(byte Axis) { int Result; /* Initiate a single measurement */ Wire.beginTransmission(HMC5803L_Address); Wire.write(0x02); Wire.write(0x01); Wire.endTransmission(); delay(6); /* Move modules the resiger pointer to one of the axis data registers */ Wire.beginTransmission(HMC5803L_Address); Wire.write(Axis); Wire.endTransmission(); /* Read the data from registers (there are two 8 bit registers for each axis) */ Wire.requestFrom(HMC5803L_Address, 2); Result = Wire.read() << 8; Result |= Wire.read(); return Result; }
  12. Witam jestem trochę bardziej zaawansowany jednak mój problem jest dość prosty i prawdopodobnie szukam kluczowych dwóch linijek. A więc: chce żeby przed uruchomieniem arduino sprawdzało czy czujnik (np ds18b20) jest podłączony, w obu przypadkach będzie komunikat o tym (wyświetlany na ekranie OLED) coś typu : sprawdź czy jest podłączony czujnik jeśli tak to OK jeśli nie to ERROR
  13. Zmieniłem bibliotekę znów i jest nieco lepiej, znacznie wyraźniej lecz sprawne oko wychwyci szum, zauważyłem tez że diody na arduino bardzo szybko migają podczas pracy a konkretnie RX i L. RX rozumiem bo sygnalizuje dane. #define SEG_A 2 #define SEG_B 3 #define SEG_C 4 #define SEG_D 5 #define SEG_E 6 #define SEG_F 7 #define SEG_G 8 #define SEG_DP 9 #include <OneWire.h> #include <DS18B20.h> #define ONEWIRE_PIN A0 int temp = 0; byte address[8] = {0x28, 0x7, 0x0, 0x7, 0xF4, 0xCE, 0x1, 0x38}; OneWire onewire(ONEWIRE_PIN); DS18B20 sensors(&onewire); int liczba1; int liczba2; int time = 4; void setup() { Serial.begin(9600); sensors.begin(); sensors.request(address); pinMode(SEG_A, OUTPUT); pinMode(SEG_B, OUTPUT); pinMode(SEG_C, OUTPUT); pinMode(SEG_D, OUTPUT); pinMode(SEG_E, OUTPUT); pinMode(SEG_F, OUTPUT); pinMode(SEG_G, OUTPUT); pinMode(SEG_DP, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); digitalWrite(SEG_A, HIGH); delay(200); digitalWrite(SEG_G, HIGH); delay(200); digitalWrite(SEG_D, HIGH); delay(200); digitalWrite(SEG_A, LOW); digitalWrite(SEG_G, LOW); digitalWrite(SEG_D, LOW); delay(200); } void loop() { temp = sensors.readTemperature(address); sensors.request(address); Serial.println(temp); int liczba1=temp/10%10; int liczba2=temp%10; if (liczba1<0) {liczba1=liczba1*(-1);} if (liczba2<0) {liczba2=liczba2*(-1);} digitalWrite(10, LOW); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); digitalWrite(SEG_DP, LOW); if (temp<0) {SEGLED(11);} else {SEGLED(12);} delay(time); digitalWrite(10, HIGH); digitalWrite(11, LOW); digitalWrite(12, HIGH); digitalWrite(13, HIGH); digitalWrite(SEG_DP, LOW); if (temp<10 && temp>-10) {SEGLED(12);} else { SEGLED(liczba1);} delay(time); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, LOW); digitalWrite(13, HIGH); digitalWrite(SEG_DP, HIGH); SEGLED(liczba2); delay(time); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, LOW); digitalWrite(SEG_DP, LOW); SEGLED(10); delay(time); } void SEGLED(int cyfra){ switch (cyfra) { case 0: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, LOW); break; case 1: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; case 2: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 3: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 4: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 5: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 6: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 7: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; case 8: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 9: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 10: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, LOW); break; case 11: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 12: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; } }
  14. Witam Realizuje projekt w którym arduino odczytuje temperaturę z czujnika ds18b20 a następnie za pomocą multipleksowania wyświetla aktualną temperaturę na wyświetlaczu 7 segmenotwym x 4. Mój problem: gdy program dochodzi do ostatniej cyfry "zatrzymuje się" na chwilę przez co psuje multipleksowanie, myślę że to wina programu, próbowałem z inna biblioteką ale tam był problem ze stablinym odczytem tak więc korzystam z biblioteki DallasTemperature. żeby łatwiej ogarnąć co zrobiłem opisze każdy segment 1 segment Pokazuje tylko minus gdy temperatura jest poniżej zera 2 segment pokazuje liczbę dziesiątek chyba że temperatura jest -10 3 segment pokazuje liczbe jedności 4 segemnt na stałe pokazuje litere C case od 10 do 12 ma zapisane nietypowe stany jak właśnie minus, pusty wyświetlacz albo literę C załączam filmik z działania mój kod: #define SEG_A 2 #define SEG_B 3 #define SEG_C 4 #define SEG_D 5 #define SEG_E 6 #define SEG_F 7 #define SEG_G 8 #define SEG_DP 9 #include <OneWire.h> #include <DallasTemperature.h> int liczba1; int liczba2; int temp; int time = 10; OneWire oneWire(A0); DallasTemperature sensors(&oneWire); void setup() { Serial.begin(9600); pinMode(SEG_A, OUTPUT); pinMode(SEG_B, OUTPUT); pinMode(SEG_C, OUTPUT); pinMode(SEG_D, OUTPUT); pinMode(SEG_E, OUTPUT); pinMode(SEG_F, OUTPUT); pinMode(SEG_G, OUTPUT); pinMode(SEG_DP, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); digitalWrite(SEG_A, HIGH); delay(300); digitalWrite(SEG_G, HIGH); delay(300); digitalWrite(SEG_D, HIGH); delay(300); digitalWrite(SEG_A, LOW); digitalWrite(SEG_G, LOW); digitalWrite(SEG_D, LOW); delay(300); } void loop() { sensors.begin(); sensors.requestTemperatures(); float ds18b20 = sensors.getTempCByIndex(0); Serial.println(sensors.getTempCByIndex(0)); temp = float (ds18b20); int liczba1=temp/10%10; int liczba2=temp%10; if (liczba1<0) {liczba1=liczba1*(-1);} if (liczba2<0) {liczba2=liczba2*(-1);} digitalWrite(10, LOW); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); digitalWrite(SEG_DP, LOW); if (temp<0) {SEGLED(11);} else {SEGLED(12);} delay(time); digitalWrite(10, HIGH); digitalWrite(11, LOW); digitalWrite(12, HIGH); digitalWrite(13, HIGH); digitalWrite(SEG_DP, LOW); if (temp<10 && temp>-10) {SEGLED(12);} else { SEGLED(liczba1);} delay(time); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, LOW); digitalWrite(13, HIGH); digitalWrite(SEG_DP, HIGH); SEGLED(liczba2); delay(time); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, LOW); digitalWrite(SEG_DP, LOW); SEGLED(10); } void SEGLED(int cyfra){ switch (cyfra) { case 0: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, LOW); break; case 1: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; case 2: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 3: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 4: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 5: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 6: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 7: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; case 8: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 9: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 10: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, LOW); break; case 11: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 12: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; } }
  15. Jak narazie mam tyle działającego kodu, pod jedno serwo. Średnio rozumiem końcówkę. #include <Servo.h> Servo servomotor; char c; String status; void setup() { servomotor.attach(11); servomotor.write(90); Serial.begin(9600); } void loop() { Serial.println(c); if (Serial.available()) { c = Serial.read(); if (c == 'A') { servo(); } } } void servo() { delay(30); while (Serial.available()) { char c = Serial.read(); status += c; } if (status.length() > 0) { servomotor.write(status.toInt()); status = ""; } }
×
×
  • Utwórz nowe...