jpd Opublikowano 23 Lutego 2016 Opublikowano 23 Lutego 2016 Zaraz tam obcykany :P raptem ze 2 tygodnie się tym bawię... Tyle ze od 20 z góra lat pracuję jako admin linux/unix i programista choć generalnie jak widzę OOP i często gęsto dokumentacje do niego to mi się niedobrze robi. Vide słynna java "jest świetna bo ... działa na wszystkim" ... to tak jak seks analny jest super bo działa na każdym... Krótka analiza tego kodu : 1. Myślałem ze tylko ja pisze niechlujny kod 2. Nie bardzo rozumiem co robi Czujnik1 ... czyta potencjometr. i coś robi w zależności od jego ustawień ale co oprócz tego jest taka linijka : delay(200); // przerwa zależna od położenia potencjometru - Jak ona jest zależna od potencjometru ? Wg mnie jest tu coś strasznie narzeźbione w tym kodzie jak rozumiem (z elektroniką to u mnie jest mocno na bakier - wiem ze jest ). Twój opis jak rozumiem mówi ze zrobiłeś dzielnik napięcia żeby obniżyć napięcie z 10,5 do poniżej 5. Potem czytasz z pina wartość mierzoną i w zależności od tego dostajesz odpowiednie świecenie diód. Pytania pomocnicze : Mógłbyś podać tu następujące dane : 1. Ile akumulatorów testujesz ? 2. czy na pewno potrzebny CI ten potencjometr który nie wiadomo co robi - pomyśl ile razy będziesz to ustawiał i przestawiał ? - coś w podobnie do używania niezliczonej ilości złączek kabli w modelu - ja lutuję ile się da im mniej wtyczek tym lepiej. Tak samo tutaj moim zdaniem lepiej ustawić to w programowo, protestować jaka wartość jest ok zapisać, zapomnieć. Generalnie ten kod mi się nie podoba. to samo można zrobić w 5ciu linijkach na krzyż. I dodatkowo dołożyć to do mojego kodu powyżej to będziesz miał 2 w jednym.
Ircowiec Opublikowano 26 Lutego 2016 Autor Opublikowano 26 Lutego 2016 Dwa akumulatory 6v polaczone w 12v czyly jak jeden akumulator uporzadkowsny kod : int diodar = 10; int diodab = 11; int diodag = 12; int potPin = 0; int czujnik1Pin = 5; int czujnik2Pin = 6; int pot; int Czujnik2; int Czujnik1; int przerwa; int buzzer = 8; unsigned long led_time = millis() + 10000; byte led_state = LOW; void setup() { pinMode(diodar, OUTPUT); pinMode(diodab, OUTPUT); pinMode(diodag, OUTPUT); digitalWrite(diodab,HIGH); digitalWrite(diodag,HIGH); digitalWrite(diodar,HIGH); pinMode(buzzer, OUTPUT); Serial.begin(9600); pot = analogRead(potPin); unsigned long time = millis(); if(pot>697){ digitalWrite(diodag, LOW); delay(8000); { digitalWrite(diodag,HIGH); } } } void loop() { pot = analogRead(potPin); Czujnik1 = analogRead(czujnik1Pin); Czujnik2 = analogRead(czujnik2Pin); //wartosc 9,9-627, 10,5v- 727, Serial.println(pot); if(pot>657 && pot<697){ digitalWrite(diodar, LOW); } if( pot>697){ digitalWrite(diodar, HIGH);} if(pot<657){ digitalWrite(diodar, LOW); digitalWrite(buzzer,HIGH); delay(200); digitalWrite(diodar, HIGH); digitalWrite(buzzer,LOW); delay(200); } if (Czujnik1 > 100) { digitalWrite(diodab, LOW); digitalWrite(buzzer,HIGH); delay(200); digitalWrite(diodab, HIGH); digitalWrite(buzzer,LOW); delay(200); } if ( Czujnik2 > 100) { digitalWrite(diodab, LOW); digitalWrite(buzzer,HIGH); delay(200); digitalWrite(diodab, HIGH); digitalWrite(buzzer,LOW); delay(200); } }
Ircowiec Opublikowano 26 Lutego 2016 Autor Opublikowano 26 Lutego 2016 aaa Jacku co do oświetlenia to jest trochę skomplikowane Power Led 3W Napięcie pracy: 3,2V - 3,6V Prąd przewodzenia: 300-750mA Power Led 3W IR Napięcie pracy: 1,4V - 1,6V Prąd przewodzenia: 350-750mA te diody pracuja na dwóch przetwornicach DC-DC ale oświetlenie nawigacyjne to 12 diód na rezystorach pod 12v i oświetlenie komór to 4 diody na rezystorach na 12v skonfigurowane są na dwóch przełącznikach 3 pozycyjnych jeden przełącznik obsługuje Power led 3w i IR drugi przełącznik diody led wszystko załączane niezależnie czy na arduino da sie tak to skonfigurować ?
jpd Opublikowano 26 Lutego 2016 Opublikowano 26 Lutego 2016 Generalnei arduino nie pociągnie takich prądów ani 12V napięć. Ale Mój program daje CI 8 niezaleznych sygnałów 5V (włączone ) 0V wyłączone. Wszystkie możliwe kombinacje (2^8). Łukaszu nadal nie napisałeś co ten program ma robić i co pokazywać ( jak to jest jakby sprawa wtórna), gdyż wcześniejszego wywodu nie zrozumiałem
Ircowiec Opublikowano 26 Lutego 2016 Autor Opublikowano 26 Lutego 2016 Jacek program ma monitorować stan naładowania akumulatorów, jak napięcie akumulatorów jest powyżej 10,5v to zaświeca się zielona dioda i gaśnie po 8 sek , jeżeli napięcie akumulatora spadnie poniżej 10,5v to zaświeca się czerwona dioda i świeci się cały czas , jeżeli napięcie spadnie jeszcze niżej, poniżej 9,9v czerwona dioda zaczyna migać i buzzer zaczyna piszczeć . Oprócz tego zamontowane są dwa detektory wody które też obsługuje arduino , po pojawieniu się wody zaczyna migać niebieska dioda i buzzer wyje i to chyba na tyle na chwile obecna co robi arduino . Mam nadzieje że teraz zrozumiałeś
jpd Opublikowano 26 Lutego 2016 Opublikowano 26 Lutego 2016 No teraz mniej więcej tak. rozumiem ze jeśli chodzi o napięcie z au to podawane jest do analoga 5V przez jakiś sensowny dzielnik napięcia czy jakoś tak zgadza się ?
Ircowiec Opublikowano 26 Lutego 2016 Autor Opublikowano 26 Lutego 2016 Tak przez analog 5v pin A0 , R1 R2 R3 to rezystory 10kohm
jpd Opublikowano 26 Lutego 2016 Opublikowano 26 Lutego 2016 Coś tam popełniłem : // Obydwa czujniki poziomu wody podłaczyć można do jednego wejscia D2 // Jeśli koniecznie chcesz podłączyć je do odzielnych wyjść to naley je podżłaczyć do D2 i D3 // i powielić z inna nazwą funkcję waterOnBoard np. waterOnBoard_03 i ustawić na niej kolejne przerwanie // w funkcji init ale to dodatkowo wymaga przeróbki smych funkcji przerwać do sprawdzania krzyżowego. #define WATER_SIGNAL_IN 2 //Pin for water signal interupt Digital 2 #define BATERY_PIN A0 //PIN to check battery status ANALOG PIN 0 #define BUZZER 8 #define DIODA_R 10 #define DIODA_B 11 #define DIODA_G 12 #define BATTERY_OK 697 #define BATTERY_LOW 657 //********************************************************************* boolean waterOnBoardVar = false; //********************************************************************* void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(WATER_SIGNAL_IN), waterOnBoard, CHANGE); if (analogRead(BATERY_PIN) >= BATTERY_OK) { digitalWrite(DIODA_G, HIGH); delay (8000); digitalWrite(DIODA_G, LOW); } } //********************************************************************** void loop() { int batteryStatus; // Stan krytyczny woda w łodce - pozostale parametry sa nie istotne. // stąd nie sa sprawdzane bo i po co i tak trzeba ratować łodkę za // wszelką cene if (waterOnBoardVar) { digitalWrite(DIODA_B, LOW); digitalWrite(BUZZER, HIGH); delay(200); digitalWrite(DIODA_B, HIGH); digitalWrite(BUZZER, LOW); delay(200); } // Brak wody w łódce sprawdzany jest stan akumulatora. else { batteryStatus = analogRead(BATERY_PIN); Serial.println(batteryStatus); if (batteryStatus < BATTERY_LOW) { digitalWrite(BUZZER, HIGH); digitalWrite(DIODA_R, LOW); delay(200); digitalWrite(DIODA_R, LOW); delay(200); } else if (batteryStatus < BATTERY_OK) { digitalWrite(DIODA_R, LOW); delay (1000); } else { digitalWrite(DIODA_R, HIGH); delay (1000); } } } //************************************************************************** void waterOnBoard () { if (digitalRead(WATER_SIGNAL_IN) == HIGH) { waterOnBoardVar = true; } else { waterOnBoardVar = false; } } Powinno byc lepiej, sprawdź komentarze. Będziesz musiał ciut inaczej czujniki wody podpiąć .. wg mnie najlepiej do jednego złącza - D2, jeśli koniecznie chcesz do 2ch to nie będzie problemu ale więcej się nie da - Nano ma tylko 2 przerwania.
Ircowiec Opublikowano 28 Lutego 2016 Autor Opublikowano 28 Lutego 2016 Czujniki mogą być do jednego i tak nie mam komunikacji lewa prawa komora ma wyć alarm jak pojawi sie jakas woda obojetnie na ktorym czujniku
jpd Opublikowano 28 Lutego 2016 Opublikowano 28 Lutego 2016 To jeśli tak to przełącz czujniki wody oba na D2, sprawdzanie akku na A0 i zobacz czy dobrze działa mój skrypt.
Ircowiec Opublikowano 28 Lutego 2016 Autor Opublikowano 28 Lutego 2016 Jacku Twój program nie działa po wgraniu nic się nie dzieje gdzieś jest błąd w programie jedna uwaga czujniki wody sa analogowe z programu wyczytałem (jak dobrze zrozumiałem) że jak będzie woda albo z czujnikami coś nie tak cala reszta jest wyłączana czujniki maja pierwszeństwo
jpd Opublikowano 28 Lutego 2016 Opublikowano 28 Lutego 2016 // Obydwa czujniki poziomu wody podłaczyć można do jednego wejscia D2 // Jeśli koniecznie chcesz podłączyć je do odzielnych wyjść to naley je podżłaczyć do D2 i D3 // i powielić z inna nazwą funkcję waterOnBoard np. waterOnBoard_03 i ustawić na niej kolejne przerwanie // w funkcji init ale to dodatkowo wymaga przeróbki smych funkcji przerwać do sprawdzania krzyżowego. #define WATER_SIGNAL_IN 2 //Pin for water signal interupt Digital 2 #define BATERY_PIN A0 //PIN to check battery status ANALOG PIN 0 #define BUZZER 8 #define DIODA_R 10 #define DIODA_B 11 #define DIODA_G 12 #define BATTERY_OK 697 #define BATTERY_LOW 657 //********************************************************************* boolean waterOnBoardVar = false; //********************************************************************* void setup() { Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(WATER_SIGNAL_IN), waterOnBoard, CHANGE); if (analogRead(BATERY_PIN) >= BATTERY_OK) { digitalWrite(DIODA_G, HIGH); digitalWrite(13, HIGH); //dodatoko swieci dioda L arduino Serial.println("Akku OK"); delay (8000); digitalWrite(13, LOW);//dodatoko gasnie dioda L arduino digitalWrite(DIODA_G, LOW); } } //********************************************************************** void loop() { int batteryStatus; // Stan krytyczny woda w łodce - pozostale parametry sa nie istotne. // stąd nie sa sprawdzane bo i po co i tak trzeba ratować łodkę za // wszelką cene if (waterOnBoardVar) { Serial.println("WODA w lodce"); digitalWrite(13, HIGH); //dodatoko swieci dioda L arduino digitalWrite(DIODA_B, LOW); digitalWrite(BUZZER, HIGH); delay(200); digitalWrite(13, LOW); //dodatoko gasnie dioda L arduino digitalWrite(DIODA_B, HIGH); digitalWrite(BUZZER, LOW); delay(200); } // Brak wody w łódce sprawdzany jest stan akumulatora. else { batteryStatus = analogRead(BATERY_PIN); Serial.println(batteryStatus); if (batteryStatus < BATTERY_LOW) { Serial.println("Battery_LOW"); digitalWrite(13, HIGH); //dodatoko swieci dioda L arduino digitalWrite(BUZZER, HIGH); digitalWrite(DIODA_R, LOW); delay(200); digitalWrite(13, LOW); //dodatoko gasnie dioda L arduino digitalWrite(DIODA_R, HIGH); delay(200); } else if (batteryStatus < BATTERY_OK) { Serial.println("Battery_MIDDLE"); digitalWrite(DIODA_R, LOW); digitalWrite(13, HIGH); //dodatoko swieci dioda L arduino delay (1000); } else { digitalWrite(DIODA_R, HIGH); digitalWrite(13, LOW); //dodatoko gasnie dioda L arduino Serial.println("Battery_OK"); delay (1000); } } } //************************************************************************** void waterOnBoard () { if (digitalRead(WATER_SIGNAL_IN) == HIGH) { Serial.println("WODA!!!!"); waterOnBoardVar = true; } else { waterOnBoardVar = false; } } Kod działa prawidłowo - testowałem; Dorzuciłem trochę kodu debugującego + obsluge diody kontrolnej arduino. Podłączenie : Akku -A0 Czujniki wody - D2 - jeśli są analogowe to powinny dawać bodajże 4.8V żeby na nóżkę wszedł stan WYSOKI. Przerwanie reaguje na zmiane stanu z wysokiego na niski i odwrotnie. Brzęczyk - D8 Dioda R - D10 Dioda B -D11 Dioda G -D12 Czy kod działa podłącz konsolę do arduino i pozwieraj kablem wejścia A0 i D2 z 5V. Na konsoli dostaniesz odczyty tego co robi program. Jedna uwaga zdziwiłem się ale w Twoim programie było ze diody zapalają się na stan niski na nóżce i tak tez powieliłem teraz.
Ircowiec Opublikowano 1 Marca 2016 Autor Opublikowano 1 Marca 2016 Niestety Jacku ale coś jest nie tak po wgraniu Twojego kodu nic się nie dzieje po wgraniu mojego śmiga , gdzieś jest jakiś błąd na konsoli pokazuje zmiane stanu akumulatora ale nie swiecią RBG nie odzywa się buzzer , czujnik wody po podanu wilgoci na nie nic się nie dzieje , RBG mają wspólny minus
jpd Opublikowano 1 Marca 2016 Opublikowano 1 Marca 2016 1. czy zmieniłeś podłączenie czujników wilgoci zgodnie z opisem ? 2. Czy przy podaniu wody daje ok 4.8V ? 3. Jakiego arduino używasz ? 4. Przerwania (czujniki wilgoci ) w arduino nano działają tylko i wyłącznie na D2 i D3 na innych działać nie będą. Program generalnie działa prawidłowo bo dokładnie go testowałem ale bez znajomości podłączeń i hardware niewiele mogę więcej zrobić.
Ircowiec Opublikowano 1 Marca 2016 Autor Opublikowano 1 Marca 2016 1. Na razie tylko jeden czujnik pod D2 2. Tu trzeba zwiększyć czułość czujników są w takim miejscu że nie mogę je obecnie zalać wodą i w razie awarii też nie mogę czekać na pełne zalanie tylko wcześnie reagować (na pośliniony palec podało ok 3v ) 3. Arduino nano 3.0 atmega328 4. Te czujniki na starym programie pod A5 i A6 działały bardzo dobrze Przy włączeniu łódki powinna oświecić się zielona dioda informująca o naładowanym aku , nie oświeca się zresztą jak żaden inny kolor, Dla testu zrób może tak aby czujniki nie wyłączały całej reszty i sprawdzę jak pozostałe funkcje będą działać skupimy się na czujnikach
jpd Opublikowano 1 Marca 2016 Opublikowano 1 Marca 2016 Jak to są czujniki analogowe to kichach .. nie uruchomią przerwania - ten element trzeba zmienić i cześć. Działanie programu możesz dokłądnie sprawdzić za pomocą konsoli. wszystkie działania są tam wyświetlane. Brak sygnały +4,8V na D2 => brak uruchomienia przerwania=> brak blokady programu. Cały czas leci pętla sprawdzająca akumulator. Zwróć uwagę na komunikaty na konsoli + na miganie diody na arduino (D13).
Ircowiec Opublikowano 1 Marca 2016 Autor Opublikowano 1 Marca 2016 No to lipa czujniki są zamontowane nie będę ich zmieniał. Jacku prawdę mówiąc mało istotne co pokazuje konsola to ma działać w praktyce nie w konsoli a w praktyce lipa , od początku było wiadomo że to czujniki analogowe i były podłączone pod piny analogowe . Szkoda że Twój skrypt nie wypalił i nie rozwiązał mojego problemu , w moim programie dam podwójne sprawdzanie akumulatora zanim program da sygnał a napięcie spróbuję trochę ustabilizować kondesatorem.
Ircowiec Opublikowano 4 Marca 2016 Autor Opublikowano 4 Marca 2016 Ludziska może mi ktoś podać orginalne ustawienie alarmów orginalnego akumulatora z taranis plus V pełnego naładowania i V rozładowania do jakiego napiecia bezpiecznie można zjechac ? Dzieki
Rekomendowane odpowiedzi