Skocz do zawartości

Przeszukaj forum

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

  • Szukaj wg tagów

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

Typ zawartości


Kategorie forum

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

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

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


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 1 wynik

  1. Pomysł na stacje lutowniczą postał w 2010 roku. Wtedy też powstała moja kopia stacji lutowniczej. W 2014 roku przebudowałem stacje dodając funkcje lutownicy na gorące powietrze. Wadą tej przebudowy był brak możliwości korzystania z lutownicy oporowej i HA jednocześnie. Po kolejnych 4 latach pojawiły się problemy z przekaźnikami w przystawce do HA i gnieździe kolby oporowej. W 2018 postanowiłem stworzyć nową stacje lutowniczą całkowicie od podstaw. Prace rozpocząłem od skompletowania potrzebnych elementów: Kolby pochodzą od stacji: Oporowa: Pensol SL20 HA: Zhaoxin 858 Transformator 2x12V 50VA Do tego: Wzmacniacze termopar MAX6675 Wyświetlacz 20x4 i2c Czujnik temperatury DS10B20 Klon Arduino proMini Drobnica elektroniczna taka jak tranzystory, stabilizatory, kondensatory, potencjometry. Większość tych elementów miałem z demontażu poprzedniej stacji lub znalazłem w „przydasiach” co znacznie zminimalizowało koszt wykonania. Kolba oporowa została wybrana bez jakiś większego zastanowienia, porostu polecana. Natomiast kolba hot air została wybrana z powodu wbudowanego wentylatora i braku konieczności stosowania kompresora. Dodatkowym atutem jest wbudowany kontaktron. Gdy miałem potrzebne elementy, złożyłem układ na płytce stykowej i zabrałem się za pisanie programu. Regulacja temperatury kolb i przepływu powietrza odbywa się poprzez odczyt napięcia ustawionego na potencjometrze. Dodatkowo potencjometry mają wbudowany włącznik (ma minimum zwiera dodatkowy styk do masy) Po rozwarciu styku program sprawdza napięcie na potencjometrze i mapuje je na stopnie Celsjusza w zakresie 0-5V -> 100-500°C. Do obu kolb przygotowana jest funkcja uśpienia. Dla kolby oporowej aktywowana jest poprzez przełączenie włącznika i ustawia ona temperaturę grota na 150°C niezależnie od nastawy potencjometru. Uśpienie kolby HA odbywa się poprzez umieszczenie jej w uchwycie. Wewnątrz, którego ukryte są dwa magnesy. Aktywują one kontaktron umieszczony w rączce kolby. Podobnie jak w przypadku kolby oporowej aktywowanie uśpienia HA blokuje regulacje potencjometru oraz ustawia temperaturę na 0°C i PWM wentylatora na 50% aby wystudzić grzałkę. Odczyt temperatury chciałem żeby odbywał się po magistrali i2c jednak cena takich wzmacniaczy była zaporowa. Wypadło więc na zwykłe wzmacniacze które komunikują się z arduino po magistrali SPI. Aby zminimalizować potrzebną ilość portów sygnał zegarowy CLK oraz przesył danych DO są podpięte równolegle. Jedynie wybór wzmacniacza (CS) podpięty jest do osobnych portów w Arduino. Dzięki temu wykorzystanych jest 5 a nie 9 pinów. Wewnątrz obudowy umieszczony jest czujnik temperatury DS18B20. Gdy wzrośnie ona powyżej ustawionego progu uruchamiane są dwa wentylatory odśrodkowe chłodzące wnętrze. /* PIN_IO * * WZMACZNIACZE MAX6675 * * CLK- 2 wspolne dla termopar * DO- 4 wspolne dla termopar * CS_1- 3 cs dla pierwszej termopary * CS_2- 5 cs dla drugiej termopary * CS_3- 6 cs dla trzeciej termopary * * DS18B20_DATA- 7 * * WŁĄCNIK_HA- 8 * WŁĄCZNIK_KOLBA- 9 * PODSTAWA HA- 14(A0) * USPIENIE KOLBY- 16(A2) * * POTENCJOMETR_KOLBA- A6 * POTENCJOMETR_HA- A7 * POTENCJOMETR_DMUCHAWY_HA- A1 * * WENTYLATOR WNETRZE- 13 * PWM DMUCHAWA_HA- 10 * * STEROWANIE_GRZAŁKI_KOLBY- 11 * STEROWANIE_GRZAŁKI_HA- 12 */ #include "max6675.h" #include <LiquidCrystal_I2C.h> #include <OneWire.h> #include <Wire.h> #include <DS18B20.h> byte stopienC[8] = { B01100, B10010, B10010, B01100, B00000, B00000, B00000, B00000, }; byte strzalka[8] = { B00000, B00100, B00110, B11111, B11111, B00110, B00100, B00000, }; byte strzalka1[8] = { B00100, B01010, B10001, B00100, B01010, B10001, B00100, B01010, }; byte strzalka2[8] = { B00100, B01010, B10001, B00100, B01010, B10001, B00100, B01010, }; int thermoCLK = 2; //SCK wspolne dla termopar int thermoDO = 4; //SO wspolne dla termopar //TERMOPARA1 int thermoCS_1 = 3; //CS cs pierwszej termopary //TERMOPARA2 int thermoCS_2 = 5; //CS cs drugiej termopary //TERMOPARA3 int thermoCS_3 = 6; //CS cs trzeciej termopary MAX6675 thermocouple_1(thermoCLK, thermoCS_1, thermoDO); //termopara 1 MAX6675 thermocouple_2(thermoCLK, thermoCS_2, thermoDO); //termopara 2 MAX6675 thermocouple_3(thermoCLK, thermoCS_3, thermoDO); //termopara 3 LiquidCrystal_I2C lcd(0x3F, 20,4); //inicjalizacja wyswietlacza 20x4 #define ONEWIRE_PIN 7 //inicjalizacja dallasa byte address[8] = {0x28, 0x4E, 0xE3, 0x58, 0x8, 0x0, 0x0, 0xD}; OneWire onewire(ONEWIRE_PIN); DS18B20 sensors(&onewire); #define przycisk_wl_HA 8 #define przycisk_wl_KOLBA 9 #define podstawaHA 14 #define uspienieKOLBA 16 int stopnie_1; int stopnie_2; int stopnie_3; int odczytanaWartosc_1; int odczytanaWartosc_2; int odczytanaWartosc_3; //int odczytanaWartosc_4 = 510; int ADC_KOLBA; int ADC_HA; int ADC_WENTYLAROT_HA; int kolba = 0; int ha = 0; int podstawa = 0; int uspienie = 0; int wnetrze =40; int PWM; void setup() { Wire.begin(); lcd.init(); //lcd.noBacklight(); // inicjalizacja ekranu, podswietlenia i lcd.backlight(); // znakow urzytkownika lcd.clear(); lcd.createChar(1,stopienC); lcd.createChar(2,strzalka); lcd.createChar(3,strzalka1); lcd.createChar(4,strzalka2); sensors.begin(9); // start dallasa sensors.request(address); pinMode(przycisk_wl_HA, INPUT_PULLUP); pinMode(przycisk_wl_KOLBA, INPUT_PULLUP); pinMode(podstawaHA, INPUT_PULLUP); pinMode(uspienieKOLBA, INPUT_PULLUP); pinMode(13, OUTPUT); //WENTYLTOR pinMode(11, OUTPUT); //KOLBA pinMode(12, OUTPUT); //HA } void loop() { /***************************ODCZYT_TEMP***********************************/ stopnie_1 = thermocouple_1.readCelsius(); stopnie_2 = thermocouple_2.readCelsius(); stopnie_3 = thermocouple_3.readCelsius(); lcd.setCursor(0, 0); lcd.print("KOLBA:"); jesli3cyfry(stopnie_1); lcd.write(1); lcd.print("C"); lcd.setCursor(0, 1); lcd.print(" HA:"); jesli3cyfry(stopnie_2); lcd.write(1); lcd.print("C"); lcd.setCursor(0, 2); lcd.print("SONDA:"); jesli3cyfry(stopnie_3); lcd.write(1); lcd.print("C"); /**************************WNETRZE_CHLODZENIE**************************************/ float temperatureDALLAS = sensors.readTemperature(address); lcd.setCursor(0, 3); lcd.print("Temp.:"); jesli3cyfry(temperatureDALLAS); lcd.write(1); lcd.print("C"); lcd.setCursor(12,3); lcd.print("WENT:"); if( wnetrze >= temperatureDALLAS ) { digitalWrite(13, LOW); lcd.setCursor(17,3); lcd.print("OFF"); } if( wnetrze + 2 <= temperatureDALLAS ) { digitalWrite(13, HIGH); lcd.setCursor(17,3); lcd.print(" ON"); } sensors.request(address); /**************************PRZYCISKI******************************/ if (digitalRead(uspienieKOLBA) == LOW) { uspienie = 2; } else { uspienie = 0; } if (digitalRead(podstawaHA) == LOW) { podstawa = 2; } else { podstawa = 0; } if (digitalRead(przycisk_wl_HA) == LOW) { ha = 0; } else { ha = 2; } if (digitalRead(przycisk_wl_KOLBA) == LOW) { kolba = 0; } else { kolba = 2; } /***************************KOLBA**********************************/ if(kolba > 1) { ADC_KOLBA = 0; lcd.setCursor(13, 0); lcd.print(" "); lcd.setCursor(19, 0); lcd.print(" "); } else { if(uspienie > 1) { ADC_KOLBA = 150; lcd.setCursor(13, 0); lcd.print("X"); } if(uspienie < 1) { odczytanaWartosc_1 = analogRead(A6);//Odczytanie wartości z ADC ADC_KOLBA = map(odczytanaWartosc_1, 5, 1005, 100, 500);//Przeskalowanie wartości lcd.setCursor(13, 0); lcd.print(" "); } } lcd.setCursor(14, 0); lcd.write(2); jesli3cyfry(ADC_KOLBA); lcd.write(1); lcd.print("C"); if( ADC_KOLBA >= stopnie_1 ) //TERMOSTAT KOLBY { digitalWrite(11, HIGH); lcd.setCursor(12,0); lcd.write(3); } if( ADC_KOLBA + 1 <= stopnie_1 ) /////////////////////////////////////////////////////////////bylo + 2 { digitalWrite(11, LOW); lcd.setCursor(12,0); lcd.print(" "); } /****************************HA************************************/ if(ha > 1) { ADC_HA = 0; analogWrite(10, 0); PWM = 0; lcd.setCursor(13,1); lcd.print(" "); lcd.setCursor(19,1); lcd.print(" "); lcd.setCursor(19,2); lcd.print(" "); } else { if(podstawa > 1) { lcd.setCursor(13,1); lcd.print("X"); ADC_HA = 0; PWM = 50; analogWrite(10, 126); //PWM na 50 % digitalWrite(12, LOW); lcd.setCursor(19, 1); lcd.print(" "); } if(podstawa < 1) { lcd.setCursor(13,1); lcd.print(" "); odczytanaWartosc_2 = analogRead(A7);//Odczytanie wartości z ADC ADC_HA = map(odczytanaWartosc_2, 5, 1005, 100, 500);//Przeskalowanie wartości odczytanaWartosc_3 = analogRead(A1);//Odczytanie wartości z ADC ADC_WENTYLAROT_HA = map(odczytanaWartosc_3, 5, 1005, 127, 253);//Przeskalowanie wartości analogWrite(10, ADC_WENTYLAROT_HA); PWM = map(odczytanaWartosc_3, 5, 1005, 50, 100);//Przeskalowanie wartości 1020 } } lcd.setCursor(14, 1); lcd.write(2); jesli3cyfry(ADC_HA); lcd.write(1); lcd.print("C"); lcd.setCursor(12, 2); lcd.print("PWM"); lcd.write(2); jesli3cyfry(PWM); lcd.print("%"); if(ADC_HA >= stopnie_2) //TERMOSTAT HA { digitalWrite(12, HIGH); lcd.setCursor(12,1); lcd.write(4); } if( ADC_HA + 1 <= stopnie_2 ) ////////////////////////////////////////////////////////////////bylo + 2 { digitalWrite(12, LOW); lcd.setCursor(12,1); lcd.print(" "); } /***************************KONIEC*********************************/ } void jesli3cyfry(int liczba) //Funkcja odpowiedzialna za wyswietlanie spacji na pozycji poprzedzającej gdy 3 cyfry zmieniaja się na dwie { if (liczba >= 0 && liczba < 100) { lcd.write(' '); } lcd.print(liczba); } Gdy miałem gotowy kod zabrałem się za stworzenie schematu oraz PCB. Niestety popełniłem błąd i nie wychwyciłem go przed wykonaniem płytki. 7805 wypuścił magiczny dym. W kolejnej wersji został poprawiony jednak powstał błąd na schemacie w magistrali SPI (co ciekawe w pierwszej wersji schematu go nie było) i został przeniesiony na PCB. Trzecia wersja działa poprawnie. Płytka wykonana termo-transferem. Po skończeniu sterownika pora na zmontowanie wszystkiego w całość. Na przednim panelu znalazło się miejsce na wyświetlacz, 3 potencjometry od regulacji temperatury i PWM wentylatora, włącznik uśpienia kolby oporowej, gniazda kolb wraz z gniazdem dodatkowej termopary i na koniec włącznik odsysacza elektrycznego. Wewnątrz obudowy oprócz sterownika oraz transformatora 2x12V znajduję się dodatkowy transformator oraz zasilana przez niego pompka centralnego zamka z jakiegoś niemieckiego auta. Rzeczy związane z sterowaniem oraz danami połączone są odpowiednią ilością żył z taśmy komputerowej, natomiast przewody związane z zasilaniem stacji, kolbami oraz wszystkim co wymaga większego prądu/napięcia to lgy1mm2 Mocowanie toroida, pompki centralnego zamka oraz uchwyt kolby HA wydrukowałem z ABS na drukarce. Uchwyt jest wydrukowany jako skorupa i jak już wspomniałem ma schowane wewnątrz dwa magnesy neodymowe do uruchomienia kontaktronu a następnie zalałem jego wnętrze żywicą epoksydową aby zwiększyć jego sztywność i wytrzymałość. Mocowanie pompki próżniowej ma przygotowane miejsce na gumowe piankowe uszczelki, które skutecznie tłumią drgania mechanizmu. Na dzień dzisiejszy do dokończenia została mi końcówka odsysacza. W planach mam przepisanie kodu z wykorzystaniem regulatora PID zamiast tradycyjnej histerezy, zmiana sterowania chłodzenia (po raz kolejny PID) oraz wymiana obu kolb spowodowana ich zużyciem. ArduLutownica.rar
×
×
  • Utwórz nowe...

Ważne informacje

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