Witam,
Jestem zaznajomiony z majsterkowo.pl od samego początku, ale dotychczas tylko czytałem udzielając się w komentarzach parę razy. Widziałem ostatnio projekt wytrawiarki, który bardzo mnie zainteresował, gdyż miałem w planach budowę własnej. Tak więc jeśli jesteśmy przy temacie tworzenia płytek drukowanych, chyba nadszedł czas aby zaprezentować naświetlarkę do laminatów światłoczułych.
Każdy chyba zna minusy tworzenia płytek metodą termotransferu, czyli potocznie mówiąc metodą “żelazkową” czy “piekarnikową”. Jakość ścieżek, ich grubość, dobór papieru (zazwyczaj kredowego) itp… Jako, że dość miałem borykania się z tymi problemami, postanowiłem pójść inną drogą, przesiąść się na metodę fotochemiczną.
Największymi atutami tej metody na pewno są:
- powtarzalność wykonywanych płytek;
- dokładność (można tworzyć ścieżki rzędu 8 milsów, a nawet jeszcze cieńsze);
Założenia projektowe:
- maksymalny wymiar laminatu do naświetlania 10x20cm;
- zasilanie z zewnętrznego zasilacza, najlepiej 12V;
- naświetlanie z góry/z dołu lub obustronnie;
- timer i czytelne menu z możliwością zaprogramowania pięciu programów naświetlania;
- ledy… żadnych świetlówek, starterów, stateczników itp.
Lista potrzebnych elementów i ceny orientacyjne:
Płyta główna:
- Arduino ProMini 5V, 16MHz (5zł);
- goldpiny żeńskie/męskie – 24szt/31szt (1zł);
- mostek prostowniczy 5W10 (<1zł);
- kondensatory elektrolityczne 1000uF 25V, 220uF 25V (2zł);
- stabilizator stały 5V, przynajmniej 500mA (<1zł);
- 3 rezystory 270ohm, 0,25W(<1zł);
- 1 rezystor 10Kohm, 0,25W (<1zł);
- 3 tranzystory BC547 (<1zł);
- 2 x dioda prostownicza (<1zł);
- 2 x przekaźnik 5V – AZ822-2C-5DSE (10zł);
- 2 x podwójny zacisk śrubowy (<1zł);
- laminat 10cm x 4cm;
Panele LED:
- 68 rezystorów 100ohm, 0,25W (kupiłem metalizowane, z tolerancją 1% – ok. 4zł);
- 2 rezystory 270ohm, 0,25W(<1zł);
- 2 x płytka uniwersalna 20cm x 10cm, wiercona, z przewodnością w rzędach (18zł);
- 208 LED’y UV, ok 2000mcd, długość fali emitowanej to około 395nm (ja kupiłem za ok. 20zł, nie mogłem znaleźć takich w Polsce, więc skorzystałem z wiadomego jakiego źródła);
- kable podłączeniowe paneli – użyłem starego dwużyłowego kabla miedzianego :)
Obudowa i wewnętrzne wykończenie:
- obudowa… ja taką dostałem za darmo (koszt takiej w sklepach budowlanych to ok. 20zł);
- pleksi przeźroczysta 2mm – ok. 12cm x 5cm – (2zł);
- pleksi przeźroczysta 4mm (na powierzchnie roboczą) – ok. 25cm x 25cm – (14zł);
- profil aluminiowy 1m bieżący (4zł);
- przylepiec tkaninowy (5zł);
- garstka śróbek, nakrętek i podładek – 3mm (ok. 3zł);
- taśma dwustronna (ok. 5zł);
- folia z fakturą karbonową – została mi z oklejania motocykla, ilość jaką tu wykorzystałem, oszacowałbym na ok. 5zł;
- kable połączeniowe – znów stare miedziane dwużyłowe kable oraz sześciożyłowy kabel telefoniczny, ok 30cm :)
- taśma izolacyjna (2zł);
Peryferia, sterowanie i podłączenie:
- enkoder (3zł);
- wyświetlacz 2×16, ze sterownikiem zgodnym z HD44780 (ok. 10zł);
- gniazdo zasilające (1zł);
- przełącznik ON/OFF (2zł);
- gniazdo na bezpiecznik topikowy (2zł);
- bezpiecznik topikowy 2A 250V (<1zł);
- sterowanie wyświetlaczem zrealizowane na PCF8574 – wykonałem dawno temu ok. 10 płytek z tymi układami, tak aby mieć na przyszłość :) ;
- gałka enkodera (ok. 2zł);
Potrzebne jest źródło prądu 12V, min. 2A. Oba panele ciągną ok 1,4A + musimy doliczyć płytkę główną no i bezpieczny zapas. Ja użyłem zasilacza sieciowego, można użyć np. laboratoryjnego.
Schemat:
Mam taki zwyczaj, że w każdym projekcie zostawiam Arduino ProMini, wpięte na goldpiny. Jest to wygodne, gdyż zawsze możemy wyciągnąć mikrokontroler, albo wpiąć się programatorem celem naniesienia poprawek w oprogramowaniu itp.
Projekt płytki starałem się wykonań na laminacie jednostronnym. Jak widać, dwa połączenia musiałem przenieść na warstwę górną :) Zacisk śrubowy X2 odpowiada za zasilanie, ale podpięte są też w to miejsce masy paneli naświetlających. Bieguny dodatnie dla paneli znajdują się na zacisku X1.
Podłączenie Arduino:
- PIN2 i PIN3 – enkoder, prawo i lewo (dlatego te piny, ponieważ skorzystałem z przerwań, o czym można poczytać np. tu: https://majsterkowo.pl/forum/przerwania-dlaczego-jest-to-proste-t984.html ;
- PIN4 – buzzer z generatorem (do komunikowania zakończenia naświetlania oraz czasu ciemni – o czym w dalszej części artykułu);
- PIN7 i PIN8 – przekaźniki paneli LED z góry i z dołu (podłączone przez rezystor i tranzystor );
- PIN11 – enkoder, przycisk (głównie dla zaakceptowania wyboru);
- A4 i A5 – po magistrali I2C wyświetlacz (sposób podłączenia jest w jednym w tym artykule: https://majsterkowo.pl/wyswietlacz-lcd-zmora-arduino/ .
Jak widać, nie ma tu większego wykorzystania samych pinów, i większa część nie jest podłączona.
Plany budowy paneli:
Aby dostosować panele do zasilania 12V musiałem pogrupować diody po 3 w szeregu i dobrać odpowiedni rezystor. Ostatnie dwie ledy w dolnym, prawym rogu muszą mieć dobrany inny rezystor.
Korzystając ze U=I*R, przekształcając – R=U/I, wyliczyłem, że rezystory powinny mieć ok. 100ohm. Dwa ostatnie jak wspomniałem – po ok. 270ohm.
Na początku zaprojektowałem panele. Każda kratka z obrazka nr 3 odpowiada jednej dziurce na płytce uniwersalnej. D – diody, R – rezystory. Linie odpowiadają zworkom a czarne pola przerwaniem poziomej ścieżki. Na obrazku nr 4 widać podłączenia np. kolor niebieski odpowiada za masę, czerwony odpowiada za zasilanie 12V.
Budowa paneli:
Powierciłem ręcznie przerwy, nie przechodząc wiertłem na drugą stronę laminatu. Średnica wiertła – 3mm.
Do zrobienia zworek użyłem drutu z krosówki telefonicznej oczywiście bez izolacji.
Kolejnym etapem było przewleczenie, pozaginanie oraz przylutowanie elementów tj. led’ów oraz rezystorów.
Płyta główna:
Tak więc ostatnie prasowanie :) Szczęście :)
Trawienie, proszek, woda, zdzieranie papierków… nerwica… zdzieranie papierków… i gotowe…
Co do lutowania, nie będę nikogo przynudzać :)
Budowa obudowy:
Sama walizeczka jest zrobiona z płyt MDF, pokryta cienką warstwą aluminiowej folii fakturowanej. Ranty i brzegi zrobione są z aluminiowych profili i wykończone plastikiem. Takie obudowy można dostać w sklepach budowlanych, są różnej wielkości ale budowa jest identyczna.
Kolejnym etapem było wymierzenie potrzebnych mi dziur na śruby, wyświetlacz, enkoder, włącznik, bezpiecznik i gniazdo zasilające. Otwory na połączenia śrubowe wykonałem ręcznie wiertłem 3mm, i wykończyłem wiertłem 8mm, tak aby każdy łeb śruby ładnie wpasowywał się w walizkę. Miejsce pod wyświetlacz dokonałem od linijki przy pomocy nożyka do tapet :) Płyta MDF nie robi problemu gdy się ją potraktuje nożykiem :)
Do skonstruowania stelażu na pleksi, na której umieszcza się płytki do naświetlania, wykorzystałem aluminiowe profile. Można je dostać w sklepach budowlanych, łatwo się je obrabia i przycina brzeszczotem.
Szlifowania dokonałem na urządzeniu renomowanej marki Western Digital przy prędkości ok. 7200 rpm.
Szczegóły tutaj :) : https://majsterkowo.pl/jak-zrobic-szlifierke-z-dysku-twardego/
Kolejnym etapem było wywiercenie dziur na śruby, i zamontowanie profili. Przed tym zabiegiem w celu kosmetycznym obkleiłem boki “uniwersalnym przylepcem tkaninowym”. Do kupienia w każdej aptece.
Pleksi, grodzie i powierzchnia robocza:
Ściany grodziowe, które odseparowują przestrzeń promieniowania od reszty podzespołów, wykonałem z pleksi (zdjęcie 20), pokryłem je również czarną taśmą izolacyjną (zdjęcie 21).
Powierzchnię roboczą wykonałem z pleksi (zdjęcie 22), którą obrobiłem dookoła szlifierką ręczną (zdjęcie 23).
Dookoła powierzchni roboczej nakleiłem folię posiadającą fakturę karbonu. Jest to folia do oklejania samochodów. Posiadałem kawałek i postanowiłem ją tu użyć.
Montaż w jedną całość:
Nadszedł czas na montaż elementów takich jak, płyta główna, wyświetlacz oraz panele. Wszystko trzymają śruby M3, podkładki i nakrętki. Ściany grodziowe trzyma klej cyjanoakrylowy. Zamontowałem również enkoder, włącznik główny, gniazdo na bezpiecznik oraz gniazdo zasilające.
Sam wyświetlacz wzbogaciłem o układ PCF8574 i do płyty głównej idzie jedynie zasilanie i sygnał po magistrali I2C. Do Enkodera przylutowałem sześciożyłowy przewód telefoniczny i zabezpieczyłem klejem na gorąco.
Przewody z górnej części podłączyłem do płyty głównej.
Taśma dwustronna posłużyła do montażu powierzchni roboczych (pleksi) we wnętrzu walizki.
Efekt końcowy:
Aby uruchomić naświetlarkę, potrzeby jest zasilacz sieciowy 12V, zalecam min. 2A.
Sam program, który napisałem, pozwala wybrać jeden z pięciu programów (profili), które można uruchomić lub edytować. Zostają one zapamiętane w pamięci EEPROM.
Samo edytowanie pozwala kolejno wybrać:
- uruchomienie panelu górnego/dolnego/obydwóch;
- czas ekspozycji UV (5sek – 45min);
- alarm po ekspozycji (włącz/wyłącz);
- uruchomienie ciemni (włącz/wyłącz);
- jeżeli ciemnia jest uruchomiona, czas ciemni (5sek – 45min);
- jeżeli ciemnia jest uruchomiona, alarm po czasie ciemni (włącz/wyłącz)
Program:
Sam kod jest nie zoptymalizowany ale działa i w pełni spełnia powierzone mu zadanie :)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 |
#include <math.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <EEPROM.h> byte xxpg[8] = {0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000}; // panel gora byte xxpd[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111}; //panel dol byte xxpo[8] = {0b11111, 0b11111, 0b11111, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111}; //panele oba byte xxstrzalka[8] = {0b00000, 0b01000, 0b11100, 0b11110, 0b11111, 0b11110, 0b11100, 0b01000}; //strzalka LiquidCrystal_I2C lcd(0x38,16,2); int encoderPin1 = 3; // int encoderPin2 = 2; // volatile int lastEncoded = 0; // ENKODER volatile long encoderValue = 1; // long lastencoderValue = 0; // int lastMSB = 0; // int lastLSB = 0; // int H1 = 7; //przekaznik panel gora int H2 = 8; //przekaznik panel dol int buzzer = 4; //buzzer int button_e = 11; //przycisk - enkoder int encl = 2; //przerwanie - enkoder nr 1 int encp = 3; //przerwanie - enkoder nr 2 byte ekspmin[5] = {0,0,0,0,0}; //minuty ekspozycji byte ekspsek[5] = {0,0,0,0,0}; //sekundy ekspozycji byte panel[5] = {0,0,0,0,0};//zaswiecany panel byte ekspal[5] = {0,0,0,0,0}; //alarm po ekspozycji byte ciemnia[5] = {0,0,0,0,0}; //ciemnia byte ciemmin[5] = {0,0,0,0,0}; //minuty ciemnia byte ciemsek[5] = {0,0,0,0,0}; //sekundy ciemnia byte ciemal[5] = {0,0,0,0,0}; //alarm po ciemni byte temp[8] = {0,0,0,0,0,0,0,0}; byte miejsce = 0; byte z = 0; //Poczatek wszystkiego byte enko = 1; //wybrany program byte poz = 0; unsigned long czas, czas2, czasall;//czas do porwnania - millis, czas wcisniecia przycisku void setup(){ pinMode(encoderPin1, INPUT); pinMode(encoderPin2, INPUT); digitalWrite(encoderPin1, HIGH); digitalWrite(encoderPin2, HIGH); attachInterrupt(0, updateEncoder, CHANGE); attachInterrupt(1, updateEncoder, CHANGE); pinMode(H1, OUTPUT); pinMode(H2, OUTPUT); pinMode(buzzer, OUTPUT); pinMode(button_e, INPUT); lcd.init(); lcd.setCursor(0,0); lcd.print("-BeGie------v1.1"); lcd.setCursor(0,1); lcd.print("UV LED EXP. BOX "); lcd.createChar(1, xxpg); lcd.createChar(2, xxpd); lcd.createChar(3, xxpo); lcd.createChar(4, xxstrzalka); for (int i=0; i < 5; i++){ //zaswiecany panel (EEPROM 0 - 4) panel[i] = EEPROM.read(i); } for (int i=0; i < 5; i++){ //minuty ekspozycji (EEPROM 5 - 9) ekspmin[i] = EEPROM.read(i+5); } for (int i=0; i < 5; i++){ //sekundy ekspozycji (EEPROM 10 - 14) ekspsek[i] = EEPROM.read(i+10); } for (int i=0; i < 5; i++){ //alarm po ekspozycji (EEPROM 15 - 19) ekspal[i] = EEPROM.read(i+15); } for (int i=0; i < 5; i++){ //ciemnia (EEPROM 20 - 24) ciemnia[i] = EEPROM.read(i+20); } for (int i=0; i < 5; i++){ //minuty ciemnia(EEPROM 25 - 29) ciemmin[i] = EEPROM.read(i+25); } for (int i=0; i < 5; i++){ //minuty sekundy(EEPROM 30 - 34) ciemsek[i] = EEPROM.read(i+30); } for (int i=0; i < 5; i++){ //alarm po ciemni(EEPROM 35 - 39) ciemal[i] = EEPROM.read(i+35); } delay(2000); lcd.clear(); menu(); } void menu(){ switch (miejsce){ case 0: if(z == 0){ encoderValue = enko; z = 1; } if(encoderValue < 1){ encoderValue = 5;} if(encoderValue > 5){ encoderValue = 1;} lcd.setCursor(0,0); lcd.print("Profil "); lcd.print(encoderValue); lcd.print("/5 "); lcd.setCursor(0,1); switch (panel[encoderValue - 1]){ case 0: lcd.write(1); break; case 1: lcd.write(2); break; case 2: lcd.write(3); break; } lcd.setCursor(1,1); if(ekspmin[encoderValue - 1] < 10){ lcd.print("0"); lcd.print(ekspmin[encoderValue - 1]); } else { lcd.print(ekspmin[encoderValue - 1]); } lcd.setCursor(3,1); lcd.print(":"); lcd.setCursor(4,1); if(ekspsek[encoderValue - 1] < 10){ lcd.print("0"); lcd.print(ekspsek[encoderValue - 1]); } else { lcd.print(ekspsek[encoderValue - 1]); } if(ekspal[encoderValue - 1] == 1){ if(ciemnia[encoderValue - 1] == 1){ lcd.write(4); lcd.print("A"); lcd.write(4); } else{ lcd.write(4); lcd.print("A "); } } else{ if(ciemnia[encoderValue - 1] == 1){ lcd.print(" "); lcd.write(4); lcd.print(" "); } else{ lcd.print(" "); } } if(ciemnia[encoderValue - 1] == 1){ lcd.setCursor(9,1); //CIEMNIA if(ciemmin[encoderValue - 1] < 10){ lcd.print("0"); lcd.print(ciemmin[encoderValue - 1]); } else { lcd.print(ciemmin[encoderValue - 1]); } //lcd.setCursor(11,1); lcd.print(":"); //lcd.setCursor(12,1); if(ciemsek[encoderValue - 1] < 10){ lcd.print("0"); lcd.print(ciemsek[encoderValue - 1]); } else { lcd.print(ciemsek[encoderValue - 1]); } //lcd.setCursor(14,1); if(ciemal[encoderValue - 1] == 1){ lcd.write(4); lcd.print("A"); } else { lcd.print(" "); } } else{ lcd.setCursor(9,1); lcd.print(" "); } // if (digitalRead(button_e) == HIGH){ do{ delay(50); }while (digitalRead(button_e) == HIGH); lcd.clear(); delay(200); miejsce = 1; z = 0; enko = encoderValue; } menu(); break; case 1: if(z == 0){ encoderValue = 1; z = 1; lcd.setCursor(0,0); lcd.print("Profil "); lcd.print(enko); lcd.print(" "); } if(encoderValue < 1){ encoderValue = 3;} if(encoderValue > 3){ encoderValue = 1;} lcd.setCursor(0,1); switch (encoderValue) { case 1: lcd.print("1.Start "); break; //1.Start case 2: lcd.print("2.Modyfikuj "); break; //2.Modyfikacja case 3: lcd.print("3.Cofnij "); break; //3.Powrót } if (digitalRead(button_e) == HIGH){ do{ delay(50); } while(digitalRead(button_e) == HIGH); lcd.clear(); z = 0; if(encoderValue == 1){start();} if(encoderValue == 2){miejsce = 2;} if(encoderValue == 3){miejsce = 0;} } menu(); break; case 2: //USTAWIANIE PANELI if(z == 0){ encoderValue = panel[enko - 1]; z = 1; //lcd.print("-BeGie----------"); lcd.setCursor(0,0); lcd.print("Ktory panel wl.?"); } if(encoderValue < 0){ encoderValue = 2;} if(encoderValue > 2){ encoderValue = 0;} lcd.setCursor(0,1); switch (encoderValue) { case 0: lcd.write(1); lcd.print("1.Gorny "); break; case 1: lcd.write(2); lcd.print("2.Dolny "); break; case 2: lcd.write(3); lcd.print("3.Oba "); break; } if (digitalRead(button_e) == HIGH){ do{ delay(50); } while(digitalRead(button_e) == HIGH); lcd.clear(); temp[0] = encoderValue; z = 0; miejsce = 3; } menu(); break; case 3: //USTAWIANIE MINUT EKSPOZYCJI if(z == 0){ encoderValue = ekspmin[enko - 1]; z = 1; lcd.setCursor(0,0); lcd.print("Czas ekspozycji?"); czas = millis(); } if(encoderValue < 0){ encoderValue = 45;} if(encoderValue > 45){ encoderValue = 0;} lcd.setCursor(0,1); if (czas + 700 > millis()){ if(encoderValue < 10){ lcd.print("0"); lcd.print(encoderValue); } else { lcd.print(encoderValue); } } else { if (czas + 1000 > millis()){ lcd.print(" "); } else { czas = millis(); } } lcd.setCursor(2,1); lcd.print(":"); if(ekspsek[enko - 1] < 10){ lcd.print("0"); lcd.print(ekspsek[enko - 1]); } else { lcd.print(ekspsek[enko - 1]); } if (digitalRead(button_e) == HIGH){ do{ delay(50); } while(digitalRead(button_e) == HIGH); lcd.clear(); temp[1] = encoderValue; z = 0; miejsce = 4; } menu(); break; case 4: //USTAWIANIE SEKUND EKSPOZYCJI if(z == 0){ encoderValue = ekspsek[enko - 1]; z = 1; lcd.setCursor(0,0); lcd.print("Czas ekspozycji?"); czas = millis(); } lcd.setCursor(5,1); lcd.print(" "); if (temp[1] == 0){ if(encoderValue < 5){ encoderValue = 59;} if(encoderValue > 59){ encoderValue = 5;} } else { if(encoderValue < 0){ encoderValue = 59;} if(encoderValue > 59){ encoderValue = 0;} } //if(encoderValue < 0){ encoderValue = 59;} //if(encoderValue > 59){ encoderValue = 0;} lcd.setCursor(0,1); if(temp[1] < 10){ lcd.print("0"); lcd.print(temp[1]); } else { lcd.print(temp[1]); } lcd.print(":"); lcd.setCursor(3,1); if (czas + 700 > millis()){ if(encoderValue < 10){ lcd.print("0"); lcd.print(encoderValue); } else { lcd.print(encoderValue); } } else { if (czas + 1000 > millis()){ lcd.print(" "); } else { czas = millis(); } } if (digitalRead(button_e) == HIGH){ do{ delay(50); } while(digitalRead(button_e) == HIGH); lcd.clear(); temp[2] = encoderValue; z = 0; miejsce = 5; } menu(); break; case 5: //USTAWIANIE ALARMU PO EKSPOZYCJI if(z == 0){ encoderValue = ekspal[enko - 1]; z = 1; lcd.setCursor(0,0); //lcd.print("-BeGie----------"); lcd.print("Alarm po eksp.? "); } if(encoderValue < 0){ encoderValue = 1;} if(encoderValue > 1){ encoderValue = 0;} lcd.setCursor(0,1); switch (encoderValue) { case 0: lcd.print("1.Brak alarmu "); break; case 1: lcd.print("2.Alarm "); break; } if (digitalRead(button_e) == HIGH){ do{ delay(50); } while(digitalRead(button_e) == HIGH); lcd.clear(); temp[3] = encoderValue; z = 0; miejsce = 6; } menu(); break; case 6: //WL/WYL CIEMNI if(z == 0){ encoderValue = ciemnia[enko - 1]; z = 1; lcd.setCursor(0,0); //lcd.print("-BeGie----------"); lcd.print("Wl/wyl ciemnia? "); } if(encoderValue < 0){ encoderValue = 1;} if(encoderValue > 1){ encoderValue = 0;} lcd.setCursor(0,1); switch (encoderValue) { case 0: lcd.print("1.Wylacz ciemnie"); break; case 1: lcd.print("2.Wlacz ciemnie "); break; } if (digitalRead(button_e) == HIGH){ do{ delay(50); } while(digitalRead(button_e) == HIGH); lcd.clear(); temp[4] = encoderValue; z = 0; if(encoderValue == 1){ miejsce = 7; } else { miejsce = 10; } } menu(); break; case 7: //USTAWIANIE MINUT CIEMNI if(z == 0){ encoderValue = ciemmin[enko - 1]; z = 1; lcd.setCursor(0,0); //lcd.print("-BeGie----------"); lcd.print("Czas ciemni? "); czas = millis(); } if(encoderValue < 0){ encoderValue = 45;} if(encoderValue > 45){ encoderValue = 0;} lcd.setCursor(0,1); if (czas + 700 > millis()){ if(encoderValue < 10){ lcd.print("0"); lcd.print(encoderValue); } else { lcd.print(encoderValue); } } else { if (czas + 1000 > millis()){ lcd.print(" "); } else { czas = millis(); } } lcd.setCursor(2,1); lcd.print(":"); if(ciemsek[enko - 1] < 10){ lcd.print("0"); lcd.print(ciemsek[enko - 1]); } else { lcd.print(ciemsek[enko - 1]); } if (digitalRead(button_e) == HIGH){ do{ delay(50); } while(digitalRead(button_e) == HIGH); lcd.clear(); temp[5] = encoderValue; z = 0; miejsce = 8; } menu(); break; case 8: //USTAWIANIE SEKUND CIEMNI if(z == 0){ encoderValue = ciemsek[enko - 1]; z = 1; lcd.setCursor(0,0); //lcd.print("-BeGie----------"); lcd.print("Czas ciemni? "); czas = millis(); } lcd.setCursor(5,1); lcd.print(" "); if (temp[5] == 0){ if(encoderValue < 5){ encoderValue = 59;} if(encoderValue > 59){ encoderValue = 5;} } else { if(encoderValue < 0){ encoderValue = 59;} if(encoderValue > 59){ encoderValue = 0;} } lcd.setCursor(0,1); if(temp[5] < 10){ lcd.print("0"); lcd.print(temp[5]); } else { lcd.print(temp[5]); } lcd.print(":"); lcd.setCursor(3,1); if (czas + 700 > millis()){ if(encoderValue < 10){ lcd.print("0"); lcd.print(encoderValue); } else { lcd.print(encoderValue); } } else { if (czas + 1000 > millis()){ lcd.print(" "); } else { czas = millis(); } } if (digitalRead(button_e) == HIGH){ do{ delay(50); } while(digitalRead(button_e) == HIGH); lcd.clear(); temp[6] = encoderValue; z = 0; miejsce = 9; } menu(); break; case 9: //USTAWIANIE ALARMU PO CIEMNI if(z == 0){ encoderValue = ciemal[enko - 1]; z = 1; lcd.setCursor(0,0); //lcd.print("-BeGie----------"); lcd.print("Alarm po ciemni?"); } if(encoderValue < 0){ encoderValue = 1;} if(encoderValue > 1){ encoderValue = 0;} lcd.setCursor(0,1); switch (encoderValue) { case 0: lcd.print("1.Brak alarmu "); break; case 1: lcd.print("2.Alarm "); break; } if (digitalRead(button_e) == HIGH){ do{ delay(50); } while(digitalRead(button_e) == HIGH); lcd.clear(); temp[7] = encoderValue; z = 0; miejsce = 10; } menu(); break; case 10: //POTWIERDZENIE if(z == 0){ encoderValue = 0; z = 1; lcd.setCursor(0,0); //lcd.print("-BeGie----------"); lcd.print("Zapisac zmiany "); lcd.setCursor(0,1); lcd.print("profilu "); lcd.print(enko); lcd.print("?"); } if(encoderValue < 0){ encoderValue = 1;} if(encoderValue > 1){ encoderValue = 0;} lcd.setCursor(11,1); switch (encoderValue) { case 0: lcd.print("-TAK-"); break; case 1: lcd.print("-NIE-"); break; } if (digitalRead(button_e) == HIGH){ do{ delay(50); } while(digitalRead(button_e) == HIGH); lcd.clear(); //lcd.print("-BeGie----------"); lcd.setCursor(0,0); lcd.print("ZAPISYWANIE... "); if(encoderValue == 0){ //ZAPISZ byte y = 0; for (int i=0; i < 8; i++){ EEPROM.write((enko - 1) + y, temp[i]); y = y + 5; delay(50); } y = 0; lcd.setCursor(0,0); lcd.print("ZAPISANO... "); } else { lcd.setCursor(0,0); lcd.print("ANULOWANO... "); } for (int i=0; i < 5; i++){ //zaswiecany panel (EEPROM 0 - 4) panel[i] = EEPROM.read(i); } for (int i=0; i < 5; i++){ //minuty ekspozycji (EEPROM 5 - 9) ekspmin[i] = EEPROM.read(i+5); } for (int i=0; i < 5; i++){ //sekundy ekspozycji (EEPROM 10 - 14) ekspsek[i] = EEPROM.read(i+10); } for (int i=0; i < 5; i++){ //alarm po ekspozycji (EEPROM 15 - 19) ekspal[i] = EEPROM.read(i+15); } for (int i=0; i < 5; i++){ //ciemnia (EEPROM 20 - 24) ciemnia[i] = EEPROM.read(i+20); } for (int i=0; i < 5; i++){ //minuty ciemnia(EEPROM 25 - 29) ciemmin[i] = EEPROM.read(i+25); } for (int i=0; i < 5; i++){ //minuty sekundy(EEPROM 30 - 34) ciemsek[i] = EEPROM.read(i+30); } for (int i=0; i < 5; i++){ //alarm po ciemni(EEPROM 35 - 39) ciemal[i] = EEPROM.read(i+35); } delay(1000); z = 0; miejsce = 0; } menu(); break; } //KONIEC GLOWNEGO SWITCH } //KONIEC MENU void start(){ switch(miejsce){ case 0: lcd.clear(); lcd.setCursor(0,0); lcd.print("START... "); miejsce = 1; start(); break; case 1: switch(panel[enko - 1]){ case 0: digitalWrite(H1, HIGH); digitalWrite(H2, LOW); break; case 1: digitalWrite(H1, LOW); digitalWrite(H2, HIGH); break; case 2: digitalWrite(H1, HIGH); digitalWrite(H2, HIGH); break; } miejsce = 2; z = 0; start(); break; case 2: if(z == 0){ if(ciemnia[enko - 1] == 0){ czas2 = ((ekspmin[enko - 1] * 60) + ekspsek[enko - 1]); } else{ czas2 = (((ekspmin[enko - 1] * 60) + ekspsek[enko - 1]) + (ciemmin[enko - 1] * 60) + ciemsek[enko - 1]); czas = ((ekspmin[enko - 1] * 60) + ekspsek[enko - 1]); } czasall = czas2; czas = (czas * 1000) + millis(); czas2 = (czas2 * 1000) + millis(); z = 1; } if(poz == 0){ lcd.setCursor(0,0); lcd.print("Ekspozycja UV "); lcd.setCursor(15,0); switch (panel[enko - 1]) { case 0: lcd.write(1); break; case 1: lcd.write(2); break; case 2: lcd.write(3); break; } } if(poz == 2){ lcd.setCursor(0,0); lcd.print("Ciemnia "); } lcd.setCursor(0,1); lcd.print("Czas: "); lcd.setCursor(6,1); if ((((czas2 - millis()) / 1000) / 60) > 9){ lcd.print(((czas2 - millis()) / 1000) / 60); } else{ lcd.setCursor(6,1); lcd.print("0"); lcd.setCursor(7,1); lcd.print(((czas2 - millis()) / 1000) / 60); } lcd.setCursor(8,1); lcd.print(":"); if ((((czas2 - millis()) / 1000) % 60) > 9){ lcd.setCursor(9,1); lcd.print(((czas2 - millis()) / 1000) % 60); } else{ lcd.setCursor(9,1); lcd.print("0"); lcd.setCursor(10,1); lcd.print(((czas2 - millis()) / 1000) % 60); } lcd.setCursor(11,1); lcd.print(" "); // czyscik if (((100 - ((czas2 - millis()) / czasall) / 10)) > 99){ lcd.setCursor(12,1); lcd.print((100 - ((czas2 - millis()) / czasall) / 10)); } else { if (((100 - ((czas2 - millis()) / czasall) / 10)) > 9){ lcd.setCursor(12,1); lcd.print(" "); lcd.print((100 - ((czas2 - millis()) / czasall) / 10)); } else { lcd.setCursor(12,1); lcd.print(" "); lcd.print((100 - ((czas2 - millis()) / czasall) / 10)); } } lcd.setCursor(15,1); lcd.print("%"); if ((((czas - millis()) / 1000) / 60) == 0 && (((czas - millis()) / 1000) % 60) == 0 && poz == 0){ //ALARM KONCA EKSPOZYCJI if (ciemnia[enko - 1] == 0){ miejsce = 3; poz = 3; } else { miejsce = 3; poz = 1; } } if ((((czas2 - millis()) / 1000) / 60) == 0 && (((czas2 - millis()) / 1000) % 60) == 0){ //ALARM KONCA miejsce = 3; poz = 3; } if (digitalRead(button_e) == HIGH){ do{ delay(50); } while(digitalRead(button_e) == HIGH); lcd.clear(); lcd.setCursor(0,0); lcd.print("ANULOWANO... "); digitalWrite(H1, LOW); digitalWrite(H2, LOW); delay(1000); lcd.clear(); z = 0; poz = 0; miejsce = 0; menu(); } start(); break; case 3: if(poz == 1){ lcd.setCursor(0,0); lcd.print(" KONIEC "); lcd.setCursor(0,1); lcd.print(" EKSPOZYCJI UV! "); if(ekspal[enko - 1] == 1){ digitalWrite(buzzer, HIGH); } digitalWrite(H1, LOW); digitalWrite(H2, LOW); delay(2000); digitalWrite(buzzer, LOW); poz = 2; miejsce = 2; start(); } if(poz == 3){ lcd.setCursor(0,0); lcd.print(" KONIEC "); lcd.setCursor(0,1); lcd.print(" PROGRAMU!! "); digitalWrite(H1, LOW); digitalWrite(H2, LOW); if((ciemnia[enko - 1] == 0 && ekspal[enko - 1] == 1) || (ciemnia[enko - 1] == 1 && ciemal[enko - 1] == 1)){ digitalWrite(buzzer, HIGH); } if (digitalRead(button_e) == HIGH){ do{ delay(50); digitalWrite(buzzer, LOW); } while(digitalRead(button_e) == HIGH); lcd.clear(); z = 0; poz = 0; miejsce = 0; menu(); } } start(); break; } //KONIEC } //KONIEC START void loop(){ } void updateEncoder(){ int MSB = digitalRead(encoderPin1); int LSB = digitalRead(encoderPin2); int encoded = (MSB << 5) |LSB; int sum = (lastEncoded << 1) | encoded; if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++; if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue --; lastEncoded = encoded; } |
Naświetlanie, trawienie czyli jak to się ma w praktyce:
Postanowiłem wspomnieć nieco o naświetlaniu, może kogoś zachęcę do budowy własnej naświetlarki :)
Projekt płytki drukujemy na folii przeźroczystej do przeźroczy (ja używam folii marki XEROX) lub też na kalce technicznej. Istnieją folie do przeźroczy zarówno dla drukarek atramentowych jak i laserowych. Jeżeli mamy płytkę dwustronną – drukujemy obie strony, oczywiście warstwę górną w odbiciu lustrzanym (mirror) i w takim przypadku po dopasowaniu do siebie obu przeźroczy, zszywamy zszywaczem biurowym po brzegach lub sklejamy taśmą, tak aby wszystko tworzyło kieszonkę na płytkę.
WAŻNE: Nadruk należy zrobić przy maksymalnym zaczernieniu tonerem lub tuszem w MAKSYMALNEJ rozdzielczości!
Ja akurat pokażę przykład z płytką jednostronną. Jest to detektor burz oparty na AS3935. Sam schemat jest żywcem wzięty ze strony:
http://www.mikrokontroler.pl/content/czujnik-wykrywajacy-pioruny-as3935-firmy-austria-microsystems-implementacja-sprzetowa/strona/0/1
Musimy się wyposażyć w odpowiedni laminat światłoczuły, możemy taki nabyć w znanym i lubianym sklepie:
http://botland.com.pl/laminaty/2141-laminat-swiatloczuly-jednostronny-10×15-cm.html
INFORMACJA: Można użyć zwykłego laminatu i foli światłoczułych lub preparatu POSITIV 20. Ale o tych alternatywnych metodach napiszę może kiedy indziej. Metoda z gotowymi laminatami światłoczułymi jest wg. mnie najlepsza.
Po docięciu i obróbce mechanicznej laminatu, układamy przeźrocza, następnie kładziemy na nich laminat po zerwaniu folii ochronnej i zamykamy naświetlarkę.
WAŻNE: Folie wkładamy ZADRUKOWANĄ stroną w kierunku laminatu!
OSTRZEŻENIE: Laminat odbezpieczamy w ciemnym miejscu, zdala od źródeł światła czy też światła słonecznego. W innym przypadku, laminat może ulec naświetleniu przed ekspozycją UV w naświetlarce!
Uruchamiamy naświetlarkę i włączamy naświetlanie. Ważne jest aby w czasie naświetlania, wszystkie warstwy przylegały ściśle do siebie tj. pleksa pola roboczego, przeźrocze i laminat.
OSTRZEŻENIE!!! Światło UV jest szkodliwe dla oczu jak i skóry. Należy zachować SZCZEGÓLNĄ ostrożność!!!
W moim przypadku czas naświetlania to zaledwie 35-40sekund. Czas ten może być różny, może zależeć od zastosowanych LED’ów, świetlówek itp. Należy go dobrać eksperymentalnie, nie może być za krótki, ponieważ nie naświetlimy płytki, i nie powinien być za długi, ponieważ możemy mniej osłonięte miejsca przez toner/tusz – prześwietlić.
Po naświetleniu, płytkę przechowujemy przez ok. 30 minut w ciemności. W mojej naświetlarce nazwałem funkcjonalność tą – ciemnią. Naświetlarka odlicza zadany czas pozostawiając panele LED wyłączone.
W między czasie musimy przygotować sobie roztwór zwany wywoływaczem. Można go nabyć tu:
http://botland.com.pl/wytrawiacze/5697-uniwersalny-wywolywacz-do-fotolakierow-i-plytek-pozytywowych-22g.html
OSTRZEŻENIE!!! Wywoływacz jest szkodliwy dla organizmów żywych. Należy bezwzględnie pamiętać o UBIORZE OCHRONNYM!
Po wyciągnięciu płytki z urządzenia, zanurzamy ją w wywoływaczu i czekamy ok. 30sekund.
Nie posiadam zdjęć powyższej płytki, więc pokaże na przykładzie innej płytki (Arduino Mega 2560).
Wzór powinien być wyraźny. Należy pamiętać aby płytka w wywoływaczu nie leżała zbyt długo, ponieważ mozaika spłynie z laminatu :)
Płytkę należy jak najszybciej wytrawić w standardowy sposób, np. z użyciem B327, nie należy jej w takim stanie przechowywać. Również i wywoływacz nie powinien stać rozrobiony z wodą zbyt długo. Na swoim przykładzie powiem, że po dniu w słoiku, stracił zupełnie swoją magiczną moc :)
FINALIZACJA WYKONYWANIA PŁYTKI:
Przed nanoszeniem elementów na płytkę, należy przetrzeć płytkę np. benzyną lakową lub preparatem IPA w celu usunięcia lakieru światłoczułego.
Mam nadzieję, że chodź trochę przybliżyłem zasadę budowy naświetlarek UV, robienia płytek metodą fotochemiczną oraz przewagę tej metody nad metodą termotransferu.
Pozdrawiam.
Gratuluję debiutu! Daję 5 i przenoszę od razu na główną :)
Tylko znak wodny coś się źle na zdjęciach dodał. Jutro popatrzę, co mogło pójść nie tak…
PS – poprawiłem już dodawanie znaków wodnych :) Jeżeli by Ci się chciało, możesz ponownie wrzucić chociaż te zdjęcia, na których ten znak wodny z czarnym tłem zasłonił jakieś istotne elementy (np. na schemacie) :)
Pozdrawiam!
Łukasz
Dziękuję Łukaszu, postaram się jak najszybciej podmienić zdjęcia.
Wielkie gratulacje, oby więcej takich projektów było.
Super :) jedno pytanko jak docinasz tak idealnie płytki na wymiar?
Nie pytaj :) Brzeszczot. Kiedyś przerysowywałem nożykiem do tapet z dwóch stron od linijki i łamałem. Stwierdziłem, że jednak brzeszczot lepszy. Muszę sobie zrobić taką małą stołową cyrkularkę :)
Uważam że to bardzo udany projekt, udowodniłeś nim że z ardurino można wykonać coś fajnego i nie jest to tylko prototyp wykonany na płytce stykowej, tylko od początku do końca własnoręcznie zbudowane urządzenie które na dodatek jest funkcjonalne. Bez wahania daję 5*- bo na tyle właśnie ten projekt zasługuje.
Dziękuję.
Moim zdaniem dawno nie było ciekawych projektów. W momencie przeczytania nagłówka, od razu zabrałem się do czytania artykułu. Kiedyś szukałem artykułów o tym sposobie robienia płytek. Gratuluję osobie, która zrobiła tą Naświetlarkę. Pełen profesjonalizm. Oby więcej takich artykułów.
Dziękuję.
Moge prosić o link do użytych diod?
Chyba raczej nie powinienem reklamować skąd je wziąłem :)
http://www.aliexpress.com/item/100pcs-Transparent-5mm-Purple-365nm-405nm-UV-Straw-Hat-LED-Wide-Angle-Light-Emitting-Diode-Lamp/32280085810.html
Nie moja “branża” ale wielki szacun za wykonanie!
Muszę przyczepić się do jednej kwestii estetycznej. Dlaczego w każdym projekcie z wyświetlaczem 2×16 przez otwór w obudowie widać również czarną ramkę wyświetlacza? Czy nie byłoby lepiej wyciąć otwór jedynie na “właściwą” część wyświetlacza?
Myślałem o tym, jednak, obudowa posiada ściankę ok. 2mm. Wyświetlacz musiałby być zamontowany niżej od ściany obudowy co również pogorszyłoby efekt wizualny. Aby zakamuflować czarną ramkę, mogłem użyć maski, jednak wykonanie jednej na zamówienie byłby kosztowne, po za tym obudowa pokryta jest fakturą aluminiową, która nie jest gładka i maska nie przylegałaby dobrze.
nie umiem ani w zab czegos tam programowac.
jakie są wymiary tej walizeczki???
29cm x 9cm x 14cm (szerokość, wysokość, długość). Liczone wraz z gałką enkodera od góry i gniazdem bezpiecznikowym z prawej.
BeGie: jak to wychodzi cenowo jezeli chodzi o koszty wysyłki?BeGie:
Jakiego enkodera użyłeś?
Czy takie sterowanie wyświetlaczem może być: http://nowyelektronik.pl/index.php?id_product=89395&controller=product?search_query=hd44780&fast_search=fs
dziękuję za informację.
Nie mogę nigdzie namierzyć tej walizeczki, jak są to w kosmicznych cenach i duże gabarytowo. Ma ktoś może namiar gdzie można kupić taką walizeczkę?
http://www.castorama.pl/produkty/narzedzia-i-artykuly/warsztat-i-organizacja/porzadek-i-magazynowanie/skrzynie-narzedziowe/zestaw-walizek-aluminiowych-macallister-3-szt.html
Widziałem je w chyba PSB i na pewno w Castoramie. Na Alleeeee musisz szukać pod nazwą “walizka aluminiowa”.
ok, dzięki za pomoc
Mógłbym poprosić o wysłanie schematu płytki w formacie pdf? quazeks5@gmail.com
Z góry dziękuje.
Wysłałem :) Przepraszam za długi czas odpowiedzi z mojej strony.
Witam,
jaki to jest mostek prostowniczy 5W10 ?
Witam. Zainteresował mnie Twój projekt czy mógłbym prosić schemat w Eaglu lub Pdefie . Z góry dzięki.
Witam – super sprawa z ta walizką – a ja chciałem budować ze sklejki hi – nie wiem dlaczego wyskakuje mi błąd przy linii “LiquidCrystal_I2C lcd(0x27, 16,2);” mój lcd i2c ma adres 0x27 – pozdrawiam Jacek.
Witam, jest to spowodowane inną biblioteką zapewne, proszę podać mail, wyślę bibliotekę i plik w .ino.
Mógłbym poprosić o wysłanie schematu płytki w formacie pdf? kazek-65@tlen.pl
Bardzo ciekawy projekt , pozdrawiam Kazek
Wysłałem :) Przepraszam za długi czas odpowiedzi z mojej strony.
Witam, mógłbym poprosić o wysłanie schematu płytki w formacie pdf? infel@onet.pl
Witam,
czy arduino do naświetlarki może być takie: http://allegro.pl/modul-pro-mini-atmega328p-16mhz-5v-avr-arduino-i6684318617.html
Mógłbym poprosić o wysłanie schematu płytki w formacie eagle lub pdf? infel@onet.pl
Z góry dziękuje.
Witam
Na początku moje gratulacje świetny projekt i świetna jego realizacja.
Bardzo podoba mi się sterownik do tej naświetlarki. Mam jednak mały problem z kodem. Przyznaje jestem jeszcze dość zielony w kwestii programowania, ale na początku chyba każdy taki był. Nie mogę skompilować kodu bo wyskakuje mi taki błąd:
C:\Users\Tomek\Documents\Arduino\libraries\LiquidCrystal\I2CIO.cpp:35:26: fatal error: ../Wire/Wire.h: No such file or directory
#include
^
compilation terminated.
exit status 1
Błąd kompilacji dla płytki Arduino Pro or Pro Mini.
Bardzo proszę o pomoc. wiatr.tomasz@wp.pl
Ok problem już rozwiązany
witam zajefajny projekt, ale mam problem z zaprogramowaniem Arduino po wgraniu programu nic nie działa szkoda bo mechanicznie wykonałem bardzo podobny projekt, może jakaś pomoc nadmieniam, że jestem laikiem w programowaniu z góry dziekuję za pomoc.
jak rozwiązałeś ten problem?
Czy do projektu można użyć takich świetlówek https://allegro.pl/oferta/4x-zarowka-swietlowka-uv-9w-365nm-do-lampy-7152966715 ?
Zaoszczędzili byśmy na czasie przy lutowaniu :)
Mógłbym poprosić o wysłanie schematu płytki w formacie eagle lub pdf? komarenko007@gmail.com
Z góry dziękuje.
Również chciałbym poprosić o przesłanie dokumentacji w formacie (.sch + .brd) Eagle na adres @: trebor02@wp.pl, za co z góry bardzo dziękuję.