Skocz do zawartości

Tablica liderów

Popularna zawartość

Pokazuje zawartość z najwyższą reputacją 16.05.2022 w Posty

  1. Pewnie jeszcze lepiej byłoby z innej perspektywy dodać, ale ja, choć się nie znam, powiedziałbym, że ten pośrodku jest mocno spuchnięty. Ktoś mądrzejszy potwierdzi bądź zaprzeczy. Pozwolę sobie podlinkować zdjęcie z kursu: Od nowości to są dość płaskie od góry.
    2 punkty
  2. Cześć, przedstawiam projekt dla fanów drinków dla których zachowanie proporcji jest niezmiernie istotne. Postanowiłem, że robot będzie nalewał trzy różne substancje (jak na domowego barmana w zupełności wystarczy). Wykorzystałem w tym celu pompki membranowe, które są stosunkowo tanie, jednak warto użyć zaworów zwrotnych przy każdym z węży ponieważ "na postoju" nie są szczelne i ciecze powoli kapią z dysz robota. Przy innym projekcie zdarzyło mi się, że pompka była nieszczelna, więc w tym zamontowałem je w miejscu w którym ewentualny wyciek nie narobi szkód. We wcześniejszych konstrukcjach ustawiałem lanie zależne od zadanego czasu, jednak po testach (wspierając się wagą kuchenną) stwierdziłem, że odmierzane wartości nie są powtarzalne. Wtedy postanowiłem dodać wbudowaną wagę. Użyłem belki tensometrycznej do 1kg oraz wzmacniacza HX711. Robot zasilany jest zasilaczem wtykowym 12V a jego serce to Arduino Mega - ze względu na zapotrzebowanie na dużą liczbę wejść/wyjść. Do sterowania pompek użyłem gotowego Shielda - sterownika L293D – może sterować czterema silnikami DC i zajmuje mało miejsca w obudowie, a chciałem żeby konstrukcja była zwarta i jak najmniejsza. Początkowo użyłem wyświetlacza 2x16, jednak wyświetlane dane nie były tak przejrzyste, jakbym tego chciał więc zamontowałem wyświetlacz 4x16. Teraz każdy składnik ma swoją nieskróconą nazwę i ma swoją osobną linijkę. Wartości danych substancji ustawia się przy pomocy trzech potencjometrów. Wyskalowałem wartość każdego od 0 do 150g. W przypadku przekroczenia sumy trzech substancji powyżej 250g, zamontowane diody RGB świecą na czerwono (jest to tylko sygnał ostrzegawczy, nie blokuje nalewania). Diody te również „ubarwiają” proces tworzenia drinka (efekt widoczny na załączonym filmie). Po ustawieniu ulubionych proporcji wciskamy START i nalewanie odbywa się automatycznie, przed nalaniem każdego składnika waga samoczynnie się taruje. Można również korzystać z manualnego nalewania oraz tarowania, gdy stworzony drink nie spełnia wszystkich wymagań. Obudowę wydrukowałem na drukarce 3D. Składa się z wielu elementów, żeby był łatwiejszy dostęp do podzespołów oraz żeby pojedynczy wydruk krócej się drukował. Umieściłem z jednej strony okno rewizyjne żeby móc się w razie potrzeby podłączyć do Arduino. Części których użyłem do budowy robota: Arduino ATmega2560 - 1szt. wyświetlacz LCD 4x20 - Niebieski - ze sterownikiem kompatybilnym z HD44780 - QC2004A konwerter I2C do wyświetlacza LCD HD44780 wzmacniacz do belki tensometrycznej HX711 - 1szt. belka tensometryczna 1kg - 1szt pompa do cieczy 12V 110l/h - 7mm – 3szt moduł sterownika silnika L293 UNO MEGA shield - 1szt moduł diody RGB 5V - 2szt, wtyk DC 2,1/5,5mm z zaciskami skręcanymi – 1szt. gniazdo DC 2,1/5,5 do obudowy plastikowe -1szt. zasilacz wtyczkowy UMEC impulsowy 12V 30W 2,5A - 1szt. przełącznik kołyskowy 15x10mm – 1 szt przewody połączeniowe przycisk podświetlany - 1szt. przycisk okrągły monostabilny chwilowy czerwony - 4szt. potencjometr liniowy 1K – 3szt. .zawór zwrotny - 3szt. wężyk silikonowy 1,5m Oto kod, z którym się najdłużej męczyłem, ale działa #include <HX711.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <AFMotor.h> #define I2C_ADDR 0x3F #define start 52 #define manpom1 50 #define manpom2 46 #define manpom3 44 #define tara 48 #define redl 24 #define bluel 22 #define greenl 26 #define redr 30 #define bluer 28 #define greenr 32 HX711 waga; LiquidCrystal_I2C lcd(I2C_ADDR, 2, 1, 0, 4, 5, 6, 7); int led = 13; float ciezar; int ml1 = 0; int ml2 = 0; int ml3 = 0; int czasMigania = 250; int predkoscNalewania = 200; char odczyt[8]; AF_DCMotor pompa1 (3); AF_DCMotor pompa2 (2); AF_DCMotor pompa3 (1); void setup() { Serial.begin(9600); pinMode(start, INPUT_PULLUP); pinMode(manpom1, INPUT_PULLUP); pinMode(manpom2, INPUT_PULLUP); pinMode(manpom3, INPUT_PULLUP); pinMode(tara, INPUT_PULLUP); pinMode(redl, OUTPUT); pinMode(bluel, OUTPUT); pinMode(greenl, OUTPUT); pinMode(redr, OUTPUT); pinMode(bluer, OUTPUT); pinMode(greenr, OUTPUT); lcd.begin(20, 4); lcd.setBacklightPin(3, POSITIVE); digitalWrite(led, HIGH); lcd.setBacklight(HIGH); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Witaj!"); lcd.setCursor(0, 1); lcd.print("Chlapnij sobie!"); lcd.setCursor(13, 3); lcd.print("Kasztan"); delay(1000); pinMode(led, OUTPUT); waga.begin(A1, A2); waga.set_scale(419341.0 / 200.0); waga.tare(5); pompa1.setSpeed(predkoscNalewania); pompa2.setSpeed(predkoscNalewania); pompa3.setSpeed(predkoscNalewania); } void loop() { pomiar(); ekran(); if ((ml1 + ml2 + ml3) > 250) { czerwona(); delay(500); ciemno (); } else { ciemno(); } if (digitalRead(start) == LOW) { waga.tare(); ekran(); Serial.println("zeruje"); if (ml1 >= 0) { waga.tare(10); pomiar(); ekran(); Serial.println("nalewam promile"); while (ciezar <= ml1) { pomiar(); ekran(); pompa1.run(FORWARD); led1(); } pompa1.run(RELEASE); Serial.println("promile przerwa"); delay(100); if (ml2 >= 0) { waga.tare(10); pomiar(); ekran(); Serial.println("nalewam rozcienczacz"); while (ciezar <= ml2) { pomiar(); ekran(); pompa2.run(FORWARD); led2(); } pompa2.run(RELEASE); Serial.println("rozcienczacz przerwa"); delay(100); if (ml3 >= 0) { waga.tare(10); pomiar(); ekran(); Serial.println("nalewam kwas"); while (ciezar <= ml3) { pomiar(); ekran(); pompa3.run(FORWARD); led3(); } pompa3.run(RELEASE); Serial.println("kwaas przerwa"); delay(100); } } } waga.tare(); pomiar(); kolorowo(); ciemno(); } if (digitalRead(manpom1) == LOW) { pompa1.run(FORWARD); led1(); } else { pompa1.run(RELEASE); } if (digitalRead(manpom2) == LOW) { pompa2.run(FORWARD); led2(); } else { pompa2.run(RELEASE); } if (digitalRead(manpom3) == LOW) { pompa3.run(FORWARD); led3(); } else { pompa3.run(RELEASE); } if (digitalRead(tara) == LOW) { waga.tare(10); } } void pomiar() { ml1 = analogRead(A5); ml1 = map(ml1, 1020, 0, 0, 150); ml2 = analogRead(A4); ml2 = map(ml2, 1020, 0, 0, 150); ml3 = analogRead(A3); ml3 = map(ml3, 1020, 0, 0, 150); ciezar = waga.get_units(); dtostrf(ciezar, 5, 0, odczyt); } void ekran() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("1.Alkohol:"); lcd.print(ml1); lcd.setCursor(0, 1); lcd.print("2.Dodatek:"); lcd.print(ml2); lcd.setCursor(0, 2); lcd.print("3.Kwas:"); lcd.print(ml3); lcd.setCursor(0, 3); lcd.print("Waga:"); lcd.print(odczyt); lcd.print("g"); Serial.println(ml1); Serial.println(ciezar); } void ciemno() { digitalWrite(redl, LOW); digitalWrite(greenl, LOW); digitalWrite(bluel, LOW); digitalWrite(redr, LOW); digitalWrite(greenr, LOW); digitalWrite(bluer, LOW); } void czerwona () { digitalWrite(redl, HIGH); digitalWrite(greenl, LOW); digitalWrite(bluel, LOW); digitalWrite(redr, HIGH); digitalWrite(greenr, LOW); digitalWrite(bluer, LOW); } void zielona () { digitalWrite(redl, LOW); digitalWrite(greenl, HIGH); digitalWrite(bluel, LOW); digitalWrite(redr, LOW); digitalWrite(greenr, HIGH); digitalWrite(bluer, LOW); } void niebieska () { digitalWrite(redl, LOW); digitalWrite(greenl, LOW); digitalWrite(bluel, HIGH); digitalWrite(redr, LOW); digitalWrite(greenr, LOW); digitalWrite(bluer, HIGH); } void kolorowo () { digitalWrite(redl, HIGH); delay(czasMigania); digitalWrite(greenl, HIGH); delay(czasMigania); digitalWrite(bluel, HIGH); delay(czasMigania); digitalWrite(redr, HIGH); delay(czasMigania); digitalWrite(greenr, HIGH); delay(czasMigania); digitalWrite(bluer, HIGH); delay(czasMigania); delay(500); } void led1 () { digitalWrite(redl, HIGH); digitalWrite(greenl, HIGH); digitalWrite(bluel, LOW); digitalWrite(redr, HIGH); digitalWrite(greenr, HIGH); digitalWrite(bluer, LOW); } void led2 () { digitalWrite(redl, LOW); digitalWrite(greenl, HIGH); digitalWrite(bluel, HIGH); digitalWrite(redr, LOW); digitalWrite(greenr, HIGH); digitalWrite(bluer, HIGH); } void led3 () { digitalWrite(redl, HIGH); digitalWrite(greenl, LOW); digitalWrite(bluel, HIGH); digitalWrite(redr, HIGH); digitalWrite(greenr, LOW); digitalWrite(bluer, HIGH); } Link do filmu:
    1 punkt
  3. Hmm...moze kolejnosc wywolywan begin() zmien w setup()? , A tak tylko z ciekawosci spruboj te ds'y podpiac pod inny pin..
    1 punkt
  4. Przy okazji: kondensator na płytce stykowej nic nie daje (próbowałem z ciekawości różnych kombinacji).
    1 punkt
  5. Tak...jak kolega @ethanak wspomnial...rzadko dziala bez kondensatora, wiec daj odrazu zeby czasu nie marnowac...
    1 punkt
  6. Ja zawsze lutuję 100nf bezpośrednio na płytce nrf - bez kondensatora rzadko działa.
    1 punkt
  7. Ja tylko dodam ze biblioteka ktora zaproponowalem dziala elegancko z nrf24, i przy uzyciu available() nie blokuje calego kodu...
    1 punkt
  8. Może to pomoże: https://forum.arduino.cc/t/nrf24-and-dallastemperature-wont-work-together/279474
    1 punkt
  9. Cześć, no niestety tu też w znacznym stopniu (jednak nie całkowicie) rozgazowują napój, ciężko będzie tego uniknąć przy zastosowaniu pompek.
    1 punkt
  10. @trainee Chyba zrozumiałem o co ci chodzi. Choć nie jestem pewien czy mi to ułatwiło sprawę XD Rano będę próbować to ogarnąć.
    1 punkt
  11. Podpowiedź: z dużym prawdopodobieństwem, Twój kod powinien zmierzać do tego, by loop() w nim wyglądał dokładnie tak jak w przykładzie. Nic poza tym.
    1 punkt
  12. Raczej będą problemy. Nie rób takich rzeczy, zwłaszcza z bateriami litowymi bo może to skończyć się czymś niebezpiecznym.
    1 punkt
  13. Cześć mam dwa kursy forbo podstawy elektroniki poziom 1 i kurs arduino
    1 punkt
  14. Dzień dobry. Co prawda trochę się bawiło w elektronikę dawno temu, ale postanowiłem sobie przypomnieć wszystko wraz z kursem praktycznym dla zabawy i w końcu opanować lutowanie. Marzeniem byłby kurs diagnozowania i naprawy tv CRT - tak, żeby sobie nie zrobić krzywdy najlepiej Spokojnie, spokojnie. Nie zabieram się za to na razie.
    1 punkt
  15. Cześć, Mam na imię Leszek, pracuję w IT, a w wolnym czasie powoli uczę się wykorzystywać Raspberry Pi do różnych projektów. Moim celem jest automatyzacja domu, mam też nadzieję zbudować robota w przyszłości. Mam nadzieję, że kursy elektroniki pozwolą mi lepiej zrozumieć nie-programistyczną stronę tych projektów. Pozdrawiam wszystkich serdecznie!
    1 punkt
  16. tak, tylko musisz się pilnować, by funkcja wynikowa była prawidłowa, bo czasem można się zapomnieć (np. przy NAND'ach)
    1 punkt
  17. Witam Jestem Krzysztof - pomimo iz cale zycie zajmowalem sie projektowaniem od strony mechanicznej - los chcial iz obecnie zarzadzam projektami zwizanymi z elektronika. Zdecydowalem wiec odswiezyc nieco wiedze z tego zakresu... i oto jestem. Pozdrawiam Wszystkich!
    1 punkt
  18. Cześć! Mam na imię Przemek, mam 30 lat. Pracuję w firmie z branży automotive. Po pracy uczę się w technikum o profilu elektromechanik pojazdów samochodowych. Kursy z zakresu elektroniki niewątpliwie będą idealnym dopełnieniem zawodu elektromechanika z uwagi na to, że coraz więcej jej w naszych samochodach Dodatkowo zainteresował mnie temat Raspberry oraz Arduino. Kto wie czy nie będzie to moje hobby Pozdrawiam
    1 punkt
  19. Nie no wszystko chyba jest ok w kodzie powyzej...wywoluje request() w setup() i sprawdzam w warunku czy kalkulacje juz gotowe..(available()) jesli tak to odczytuje temp i znow "prosze" o kolejne obliczenie czujnikow.. A spoko.. teraz zalapalem ze mowisz o bibliotece z pierwszego posta...no to wszystko by sie zgadzalo bo i ta "moja" blokuje bez request() i czeka az obliczy zamulajac caly kod..
    1 punkt
  20. @farmaceuta Ta biblioteka potrafi również czytać po adresach, nie tylko po indeksach. W dodatku requestTemperatures blokuje dopóki dane nie będą gotowe (chyba że nie chcesz, ale zakłada że chcesz). Ważne jest, aby najpierw wywołać requestTemperatures() a dopiero potem odczytywać wyniki.
    1 punkt
  21. ja korzystam z tego i dziala... http://akademia.nettigo.pl/ds18b20/. #include <OneWire.h> #include <DS18B20.h> #define ONEWIRE_PIN 8 OneWire onewire(ONEWIRE_PIN); DS18B20 sensors(&onewire); // Adres czujnika byte address1[8] = {0x28, 0xD2, 0xCB, 0x48, 0xF6, 0xDE, 0x3C, 0xDF}; byte address2[8] = {0x28, 0xB1, 0x6D, 0xA1, 0x3, 0x0, 0x0, 0x11}; byte address3[8] = {0x28, 0xB1, 0x6D, 0xA1, 0x3, 0x0, 0x0, 0x11}; void setup() { sensors.begin(); sensors.request(address1); sensors.request(address2); //DS18B20 sensors.request(address3); Serial.begin(9600); } void loop() { if (sensors.available()) { float temp1 = sensors.readTemperature(address1); float temp2 = sensors.readTemperature(address2); float temp3 = sensors.readTemperature(address3); Serial.println(temp1); Serial.println(temp2); Serial.println(temp3); sensors.request(address1); sensors.request(address2); sensors.request(address3); } } wystarczy ze uzyjesz tak sensors.request(); (adres jest opcjonalny) (musisz uzyc szkicu do odczytu adresu i umiescic go w kodzie powyzej)
    1 punkt
  22. Witam mam na imię Piotr. Bardzo lubię komputery oraz insteresuje mnie elektronika. Bardzo dobrze sobię radzę z komputerami i ciekawi mnie jak to działa wię kupiłem.
    1 punkt
  23. @farmaceuta dokładnie tak jak piszesz
    1 punkt
  24. To jakos dziwnie tak, bo majac trzy czujniki skad mam wiedziec z ktorego aktualnie odczytalem? W tej "mojej" bibliotece mam adresy i wywolujac request() dla wszystkich bodajze, odczytuje temp. po adresie...domyslam sie ze tu jest podobnie tylko ze to jest w bibliotece, a w kodzie odwoluje sie po indeksie, ale i tak na poczatku musze "zgadnac" ktory indeks- ktory czujnik...(strasznie zamotalem)
    1 punkt
  25. Ja tam bym najpierw poprosił o zmierzenie temperatur a potem próbował to je odczytać. @farmaceuta nie trzeba podawać adresów.
    1 punkt
  26. Wszystkie maja dzialac...a tam nie ma byc przypadkiem request()? Nie trzeba podac adresow czujnikow?...ja korzystalem z innej biblioteki i bylo ok (pozniej Ci podrzuce przyklad i libsa)
    1 punkt
  27. Dzień dobry wszystkim, Kupiłem sobie niedawno auto do zabawy/odbudowy (Mazda MX-5, 2001 rok) i postanowiłem spróbować zrobić do niej kilka przydatnych dodatków - np. własne zegary z prędkościomierzem i przydatnymi odczytami z czujników. Zaczynam więc od I stopnia kursu Arduino i powoli, powoli, do czegoś mam nadzieję dotrzeć. Może niekoniecznie od razu własna wersja speeduino, ale fajnie by było mieć trochę własnej elektroniki na pokładzie.
    1 punkt
  28. Cześć wszystkim! Stwierdziłem, że najwyższy czas założyć konto, a nie tylko zaglądać Jestem z zawodu konstruktorem, siedzę głównie w SolidWorks i Inventorze. Dodatkowo prowadzę sporą drukarnię 3D. Hobby to oczywiście majsterkowanie i elektronika
    1 punkt
  29. Diody te wraz kondensatorami w niebieskich obudowach tworzą prawdopodobnie powielacz wysokiego napięcia, rzędu kilku tys. wolt. Są to diody przystosowane do pracy z tak wysokimi napięciami. Zwróć uwagę na środkowy kondensator elektrolityczny w prawym dolnym rogu zdjęcia (tam gdzie jest data wykonania zdjęcia). Może to złudzenie optyczne na niezbyt wyraźnej fotografii, ale kondensator ten wygląda jakby był uszkodzony (spuchnięty). Na płytce masz rozpiskę (niewyraźną na zdjęciu) napięć zasilacza i widać z niej, że w zasilaczu tym występują wysokie napięcia. Wyższe od napięcia sieciowego 230V, rzędu nawet 1000 - 1300V o ile dobrze odczytałem rozpiskę na płytce. Zalecana jest duża ostrożność przy pomiarach i ewentualnej naprawie. Nawet po wyłączeniu zasilacza z sieci, wysokie napięcia mogą długo utrzymywać się na jego kondensatorach.
    1 punkt
  30. Nie, Raspberry Pico to zupełnie inna architektura (bardziej zbliżona do Arduino), gdy Raspberry Pi (3, 4) jest bardziej zbliżone do komputera (chociaż technicznie bliżej mu do telefonu).
    1 punkt
  31. Hmm... a nie masz w kompilatorze ustawionej flagi, że program ma trafić do RAM'u? Innego logicznego wyjaśnienia dla tego fenomenu nie widzę...
    1 punkt
Tablica liderów jest ustawiona na Warszawa/GMT+02:00
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.