Przeszukaj forum
Pokazywanie wyników dla tagów 'DIY'.
Znaleziono 85 wyników
-
Witam, składam właśnie nowy komputer, zauważyłem, że na mojej płycie głównej są złącza, które powinienem podłączyć do speakera na front panelu w obudowie, te złącza to: - +5V - GND - GND - Speaker Niestety moja obudowa nie posiada speakera. Czy mogę podłączyć najzwyklejszy buzzer używany m.in. w Arduino? Taki buzzer ma złącza GND oraz +5V. Do czego służy to złącze speaker oraz jeśli mogę zrobić takie połączenie to czy potrzebuję rezystora, jeśli tak to o jakiej mocy? Bardzo dziękuję za każdą odpowiedź, Pozdrawiam
-
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:
-
Bezprzewodowy czujnik poziomu węgla do zasobnika na ekogroszek
romeok01 opublikował temat w Projekty - DIY
Budowa tego projektu zaczęła się od tego, że znajomy zapytał, czy bym czegoś nie wymyślił, ponieważ on posiada w domu piec na ekogroszek z zasobnikiem na węgiel i czasem zapomina dosypywać węgla i gaśnie mu w piecu. Wykonałem więc nadajnik z ultradźwiękowym czujnikiem odległości HC-SR04 , który przekazuje dane do odbiornika bezprzewodowo za pomocą modułu nRF24L01. Gotowy odbiornik i nadajnik wygląda tak, jak na zdjęciu niżej. Do budowy wykorzystałem: Dwie sztuki Arduino Pro Mini 328 - 5V/16MHz Dwie sztuki moduł radiowy nRF24L01 Ultradźwiękowy czujnik odległości HC-SR04 Buzzer z generatorem 5V 12mm Zestaw diod LED 5mm Rezystory 100 ohm, 110 ohm i 190 ohm Dwie sztuki Stabilizator LDO 3,3V Dwie sztuki Kondensator elektrolityczny 10uF/50V Dwie sztuki Zasilacz impulsowy 5V / 1,2A Obudowy plastikowe Całość zmontowałem na płytkach z OSH Park MySensor 3.3V Pro Mini or 5V Pro Mini Diody LED i buzzer zamontowałem na płytce uniwersalnej. Schemat nadajnika. Schemat odbiornika. Kod programu Arduino nadajnika. #include <SPI.h> #include "RF24.h" int msg[1]; const uint64_t pipe = 0xF0F0F0F0A1LL; RF24 radio(9,10); #define trigPin 3 #define echoPin 4 void setup(){ Serial.begin (9600); pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście pinMode(echoPin, INPUT); //a echo, jako wejście radio.begin(); radio.openWritingPipe(pipe); radio.setPALevel(RF24_PA_MAX); //Maxymalna moc nadajnika } 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"); msg[0] = dystans; radio.write(msg, 1); // Wysylanie wartosci ze zmiennej msg delay(500); } Kod programu do odbiornika. #include <SPI.h> #include "RF24.h" const uint64_t pipe = 0xF0F0F0F0A1LL; RF24 radio(9,10); int msg[1]; void setup(){ //Serial.begin (9600); pinMode(3, OUTPUT); //led czerwona pinMode(4, OUTPUT); //led zolta pinMode(5, OUTPUT); //led pierwsza zielona pinMode(6, OUTPUT); //led druga zielona pinMode(7, OUTPUT); //led trzecia zielona pinMode(8, OUTPUT); // buzer radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop(){ if(radio.available()){ radio.read(msg, 1); Serial.print(msg[0]); Serial.println(" cm"); if (msg[0] >= 57) { //odlegolsc max kiedy wlacza sie buzer digitalWrite(3, HIGH); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, HIGH); delay(5000); digitalWrite(3, HIGH); digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); delay(1800000); } else { digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, LOW); } if (msg[0] >= 43 && msg[0] <57) { digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); } if (msg[0] >= 29 && msg[0] < 43) { digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); } if (msg[0] >= 15 && msg[0] < 29) { digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, LOW); digitalWrite(8, LOW); } if (msg[0] >= 15 && msg[0] < 2) { digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, LOW); } } delay(500); } Kod programu odbiornika, jest napisany tak, że gdy poziom węgla spadnie do 57 cm od góry, włącza się buzer na 5 sekund i świeci czerwona dioda i jeżeli nie dosypiemy węgla, buzer włączy się znowu za pół godziny na 5 sekund, po dosypaniu węgla trzeba nacisnąć przycisk reset, który wyprowadziłem za pomocą przycisku na obudowie lub odczekać pół godziny. Zasobnik na węgiel wygląda tak. Zmontowany nadajnik z ultradźwiękowym czujnikiem odległości HC-SR04. Nadajnik jest zamontowany na górze metalowego zasobnika na węgiel, przed montażem zostały wywiercone 2 otwory w zasobniku, tak aby pasowały wystające okrągłe elementy czujnika HC-SR04. Zmontowany układ na płytce MySensors dostępnej w OSH Park, długość to około 10 cm. Ponieważ zastosowałem 5 diod, które informują o stanie węgla, to 57 cm podzieliłem na 4, co daje około 14 cm i gdy poziom węgla spadnie o 14 cm gasną kolejne diody, aż do 57 cm i wtedy świeci się czerwona dioda i włącza buzer na 5 sekund. Program możemy dowolnie modyfikować, aby dostosować do wysokości pojemnika na węgiel. Działanie całości widać na poniższym filmie. Całość działa już 2 lata bez awarii i na czas dosypywania ekogroszku, nadajnik jest zdejmowany i czasem przedmuchany z pyłu. -
Kolega modernizując u siebie w mieszkaniu system ogrzewania poprosił mnie o wykonanie jakiegoś sterownika do pieca CO wraz ze sterowaniem dmuchawy. Tak powstał niewielki regulator, który miał mieć na celu prostotę i czytelność. Główne elementy użyte do budowy sterownika to: LCD 2x16 HD44780 ATMEGA8 - zastosowany procesor DS18B20 - czujnik mierzący temperaturę na piecu przekaźnik na 5V taki jak tutaj: przekaźnik Głównym zadaniem jest uruchamianie pompy obiegowej na podstawie zadanej temperatury na piecu. Dodatkową funkcją jest tryb rozpalania, który w początkowej fazie uruchamia dmuchawę. Jest to bardzo przydatna opcja, przyspieszająca proces rozpalania w piecu. Sterowanie jest bardzo proste, odbywa się z wykorzystaniem tylko trzech przycisków. W podstawowym widoku regulujemy zadaną temperaturę na piecu, która decyduje o tym czy pompa ma zacząć pracować czy nie. Regulator jest prostą nastawą z histerezą. Po wejściu w menu możemy dodatkowo zmienić: temperaturę wyłączenia dmuchawy. Jeżeli piec jest zimny i włączymy opcję rozpalania to po osiągnięciu już stosunkowo niewielkiej temperatury dmuchawa zostanie wyłączona histerezę pracy regulatora maksymalne czasy pracy pompy i dmuchawy Wszystko zostało zamknięte w obudowie natynkowej, a sterownik umieszczony obok pieca w pomieszczeniu gospodarczym. Układ składa się z dwóch płytek rozdzielając część wysokiego napięcia i sterowania. Zdecydowałem się na umieszczenie kompletnego zasilania w urządzeniu, transformator, bezpiecznik i kilka dodatkowych elementów. Powodem tego było to, że sterownik jest używany przez kogoś innego a dołączany zasilacz może się zgubić i wtedy nie mam kontroli na tym jaki zamiennik zostanie użyty. Tutaj jest pokazany schemat i wzór płytki: Płytka została wykonana w domowych warunkach metodą żelazkową. Dla poprawy czytelności wykorzystałem możliwość definiowania własnych znaków co pozwoliło uzyskać duże cyfry widoczne z daleka. Niżej pokazuje jak uzyskać takie efekt. - najpierw musimy zdefiniować poszczególne elementy cyfr i ładujemy je do pamięci wyświetlacza uint8_t BigDigitDefChar[][8] = { {15,7,32,32,32,32,3,7}, {32,32,32,32,32,32,7,15}, {28,30,30,30,30,30,30,28}, {7,15,15,15,15,15,15,7}, {31,31,32,32,32,32,32,32}, {32,32,32,32,32,32,31,31}, {31,31,32,32,32,32,31,31}, {30,28,32,32,32,32,24,28} }; for(uint8_t i=0;i<8;i++) lcd_defchar(i,BigDigitDefChar[i]); - następnie tworzymy tablicę która poskleja nam te segmenty w cyfry char* BigDigit[][2]={ {"\x83\x84\x82","\x83\x85\x82"}, //0 {" \x82"," \x82"}, //1 {"\x80\x86\x82","\x83\x85\x85"}, //2 {"\x80\x86\x82","\x81\x85\x82"}, //3 {"\x83\x85\x82"," \x82"}, //4 {"\x83\x86\x87","\x81\x85\x82"}, //5 {"\x83\x86\x87","\x83\x85\x82"}, //6 {"\x83\x84\x82"," \x82"}, //7 {"\x83\x86\x82","\x83\x85\x82"}, //8 {"\x83\x86\x82","\x81\x85\x82"} //9 }; - teraz już tylko wystarczy użyć odpowiedniej funkcji do wyświetlania. Funkcja ta korzysta z obsługi R/W i odczytuje stan busy flag co pozwala na odczytanie pozycji kursora. Jeśli ktoś będzie chciał podłączyć R/W do GND to musi przerobić tą funkcję tak aby przekazać do niej pozycję kursora void lcd_big_int(int val) { uint8_t pp,x,y; char bufor[17]; char *wsk=itoa(val, bufor, 10); //zamieniamy całą liczbę na pojedyncze znaki ACSII np. 1234 -> '1','2','3','4' register uint8_t znak; while ( (znak=*(wsk++)) ) //pętla jest powtarzana po wszystkich indeksach tablicy bufor, aż napotka '\0' { pp = check_BF() & 0b01111111; //odczytujemy aktualną pozycję kursora - busy flag wyświetlacza y = pp & 0xF0; //wyodrębniamy nr wiersza x = pp & 0x0F; //wyodrębniamy pozycję x znak -= 0x30; //zamieniamy kod ascii na rzeczywistą wartość dziesiętną np '7' -> 7; będzie to nasz indeks do tablicy lcd_str(BigDigit[znak][0]); //ładujemy na wyświetlacz górną część cyfry lcd_write_cmd( (0x80 + y + 0x40 + x) ); //wracamy kursorem na domyślną pozycję x, ale o jeden wiersz niżej lcd_str(BigDigit[znak][1]); //ładujemy na wyświetlacz dolną część cyfry lcd_write_cmd( (0x80 + y + x + 0x03) ); //ustawiamy kursor zaraz za cyfrą w wierszu domyślnym, czyli takim w którym wywołano funkcję } } uint8_t check_BF(void) { CLR_RS; return _lcd_read_byte(); } Jest to prosty sposób na bardzo fajne wyświetlanie liczb, które są widoczne z daleka.
-
W tym projekcie chciałbym opisać krok po kroku proces podłączenia licznika samochodowego od Forda Galaxy do naszego Arduino. Potrzebne elementy: Zasilacz 12V Arduino Przewody męsko-żeńskie Licznik samochodowy Zestaw wskaźników od Forda Galaxy posiada 2 wtyczki - czerwoną oraz czarną. Nas w tym projekcie interesuje tylko czerwona wtyczka gdyż znajdują się w niej piny zasilające oraz dostarczające dane do silników krokowych w liczniku. Najpierw zajmijmy się zasilaniem. Do pinu 3 oraz do pinu 4 na liczniku wpinamy 2 przewody i podłączamy je do minusa na naszym zasilaczu a kolejne 2 przewody wpięte w pin 14 oraz w pin 15 podłączamy do +. Jako zasilacz może nam posłużyć zwykły zasilacz komputerowy kub jakikolwiek o napięciu 12V. Dalej zajmijmy się podłączeniem silniczków od wskazówek. obrotomierz - 10 pin prędkościomierz - 27 pin wskaźnik poziomu paliwa - 21 pin wskaźnik temperatury cieczy - 23 pin (pin 1 jest w lewym dolnym rogu wtyczki) Następnie przewody te wpinamy w wejścia cyfrowe do Arduino. W moim przypadku obrotomierz wpiąłem w wejście oznaczone 2, prędkościomierz w wejście nr 3, wskaźnik poziomu paliwa 4 a temp. cieczy w wejście 5. Jeżeli po podpięciu zasilania licznik zadziała (wskazówki ustawią się w położeniu 0 oraz włączy się podświetlenie) to możemy przejść do konfiguracji. Pobieramy oprogramowanie SimHub i instalujemy je. Po uruchomieniu programu przechodzimy do zakładki Arduino a następnie klikamy na zakładkę "My hardware". Wybieramy "Single Arduino" i klikamy "Open arduino setup tool". Następnie definiujemy w jakie wejścia wpięliśmy nasze wskaźniki. Wybieramy z jakiego arduino korzystamy (w moim przypadku jest to UNO) oraz wybieramy port komunikacyjny. Gdy wszystko mamy już zrobione klikamy Upload to arduino i czekamy aż program zostanie wgrany na Arduino. Jeżeli program wgrał się poprawnie przechodzimy do zakładki "Gauges" i kalibrujemy nasz licznik. Wartości liczbowe są indywidualne dla każdego licznika ale to co musimy ustawić do każdego licznika to MAX Tachometer RPM na 7 (jeżeli zakres na tarczy obrotomierza jest inny to podajemy maksymalną liczbę, jeśli jest to 5 to podajemy 5) oraz tachometer cylinders na 6. Warto zaznaczyć opcję "Always use tachometer full range" jednak jeśli sprawia ona problemy możemy ją wyłączyć. Resztę wartości musimy ustawić tak, żeby wskazówka poprawnie wskazywała położenie min i max. Niestety nie ma uniwersalnych wartości i prędkościomierz u mnie wskazuje poprawnie 240 km/h przy wartości 222 (speedo gauge maximum output) jednak w innym liczniku może być to wartość ciut większa lub mniejsza. Na samym końcu wybieramy grę w którą chcemy zagrać z zakładki "Games". Następnie uruchamiamy naszą grę i cieszymy się rozgrywką z naszym licznikiem. Ktoś mi może powiedzieć "Przecież można napisać kod", zgodzę się z tym tylko ja gram od ETS 2 przez Dirt 4 na Forzie kończąc. O wiele łatwiej jest jednym kliknięciem zmienić grę w simhubie niż pisać osobny kod eksportujący dane z telemetrii do Arduino. Jeżeli ktoś potrzebuje tylko licznika do jednej gry to ma to sens jednak w moim przypadku mija się to z celem. Koszt takiego licznika może zamknąć się w okolicach 50 zł. Możemy wykorzystać klona arduino (klon nano możemy kupić za mniej niż 15zł), a licznik możemy znaleźć na portalach aukcyjnych za ok 20zł. Jest to niedrogi i fajny bajer a na dodatek jest bardzo praktyczny. Poniżej znajdują się zdjęcia i gif pokazujący pracę urządzenia.
-
Cyfrowa stacja lutownicza Jest to mój 2 prolekt po 12 letniej przerwie z elektroniką. Była to okazja do poznania Eagle oraz podstaw programowania mikroprocesorów. Obecnie wiele rzeczy bym poprawił i docelowo tak się chyba stanie. Działanie stacji oceniam bardzo pozytywnie. Obecnie mam 3 stacje lutownicze, więc już mogę coś na ten temat napisać ale to już dłuższy temat. Projekt polecam wszystkim, którzy mają niewykorzystane trafo 2x12V 60VA (minimum) oraz LCD1602 i procesor Atmega8. Są to chyba 3 najdroższe elementy (pomijając kolbę 907A, którą przez internet można kupić poniżej 30zł z kosztami wysyłki). Docelowo schemat podzieliłem na 2 zasadnicze części: 1. Płytka zasilająca 2.Płytka sterowania Wzory płytek w Eagle standardowo dostępne są w załączniku. A tutaj jeszcze foto gotowych płytek: Aby ułatwić możliwość wymiany procesora i wzmacniacza operacyjnego, zostały one umieszczone w podstawkach. Płytka sterująca oraz płytka zasilająca zostały połączone za pomocą złącza goldpin. Obudowa została wykonana z płyt meblowych oklejonych fornirem dębowym. Dodatkowo składałem dla znajomego CNC z chin i w ramach testów wykonałem panel przedni oraz tylni na tym CNC (materiał to 1,5mm blacha aluminiowa). Efekty pracy widać na poniższych zdjęciach: Zasilanie 230V trafia na gniazdo komputerowe oraz włącznik (pozyskane z zasilacza ATX). Następnie mamy bezpiecznik szklany i transformator toroidalny 50VA 2x12V. Transformator miał wymienione uzwojenia wtórne. Miałem transformator z tylko jednym uzwojeniem o napięciu 10,5V, więc od nowa zostały nawinięte uzwojenia 2x12V. Takie napięcia są wprowadzone zgodnie z zamieszczonym schematem na płytkę zasilającą. Zastosowałem najprostszą kolbę 907A z termoparą. Wykorzystałem dostępne w sieci oprogramowanie stacji lutowniczej RL-1 zawierające algorytm PID do sterowania grzałką. Konstrukcja nie jest pozbawiona wad: Obudowa nie jest dokładnie spasowana z panelami czołowym i tylnym (miała być tymczasowa, a wyszło jak zwykle). Słaby obieg powietrza w obudowie (pomimo tego faktu nic się nie przegrzewa przy długiej pracy. Oto film prezentujący rozgrzewanie grota od temperatury 38 stopni do 320 stopni: Już w 22 sekundzie grzałka osiąga temperaturę zadaną. Od 35 sekundy przykładam do grota cynę o grubości 0,7mm. Cyna zaczyna się topić ok. 50 sekundy. Temperatura grota została zestrojona ze wskazaniem stacji za pomocą termopary i procedury opisanej w dokumentacji stacji RL-1 (w załączniku AVT987). A to obecnie przeze mnie posiadane stacje lutownicze: Jak już wcześniej wspomniałem, wykonałbym kilka zmian. Najważniejsza to zmniejszenie wymiarów stacji. Trafo zajmuje 1/3-1/4 obudowy. Obecnie całość znalazłaby się na jednym PCB, wszystkie elementy SMD, cała stacja zmieściłaby się za LCD. Do tego trafo i wymiar całości zmniejszony minimum o połowę. Poza tym, prócz najdłuższego rozgrzewania i braku mocy przy lutowaniu dużych pól masy stacja działa nad wyraz dobrze. EAGLE_Moja stacja lutownicza.zip AVT987.pdf Cyfrowa_Stacja_Lutownicza_RL1 - do wgrania.zip Cyfrowa_Stacja_Lutownicza_RL1 - edytowalne oprogramowanie.zip Cyfrowa stacja lutownicza RL1.zip
-
System podlewania z inteligentnym uzupełnianiem wody w zbiorniku
mmuha opublikował temat w Projekty - DIY
Witam, mój system powstał z praktycznej potrzeby zautomatyzowania systemu podlewania i w celu rozpoczęcia przygody z elektroniką – wyszedłem z założenia, że jak teraz nie zrozumiem, jak działa to wszystko co jest dookoła, to za chwilę będzie to tak złożone, że nie zdążę już tego zrozumieć 🙂 I generalnie myślę, że się udało – zrobiłem dokładnie to, co zamierzałem i w dodatku działa 🙂 OPIS DZIAŁANIA SYSTEMU System w założeniu miał być jak najprostszy (tzn. działać przy jak najmniejszej potrzebie ingerencji człowieka w porównaniu do skomplikowanych systemów programowalnych, które są na rynku). Steruje on trzema liniami rozprowadzonymi w ogrodzie: woda w kranach, zraszacze trawników, linie kroplujące. Sterowanie odbywa się za pomocą elektrozaworów zasilanych z przekaźników (moduł 4 przekaźników). Przekaźnikami steruje Arduino na podstawie: włączenia/wyłączenia przełącznika, upłynięcia maksymalnego czasu określonego dla każdej linii (po upłynięciu tego czasu zawór zostaje zamknięty). System jest zasilany wodą z zestawu hydroforowego (żeby było odpowiednie ciśnienie), który pobiera wodę z ze zbiornika na deszczówkę (ZBIORNIK 1). Ponieważ nie jest on zbyt duży (3 m3) to istniała konieczność dopompowywania wody z drugiego zbiornika na deszczówkę (ten już ma 12 m3). Moje rozwiązanie opiera się na zamontowaniu w zbiorniku 1 dwóch czujników poziomu cieczy i pozwala na automatyczne dopompowywanie wody ze zbiornika 2 do zbiornika 1, gdy w tym poziom spadnie poniżej dolnego czujnika. Pompa, która jest w zbiorniku 2 wyłącza się, gdy poziom w zbiorniku 1 podniesie się powyżej górnego czujnika. REALIZACJA Do sterowania zaworami wykorzystałem Arduino. Początkowo plan był taki, żeby wszystko zrobić bez mikrokontrolera. Jednak Arduino jest mi potrzebne w drugiej wersji urządzenia (już się buduje), o której napisze poniżej. Na czystej elektronice (bez programowania) oparłem moduł sygnalizacji poziomu i uzupełniania wody w zbiorniku. Bazując na dwóch czujnikach poziomu wody mogę określić trzy stany wody w zbiorniku: niski, średni, wysoki. Zależało mi, żeby pompa uzupełniająca wodę zaczynała pompować, gdy woda w zbiorniku osiągnie poziom niski, a kończyła, gdy osiągnie stan wysoki. Poprzez umieszczenie czujników jak najdalej od siebie, uzyskałem samoczynne uzupełnianie zbiornika. Do tego wykorzystałem dwa układy scalone: bramkę OR oraz NAND co pozwoliło zastosować trzy diody oznaczające poziom wody. Logika włączania tych diod jest następująca: Bramkę NAND wykorzystałem dodatkowo jako przerzutnik bistabilny, który pamięta czy pompa jest włączona, czy wyłączona. Oto płytka sporządzona samodzielnie na potrzeby projektu: KONSTRUKCJA Całe urządzenie udało się zamknąć w standardowej obudowie hermetycznej z wyprowadzeniem przewodów do zasilania, podłączenia zaworów, czujników poziomu wody i przewodu sterującego pompą. Do wykonanie „wtyczek” do zaworów wykorzystałem tworzywo, które mięknie w 60 stopniach i w ciepłej wodzie robi się plastyczne – można wszystko ulepić. Chodziło o to, że przy zaworach, jak najbliżej, powinny się znaleźć diody prostownicze i dlatego zrobiłem wtyczki z zatopionymi diodami. Jest to bardzo wygodne przy rozmontowywaniu systemu na zimę. Działanie systemu widać na poniższym filmie (na uchwycie wiszą czujniki poziomu wody). System działał już jeden sezon, także jest sprawdzony. PLANY NA PRZYSZŁOŚĆ Druga wersja urządzenia będzie miała dołączone czujniki deszczu i wilgotności gleby, będą pobierane komunikaty pogodowe z lotniska i będzie sterowanie zaworami przez wifi z telefonu. Chcę także dodać obsługę kalendarza do określenia czasu godziny, gdy system ma się włączać. Długość podlewania będzie sterowana czujnikami wilgotności i deszczu a włączenie podlewania uzależnione od przewidywanej pogody. Myślę, że więcej do systemu podlewania nie jest potrzebne. Musze powiedzieć, że budowa tego urządzenia dała mi wiele satysfakcji, bo nie zajmuję się zawodowo elektroniką ani programowaniem. Chciałbym szczególnie podziękować Trekerowi za kursy, dzięki którym było łatwo zacząć przygodę z elektroniką oraz Markowi za cenne uwagi i przekazaną wiedzę.- 8 odpowiedzi
-
- 3
-
-
- Arduino
- Podlewanie
-
(i 1 więcej)
Tagi:
-
Dzień dobry, załączyłem tutaj pewien schemat, który samodzielnie stworzyłem i nie wiem, czy jest on poprawnie zrobiony. Mam silniczek i baterię 9V - chcę stworzyć układ, w którym potencjometr będzie regulował prędkość obrotów silniczka. Dodatkowo chcę dołożyć rezystor oraz zieloną diodę LED, pokazyjącą z jaką mocą pracuje silnik (jasność diody). Nie wiem, czy taki układ zadziała prawidłowo. Czy dioda nie zabierze napięcia silniczkowi, który nie będzie pracował z najwyższą mocą? Z góry dziękuję.
-
Cześć, przedstawiam projekt, który umożliwia szybkie rozlewanie "cieczy" do kieliszków przy zachowaniu niezbędnej precyzji 😉 Nie jest to mój pierwszy robot tego typu, jednak świat idzie do przodu i wymagania przeciętnego Kowalskiego są coraz bardziej wyśrubowane. Za dużo, za mało, znowu się rozlało... Do tego robota można podłączyć cztery różne substancje, bądź zwyczajnie wszystkie wężyki włożyć do jednej butelki. Rozlewanie na poszczególnych podstawkach odbywa się niezależnie. Każde "stanowisko" jest oznaczona numerem i na każdym z nich można ustawić ilość płynu w gramach przy pomocy potencjometrów. Pod każdą podstawką zamontowana jest belka tensometryczna dzięki której mamy nalane tyle ile chcieliśmy. Jeżeli jednak stwierdzimy w trakcie, że z pewnych względów mamy już dosyć, wystarczy unieść kieliszek do góry, a robot zakończy proces nalewania. Przy kładzeniu "naczynia" również nie trzeba się stresować, ponieważ nalewanie rozpoczyna się dopiero po 3 sekundach. Tak samo po uniesieniu kieliszka przerywamy cykl nalewania. Chciałem żeby robot był możliwie jak najmniejszy i (z niemałymi problemami z upychaniem podzespołów) nawet się to udało. Części których użyłem do budowy: - arduino ATmega2560 – 1 szt. - shield dla Mega2560 Expansion Sensor Board v2.0 – 1 szt. - wyświetlacz LCD 4x20 - ze sterownikiem kompatybilnym z HD44780 – 1 szt. - konwerter I2C do wyświetlacza LCD HD44780 – 1 szt. - wzmacniacz do belki tensometrycznej HX711 - 4szt. - belka tensometryczna 1kg – 4 szt. - moduł sterownika L298N do silników DC – 2 szt. - mini Pompa Perystaltyczna - DC 3.7V / 6V – 4 szt. - potencjometr liniowy 1K – 4 szt. - wtyk DC 2,1/5,5mm z zaciskami skręcanymi – 1 szt. - gniazdo DC 2,1/5,5 do obudowy plastikowe -1szt. - Przełącznik kołyskowy – 1 szt. - Moduł z diodą LED RGB – 4 szt. - Przewody połączeniowe - zasilacz wtyczkowy UMEC impulsowy 12V 30W 2,5A – 1 szt. - ŁĄCZNIK PROSTY plastikowy ZŁĄCZKA POM wąż 4mm – 8 szt. - ŁĄCZNIK TRÓJNIK T plastikowy POM do węża 4mm – 4 szt. - WĄŻ SILIKONOWY 6x4mm SILIKON wężyk przewód 6/4mm – 3 m - trochę śrubek i nakrętek M3, M4 Elementy do druku: 1. dekiel – 1 szt. 2. górna osłona – 1 szt. 3. górna pokrywa – 1 szt. 4. górny korpus – 1 szt. 5. korpus – 1 szt. 6. mocowanie ekranu – 2 szt. 7. mocowanie hx711 – 1 szt. 8. mocowanie pompek – 1 szt. 9. osłona belki tensometrycznej 1 – 1 szt. 10. osłona belki tensometrycznej 2 – 1 szt. 11. osłona belki tensometrycznej 3 – 1 szt. 12. osłona belki tensometrycznej 4 – 1 szt. 13. osłona ekranu – 1 szt. 14. podstawa – 1 szt. 15. podstawka pod arduino mega – 1 szt. 16. podstawka pod kieliszek – 4 szt. 17. pokrętło1 – 1 szt. 18. pokrętło2 – 1 szt. 19. pokrętło3 – 1 szt. 20. pokrętło4 – 1 szt. 21. przednia pokrywa – 1 szt. 22. tylny dekiel – 1 szt. 23. tył góry – 1 szt. Do druku 4 kieliszki z waga.rar Schemat połączeń: Kod do robota: #include <HX711.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #define I2C_ADDR 0x27 #define red1 22 #define green1 23 #define blue1 24 #define red2 26 #define green2 27 #define blue2 28 #define red3 14 #define green3 15 #define blue3 16 #define red4 38 #define green4 39 #define blue4 40 #define pompastart1 1 #define pompalewo1 34 #define pompaprawo1 35 #define pompastart2 13 #define pompalewo2 11 #define pompaprawo2 10 #define pompastart3 0 #define pompalewo3 36 #define pompaprawo3 37 #define pompastart4 12 #define pompalewo4 9 #define pompaprawo4 8 int stan_tara = 0; int lanie1 = 0; int stan_ciezar1 = 0; int stan_lanie1 = 0; int lanie2 = 0; int stan_ciezar2 = 0; int stan_lanie2 = 0; int lanie3 = 0; int stan_ciezar3 = 0; int stan_lanie3 = 0; int lanie4 = 0; int stan_ciezar4 = 0; int stan_lanie4 = 0; float procent1; char procent1_fin[8]; float procent2; char procent2_fin[8]; float procent3; char procent3_fin[8]; float procent4; char procent4_fin[8]; int ml1; float ml11; char ml111[8]; int ml2; float ml22; char ml222[8]; int ml3; float ml33; char ml333[8]; int ml4; float ml44; char ml444[8]; HX711 waga1; float ciezar1; char odczyt1[8]; HX711 waga2; float ciezar2; char odczyt2[8]; HX711 waga3; float ciezar3; char odczyt3[8]; HX711 waga4; float ciezar4; char odczyt4[8]; unsigned long Czas_tara = 0; unsigned long aktualnyCzas = 0; unsigned long Start1 = 0; unsigned long Start2 = 0; unsigned long Start3 = 0; unsigned long Start4 = 0; LiquidCrystal_I2C lcd(I2C_ADDR, 2, 1, 0, 4, 5, 6, 7); void setup() { Serial.begin(9600); lcd.begin(20, 4); lcd.setBacklightPin(3, POSITIVE); 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); lcd.clear(); waga1.begin(A2, A3); waga1.set_scale(419341.0 / 400.0); waga1.tare(5); waga2.begin(A0, A1); waga2.set_scale(419341.0 / 400.0); waga2.tare(5); waga3.begin(A6, A7); waga3.set_scale(419341.0 / 400.0); waga3.tare(5); waga4.begin(A5, A4); waga4.set_scale(419341.0 / 400.0); waga4.tare(5); pinMode(red1, OUTPUT); pinMode(blue1, OUTPUT); pinMode(green1, OUTPUT); pinMode(red2, OUTPUT); pinMode(blue2, OUTPUT); pinMode(green2, OUTPUT); pinMode(red3, OUTPUT); pinMode(blue3, OUTPUT); pinMode(green3, OUTPUT); pinMode(red4, OUTPUT); pinMode(blue4, OUTPUT); pinMode(green4, OUTPUT); pinMode(pompastart1, OUTPUT); pinMode(pompalewo1, OUTPUT); pinMode(pompaprawo1, OUTPUT); pinMode(pompastart2, OUTPUT); pinMode(pompalewo2, OUTPUT); pinMode(pompaprawo2, OUTPUT); pinMode(pompastart3, OUTPUT); pinMode(pompalewo3, OUTPUT); pinMode(pompaprawo3, OUTPUT); pinMode(pompastart4, OUTPUT); pinMode(pompalewo4, OUTPUT); pinMode(pompaprawo4, OUTPUT); } void loop() { pomiar_waga(); pomiar(); ekran(); aktualnyCzas = millis(); dozowanie_1(); Serial.println("dozowanie1"); Serial.println(ciezar1); Serial.println(ml11); pomiar(); ekran(); aktualnyCzas = millis(); dozowanie_2(); Serial.println("dozowanie2"); Serial.println(ciezar2); Serial.println(ml22); pomiar(); ekran(); aktualnyCzas = millis(); dozowanie_3(); pomiar(); ekran(); aktualnyCzas = millis(); dozowanie_4(); } void dozowanie_1() { if (ciezar1 >= 20 && stan_ciezar1 == 0 && lanie1 == 0) { digitalWrite(red1, HIGH); digitalWrite(green1, LOW); digitalWrite(blue1, LOW); Start1 = millis(); stan_ciezar1 = 1; pomiar_waga(); } if (ciezar1 < 5 && lanie1 == 0) { Serial.println("podnosze1"); analogWrite(pompastart1, 0); digitalWrite(pompalewo1, LOW); digitalWrite(pompaprawo1, LOW); stan_ciezar1 = 0; stan_lanie1 = 0; digitalWrite(red1, LOW); digitalWrite(green1, HIGH); digitalWrite(blue1, LOW); lcd.setCursor(12, 0); lcd.print(" "); pomiar_waga(); } if (ciezar1 <= -1) { stan_ciezar1 = 0; stan_lanie1 = 0; lanie1 = 0; digitalWrite(red1, LOW); digitalWrite(green1, HIGH); digitalWrite(blue1, LOW); waga1.tare(1); pomiar_waga(); } if (aktualnyCzas - Start1 >= 2000 && stan_ciezar1 == 1) { waga1.tare(1); stan_lanie1 = 1; stan_ciezar1 = 0; pomiar_waga(); } if (ciezar1 <= ml11 && stan_lanie1 == 1) { analogWrite(pompastart1, 200); digitalWrite(pompalewo1, HIGH); digitalWrite(pompaprawo1, LOW); lanie1 = 1; digitalWrite(red1, LOW); digitalWrite(green1, LOW); digitalWrite(blue1, HIGH); procent1 = (ciezar1 / ml11) * 100; dtostrf(procent1, 3, 0, procent1_fin); lcd.setCursor(12, 0); lcd.print("Cyk "); lcd.print(procent1_fin); lcd.print("%"); pomiar_waga(); } if (ciezar1 >= ml11 && stan_lanie1 == 1) { analogWrite(pompastart1, 0); digitalWrite(pompalewo1, LOW); digitalWrite(pompaprawo1, LOW); lcd.setCursor(12, 0); lcd.print(" "); digitalWrite(red1, HIGH); digitalWrite(green1, HIGH); digitalWrite(blue1, HIGH); waga1.tare(1); lanie1 = 0; stan_lanie1 = 0; pomiar_waga(); } } void dozowanie_2() { if (ciezar2 >= 20 && stan_ciezar2 == 0 && lanie2 == 0) { digitalWrite(red2, HIGH); digitalWrite(green2, LOW); digitalWrite(blue2, LOW); Start2 = millis(); stan_ciezar2 = 1; pomiar_waga(); } if (ciezar2 < 5 && lanie2 == 0) { Serial.println("podnosze1"); analogWrite(pompastart2, 0); digitalWrite(pompalewo2, LOW); digitalWrite(pompaprawo2, LOW); stan_ciezar2 = 0; stan_lanie2 = 0; digitalWrite(red2, LOW); digitalWrite(green2, HIGH); digitalWrite(blue2, LOW); lcd.setCursor(12, 1); lcd.print(" "); pomiar_waga(); } if (ciezar2 <= -1) { stan_ciezar2 = 0; stan_lanie2 = 0; lanie2 = 0; digitalWrite(red2, LOW); digitalWrite(green2, HIGH); digitalWrite(blue2, LOW); waga2.tare(1); pomiar_waga(); } if (aktualnyCzas - Start2 >= 2000 && stan_ciezar2 == 1) { waga2.tare(1); stan_lanie2 = 1; stan_ciezar2 = 0; pomiar_waga(); } if (ciezar2 <= ml22 && stan_lanie2 == 1) { analogWrite(pompastart2, 200); digitalWrite(pompalewo2, HIGH); digitalWrite(pompaprawo2, LOW); lanie2 = 1; digitalWrite(red2, LOW); digitalWrite(green2, LOW); digitalWrite(blue2, HIGH); procent2 = (ciezar2 / ml22) * 100; dtostrf(procent2, 3, 0, procent2_fin); lcd.setCursor(12, 1); lcd.print("Cyk "); lcd.print(procent2_fin); lcd.print("%"); pomiar_waga(); } if (ciezar2 >= ml22 && stan_lanie2 == 1) { analogWrite(pompastart2, 0); digitalWrite(pompalewo2, LOW); digitalWrite(pompaprawo2, LOW); lcd.setCursor(12, 1); lcd.print(" "); digitalWrite(red2, HIGH); digitalWrite(green2, HIGH); digitalWrite(blue2, HIGH); waga2.tare(1); lanie2 = 0; stan_lanie2 = 0; pomiar_waga(); } } void dozowanie_3() { if (ciezar3 >= 20 && stan_ciezar3 == 0 && lanie3 == 0) { digitalWrite(red3, HIGH); digitalWrite(green3, LOW); digitalWrite(blue3, LOW); Start3 = millis(); stan_ciezar3 = 1; pomiar_waga(); } if (ciezar3 < 5 && lanie3 == 0) { analogWrite(pompastart3, 0); digitalWrite(pompalewo3, LOW); digitalWrite(pompaprawo3, LOW); stan_ciezar3 = 0; stan_lanie3 = 0; digitalWrite(red3, LOW); digitalWrite(green3, HIGH); digitalWrite(blue3, LOW); lcd.setCursor(12, 2); lcd.print(" "); pomiar_waga(); } if (ciezar3 <= -1) { stan_ciezar3 = 0; stan_lanie3 = 0; lanie3 = 0; digitalWrite(red3, LOW); digitalWrite(green3, HIGH); digitalWrite(blue3, LOW); waga3.tare(1); pomiar_waga(); } if (aktualnyCzas - Start3 >= 2000 && stan_ciezar3 == 1) { waga3.tare(1); stan_lanie3 = 1; stan_ciezar3 = 0; pomiar_waga(); } if (ciezar3 <= ml33 && stan_lanie3 == 1) { analogWrite(pompastart3, 200); digitalWrite(pompalewo3, HIGH); digitalWrite(pompaprawo3, LOW); lanie3 = 1; digitalWrite(red3, LOW); digitalWrite(green3, LOW); digitalWrite(blue3, HIGH); procent3 = (ciezar3 / ml33) * 100; dtostrf(procent3, 3, 0, procent3_fin); lcd.setCursor(12, 2); lcd.print("Cyk "); lcd.print(procent3_fin); lcd.print("%"); pomiar_waga(); } if (ciezar3 >= ml33 && stan_lanie3 == 1) { analogWrite(pompastart3, 0); digitalWrite(pompalewo3, LOW); digitalWrite(pompaprawo3, LOW); lcd.setCursor(12, 2); lcd.print(" "); digitalWrite(red3, HIGH); digitalWrite(green3, HIGH); digitalWrite(blue3, HIGH); waga3.tare(1); lanie3 = 0; stan_lanie3 = 0; pomiar_waga(); } } void dozowanie_4() { if (ciezar4 >= 20 && stan_ciezar4 == 0 && lanie4 == 0) { digitalWrite(red4, HIGH); digitalWrite(green4, LOW); digitalWrite(blue4, LOW); Start4 = millis(); stan_ciezar4 = 1; pomiar_waga(); } if (ciezar4 < 5 && lanie4 == 0) { analogWrite(pompastart4, 0); digitalWrite(pompalewo4, LOW); digitalWrite(pompaprawo4, LOW); stan_ciezar4 = 0; stan_lanie4 = 0; digitalWrite(red4, LOW); digitalWrite(green4, HIGH); digitalWrite(blue4, LOW); lcd.setCursor(12, 3); lcd.print(" "); pomiar_waga(); } if (ciezar4 <= -1) { stan_ciezar4 = 0; stan_lanie4 = 0; lanie4 = 0; digitalWrite(red4, LOW); digitalWrite(green4, HIGH); digitalWrite(blue4, LOW); waga4.tare(1); pomiar_waga(); } if (aktualnyCzas - Start4 >= 2000 && stan_ciezar4 == 1) { waga4.tare(1); stan_lanie4 = 1; stan_ciezar4 = 0; pomiar_waga(); } if (ciezar4 <= ml44 && stan_lanie4 == 1) { analogWrite(pompastart4, 200); digitalWrite(pompalewo4, HIGH); digitalWrite(pompaprawo4, LOW); lanie4 = 1; digitalWrite(red4, LOW); digitalWrite(green4, LOW); digitalWrite(blue4, HIGH); procent4 = (ciezar4 / ml44) * 100; dtostrf(procent4, 3, 0, procent4_fin); lcd.setCursor(12, 3); lcd.print("Cyk "); lcd.print(procent4_fin); lcd.print("%"); pomiar_waga(); } if (ciezar4 >= ml44 && stan_lanie4 == 1) { analogWrite(pompastart4, 0); digitalWrite(pompalewo4, LOW); digitalWrite(pompaprawo4, LOW); lcd.setCursor(12, 3); lcd.print(" "); digitalWrite(red4, HIGH); digitalWrite(green4, HIGH); digitalWrite(blue4, HIGH); waga4.tare(1); lanie4 = 0; stan_lanie4 = 0; pomiar_waga(); } } void pomiar_waga() { ciezar1 = waga1.get_units(); dtostrf(ciezar1, 3, 0, odczyt1); ciezar2 = waga2.get_units(); dtostrf(ciezar2, 3, 0, odczyt2); ciezar3 = waga3.get_units(); dtostrf(ciezar3, 3, 0, odczyt3); ciezar4 = waga4.get_units(); dtostrf(ciezar4, 3, 0, odczyt4); } void ekran() { lcd.setCursor(0, 0); lcd.print("1. Lej:"); lcd.print(ml111); lcd.print("g"); lcd.setCursor(0, 1); lcd.print("2. Lej:"); lcd.print(ml222); lcd.print("g"); lcd.setCursor(0, 2); lcd.print("3. Lej:"); lcd.print(ml333); lcd.print("g"); lcd.setCursor(0, 3); lcd.print("4. Lej:"); lcd.print(ml444); lcd.print("g"); } void pomiar() { ml1 = analogRead(A8); ml11 = map(ml1, 1020, 0, 5, 30); dtostrf(ml11, 3, 0, ml111); ml2 = analogRead(A9); ml22 = map(ml2, 1020, 0, 5, 30); dtostrf(ml22, 3, 0, ml222); ml3 = analogRead(A10); ml33 = map(ml3, 1020, 0, 5, 30); dtostrf(ml33, 3, 0, ml333); ml4 = analogRead(A11); ml44 = map(ml4, 1020, 0, 5, 30); dtostrf(ml44, 3, 0, ml444); }
-
Ten artykuł jest częścią serii "Budowa frezarki CNC na stalowej ramie sterowanej z komputera PC" #1 - Mechanika #2 - Sterowanie i uruchomienie Wstęp Link do drugiej części na końcu tego artykułu. W niniejszym artykule chciałbym opisać proces budowy frezarki CNC, którą zbudowałem kilka lat temu jeszcze podczas studiów. Zdecydowałem się na budowę takiej maszyny ze względu na częstą potrzebę wytworzenia jakichś części lub na precyzyjne wycinanie otworów w obudowach do czego nie mam cierpliwości, a te parę lat temu druk 3D dopiero się rozkręcał i jakość ówczesnych drukarek mnie nie satysfakcjonowała. Ponadto budowa frezarki była swojego rodzaju sprawdzeniem własnych umiejętności jak i wyobraźni. Między innymi umiejąc już wtedy projektować w Autodesk Inventor umyślnie ograniczyłem projektowanie do pojedynczych części, chcąc się sprawdzić na ile jestem w stanie poukładać sobie projekt w głowie nie wspomagając się niczym więcej. Po zakończeniu budowy oczywiście znalazłoby się coś do poprawy natomiast efekt końcowy i tak przerósł moje oczekiwania oraz cieszył się dużym uznaniem innych osób. Podczas budowy wykonywałem na bieżąco kosztorysy, zapisywałem linki do części oraz zapisałem sobie wszystkie potrzebne rzeczy dzięki czemu mogłem wykorzystać ten projekt do napisania pracy inżynierskiej. Na potrzeby pracy inżynierskiej wykonałem projekt 3D zbudowanej już frezarki. Niniejszy artykuł nie stanowi kompletnej instrukcji budowy frezarki od podstaw natomiast ma na celu przedstawić jak ten proces budowy wyglądał, dlatego w tym artykule mogę częściej korzystać z czasu przeszłego pierwszej osoby w liczbie pojedynczej. Ten artykuł bierze udział w naszym konkursie! 🔥 Na zwycięzców czekają karty podarunkowe Allegro, m.in.: 2000 zł, 1000 zł i 500 zł. Potrafisz napisać podobny poradnik? Opublikuj go na forum i zgłoś się do konkursu! Czekamy na ciekawe teksty związane z elektroniką i programowaniem. Sprawdź szczegóły » Początkowo artykuł ten miałem napisać w jednej części, natomiast wyszedł obszerniejszy niż sądziłem i wyszło mi tutaj więcej zdjęć, a boję się że zaraz może się wyczerpać limit miejsca na zdjęcia zatem artkuł został podzielony na 2 części - mechaniczną oraz elektroniczną z konfiguracją Mach3 oraz przygotowaniem frezowania na tej maszynie. Wstępne założenia Pierwszym i najważniejszym założeniem były gabaryty całej maszyny. Początkowo miała ona dysponować polem roboczym ok. 300x300x150 mm kolejno w osiach X, Y, Z. Jednak po wstępnym kosztorysie okazało się iż najkosztowniejsze podzespoły takie jak nakrętki śrub kulowych, czy łożyska liniowe wystąpią w takiej samej ilości również w maszynie o większych gabarytach, a materiał potrzebny do budowy ramy, bramy i innych elementów konstrukcyjnych jest na tyle tani, że można sobie pozwolić na budowę większej maszyny nie zwiększając znacząco budżetu. Zatem nowe założenie obejmowało wymiary zewnętrzne maszyny w przybliżeniu 1000x1000x1000 mm oraz możliwie jak największe pole robocze kształtem zbliżone do kwadratu. Wiele konstrukcji ma pole robocze o proporcjach boków zbliżonych do 2:1 co często ogranicza rozmiar możliwego do zamontowania na maszynie materiału. Planując budowę takiej maszyny zawsze powinniśmy zaczynać od takiego wstępnego kosztorysu ponieważ jak widać założenia mogą się szybko zmienić. Pozostałe założenia Możliwość obróbki materiałów takich jak drewno, materiały drewnopodobne, tworzywa sztuczne, kompozyty i metale kolorowe 3 stopnie swobody Możliwie maksymalnie duże pole robocze przy danych wymiarach zewnętrznych Solidna konstrukcja oparta o profile stalowe Możliwość prostej separacji bramy od podstawy maszyny w celu łatwiejszego transportu Sterowanie z komputera klasy PC Zachowanie estetyki konstrukcji Kartezjański układ współrzędnych Wybór sposobu poruszania się w osi Y Do wyboru mamy dwie opcje: Ruchomy stół i statyczna brama Statyczny stół i ruchoma brama W moim przypadku wybór padł rozwiązanie ze statycznym stołem i ruchomą bramą ze względu na mniejszą wymaganą przestrzeń gdzie stoi maszyna, ponieważ stół ruszając się wychodzi poza obrys ramy podobnie jak w drukarkach 3D z takim rozwiązaniem. Dużą zaletą tego rozwiązania jest również nie wpływanie masy materiału na bezwładność podczas pracy w osi Y, co ma miejsce przy pierwszym sposobie. Ostatnią zaletą statycznego stołu jest możliwość zamontowania materiału znacząco wychodzącego poza obrys maszyny w osi Y i podparcia go w razie potrzeby. Przed przystąpieniem do projektowania własnej konstrukcji CNC pamiętajmy aby się dobrze zastanowić nad różnymi rozwiązaniami oraz wybrać najbardziej odpowiadające dla naszych potrzeb. Projekt 3D w Autodesk Inventor Jak wspomniałem we wstępie podczas budowy frezarki nie wspierałem się zanadto projektowaniem w Inventorze, ale sama praca inżynierska tego projektu już wymagała, zatem projekt 3D został wykonany post factum. Do zaprojektowania maszyny posłużył program Autodesk Inventor, który umożliwia zaprojektowanie pojedynczych części, ich zespołów, eksport rysunków potrzebnych do wykonania części na maszynach CNC, a ponadto umożliwia sprawdzenie kolizji oraz przeprowadzenie symulacji wytrzymałościowych. Model zawiera zarówno elementy dostępne na rynku jak i elementy potrzebne do wykonania. Części dostępne na rynku były modelowane symbolicznie zachowując tylko wymiary kluczowe dla konstrukcji i były nazywane słownie. Natomiast części wymagające wykonania były numerowane według schematu AAA-BBB, gdzie „AAA” jest numerem zespołu do którego należy część, a „BBB” jest numerem części danego zespołu. Przy czym plik 000-000 jest plikiem głównym zespołu i w jego skład wchodzą dwa zespoły (rama i brama) oraz śruby i podkładki je łączące. W przypadku pracy z większymi projektami zawierającymi więcej niż kilkanaście elementów pamiętajmy aby ustandaryzować nazewnictwo/numerację kolejnych modeli, ponieważ na słowne nazywanie każdej części szybko skończy się nam wyobraźnia, a nazwy typu "ercvevrtwh" szybko się na nas zemszczą bałaganem w plikach. Projekt nie zawiera wszystkich elementów maszyny ze względu na dużą ilość czasu ile wymagają te elementy do zamodelowania. Brakuje między innymi przewodów łączących wrzeciono, silniki i czujniki ze sterownikiem jak i łańcuchów prowadzących, mimo to model pozwolił dobrze dobrać odpowiednie łańcuchy prowadzące i zaplanować miejsca prowadzenia przewodów. Pamiętajmy aby podczas projektowania przewidzieć sposób ułożenia wszystkich przewodów, ponieważ nasz projekt nawet najlepszej konstrukcji z pajęczyną wiszących kabli będzie zwyczajnie nieestetyczny. Może to i trywialne, natomiast bardzo dużo osób o tym zapomina. Projektując tak dużą maszynę powinniśmy zastanowić się nie tylko nad spełnieniem kryteriów pracy tej maszyny, ale również powinniśmy przemyśleć rozwiązania zwiększające ergonomię użytkowania bądź transportu maszyny. Model mojej frezarki został podzielony na dwa podzespoły – ramę i bramę. Dzięki temu jest możliwość rozmontowania frezarki na dwa duże elementy co umożliwia łatwiejsze przenoszenie i transport maszyny. Dzięki przemyślanej konstrukcji wystarczy odkręcenie 10 śrub, aby frezarka została rozłączona na dwa niezależne elementy, co nie trwa więcej niż 10 minut. Poniższa grafika prezentuje śruby, które powinniśmy odkręcić, aby było możliwe zdjęcie bramy. Taka sama liczba śrub znajduje się po drugiej stronie maszyny. Natomiast grafika niżej reprezentuje już bramę odseparowaną od dolnej ramy. W przypadku takiego projektu bardzo ważne jest również powstrzymywania naszej wyobraźni przed zaprojektowaniem zbyt "fikuśnych" części, co może skutkować bardzo dużym kosztem wykonania. Zdarzają się przypadki kiedy ktoś poświęci bardzo dużo czasu na projekt, którego koszt wykonania przekracza wszelkie wyobrażenia i projekt należy powtórzyć. W tym przypadku detale były projektowane z myślą o wykonaniu ich metodą cięcia wodą. Jest to najtańsza i najszybsza metoda obróbki ubytkowej. Metoda wykorzystuje strumień wody pod ogromnym ciśnieniem, który z dodatkiem ścierniwa jest w stanie ciąć wszelkie materiały, a precyzja wykonania jest wystarczająca na potrzeby niniejszej budowy. Ponadto została również wykorzystana metoda druku 3D do wykonania odsysu, który może być montowany na mocowaniu wrzeciona i blokowany przez samo wrzeciono. Do montażu i demontaż potrzebny jest tylko jeden klucz imbusowy potrzebny do poluzowania uchwytu wrzeciona. Odsys zapewnia podłączenie odkurzacza oraz odprowadzenie wiórów i pyłu powstającego podczas frezowania. Jest to jedyna część wykonana techniką druku 3D w niniejszym projekcie ze względu skomplikowany kształt odsysu. Budowa części mechanicznej Rama Funkcję nośną dla całej maszyny pełni dolna rama, do której przymocowane są między innymi śruba osi Y, brama oraz gumowe nóżki, na których spoczywa cała konstrukcja. Jako materiał do budowy ramy posłużył profil stalowy gięty na zimno w kształcie prostokąta o wymiarach 100x50 mm i najgrubszej ściance dostępnej w hurtowni stali – 5 mm. Najbardziej kluczowy był etap spawania, ponieważ łączenie elementów łukiem elektrycznym powoduje powstawanie bardzo wysokiej temperatury w miejscu łączenia, po czym spoiwo stygnąc powoduje kurczenie materiału. Aby jak najskuteczniej przeciwdziałać temu zjawisku profile zostały przykręcone do stołu na czas spawania, same spawy najpierw były nakładane punktowo, aby ograniczyć nagrzewanie, a w następnej kolejności było nakładane spoiwo wypełniające, przy czym każdy następny punkt spawania znajdował się po przeciwległej stronie profilu, aby przeciwdziałać ściąganiu materiału. Przez cały ten proces kontrolowane były wymiary ramy. Mimo wszelkich starań zawsze będą obecne niedokładności w procesie budowy. Wymiary ramy były zadowalające, jednak stalowe profile gięte na zimno nie mają idealnie płaskich ścian, zawsze są one delikatnie wypukłe. Aby zapewnić jak największą dokładność samej maszyny powinniśmy zapewnić wspólną płaszczyznę dla podpór wałków liniowych, po których porusza się oś Y. Rozwiązaniem problemu może być planowanie powierzchni profilów w miejscach gdzie będą przymocowane prowadnice. Planowanie powierzchni zostało zlecone firmie dysponującej frezarką CNC o wystarczającym polu roboczym. Poniższe zdjęcie prezentuje równą płaszczyznę, na której możemy już przymocować prowadnice. Następnym etapem był montaż prowadnic dla ruchomej bramy. Wybór padł na wałki liniowe o średnicy 20 mm z podporami na całej długości prowadnicy co gwarantuje stabilne podparcie dla konstrukcji w każdym położeniu bramy. Przy montowaniu prowadnic powinniśmy przykuć szczególną uwagę, aby zamontowane prowadnice były względem siebie równoległe, ponieważ jakiekolwiek przekrzywienie wpłynie negatywnie na lekkość jak i dokładność pracy już o nadmiernym zużywaniu łożysk nie wspominając. Dla zapewnienia równoległości obu wałków względem siebie możemy najpierw przymocować jedną z prowadnic, a dla zachowania równoległości drugiej prowadnicy możemy się wspomóc np. płaskownikiem, do którego będą przykręcone łożyska obu prowadnic, następnie powinniśmy ten płaskownik z łożyskami przesunąć w obie skrajne pozycje oraz przymocować drugą prowadnicę. W moim przypadku sprawdziło się to świetnie. Następnie do ramy przyspawano uchwyty, w które zostały wkręcone gumowe nóżki. W sklepach z częściami do maszyn przemysłowych rozwiązania nóg zazwyczaj bywają strasznie drogie dlatego warto się rozejrzeć za innymi rozwiązaniami. Rolę nóżek w tym przypadku spełniły gumowe odboje z zawieszenia samochodu terenowego. Bardzo dobrze tłumią wszelkie wibracje maszyny i nie przenoszą ich na stół na którym stoi maszyna. Brama Brama podobnie do ramy pełni funkcję nośną dla pozostałych dwóch osi – X oraz Z. Do budowy bramy został użyty taki sam profil stalowy jak w przypadku ramy. Zostały docięte 3 odcinki o wymaganych długościach, a w profilu docelowo będącym poziomo zostały obrobione płaszczyzny na tokarni aby zapewnić prostopadłość płaszczyzny cięcia z bokiem profilu. Dzięki temu zabiegowi możliwe było zaciśnięcie profili w pożądanej pozycji, a następnie przystąpienie do spawania. Nie dysponowałem w tamtej chwili tak dużym zaciskiem zatem do unieruchomienia bramy przy spawaniu ponownie została wykorzystana tokarnia jako docisk tak jak widać na poniższym zdjęciu 🙂 W tym przypadku sposób okazał się doskonały, ponieważ wymiary bramy wyszły idealne z zachowaniem kątów prostych. Następnie został przyspawany drugi profil poziomo, tym razem o przekroju kwadratu 50x50 mm i również o ściance grubości 5 mm. W następnej kolejności zostały przyspawane stopy bramy do mocowania łożysk. Zostały one wycięte technologią cięcia wodą ze stali o grubości 15 mm. Do owych stóp zostały przykręcone podwójne łożyska otwarte i aby uniknąć montowania dodatkowych wzmocnień zdecydowałem się na tak dużą grubość stóp. Końcówki profili bramy wymagały wycięcia otworów w narożnikach, aby był możliwy dostęp do śrub mocujących łożyska liniowe. Rozwiązanie niezbyt eleganckie i ogranicza trochę dostęp do śrub mocujących, ale nie wpływa to na sztywność konstrukcji. Profil nie mógł być przyspawany na środku stopy, ponieważ musimy pamiętać, że wrzeciono frezarki będzie trochę odsunięte od bramy, dlatego brama musiała być możliwie cofnięta na stopie, aby wrzeciono i pozostała konstrukcja bramy znajdowała się w miarę możliwości w obrysie stóp. Wsunięcie bramy na prowadnice ramy udowodniło powodzenie w dotychczasowych staraniach. Brama mogła się poruszać bez oporów w całym zakresie ruchu, a nawet wymagała zabezpieczenia, aby uniemożliwić samoistne zsunięcie się z prowadnic. Podobnie jak w osi Y, płaszczyzny pod podpory prowadnic osi X również wymagały planowania powierzchni. Następnie zostały przymocowane prowadnice osi X w analogiczny sposób jak miało to miejsce dla osi Y. Na gotowe prowadnice został wsunięty wózek osi X wykonany z aluminiowej płyty o grubości 10 mm, na którym realizowany jest również ruch w osi Z. Do płyty przymocowanych jest 8 pojedynczych łożysk otwartych oraz obudowy nakrętek kulowych dla osi Y oraz Z. Ruch w osi Z odbywa się po prowadnicach zamontowanych na ostatnim elemencie nośnym, również wykonanym z 10 mm płyty aluminiowej. Do tego elementu jest przykręcony uchwyt umożliwiający montaż wrzeciona. Powyższe aluminiowe płyty również zostały wycięte wodą. Poza kształtem wycięto również otwory montażowe, zatem pod odbiorze takiego elementu możemy założyć gwintownik maszynowy na wkrętarkę, błyskawicznie nagwintować otwory i zamontować gotowy element. Dlatego też na etapie projektowania warto przewidzieć sposób wykonania niektórych elementów. Uwzględnienie wszystkich otworów w projekcie i wycięcie ich wodą spokojnie zaoszczędziło mi kilka cennych godzin i nerwów. Napęd i czujniki Do napędu frezarki użyłem silników krokowych sprzężonych ze śrubami kulowymi. Wybrałem silniki krokowe ze względu na niski koszt zakupu, łatwość w sterowaniu oraz powszechność wykorzystania w podobnych zastosowaniach. Wykorzystałem model bipolarny NEMA23 o momencie trzymającym 1,89 Nm. Istotnym parametrem przy doborze silników był też prąd jednej fazy wynoszący 2,8 A, co mieści się w ograniczeniu prądowym zastosowanego sterownika. Do zamiany ruchu obrotowego na ruch liniowy wykorzystałem śruby kulowe o średnicy 16 mm i skoku 5 mm. Mimo znaczącej ceny zestawu jest to korzystny wybór w zastosowaniu do napędu maszyn CNC. Śruby kulowe charakteryzują się brakiem luzu oraz znikomymi oporami toczenia dzięki budowie nakrętki przypominającej łożysko. Wadą skomplikowanej budowy nakrętek jest ich wysoka cena oraz niższa odporność na zabrudzenia, które mogą się przyklejać do śrub napędowych. Śruby zostały połączone z silnikami za pośrednictwem sprzęgieł mieszkowych. Sprzęgła pełnią dwie funkcje – przeniesienie napędu z silnika na śrubę oraz wprowadzają delikatną elastyczność, która jest niezbędna ze względu na niemożliwe do całkowitego usunięcia nieosiowości osi silnika i śruby. Sztywne połączenie silnika ze śrubą mogłoby skutkować wibracjami w trakcie pracy lub nawet uszkodzeniem łożysk silnika. Łożyska podtrzymujące śruby kulowe w osi Y zostały przymocowane za pomocą elementów umożliwiających regulację wysokości łożysk. Mocowania łożysk pozostałych osi zostały przytwierdzone bezpośrednio do ramy lub płyty aluminiowej. Cienkie stalowe elementy mocujące zostały wycięte wodą, natomiast aluminiowe mocowanie silnika osi Z zostało wyfrezowane ze względu na grubość 10 mm, przy takiej grubości płaszczyzna cięcia w przypadku wody może nie być do końca prostopadła. Przez zbyt duży rozmiar silników niemożliwe było zamontowanie jednego z nich współosiowo ze śrubą osi X ponieważ nie zmieściłby się między profilem bramy a wózkiem osi X. Aby rozwiązać ten problem przesunięto silnik poza obrys maszyny, a napęd przeniesiono przez dwa sprzęgła mieszkowe oraz wał o średnicy 6mm. Zastosowane rozwiązanie nie nadwyręża elastycznych możliwości sprzęgieł oraz nie ogranicza pola roboczego w osi X. Na koniec zostały przymocowane ostatnie najmniejsze detale takie jak uchwyty czujników, mocowanie wrzeciona czy mocowania łańcuchowych prowadnic na przewody. Przy umiejscowieniu czujników wziąłem pod uwagę ukrycie ich z dala od pola roboczego oraz miejsca, w którym znajduje się operator, aby nie narażać czujników na uszkodzenia oraz ze względów estetycznych. Po zamontowaniu na swoich miejscach silników i czujników maszyna była gotowa na pierwsze testowe uruchomienie. Tymczasowo został podłączony sterownik, komputer oraz wstępnie skonfigurowany program sterujący, aby zweryfikować poprawność działania wszystkich mechanizmów. Po chwili testów zostało zamontowane wrzeciono i maszyna mogła wykonać pierwsze otwory w obudowie przeznaczonej do skrycia wewnątrz sterownika. Po pomyślnie przeprowadzonych testach wszystkich mechanizmów konstrukcja była niemal gotowa do użytku. Ostatnią czynnością pozostało pomalowanie wszystkich stalowych elementów konstrukcyjnych, aby zabezpieczyć je przed korozją. Zdecydowałem się na malowanie metodą proszkową, która zapewnia odporność na korozję i czynniki chemiczne we wszystkich zakamarkach konstrukcji. Przed malowaniem należało całą konstrukcję rozebrać a następnie ponownie złożyć. Na koniec został zamontowany stół maszyny, którego funkcję pełni płyta ze sklejki liściastej. Materiał ten jest dość tani w zakupie i wystarczająco sztywny dla tej konstrukcji. Stół składa się z dwóch części: dolnej płyty o grubości 37 mm, do której jest przymocowany zasadniczy stół o wymiarach pola roboczego i o grubości 36 mm. W stole wykonano niemal 2100 otworów, które już samodzielnie wywierciła maszyna wiertłem o średnicy 3 mm. Na wykonanie takiej ilości otworów wystarczyło zaledwie 45 minut ciągłej pracy. Otwory będą wykorzystywane do zamocowania obrabianego materiału w polu roboczym. Po zakończeniu wiercenia stół został poddany planowaniu, aby zapewnić równoległość płaszczyzny stołu do płaszczyzny pracy maszyny. Podsumowanie części mechanicznej Jak widać proces budowy przebiegł całkiem pomyślnie z zachowaniem funkcjonalności i estetyki. Chciałbym natomiast przyłożyć dużą uwagę do etapu projektowania. Pamiętajmy, że im więcej czasu spędzimy na etapie projektowania i rozwiązywania problemów tym mniej czasu, potu, nerwów i pieniędzy będzie nas kosztowała budowa naszego projektu. W moim przypadku upiekło się bez istotnych wpadek, ale niektóre rzeczy na pewno zaprojektowałbym inaczej przed przystąpieniem do budowy. Nie będę nikogo czarował, że taka budowa to nic takiego, ponieważ jak widać wymaga to pewnej wiedzy i doświadczenia z mechaniką oraz zaplecza narzędzi, którymi nie każdy dysponuje, a zlecenie takiej budowy może być dość kosztowne. W kolejnej części artykułu opiszę budowę części elektronicznej, podłączenia wszystkich elementów, prowadzenie kabli, zmontowanie sterownika, sposób sterowania przez komputer PC oraz na sam koniec pokażę jak wygląda użytkowanie takiej maszyny wraz z materiałami wideo. Link do drugiej części artykułu: Budowa frezarki CNC na stalowej ramie sterowanej z komputera PC - Sterowanie i uruchomienie [2/2]
-
Problem z doborem właściwego wzmacniacza i zasilacza
Poszukiwany opublikował temat w Zupełnie zieloni
Witam wszystkich. W ramach jakieś promocji na jednym z portali u naszych skośnych przyjaciół dostałem w dobrej cenie taki coś. Plan był taki żeby zrobić z tego zestaw grający pod szafkowy do kuchni. Dopiero jak to do mnie dotarło wczytałem się w specyfikację i okazało się że wymaga dodatkowego wzmacniacza. Chyba że coś źle rozumiem. Głośniki będą z zestawu komputerowego zasilane bezpośrednio z USB. To jest moje pierwsze podejście do takiego tematu więc pomóżcie z wyborem jakiegoś wzmacniacza. Myślałem żeby to zasilać zwykłym zasilaczem od ledów albo stara kostka do telefonu. -
Witam chciałem wam przedstawić wykonaną przeze mnie kierownicę do komputera PC. Kierownica nie jest jeszcze do końca wykonana tak jak bym chciał, ale jest skończona działa można ją będzie jeszcze rozbudować 🙂 Budowa od strony elektronicznej: Do budowy kierownicy użyłem jako podstawę Arduino Leonardo. Opierałem się o podobny projekt który znalazłem na yt . Lecz ja zrobiłem to trochę ładniej niż tamten chociaż nie ma rewelacji mogło być lepiej , ale w przyszłości myślę zrobić jeszcze jedną lepszą 🙂 Oprócz Arduino Leonardo , zamiast jakiś potencjometrów i kombinowania z przekładniami użyłem enkoder z drukarki Canon IP2700. Ogólnie to oprócz enkodera to jeszcze parę przycisków potencjometry do pedałów i jakieś diody na podświetlenie. Poniżej schemat jak to podłączone. Oprogramowanie gotowe znalazłem pod tym filmem z którego się wzorowałem, wystarczyło wgrać XLoaderem i to wszystko podłączyć jak na schemacie. Od strony mechanicznej wygląda to tak: Odbijanie i blokada zostały zrobione na sprężynie niestety nie mam zdjęć . Dodam link do filmu na którym jest pokazane jak to działa. Ręczny przerobiony ze starej kierownicy . Elementy skrzyni biegów wydrukował mi kolega w 3D. i wygląda to tak: Pedały ze starej kierownicy , dorobiony jeden sprzęgłowy z innej kierownicy: Ostatecznie wygląda to tak: Link do filmu jak to działa i jak zrobione niektóre rzeczy: To by było na tyle w planach zrobienie Force Feed Back , na silniku DC 12v i przekładniach 🙂 Pozdrawiam Krzysiek 🙂
- 39 odpowiedzi
-
- 9
-
-
- kierownica
- pc
-
(i 3 więcej)
Tagi:
-
Od kiedy tylko ludzie zaczęli interesować się akwarystyką od tego momentu postanowili na każdym kroku ułatwiać sobie pracę. Powstawały coraz to nowsze urządzenia – napowietrzacze, filtry, oświetlenia i tym podobne. Także w tej dziedzinie pojawiły się urządzenia w pełni zautomatyzowane (sterowane za pomocą różnego rodzaju przełączników oraz czujników). Przykładem takiego rozwiązania był chociażby sterownik akwariowy “Skalar”. Jako że powstał on w czasach gdy o diodach mało kto słyszał a sterowanie PWM już chyba nikt postanowiłem stworzyć własny sterownik akwariowy Bella. Jest to kompletny sterownik oparty na Arduino Nano v3. Sterownik akwariowy Bella – lista materiałów do budowy Obudowa uniwersalna Z1W Panel przedni MN-Tech Panel tylny MN-Tech Płytka prototypowa Bella Compact 1.1 moduł pod driver PWM firmy Meanwell (5 kanał) – opcjonalny arduino nano wraz z programem sterownika akwariowego Bella zegar ds1307 wyświetlacz LCD 20×4 znaki na szynie I2C termometr DS18b20 wodoodporny na kablu – 1 szt drivery firmy Meanwell serii LDD (dowolny model) (max 5 szt) przekaźnik 1 kanałowy – 2 szt przekaźnik 4 kanałowy – 1 szt kable połączeniowe FF długości 20cm do podłączenia modułów (30 szt – liczone z zapasem) gniazdo na goldpin 3 pinowe – 8 szt gniazdo na goldpin 4 pinowe – 2 szt (do wyświetlacza) gniazdo na goldpin 5 pinowe – 1 szt (do klawiatury) gniazdo na goldpin 6 pinowe – 2 szt (przekaźnik 4 kanałowy) zworka 2 pinowa (używana w przypadku braku sondy pH) przycisk chwilowy – 4 szt (jako klawiatura) włącznik kołyskowy okrągły – 2 szt gniazdo montażowe płaskie (GS-035) – 6 szt gniazdo zasilające na kabel ósemka – 1 szt gniazdo + wtyk 3 pinowy mini CB (termometr) gniazdo + wtyk 2 pinowy mini CB do podłączenia zasilania driverów 2x gniazdo + 2x wtyk 4 pinowy CB na listwę led (każde na 2 kanały oświetlenia) lub 1 gniazdo CB 8 pinowe na 4 kanały gniazdo montażowe do zasilania arduino 5,5/2,1 gniazdo bezpiecznikowe – 1 szt śruby czarne M3 długość 12mm – około 30szt nakrętki M3 – około 60 sztuk Oświetlenie Najważniejszym założeniem sterownika akwariowego Bella było oczywiście sterowanie oświetleniem. Sterownik obsługuje 5 kanałów PWM. Na samej płytce jest miejsce na zamontowanie 5 driverów z firmy Meanwell (dowolnych od LDD-300L do LDD-1500H). 4 z nich znajdują się na płytce natomiast piąty można zamontować osobno na dodatkowej płytce. Napięcie zasilania driverów jest w zakresie od 12 do 48V. Na płytce zostały wyciągnięte piny pwm oraz masy do podłączenia dodatkowych driverów. Moc każdego kanału można ustawić dowolnie w granicy 0-100% (wartości 0-255 na wyświetlaczu). Wszystkie kanały włączają się jednocześnie i gaszą o tej samej godzinie (wyjątkiem są kanały 1 i 2, które w przypadku ustawienia oświetlenia nocnego gaszą się dopiero o północy. W przypadku kiedy moc któregoś z kanałów jest zmniejszona jego ściemnianie / rozjaśnianie działa tak samo długo lecz jest proporcjonalnie wolniejsze (skoki są mniejsze). Długości i zakresy które można ustawić w tym dziale zostaną opisane w ostatnim akapicie “Zakresy”. Termostat Kolejnym punktem jest zastosowanie wodoodpornego termometru DS18b20 i możliwość podłączenia do niego dwóch niezależnych urządzeń (np grzałki oraz chłodnicy czy też wentylatora). Jak w poprzednim punkcie zakresy zostały opisane na końcu. W przypadku awarii / odpięcia termometru temperatura na wyświetlaczu znika (zostaje zastąpiona przez znaki –. Dodatkowo w ramach zabezpieczenia w takim przypadku gniazda zarówno grzania jak i chłodzenia zostają odłączone od zasilania. W przypadku tej funkcjonalności mamy dostępne 2 zmienne. Pierwsza to temperatura (oznaczająca temperaturę dolną) poniżej której uruchomiona zostanie grzałka. Druga to histereza. Główną wartością jest temperatura – jest to deklarowana wartość dolna poniżej której uruchomiony zostanie przekaźnik odpowiadający za grzałkę. Na wyświetlaczu zmieni się opis z G-OFF na G- ON. Temperatura będzie rosła do momentu przekroczenia 1x histerezy w górę. W przypadku jeśli temperatura przekroczy wartość zadaną + 2x histerezę uruchomi się chłodzenie i będzie działać do momentu w którym włączyło się grzanie (T+H). Stycznik 1 oraz stycznik 2 Stycznik 1 może zostać ustawiony w 2 trybach – pierwszym z nich jest to tryb pracy do sterowania elektrozaworem do CO2 (sterowanie uruchamia się automatycznie po podłączeniu sondy pH). Drugim trybem jest uruchamianie się 1x dziennie na dowolny okres (od 1 minuty do 23 godzin i 59 minut). W przypadku gdy nie ma podpiętej sondy pH do sterownika należy zrobić mostek pomiędzy pinem A7 a pinem GND – program automatycznie zmienia działanie stycznika na tryb pracy 1x dziennie. Stycznik 2 działa tylko jako uruchamiany 1x dziennie (jak wyżej). Stycznik 3 oraz stycznik 4 Działają one automatycznie w zależności od pór dnia. Stycznik numer 3 uruchamia się w momencie rozpoczęcia świtu i wyłącza w momencie gdy kończy się zmrok. Stycznik numer 4 uruchamia się tylko w czasie trwania dnia. Sonda pH Program obsługuje sondy pH opisane w tym artykule. Podpinana jest ona do pinu A7. Za jej pomocą sterowany jest stycznik numer 1 do którego można podpiąć jak pisałem powyżej elektrozawór dozujący CO2. W momencie w którym nie mamy podpiętej sondy pH należy zewrzeć piny A7 oraz GND. Dzięki temu stycznik nr 1 przełącza się na działanie 1x dziennie. Wartości które możemy zmieniać to dolna granica pH oraz histereza. Po przekroczeniu górnej granicy uruchomiony zostaje stycznik (do którego można podłączyć elektrozawór dozujący CO2) i działa on do momentu obniżenia pH poniżej zadanej wartości. Oświetlenie awaryjne Pin analogowy A6 został przygotowany jako uruchamianie oświetlenia awaryjnego. W przypadku gdy pin zwarty jest do masy (za pomocą rezystora 10kOhm program działa w normalnym trybie. Gdy włącznik zostanie uruchomiony i zwarty do pinu 5V oświetlenie zacznie świecić na około 50% mocy (na tyle mocno żeby było widać lecz aby nie oślepiać). W tryb pracy awaryjnej zostaną uruchomione kanały 1 oraz 2. Do uruchomienia oświetlenia awaryjnego służy przycisk na boku obudowy (z przodu) po stronie wyświetlacza. Wyłącznik oświetlenia Istnieje także możliwość wyłączenia całkowicie napięcia podawanego na diody. Do tego celu służy przełącznik znajdujący się z boku obudowy (od strony wyświetlacza z tyłu). Dzięki temu możemy w sytuacji w której jest potrzeba odpięcia oświetlenia od sterownika odłączyć całkowicie zasilanie driverów. Wyświetlacz LCD Sterownik akwariowy Bella oferuje dwa tryby działania. Pierwszym z nich jest tryb wyświetlania informacji znajdujących się na sterowniku. Poniżej znajduje się właśnie taki układ. Na żółto zostały oznaczone pola odpowiednio od góry: Grzałka, Wentylator, Stycznik 1 (jeśli używamy sondy pH zmienia się jego nazwa z S na C – można podpiąć do niego elektrozawór CO2) oraz Stycznik S2. Styczniki S3 oraz S4 (ich godziny działania) wyświetlane są w menu rotacyjnym na dole ekranu. Kolejnym trybem w jakim pracuje ten sterownik akwariowy jest tryb menu. Aby go uruchomić należy jednocześnie przytrzymać przyciski + oraz – (góra i dół). W tym momencie układ wyświetlacza zmieni się całkowicie na prezentowany poniżej: Funkcje menu (nazwa, dostępne wartości oraz ich skoki) W trybie ustawień zmieniają się dwa dolne wiersze na wyświetlaczu. Na górnym jest informacja o aktualnie zmienianej funkcji oraz jej wartości. W dolnym rzędzie pokazany jest dostępny zakres w jakim może być on zmieniany. Dokładna struktura menu zakresy oraz skoki są dostępne w tabeli poniżej. Po uzyskaniu maksymalnej wartości (dla przykładu PWM1 – 255) jeśli nadal będzie włączony przycisk + wartości będą liczone dalej od najniższej. Podobnie dzieje się w przypadku uzyskania najniższej wartości i trzymania przycisku -. W tym przypadku wartość zmieni się na największą. Więcej informacji znajdziecie w filmie:
-
Cześć, nie dawno wpadłem na pomysł małego tuningu swoich zasłon. Przy użyciu ESP8266, dwóch servomotorów MG996R 360, 4 czujnikow kontkatronowych i wydruku 3D. Projekt jest zasilany z 5v ładowarki od jbl W lecie oraz w słoneczne dni oglądanie telewizji w moim domu jest niemalże niemożliwe. Dostęp do rolety po lewej stronie jest nieco utrudniony , przez stojąca pod oknem klatkę królika. Urządzenia tego typu są stosunkowo drogie. Więc wraz ze szwagrem wpadliśmy na pomysł zbudowania automatu, który będzie odpowiadał za sterowanie zaslonami/ roletami okiennymi. Póki co sterowanie ogranicza się do http i rolety sterowane sa pojedynczo przez ograniczenie prądowe zasilacza impulsowego. Lecz finalnie chcemy go rozbudować o moduł czujnika natężenia światła oraz o optocoupler podłączony do usb telewizora. Które po włączeniu tv będzie miało stan wysoki, sygnał z modułu optocouplera będzie docierał do esp i na podstawie odczytu z czujnika światła; Płytka będzie decydowała czy zasłonić oba okna, czy jedno będzie wystarczające. Zaś po jego wyłączeniu będą się one automatycznie podnosić, tak aby w domu nie było ciemno przez cały czas. Myślę że projekt jest stosunkowo ciekawy i prosty do wykonania dla majsterkowiczów. Przez zastosowanie serwa udało się zmniejszyć rozmiary samego urządzenia. W przypadku zastosowania silnika krokowego i przekładni były sporo większy. Link do prezentacji YouTube: Poniżej załączam listę komponentów: -1x Esp 8266 -4x czujniki kontaktronowe (okienne) https://allegro.pl/oferta/kontaktron-boczny-czujnik-do-okien-drzwi-b-1p-10973809269?snapshot=MjAyMi0wMS0zMVQyMzoxNjo1NS44NThaO2J1eWVyOzA2ZWI1NmEyMTQ3ODljNmVkMWIzM2QyZWMzNDJiNjEwOGI3MzE4OGQ3MTkxNDMxMmU4ZmRkYzMxN2UzOWRkM2U%3D -2x servo MG996R https://allegro.pl/oferta/serwo-mg996r-metalowe-zebatki-15kg-360-11755893673?snapshot=MjAyMi0wMS0zMFQxNToxNjowMS43NzdaO2J1eWVyO2Q4NzBmNjY2OTRkMzc0ZDA1NzkzNjBhNjA2ZThhZGI5NWFiZTY3Nzk5YmQ4Mzg3N2NhODI5OWVkNzhhMGUzNGE%3D -4m przewodu wykorzystywanego w instalacjach alarmowych -2x wtyk usb https://electropark.pl/pl/p/Wtyk-USB-typ-A/475 - zasilacz impulsowy 5v 2,5A -2x moduł czujnika światła https://electropark.pl/pl/p/Modul-natezenia-swiatla-fotorezystor/9542 -12X klips do mocowania przewodu https://www.castorama.pl/klips-z-tasm-na-przew-5mm-4szt-id-1108710.html
-
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ć 🙂
- 49 odpowiedzi
-
- 5
-
-
- Kierownica
- Arduino
-
(i 1 więcej)
Tagi:
-
Witam wszystkich, Dawno mnie tu nie było, praca, studia itp. W końcu znalazłem coś czasu, aby przedstawić projekt już chyba ostatni mojej kierownicy, który wykonałem w ramach pracy inżynierskiej na kierunku Mechatronika. Projekt od wcześniejszych pod względem elektroniki znacznie się nie różni jedyne co to został zastosowany inny enkoder oraz silnik DC co opisze w dalszej części postu. A więc tak: Główne założenia projektu: Wykorzystanie mikrokontrolera Arduino Leonardo do sterowania urządzeniem, Użycie enkodera OMRON E6B2-CWZ6C do odczytu położenia kierownicy, Wykorzystanie silnika DC ZY6812 oraz sterownika silnika IBT_2 do wytworzenia siły zwrotnej tzw. force feedback, Wykonanie mechanizmu, który ma za zadanie przekazać informację na temat zachowania się kierownicy podczas jazdy w symulatorze wyścigów samochodowych, oraz innych grach czy symulatorach samochodowych, Wykonanie większości elementów konstrukcji w technologii druku 3D przy użyciu materiału PETG, Wykonanie wałka głównego łączącego enkoder, koło kierownicy, oraz przekładnię za pomocą obróbki skrawaniem na maszynie sterowanej numerycznie CNC z pręta aluminiowego o średnicy Ø60mm oraz oznaczeniu PA6/EN AW 2017, Wykonanie estetycznej oraz w pełni funkcjonalnej obudowy urządzenia, Wykorzystanie sportowego koła kierownicy wraz z zaczepem quick release, Zasilanie urządzenia zasilaczem ADLS-360-24, Możliwość dołączenia dodatkowych elementów takich jak: pedał gazu, hamulca, sprzęgła, hamulec ręczny, skrzyni biegów poprzez gniazda RJ 45 z tyłu obudowy. Większość układu elektroniki została opisana we wcześniejszych moich postach, więc jeżeli jest ktoś zainteresowany to zapraszam do odwiedzenia ich, natomiast tutaj dodam kilka zdjęć przedstawiających wykonane urządzenie oraz film, który również prezentuje urządzenie oraz jego działanie. Link do filmu :
- 22 odpowiedzi
-
- 13
-
-
- Steering Wheel
- DIY
-
(i 2 więcej)
Tagi:
-
Cześć wszystkim, potrzebuję zbudować audio switcha takiego jak na znalezionym schemacie lecz nie potrafię dobrać odpowiedni przełącznik obrotowy i w tej sprawie właśnie pisze do was tu na forum.
- 3 odpowiedzi
-
- Audio
- Elektronika
-
(i 1 więcej)
Tagi:
-
Witajce! Na wstępnie chciałbym się przywitać z całą społecznością tego forum - to mój pierwszy post. Ze względu na pandemię i tego, że przeszedłem na home office - pojawiło się troszkę więcej czasu. W pracy zajmuję się modelowaniem 3D i niedawno ogarnąłem drukarkę 3D wiec zastanawiałem się jak to połączyć i zrobić coś z tego ciekawego. Pomyślałem o elektronice - czyli coś co zawsze mnie w jakiś sposób ciekawiło. Tym bardziej, że niedawno urodził się syn więc tym bardziej się to przyda 🙂 Wpadłem na pomysł aby zrobić model koparki sterowanej zdalnie. Projekt z racji mojej nikłej wiedzy ciągle ewoluuje - głównie za sprawą oglądanych na bieżąco samouczków i tutoriali. Jednym z przykładów takiej ewolucji jest to, że planowałem zasilić projekt z powerbanka, ale dowiedziałem się o istnieniu układów odcinających zasilanie w przypadku bezczynności więc projekt trzeba było zaktualizować. Do rzeczy - poniżej pochwalę się tym co już mam i co do czego mam wątpliwości. Krytyka mile widziana 🙂 1. MODEL: Projekt jest już zamodelowany w 80%. Pozostały takie kwestie jak rozmiar i budowa maszynowni + zabudowa tej maszynowni wraz z wentylatorem (pytanie czy wentylator będzie potrzebny w ogóle - czy elektronika będzie wydzielać dużo ciepła?) kwestię obrotu całej koparki względem gąsienic - planowałem łożysko wzdłużne pomiędzy + na dolnej platformie zębatka poruszana silniczkiem w maszynowni pozostałe kwestie mechaniczne są raczej rozwiązane - drukowałem prototypy poszczególnych rozwiązań i to już w miarę dograłem. 2. ARDUINO: Całość chcę oprzeć o Arduino Mega (zakładałem Uno, ale nie starczy mi wyjść). 3. ZASILANIE: Planuję 3x 18650 (tutaj się zastanawiam czy x2 czy x3?) zasilanie Arduino poprzez LM2596s i okrągły wtyk - zmniejszone napięcie do 9V zasilanie silników poprzez osobny LM2596s prowadzący do sterowników silników - napięcie dobrane doświadczalnie z zakresu 9-12V. Obecnie podłączałem pod USB 5V i wolno się kręciły. Silniki sterowane za pomocą L9110s woltomierz z wyświetlaczem zamontowany na obudowie jako kontrola naładowania aku 4. OŚWIETLENIE LED: Planuję: 2x LED biały jako oświetlenie przednie LED F8 2x LED czerwony 5mm jako oświetlenie tylne 1x LED żółte 5mm migające jako oświetlenie robocze Póki co wiem, że trzeba do Ledów dorzucić rezystory, ale tego tematu jeszcze nie zgłębiałem. Póki co zamówiłem 600szt rezystorów i będę się bawił. 5. RC: Tutaj mam pytanie do Was - zastanawiałem się jak to wykonać. Pierwotnie chciałem wykonać to jako połączenie BT z padem od Xboxa One - dlatego zamówiłem HC-06. Doczytałem natomiast, że da radę połączyć się tylko ze starszym padem Xbox 360, którego nie mam. Ewentualnie jeszcze sterowanie przez telefon - ale to też nie wiem jak działa i czy jest możliwość skonfigurowania układu joyów pod siebie - ogarnę jak przyjdzie moduł. Rozważam jeszcze budowę swojego pada w oparciu o układ Nano/Mini Pro + NRF24L01 + 2x joy + buttony do świateł. Ale to w momencie już jak koparka będzie złożona. 6. PLAN ROZWOJOWY: głośnik z dźwiękiem silnika + pikanie przy cofaniu zmiana silniczków na mocniejsze wbudowana ładowarka do baterii na np UBC C wywrotka RC 🙂 Postaram się na bieżąco wrzucać jakąś aktualizację, ale raczej nie jest to szybki projekt - zamawiam sporo części z Chin więc trochę idą. Jeżeli macie jakieś sugestie/pomysły czy też uwagi - jestem otwarty.
- 8 odpowiedzi
-
- 2
-
-
Większość osób myśląc o cyfrowej telekomunikacji, myśli o współczesne mikroelektronice: smartfonach, komputerach i Internecie. Nie każdy zdaje sobie sprawę z tego, że idea przesylania informacji zakodowanej w ciągach zer i jedynek jest dużo, dużo starsza. Pierwszym urządzeniem tego rodzaju był telegraf skonstruowany przez Emille'a Baudot w latach siedemdziesiątych XIX wieku. Urządzenie po stronie nadajnika posiadało klawiaturę złożoną z pięciu przycisków, które operator musiał wciskać w różnych kombinacjach. Urządzenie wysyłało na linię ciąg impulsów, odpowiadających wciśniętej kombinacji. Odbiornik interpretował ten sygnał drukując na papierowej taśmie odpowiednią literę lub cyfrę, w jej naturalnej formie. Na początku XX wieku idea to została udoskonalona. Nadajnik został wyposażony w klawiaturę podobną do tych stosowanych w maszynach do pisania. Tak narodził się dalekopis. Transmisja danych pomiędzy tymi urządzeniami przypominała standardowy interfejs szeregowy. Z tą różnicą, że z przeciwieństwie do TTL UART-a czy RS323 poszczególne stany logiczne nie były kodowane przez wartości napięć, ale przez fakt przepływu (bądź nie) prądu w obwodzie. Normalnie przez linię płynął prąd o ustalonej wartości (zazwyczaj 60, 40 lub 20 mA). To był stan domyślny. Rozpoczęcie nadawania kolejnego znaku wymagało nadania bitu startu, czyli chwilowego przerwania obwodu. Potem nadajnik oczekiwał na pięć bitów z kodem znaku w alfabecie Baudot (zwanym także międzynarodowym alfabetem telegraficznym). Na końcu pojawiały się bity stopu w trakcie których odebrany znak był drukowany na papierze. Ktoś zapewne zauważył już, że używając pięciu bitów można było zakodować maksymalnie 32 znaki - zdecydowanie za mało, aby pomieścić wszystkie litery alfabetu, cyfry i znaki interpunkcyjne. To prawda. Stosowano pewną sztuczkę - dwie kombinacje bitów były zarezerwowane do przełączania pomiędzy dwoma rejestrami zawierającymi litery oraz cyfry i inne znaki. Ne stosowano także rozróżnienia na male i duże litery. Dalekopis chociaż w pełni cyfrowy, był urządzeniem elektromechanicznym, radzącym sobie bez pojedynczego tranzystora (chociaż oczywiście w latach osiemdziesiątych i dziewięćdziesiątych produkowano nowoczesne, elektroniczne wersje). Dalekopisy były powszechnie używane do przesyłania wiadomości przez wojsko i państwowe służby. Poczta wykorzystywała je do transmisji telegramów. Stosowano je także w roli terminali komputerowych, przed pojawieniem się monitorów CRT. Ślad tej zaszłości historycznej zachował się w nomenklaturze stosowanej w systemach uniksowych, gdzie terminal jest oznaczany skrótem TTY - od angielskiego słowa "teletype", czyli właśnie dalekopis. Przepraszam za ten przydługi wstęp, nie byłem jednak pewien, czy wszyscy będą jeszcze kojarzyć o jakie urządzenie chodzi... Przechodząc do sedna sprawy. Na co dzień pracuję w krakowskim Muzeum Inżynierii Miejskiej. Jakiś czas temu został nam przekazany dalekopis T100, wyprodukowany w latach siedemdziesiątych w Czechoslowacji, na licencji Siemensa. Ponieważ posiadaliśmy już taki eksponat, zostałem poproszony o sprawdzenie możliwości uruchomienia go i wykorzystywania w roli interaktywnej instalacji, zamiast "martwego" eksponatu ukrytego w muzealnej gablocie. Tak rozpoczęły się moje eksperymenty. Najpierw skonstruowałem prosty interfejs USB, oparty na starym mikrokontrolerze AT89C2051 i układzie FTDI. Do generowania pętli prądowej 40 mA używałem zestawu kilku baterii 9V oraz rezystorów o dużej mocy. Komunikacja z dalekopisem ruszyła bez problemu - pojawiła się jednak inna trudność. Okazało się, że uszkodzony jest moduł wzywaka - urządzenia odpowiedzialnego m.in. za zdalne włączanie silnika dalekopisu przy połączeniu przychodzącym, sygnalizowanym odwróceniem kierunku przepływu prądu w linii. Naprawa tego modułu okazała się bardziej skomplikowana niż początkowo sądziłem, ostatecznie postanowiłem więc wymontować wadliwą część i sterować silnikiem za pomocą przekaźnika, zamontowanego w moim interfejsie. Finalna wersja interfejsu zawiera mikrokontroler PIC32MX270F256B oraz moduł GSM SIM800L. Wykorzystałem także 2MB pamięć SPI flash, do wykonywania elektronicznej kopii przychodzących wiadomości. W osobnej obudowie znajduje się generator pętli prądowej, złożony z zasilacza transformatorowego oraz zestawu kondensatorów. Całość można obecnie oglądać na wystawie "Uwaga! Nieprzyjaciel podsłuchuje." w Muzeum Inżynierii Miejskiej w Krakowie. Po wysłaniu SMS-a na podany numer można oglądać dalekopis podczas pracy.
- 9 odpowiedzi
-
- 17
-
-
Witam, rozpoczynam naukę elektroniki od zdobywania podstaw i budowy syntezatora modularnego sterowanego napięciem (bardzo fajna baza wiedzy, zwłaszcza podstaw a temat mnie interesuje). Do zasilania musiałem zbudować prosty zasilacz symetryczny +/-12VDC zasilany gniazdkowym zasilaczem transformatorowym. Układ dość gruntownie sprawdziłem przed podłączeniem i mam na nim napięcia +11,7V oraz -12V. Prostowanie jednopołówkowe może się wydawać kiepskim rozwiązaniem jednak jest to dość standardowy projekt do tego zastosowania, na bazie: http://musicfromouterspace.com/index.php?MAINTAB=SYNTHDIY&VPW=1358&VPH=652 Wszystko wydawało się być dobrze jednak mam problem podczas prototypownia pierwszego oscylatora na bazie przerzutnika Schmitta w którym użyłem WO TL074 jako bufor na wyjściu przerzutnika. Kiedy piny zasilające WO są podłączone do masy i +12V wszystko działa dobrze lecz kiedy podłączam go do szyn +/- 12V słyszę tylko zakłócenia. Chcę rozwiązać problem zanim pójdę dalej z układem 1. Coś jest nie tak z moim zasilaniem? 2. Może być to wina samego TL074? Kupiłem je w Chinach i sprawdzałem kilka z podobnym efektem. Pisze głównie z nadzieją, że będzie to oczywiste rozwiązanie jednak jak podejrzewam, wina leży gdzieś po mojej stronie ale już nie mam pomysłu gdzie. Oscylator w obecnej formie (jak rozwiążę obecny problem rozwijam dalej): Na CV jest podawane napięcie 0-5V z klawiatury/sekwencera - układ ma w przyszłości pracowac w standardzie 1V/oktawę. Załączam nagranie różnicy dźwięku podczas zasilania V- na TL074 na masie a potem na -12V. Nagranie może być z tych głośniejszych więc proszę mieć to na uwadze. https://drive.google.com/file/d/1Aj22gcSi09Wipek-1tJJ2HbsDH03-eiC/view?usp=sharing Postarajcie się nie osiwieć przez schematy -pierwszy był pomocniczy w prostym programie którego użyłem do przeniesienia układu zasilania na veroboard a drugi z racji braku czasu nabazgrałem na szybko. Pobrałem KiCAD jednak jakoś brakuje mi czasu, żeby przyzwyczaić się do jego trochę dziwnego workflow.
-
Głównym założeniem tego projektu było stworzenie urządzenia wyświetlającego liczbę klatek na sekundę w grach komputerowych, jak i również innych informacji o obciążeniu komputera. Zdaje sobie sprawę, że projekty podobnego to tego pojawiały się już nie raz w sieci pod różnymi postaciami. W tym projekcie skupiłem się jednak na tym, aby całość zmieściła w małej kompaktowej obudowie, którą można w elegancki sposób zamontować pod monitorem. Możliwość wyświetlania FPS również jest tutaj czynnikiem wyróżniającą ten projekt na tle innych. Jest tak głównie dlatego że o ile informacje o wykorzystywanej ilości pamięci RAM, czy też obciążeniu procesora można dosyć łatwo pozyskać za pomocą różnych bibliotek w programie po stronie komputera, tak z klatkami na sekundę jest trochę trudniej. Użyte komponenty Sama budowa tego monitorka jest naprawdę prosta. Zostały w nim użyte właściwie tylko 3 komponenty: Arduino nano wyświetlacz OLED 128x32 przycisk dotykowy Pierwotnie zakładałem również użycie diody LED do sygnalizacji pewnych błędów, czy też wciśnięcia przycisku dotykowego. Uznałem jednak, że w tym przypadku nie miało by to większego sensu zważając na potrzebę minimalizacji. Można byłoby się zastanowić czemu wybór padł na arduino nano, a nie np. arduino pro micro. Arduino pro micro jest mniejsze, prawda? Zgadza się, dlatego też użyłem tego mikrokontrolera w pierwszej wersji tego wyświetlacza, który skończył dość marnie. Było tak dlatego, że przez przypadek chcąc poprawić przewód HDMI za monitorem, szarpnąłem niechcący za przewód idący do arduino. No i stało się, wyrwałem wtyk micro USB z płytki. Chcąc uniknąć ponownie takiej wpadki w następnej wersji użyłem mikrokontrolera, który kosztem ciut większej wielkości jest tańszy oraz posiada lepiej zamontowany na płytce wtyk USB mini. Jeśli chodzi o wyświetlacz to sprawa była prosta. Taki OLED 128x32 nie tylko rozmiarami idealnie pasuje do całego projektu, ale też po prostu prezentuje się ładnie i daje dużo możliwości. No i na koniec czujnik dotykowy. Dostępny w wielu rozmiarach, tani oraz przede wszystkim nie wymagający praktycznej żadnej siły do jego aktywacji. Ukryty w prawym boku obudowy dodaje estetyczności, nie zmniejszając przy tym komfortu użytkowania. Obudowa Obudowa została w całości wydrukowana na drukarce 3D. Sam model do druku zaprojektowałem w programie Fusion 360. Tak jak już pisałem, zależało mi na niewielkich rozmiarach. Dlatego cały model przeszedł przez wiele iteracji, a w każdej z nich starałem się zminimalizować jego wielkość. Zadbałem tutaj również o to, aby każdy z elementów w środku miał dopasowane pod siebie miejsce celem łatwego montażu. Po historii z wyrwaniem wejścia na płytce, finalnie dodałem jeszcze mały uchwyt na przewód mający minimalizować ryzyko ponownego uszkodzenia portu USB. Software Oprogramowanie po stronie komputera to prosty skrypt napisany w pythonie. Poza łączeniem się z arduino i przesyłaniem mu danych, musi te dane jeszcze skądś brać. I tutaj pojawił się mały problem, jeśli chodzi o pobranie ilości klatek w aktualnie włączonej grze. Nie da się od tak wyliczyć takiej wartości w programie, nie ma też na to gotowej funkcji. Z pomocą przyszedł popularny program o nazwie Msi AfterBurner. Nie wchodząc w szczegóły, program ten pozwala na monitorowanie zasobów komputera ( RAM, CPU, GPU itp.), jak i również uzyskanie potrzebnych nam FPS w aktualnie włączonej grze/programie. Teraz już tylko wystarczyło użyć wbudowanej w program funkcji do logowania tych danych do pliku, oraz odczytać je w pythonie i przesłać do arduino. Czy taki sposób jest wydajny? Cały proces wykorzystania pliku jako bufora do danych nie powinien w znaczący sposób obciążyć komputera, jednak lepszą opcją byłoby wykorzystywanie współdzielenia pamięci między dwoma programami. Aby to jednak osiągnąć potrzebna jest trochę większa wiedza z programowania w C++/C#, której niestety jeszcze nie posiadam. W przypadku arduino program po za odczytaniem danych oraz ich wyświetleniem, obsługuje również dotykowy przycisk. Pojedyncze dotknięcie przycisku zmienia wyświetlaną zawartość na 1 z 6 ekranów, zaś przytrzymanie przycisku powoduje zmianę ekranu co jedną sekundę. Dostępnymi ekranami są: klatki na sekundę, użycie CPU i GPU, temperatura CPU i GPU, użycie pamięci RAM i VRAM, prędkość wentylatora oraz ekran główny powodujący wygaszenie ekranu po paru sekundach. Dalsze plany W przyszłości planuje jeszcze większą minimalizacje wielkości obudowy, bo jest na tym polu jeszcze dużo do zrobienia. Mam zamiar również poduczyć się C++, aby móc wykorzystać współdzieloną pamięć między programami, rezygnując z odczytywać danych z pliku.
- 4 odpowiedzi
-
- 12
-
-
- Elektronika
- OLED
-
(i 3 więcej)
Tagi:
-
Przedstawiam robota dla ludzi którzy cenią proporcje a przede wszystkim temperaturę swojego drinka :) Początkowo chciałem stworzyć robota który by chłodził substancje przepływowo: od butelki przez pompę, ogniwa chłodzące i od razu do szklanki. Okazało się jednak ,że układ stworzony z 4 ogniw Peltiera i zasilacza 360 W nie podołał temu zadaniu, gdyż aby osiągnąć satysfakcjonującą temperaturę pompka musiała pompować składniki tak wolno (testowałem różne sposoby, z przerywaniem pompowania, z cofaniem cieczy itp.), że w tym czasie drink grzał się w szklance. Nie chciałem zwiększać mocy zasilacza ani liczby ogniw. Aby mieć kontrolę nad temperaturą trunku postanowiłem, że będzie się chłodził w obiegu stworzonym ze zbiornika (lejka), pompek, ogniw chłodzących i czujnika temperatury. *Robot robi drinki stworzone z dwóch składników, niekoniecznie alkoholu 🙂 U mnie akurat na pierwszej pozycji jest alkohol, na drugiej dodatek. Temperaturę którą chcemy uzyskać to Tz (temperatura zadana) a To (temperatura otrzymana) jest aktualną temperaturą drinka. Przy pomocy potencjometrów umieszczonych na górnej osłonie robota możemy ustawić ilość składników w gramach (lejek ma pojemność 250 ml, więc dodałem zabezpieczenie aby nie można go było przelać, gdy suma obu składników przekracza 250 ml wyświetla się alarm i nie można zacząć procesu lania drinka) oraz temperaturę w stopniach °C do której ma się schłodzić drink. Następnie wciskamy zielony przycisk i następuje dozowanie substancji do lejka który jest zamontowany na belce tensometrycznej. Po odmierzeniu ustalonej ilości, ciecz jest pompowana obiegowo przez radiatory wodne które są chłodzone przy pomocy ogniw Peltiera. Te zaś są chłodzone przy pomocy układu stworzonego z: radiatorów wodnych, pomp, chłodnic oraz wentylatorów. Dzięki temu odprowadzanie ciepła na zewnątrz obudowy jest łatwiejsze i bardziej efektywne niż w przypadku radiatorów aluminiowych z wentylatorami. W lejku zamontowany jest czujnik który na bieżąco kontroluje temperaturę cieczy - będzie przepływać przez ogniwa chłodzące tak długo aż osiągnie zadaną wartość. Po jej osiągnięciu drink automatycznie przelewa się do szklanki. Czerwony przycisk odpowiada za przepłukiwanie/ czyszczenie układu. Obudowę z racji gabarytów robota zbudowałem z drewna, pleksi oraz kilku elementów wydrukowanych na drukarce 3D. Dla nadania klimatu oraz polepszenia efektu wizualnego dodałem kilka diod RGB. Usłyszałem ,że jest to przerost formy nad treścią, owszem, ale i tak mnie to nie zniechęciło 😉 Ku przestrodze, elementy których użyłem w tym projekcie i mają kontakt ze spożywką, nie są do tego przystosowane. Na zdrowie! Części użyte do budowy robota: Arduino ATmega2560 - 1szt. wyświetlacz LCD 4x20 – 1szt. konwerter I2C do wyświetlacza LCD HD44780 – 1szt. wzmacniacz do belki tensometrycznej HX711 - 1szt. belka tensometryczna 5kg - 1szt. pompa do cieczy 12V 110l/h - 7mm – 5szt. mini Pompa Perystaltyczna - DC 3.7V / 6V – 2szt. (są wolne ale działają jak zawory, więc w moim układzie są niezbędne) moduł diody RGB 5V 5mm – 3szt. zasilacz 12V 350W 30A IP20 – 1szt. ogniwa Peltiera – 12v 5A – 4szt. aluminiowa chłodnica wody 80x103mm – 2szt. radiator wodny 120x40 – 2szt. radiator wodny 40x40 – 2szt. czujnik temperatury DS18B20 – 1szt. moduł sterownik PWM - 400W 15A 36V – MOSFET – 3szt. (do załączania ogniw Peltiera oraz pompek w obiegu cieczy chłodzącej ogniw) L298N - dwukanałowy sterownik silników - moduł 12V/2A – 2szt. (do obsługi pompek dozujących substancje do lejka, pompki która pompuje ciecz lejek - ogniwa chłodzące - lejek oraz do sterowania pompkami perystaltycznymi) płytka stykowa 170 pól – 1szt. gniazdo zasilania AC IEC 250V męskie - z wyłącznikiem i bezpiecznikiem – 1szt. wentylator 12V - 60x60x10mm – 1szt. wentylator 12V – 80x80x25mm – 2szt. osłona wentylatora 80x80 – 2szt. przewody połączeniowe przycisk okrągły monostabilny chwilowy - 2szt. potencjometr liniowy 1K – 3szt. lejek – 1szt. wężyki silikonowe złączki i trójniki Film przedstawiający działanie robota:
-
Na łamach Forbot-a temat był już wcześniej poruszany i tak naprawdę cały artykuł powstał ze względu na duże niezrozumienie tematu oraz reakcje osób na forum. Celowo odnoszę się bezpośrednio do artykułu Sandry, ponieważ część z informacji warto przeczytać, a nie chcę powtarzać tego samego, dlatego przed przeczytaniem dalszej części polecam lekturę. Ten artykuł bierze udział w naszym konkursie! 🔥 Na zwycięzców czekają karty podarunkowe Allegro, m.in.: 2000 zł, 1000 zł i 500 zł. Potrafisz napisać podobny poradnik? Opublikuj go na forum i zgłoś się do konkursu! Czekamy na ciekawe teksty związane z elektroniką i programowaniem. Sprawdź szczegóły » Niestety autorka dopuściła się moim zdaniem błędu interpretacyjnego samych przepisów, jak i niezrozumieniu samej konstrukcji urządzeń DIY wykonywanych przez amatorów. Prowadzi to do błędnych wniosków, które miałem okazję czytać na forum pod tym wpisem. Niestety w tej części nie będzie już tak łatwo, każde z pytań ma kilka zmiennych na które nie da się odpowiedzieć wprost tak lub nie. Pytanie: Czy muszę umieszczać znak CE i robić certyfikaty jeśli chce sprzedać mój projekt DIY? Aby odpowiedzieć na to pytanie odpowiadają nam konkretnie cztery z kilkudziesięciu dyrektyw tzw. nowego podejścia (wcześniej było tzw. stare podejście i było trochę bardziej upierdliwe dla producentów): 2011/65/UE DYREKTYWA ROHS II I 2015/863 DYREKTYWA ROHS III (pomijam z opisu, ponieważ przyjmujemy założenie, że korzystamy z gotowych podzespołów) 2014/53/UE DYREKTYWA RADIOWA / DYREKTYWA RED 2014/35/UE DYREKTYWA NISKONAPIĘCIOWA LVD i teoretycznie 2014/30/UE DYREKTYWA KOMPATYBILNOŚCI ELEKTROMAGNETYCZNEJ EMC Definicje W związku z tym musimy odnieść się do rozporządzenia wprowadzającego obowiązek stosowania znaku CE na produktach określonych w dyrektywach tzw. nowego podejścia (Rozporządzenie Parlamenty Europejskiego i Rady (WE) NR 765/2008) Jako hobbystę amatora, który wymyśla sobie produkt, najczęściej z półproduktów, np. wspomniany przez autorkę poprzedniego artykułu budzik, interesują nas definicje: - udostępnienie produktu na rynku - producent Tutaj mamy tak naprawdę pierwszy zgrzyt interpretacyjny w poprzednim artykule. Z niewiadomych mi przyczyn definicja udostępniana produktu na rynku, określona przez ustawodawcę źródło: art. 2 pkt 1 Rozporządzenia Parlamentu Europejskiego i rady (WE) NR 765/2008 z dnia 9 lipca 2008 r. ustanawiające wymagania w zakresie akredytacji i nadzoru rynku odnoszące się do warunków wprowadzania produktów do obrotu i uchylające rozporządzenie (EWG) nr 339/93 Została odczytana jako alternatywa, czyli kiedy chociaż jeden z danych elementów ma miejsce. Jest to całkowicie błędne rozumowanie. Niestety jedną z opisywanych wcześniej wykładni jest wykładnia logiczna i nie została tutaj zastosowana. W naszym przykładzie nie bierzemy pod uwagę „działalności handlowej” tylko hobbystyczną. W związku z tym nie udostępniasz swojego projektu na rynku, ponieważ nie jesteś podmiotem profesjonalnym. Koledze możesz oddać wszystko (nawet dziewczynę/chłopaka) i „zła unia” nie ma nic do tego, oczywiście jeśli robisz to poza działalnością handlową. Aby rozróżnić czy jesteśmy hobbystą-amatorem, czy też jest to działalność handlowa, musimy wziąć pod uwagę cel w jakim dany przedmiot powstaje. Jeśli wykonujesz go dla siebie, ale później chcesz go odsprzedać, nie podchodzi to pod działalność handlową. Jeśli natomiast produkujesz dany przedmiot tylko w celu jego sprzedaży, jest to jak najbardziej przesłanka do zastosowania dyrektywy, niezależnie czy prowadzimy działalność gospodarczą czy nie. Podstawa prawna: 1. art. 3 ustawy prawo przedsiębiorców z dnia 6 marca 2018 r. (Dz.U. 2018 poz. 646) 2. art. 5a pkt 6 ustawy o podatku dochodowym od osób fizycznych z dnia 26 lipca 1991 r. (Dz.U. 1991 nr 80 poz. 350) 3. art. 3 pkt 9 ustawy ordynacja podatkowa z dnia 29 sierpnia 1997 r. (Dz.U. 1997 nr 137 poz. 926) 4. art. 43[1] Ustawy kodeks cywilny z dnia z dnia 23 kwietnia 1964 r (Dz.U. 1964 nr 16 poz. 93) No dobra ale co jeśli jednak chciałbym na tym zarabiać? Tutaj sprawa się komplikuje, ponieważ ma to się zupełnie odwrotnie do opisywanej wcześniej ustawy o prawach konsumenta (link do poprzedniej części). Mamy dwie istotne sprawy, pierwsza to czy prowadzimy działalność czy tez wykonujemy to jako zleceniobiorca. Dlaczego jest to istotne? Ponieważ zgodnie z definicją dyrektywy: źródło: art. 2 pkt 3 Rozporządzenia Parlamentu Europejskiego i rady (WE) NR 765/2008 z dnia 9 lipca 2008 r. ustanawiające wymagania w zakresie akredytacji i nadzoru rynku odnoszące się do warunków wprowadzania produktów do obrotu i uchylające rozporządzenie (EWG) nr 339/93 W skrócie – podpisując odpowiednio zredagowaną umowę o dzieło stajemy się jedynie wytwórcą danego produktu i to na zleceniodawcy spoczywa obowiązek przestrzegania przepisów związanych z dyrektywami CE. Fajne, nie? No tak, tylko trochę nieuczciwe 😉 Prawdopodobnie nie do wybronienia też w sądzie ze względu na czynność pozorną w celu ominięcia przepisów (art. 83 KC). Dlatego nie wchodźmy w szarą strefę i przyjmijmy, że chcemy jednak sprzedawać nasz produkt jako producent i pod naszą nazwą. Bez znaczenia jaką formę działalności przyjmiemy – zarabiamy na tym, więc jesteśmy producentem. Podstawa prawna: art. 83 Kodeksu Cywilnego Ok ale właściwie to ja przecież niczego nie robię sam, kupuję podzespoły i składam je tylko do kupy. One wszystkie mają znaczek CE, więc czemu się czepiać wyrobu końcowego. Niestety po złożeniu go w całość, wytwórca ponosi odpowiedzialność za całość układu (powrót do podstaw z poprzedniego artykułu – prawo autorskie). Wracamy wiec do dyrektyw określających do jakich produktów musi być zastosowany znak CE. 2014/53/UE DYREKTYWA RADIOWA / DYREKTYWA RED Jeśli twoje urządzenie posiada Bluetooth, Wifi 2,4G, nRF, czy też inny podobny protokół łączności radiowej, niestety twoje urządzenie powinno posiadać znak CE. Autorka poprzedniego artykułu błędnie zdefiniowała amatorską służbę radiolokacyjną, co niewiele ma wspólnego z wymienionymi protokołami, tym bardziej, że w ogóle nie dotyczy kwestii gdy chcemy na tym zarabiać. Martwić się? Pójdę do więzienia? Nie. Wytłumaczę to na końcu. 2014/35/UE DYREKTYWA NISKONAPIĘCIOWA LVD Dotyczy urządzeń pracujących w zakresie napięcia 50-1000V AC/DC i 74-1500V DC. Praktycznie do większości z urządzeń opartych na Raspberry Pi, Arduino, ESP, Pi Pico, Spresense itd., ta dyrektywa nie ma zastosowania. Wystarczy tylko aby zasilacz był oddzielnym peryferyjnym podzespołem, wtedy zamiast jego producentem stajemy dystrybutorem, czyli po prostu przerzucamy pełną odpowiedzialność ze znakiem CE na producenta który go wytworzył (czy też jego importera). W związku z tym dla własnego bezpieczeństwa lepiej kupować go od polskiego kontrahenta. Czyli w tym przypadku znak CE nie jest potrzebny. Podstawa prawna: art.1 dyrektywy 2014/35/UE 2014/30/UE DYREKTYWA KOMPATYBILNOŚCI ELEKTROMAGNETYCZNEJ EMC Jest to moim zdaniem najmniej prawdopodobny powód dla jakiego mielibyśmy przeprowadzać badania pod kątem zgodności produktu, ponieważ w przypadku większości zastosowań i niskich napięć, nie mamy możliwości powodować zaburzeń elektromagnetycznych (jedynie mogą być podatne na inne zakłócenia) Podstawa prawna: art 2 ust 2 lit d) dyrektywy 2014/30/UE Idąc za definicją zespołu podzespołów czyli aparatury: źródło: art 3 ust. 1 pkt 2 dyrektywy 2014/30/UE Przyjmujemy, że nasz budzik zasilany napięciem 3,3V nie będzie samoistnie włączać nam telewizora i powodować ciąży u sąsiadki. Po prostu z założenia jest to głupie. Oczywiście jeśli naszym projektem jest elektromagnes, warto jednak przeprowadzić by te cholerne badania 😉 Reasumując, znak CE na wyrobach hobbystycznych DIY typu budzik musimy zastosować jedynie w przypadku gdy podłączamy je bezpośrednio do gniazdka 230V (nie przez zasilacz innego producenta) i gdy mamy w nim zastosowany system łączności radiowej (czyli prawie każdy). Oczywiście tylko i wyłącznie jeśli robimy to w celach handlowych, a nie dajemy chłopakowi/dziewczynie prezent z okazji zadawania się z nami i naszymi gazami lutowniczymi. Pytanie: Czyli muszę odezwać się do firmy zajmującej się certyfikacją CE, żeby przebadała mój projekt i wystawiła certyfikat? Nie, zupełnie nic z tych rzeczy. „Zła unia” nie zmusza małych wytwórców do przeprowadzania badań za grube tysiące, tylko po to żeby sprzedali dziesięć budzików po 200 zł. Ogólnie nie istnieje coś takiego jak certyfikat CE. Przepisy definiują jedynie jednostki notyfikacyjne dla grup produktów, które muszą posiadać szczegółowe badania dla swoich produktów. Każdy z producentów ma w większości przypadków przeprowadzić badania we własnym zakresie i wystawić deklarację zgodności WE. Jest to dokument, który jako producent wystawiasz wg wzoru dostępnego na stronach Parlamentu UE i wkładasz sobie do szuflady, nic więcej z tym nie musisz robić. W przypadku gdyby pojawiła się kontrola, masz obowiązek go przedstawić. Dodatkowo na produkcie powinien pojawić się znaczek CE lub jeśli nie uda się go zamieścić na produkcie ma być dostępny na oddzielnym dokumencie dołączonym do produktu. Myślę, że w przypadku korzystania z gotowych podzespołów dostarczanych przez innych producentów, typu płytki rozwojowe, spokojnie możemy bazować na ich badaniach dotyczących protokołów radiowych działających zgodnie z normami. Również warto w tym przypadku korzystać z polskich podmiotów. Pozostaje jedynie kwestia odpowiedzialności prawnej jaka grozi w przypadku sprzedaży wadliwego produktu. Zapraszam do ostatniej części artykułu.
- 112 odpowiedzi
-
- 4
-
-
- konkurs2021
- prawo
-
(i 3 więcej)
Tagi:
-
Na wstępie chciałbym zaznaczyć, że jest to artykuł napisany pod kątem wyłącznie hobbystów, pasjonatów i osób, tak jak ja, uczących się elektroniki i programowania. Ponieważ niektóre zagadnienia są dużo bardziej skomplikowane, nie mogą być przenoszone 1:1 dla producentów seryjnych podzespołów czy też działalności stricte zawodowej. Natomiast postaram się w tej serii artykułów opisać podstawowe problemy prawne na jakie może natrafić każda osoba chcąca sprzedać wykonane projekty. Ten artykuł bierze udział w naszym konkursie! 🔥 Na zwycięzców czekają karty podarunkowe Allegro, m.in.: 2000 zł, 1000 zł i 500 zł. Potrafisz napisać podobny poradnik? Opublikuj go na forum i zgłoś się do konkursu! Czekamy na ciekawe teksty związane z elektroniką i programowaniem. Sprawdź szczegóły » Spis treści: 1. Podstawy – Czy mogę sprzedawać projekty DIY? 2. Znak CE – co to jest i co się z tym wiąże 3. Odpowiedzialność twórcy 1. Podstawy Często spotykam się z nierozumieniem rozmówców dotyczącym pojęcia prawodawstwa i całego systemu prawnego. W świecie prawniczym istnieje metoda rozumienia tekstów ustaw, dyrektyw, rozporządzeń itd., zwana wykładnią. Jest to zestaw zasad pomagający rozumieć tekst w sposób w jaki autor (ustawodawca) chciał aby to było zrozumiane. Działa to trochę na zasadzie tekstu źródłowego i bibliotek: teoretycznie bez nich program mógłby działać, ale za bardzo nie wykonuje tego co miał robić. Dlatego nie wystarczy przeczytać jeden akt prawny, a trzeba spojrzeć na sprawę szerzej i korzystać z definicji legalnych ustanowionych przez autora. Czyli po ludzku musimy przeczytać więcej dokumentów napisanych trudnym językiem oraz mając na uwadze podstawy prawodawstwa. Głównym aktem normatywnym (ustawą), na którym opieramy większość relacji międzyludzkich, jest kodeks cywilny. Reguluje on praktycznie wszystko od zasad sprzedaży, poprzez sprawy spadkowe, aż do szkód wyrządzonych przez zwierzęta wchodzące w miedzę. Dlatego też do niego zawsze będziemy się odnosić w przypadku różnego rodzaju umów sprzedaży, gwarancji, rękojmi oraz odpowiedzialności twórcy. Natomiast należy pamiętać, że są to tylko ogólniki i większość z tych przepisów regulowana jest szczegółowo przez inne ustawy jak np. Ustawa o prawach konsumenta, Ustawa o prawie autorskim i prawach pokrewnych. Przy niektórych specjalistycznych zagadnieniach mogłyby jeszcze być istotne rozporządzenia ale tak jak wspomniałem na wstępie, bierzemy pod uwagę sytuację tylko wariant hobbysty, amatora, konstruującego „migającą diodę”. Nie bez przyczyny wspomniałem o tych dwóch dodatkowych ustawach, ponieważ są one dosyć istotne w przypadku chęci sprzedaży naszych projektów. Jeśli zdecydujemy się na sprzedaż online, jesteśmy zobligowani do przestrzegania przepisów Ustawy o prawach konsumenta, brać pod uwagę możliwość zwrotu towaru bez podania przyczyny, możliwość reklamacji i pełną odpowiedzialność za sprzedawany produkt. Ale czy zawsze? Odpowiedź brzmi: NIE Po pierwsze – jeśli jesteśmy hobbystą, nie posiadającym własnej działalności gospodarczej, nie podlegamy pod tę ustawę. Po prostu jesteśmy zwykłym chałturnikiem, który w świetle prawa nie jest podmiotem profesjonalnym – coś jak grajek na weselach, robi to tylko okazjonalnie. Teoretycznie jeśli przedmiot powstaje tylko po, żeby go sprzedać, powinniśmy jednak zarejestrować naszą działalność, gdyż jest to delikt podatkowy. Jednakże w przypadku gdy tworzymy sobie jakiś projekt dla zabawy i później po prostu chcemy go sprzedać, nie ma tutaj przeciwskazań, a powyższa ustawa nie ma zastosowania. Dlatego też sprzedając go na portalu aukcyjnym, kupujący nie ma prawa zwrotu bez podania przyczyny. Podstawa prawna: art. 27 w zw. z art. 1 pkt. 1 ustawy o prawach konsumenta z dnia 30 maja 2014 r. (Dz. U. 2014 poz. 827) Dodatkowo istnieje wyłączenie w powyższej ustawie dotyczącej sprzedaży na odległość produktów wytworzonych na zlecenie kupującego, personalizowanych itp. W takim przypadku również następuje wyłączenie z prawa do zwrotu towaru, nawet jeśli jesteście przedsiębiorcą. Piszę to nie przez przypadek, gdyż przy małej modyfikacji kodu, jesteście w stanie pozbyć się sporego problemu związanego ze zwrotami, szczególnie jeśli sprawa dotyczy projektów DIY. Podstawa prawna: art. 38 pkt. 3 ustawy o prawach konsumenta z dnia 30 maja 2014 r. (Dz. U. 2014 poz. 827) Drugą ustawą o której wspomniałem jest Ustawa o prawie autorskim i prawach pokrewnych. Bardzo często w różnych dyskusjach na forach internetowych pomijany jest fakt, że w świetle prawa zarówno kod źródłowy programu jak, projekt układu elektronicznego czy też sama płytka z zainstalowanymi konkretnymi podzespołami elektronicznymi, jest chroniona prawem autorskim. Oczywiście w przypadku udostępnianego oprogramowania istnieją licencje na zasadzie których autor je udostępnia, jednakże większość z nich jest tylko do użytku osobistego bez możliwości zarabiania na ich odsprzedaży. Czyli nie każdy projekt DIY możemy sprzedawać masowo ale jeśli wykonaliśmy go dla siebie, zawsze możemy go odsprzedać komuś innemu (natomiast pozwać mogą nas i tak). Podstawa prawna: art. 1 ust. 2 pkt. 1 w zw. z art. 1 ust. 1 ustawy o prawie autorskim i prawach pokrewnych z dnia 4 lutego 1994 r. (Dz. U. 1994 Nr 24 poz. 83) Pytanie: Czy w związku mogę sprzedać swój projekt DIY? Odpowiedź brzmi: TAK Co więcej, kodeks cywilny umożliwia przetwarzanie rzeczy zakupionych/znalezionych, daje dodatkowe prawa kiedy podnosi się jej wartość. Z punktu widzenia polskich przepisów nie jest zabroniona sprzedaż materiałów elektronicznych, składanych z innych podzespołów, które dodatkowo wyposażone są w autorskie oprogramowanie. Oczywiście nie mogą być to produkty niebezpieczne, czy też specjalistyczne, które obowiązują oddzielne przepisy – jak np. sprzęt medyczny czy zapalniki do materiałów wybuchowych lub broń. Mógłbym zakończyć w tym miejscu, niestety pozostaje nam jeszcze kwestia sprawy związanej ze znakiem CE, który jest wymagany na produktach wprowadzonych do obrotu na ternie Unii Europejskiej. O tym w kolejnej części.
- 34 odpowiedzi
-
- 6
-
-
- konkurs2021
- prawo
-
(i 3 więcej)
Tagi: