Skocz do zawartości

Philip

Użytkownicy
  • Zawartość

    76
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    3

Philip wygrał w ostatnim dniu 4 marca 2018

Philip ma najbardziej lubianą zawartość!

Reputacja

19 Dobra

O Philip

  • Ranga
    4/10

Informacje

  • Płeć
    Mężczyzna
  • Zainteresowania
    elektryka,elektronika
  • Zawód
    elektryk

Ostatnio na profilu byli

330 wyświetleń profilu
  1. Zawsze trzeba zachować wszelkie środki ostrożności. Przyznaję całkowitą rację @atMegaTona ale też nie można wchodzić w skrajności. Tak samo jest: czy trzeba mieć uprawnienia SEP do podłączenia ładowarki do gniazdka sieciowego? Odpowiedzieć może sobie każdy sam. Są rzeczy/czynności, przy których zawsze trzeba uważać, zapewnić ochronę przed dotykiem bezpośrednim poprzez obudowy, umieszczenie poza zasięgiem ręki, izolacja itd. Mam nadzieję, że autor mimo swojego wieku jest roztropny i świadomy zagrożenia przy pracach przy WN. Tak jak napisał @Treker nie mamy wpływu na to co się dzieje w warsztatach każdego majsterkowicza.
  2. Niestety nie. Na zdjęciu, które zamieściłem widać. Piny: 0-7 klawiatura; 8-13 lcd; A0-A3 czujniki i buzzer i dwa wolne A4 i A5 z tego jeden jest na pir'a.
  3. Ciekawy pomysł. Moduł BT HC-05 mam i chciałem też ostatnio liznąć tego Qt. Tylko, że mało miejsca mam w obudowie i większość pinów Arduino użytych. Chciałbym to najpierw programowo rozwiązać, a jak to będę w stanie zrobić, to wtedy się pomyśli o BT i o aplikacji.
  4. #define CzDALLAS A0 #define CzDHT 15 #define KONTAKTRON 16 #define BUZZER 17 #define PIR 18 //Dołączenie bibliotek #include <LiquidCrystal.h> #include <Keypad.h> #include <DallasTemperature.h> #include <OneWire.h> #include <DHT.h> #include "RTClib.h" #include <Wire.h> #include "Bounce2.h" const byte ROWS = 4; //ile wierszy const byte COLS = 4; //ile kolumn byte rowPins[ROWS]={3,2,1,0}; //piny wierszy byte colPins[COLS]={4,5,6,7}; //piny kolumn char keys[ROWS][COLS]={ //mapowanie klawiatury {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; //Deklaracja podłączeń urządzeń LiquidCrystal lcd(8,9,10,11,12,13); //Wyświetlacz Keypad klawiatura = Keypad(makeKeymap(keys),rowPins,colPins,ROWS,COLS); //Klawiatura OneWire oneWire(CzDALLAS); //Podłączenie do A0 czujników Dallas DallasTemperature sensors(&oneWire); //Informacja do biblioteki DHT dht; //Czujnik wilgotności DHT11 Bounce debouncer = Bounce(); //Debouncing RTC_DS1307 rtc; //Deklaracja zegara DeviceAddress termometrPokoj = {0x28,0x95,0x18,0xFD,0x9,0x0,0x0,0x64}; //Adres czujnika temp. pokoju DeviceAddress termometrDwor = {0x28,0x28,0x4F,0xBA,0x9,0x0,0x0,0x8B}; //Adres czujnika temp. na dworze //Zmienne do liczenia czasu unsigned long aktualnyCzas = 0; unsigned long zapamietanyCzas = 0; //Zmienne do zmiany glośności buzzera i otworzenia drzwi int glosnosc1 = 500; int glosnosc2 = 1000; int stan = 1; //Zmienna do przelaczania opcji menu int przelaczenie = 1; enum { czyOtworzonoDrzwi = 1, odegranoDzwiek1, odegranoDzwiek2, czyZamknietoDrzwi }; enum { dataGodzina = 1, temperaturaPokoj, temperaturaDwor, wilgotnoscDht, temperaturaDht, wyczyszczenie, }; void setup(void) { Serial.begin(9600); lcd.begin(16,2); //Deklaracja typu lcd.clear(); //Wyczyszczenie sensors.begin(); //Inicjalizacja czujników dht.setup(CzDHT); //Inicjalizacja DHT11 pinMode(KONTAKTRON,INPUT_PULLUP); //Deklaracja dla kontaktronu jako wyjście pinMode(BUZZER,OUTPUT); //Deklaracja buzzera wyjście pinMode(PIR,INPUT); //Deklaracja czujnika ruchu jako wejście debouncer.attach(KONTAKTRON); debouncer.interval(5); if(!rtc.begin()) { lcd.setCursor(0,0); lcd.print("Nie moge znalezc RTC"); while (1); } if(!rtc.isrunning()){ lcd.clear(); lcd.setCursor(0,0); lcd.print("RTC nie dziala"); } else { rtc.begin(); rtc.adjust(DateTime(2019, 6, 29, 15, 9, 0)); //Ustawienie daty i godziny } } void Rtc(void){ char bufor [11]; DateTime now = rtc.now(); if(aktualnyCzas - zapamietanyCzas >= 1000UL){ zapamietanyCzas = aktualnyCzas; sprintf(bufor,"%4d/%02d/%02d", now.year(), now.month(), now.day()); lcd.setCursor(0,0); lcd.print(bufor); sprintf(bufor,"%02d:%02d:%02d", now.hour(), now.minute(), now.second()); lcd.setCursor(0,1); lcd.print(bufor); } } bool przelacz(char klawisz){ int old_przelacz = przelaczenie; switch(klawisz){ case '1': przelaczenie = temperaturaPokoj; lcd.clear(); break; case '2': przelaczenie = temperaturaDwor; lcd.clear(); break; case '3': przelaczenie = wilgotnoscDht; lcd.clear(); break; case 'A': przelaczenie = temperaturaDht; lcd.clear(); break; case 'D': przelaczenie = wyczyszczenie; lcd.clear(); } return old_przelacz != przelaczenie; } void loop(void) { char klawisz = 0; //zmienna do przechowywania znaków klawiszy klawisz = klawiatura.getKey(); sensors.requestTemperatures(); //Pobranie temperatury czujnika int wilgotnosc = dht.getHumidity(); //Pobranie informacji o wilgotności int temperatura = dht.getTemperature(); //Pobranie informacji o temperaturze aktualnyCzas = millis(); debouncer.update(); int wartosc = debouncer.read(); if(przelacz(klawisz)){ //Przy 10 sekundach bezczyności autmatyczne ustawienie daty i godziny zapamietanyCzas = aktualnyCzas; } else if(przelaczenie != dataGodzina && aktualnyCzas - zapamietanyCzas >= 10000UL){ przelaczenie = dataGodzina; lcd.clear(); } switch (przelaczenie){ case dataGodzina: Rtc(); break; case temperaturaPokoj: lcd.setCursor(0,0); lcd.print("Temp Pokoj:"); lcd.setCursor(0,1); lcd.print(sensors.getTempC(termometrPokoj)); lcd.setCursor(6,1); lcd.print("*C"); break; case temperaturaDwor: lcd.setCursor(0,0); lcd.print("Temp. Dwor:"); lcd.setCursor(0,1); lcd.print(sensors.getTempC(termometrDwor)); lcd.setCursor(6,1); lcd.print("*C"); break; case wilgotnoscDht: lcd.setCursor(0,0); lcd.print("Wilgotnosc:"); lcd.setCursor(0,1); lcd.print(wilgotnosc); lcd.setCursor(3,1); lcd.print("%RH"); break; case temperaturaDht: lcd.setCursor(0,0); lcd.print("Temp. DHT11:"); lcd.setCursor(0,1); lcd.print(temperatura); lcd.setCursor(3,1); lcd.print("*C"); break; case wyczyszczenie: lcd.clear(); break; } switch(stan){ case czyOtworzonoDrzwi: if(wartosc == HIGH){ //Jeśli drzwi otwarte if(aktualnyCzas - zapamietanyCzas >=500UL){ //Ile upłynęło zapamietanyCzas = aktualnyCzas; tone(BUZZER,glosnosc1); //Odtwarzam dźwięk1 stan = odegranoDzwiek1; //Przełączam na stan2 } } break; case odegranoDzwiek1: if(aktualnyCzas - zapamietanyCzas >=500UL){ //Jeśli upłynął czas zapamietanyCzas = aktualnyCzas; tone(BUZZER,glosnosc2); //Odtwarzam dźwięk2 stan = odegranoDzwiek2; //Przełączam na stan3 } break; case odegranoDzwiek2: if(aktualnyCzas - zapamietanyCzas >=500UL){ //Jeśli upłynął czas zapamietanyCzas = aktualnyCzas; noTone(BUZZER); //Nie odtwarzam dźwięków stan = czyZamknietoDrzwi; } break; case czyZamknietoDrzwi: if(wartosc == HIGH){ //Jeśli drzwi otwarte } else { //Nic nie robię if(aktualnyCzas - zapamietanyCzas >=500UL){ stan = czyOtworzonoDrzwi; //Jeśli nie przełączam na stan1 zapamietanyCzas = aktualnyCzas; } } break; } } To jest cały kod, który działa, bez tego co napisałem w poprzednim poście.
  5. Witam, Odkurzam projekt. Brałem się za niego jakoś na feriach zimowych. Wtedy obrobiłem obudowę, szynę 5V, GND, 3.3V, czujniki. Teraz chcę jeszcze bardziej udoskonalić projekt o ręczne ustawianie godziny na początku włączania Arduino. Poza tym wszystko działa jak zamierzałem od początku. Problematyczne jest, że za każdym razem przy ponownym włączeniu zasilania data i godzina pozostaje z ostatniego wgrywania programu. Próbowałem w jakiś sposób napisać funkcję, która przypisze przyciski na klawiaturze jako odpowiednie liczby np. '1' w rzeczywistości jest 1, '2' - 2 itd., ale to co napisałem nie ma prawa działać. Biblioteka RTClib też nie pozwala jakoś za bardzo na oddzielenie od siebie roku, miesiąca, dnia, godziny, minuty i sekundy. Są one raz ustawiane i koniec. Myślałem jeszcze o jakimś zapisie daty i godziny przy wyłączaniu zasilania, tylko pytanie gdzie? Jakaś dodatkowa karta pamięci? void loop() { switch(...){ [...] case ... : //Odpowiedni case dla godziny w pętli głównej klawisz(); } } void (klawisz){ DateTime written = rtc.written(); klawisz '0' = int zero; int zero = 0; klawisz '1' = int jedynka; //'1' klawisz jest typu char int jedynka = 1; [...] //od 0-9 switch(ustawCzas){ case sprawdzenieRtc: //sprawdzenie czy moduł RTC działa if (! rtc.isrunning()) { lcd.setCursor(0,0); lcd.print("RTC is NOT running!"); } else { lcd.clear(); ustawCzas = ustawRok; //jeśli tak, ustawiamy rok } break; case ustawRok: //Co teraz? Jeśli odebrano 4 cyfry z klawiatury, to ... char rok [5]; //tblica do przechowywania roku sprintf(rok,"%4d",written.year()); lcd.setCursor(0,0); lcd.print(rok); ustawCzas = ustawMiesiac; break; case ustawMiesiac: //Co teraz? Jeśli odebrano 4 cyfry z klawiatury, to ... char miesiac [4]; //tablica do przechowywania miesiąca sprintf(miesiac,"/%4d",written.month()); lcd.setCursor(0,5); lcd.print(miesiac); ustawCzas = ustawDzien; break; case ustawDzien: [...] break; case godzina: rtc.adjust(DateTime(rok,miesiac,dzien,godzina,minuta,sekunda); lcd.clear(); Rtc(); if(klawisz == '*'){ //Ponowne ustawienie daty i godziny ustawCzas = sprawdzenieRtc; } break; } } void Rtc(void){ char bufor [11]; DateTime now = rtc.now(); if(aktualnyCzas - zapamietanyCzas >= 1000UL){ zapamietanyCzas = aktualnyCzas; sprintf(bufor,"%4d/%02d/%02d", now.year(), now.month(), now.day()); lcd.setCursor(0,0); lcd.print(bufor); sprintf(bufor,"%02d:%02d:%02d", now.hour(), now.minute(), now.second()); lcd.setCursor(0,1); lcd.print(bufor); } } W załączniku wrzucam zdjęcia jak to na razie wygląda. Prosiłbym o pomoc @ethanak jeśli byłoby to możliwe. Pozdrawiam Philip
  6. Sprawdź na pewno podłączenie wyprowadzeń czujnika. Ja tak też kiedyś miałem i dziwiłem się czemu Arduino wyświetla taką wysoką temperaturę, a błąd był w połączeniu.
  7. Gratuluję ciekawego projektu. Stałeś się chyba inspiracją dla mnie, żeby samemu coś podobnego zrobić do swojego teleskopu.
  8. Mam pytanie. Dlaczego w niektórych układach podczas tego kursu wejścia nieużywanych bramek scalaków podłączało się raz do masy, a raz do zasilania? Na początku w trzeciej części było napisane, że należy je podłączać do masy...
  9. W Arduino podczas wgrywania programu poprzednio wgrany program jest automatycznie usuwany.
  10. Policz klamry. W jednym miejscu jej brakuje, a w drugim jest ich aż nadto.
  11. Do przypisania numerów pinów diod i innych elementów używaj dyrektywy #define zamiast zmiennej int
  12. Ale poźniej doszedłem do tego samego miejsca Spróbuj zrobić, to co ci wyżej napisałem i napisz czy udało się wgrać program do Arduina.
  13. 20012game ostatnio miałem podobny problem. Też z Arduino Pro Mini. Akurat konwerter miałem inny, ale to nie w nim był problem, bo połączenie i wszystko było OK. Taka moja rada: sprawdź dostęp do folderu Arduino w Plikach programów. Nie wiem sam, ale u mnie dostęp do tego folderu zablokował się tak jakby z dnia na dzień. Później program wgrywałem już bez problemu, tak jak uprzednio. Sprawdź też gdzie zapisane masz biblioteki używane w kodzie, bo to też ma często związek z niedziałającym kodem programu. Mam nadzieję, że odpowiedź jest pomocna, daj znać czy problem został rozwiązany
  14. Jednak był problem z uprawnieniami folderu Arduino, ktore jakimś cudem zmieniły się "z dnia na dzień". Dzięki. Temat raczej zamknięty.
  15. Witam, Kupiłem niedawno konwerter USB-UART. Tydzień temu bez problemu wgrywałem za jego pomocą jakiekolwiek programy do Arduina Pro Mini (oryginalne). Dziś przy wgrywaniu programu do Arduina za pomocą tego kowertera napotkałem błąd. Dlatego stąd ten temat. Link do tego konwertera https://botland.com.pl/konwertery-usb-uart-rs232-rs485/2040-konwerter-usb-uart-ftdi-335v-na-przewod-usb.html java.io.IOException: Odmowa dostępu at java.io.WinNTFileSystem.createFileExclusively(Native Method) at java.io.File.createTempFile(File.java:2024) at processing.app.BaseNoGui.saveFile(BaseNoGui.java:908) at processing.app.SketchFile.save(SketchFile.java:287) at processing.app.Sketch.save(Sketch.java:138) at processing.app.SketchController.save(SketchController.java:344) at processing.app.Editor.handleSave2(Editor.java:2020) at processing.app.Editor.handleSave(Editor.java:2000) at processing.app.Editor.handleExport(Editor.java:2140) at processing.app.EditorToolbar.mousePressed(EditorToolbar.java:378) at java.awt.Component.processMouseEvent(Component.java:6530) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6298) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4522) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Odmowa dostępu Podejrzewałem, że błąd ten może mieć związek z zabezpieczonymi folderami przez Windowsa, ale patrząc we właściwościach dostęp do plików Arduino nie był nigdzie zablokowany. Niedość, że sama kompilacja trwała chyba z 5 min, to przez ten błąd nie da się zapisać sketcha. Może ktoś się spotkał z podobnym problemem i mógłby podzielić się swoim rozwiązaniem.
×
×
  • Utwórz nowe...