• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
2 komparatory + mala logika
#1
Witam wszystkich.

Ucze sie dalej -a ile zakumam to potem to utrwalam.

Sytuacja mnie wzmusila zeby znow poprosic o szybka akcje naszych specjalistow.

Zrobilem uklad elektryczny do odzysku ostatnich dechow solara nawet po zachodzie slonca.

A na arduino chcialem zrbobic taki malutki kontroler tego : wykorzystujacy wejscia analogowe .

Wiem ze dla wiekszosci forumowiczow to zadanie na jedno posiedzenie Smile

A o co chodzi:

jedno wejscie analogowe mierzy napiecie dolne wiec5 volt .i daje jedynke na wyjsciu cyfrowym kiedy jest ponizej pieciu volt

drugie wejscie analogowe mierzy napiecie gorne 13V i daje jedynke kiedy napiecie jest wyzsze niz 13V - na drugim wyjsciu cyfrowym.

i do tego troszke logiki :

kiedy pierwsze "jedynka" - to wyjscie 3 daje 0. Kiedy drugie jedynka , to czeka az dostanie pierwsze "jedynka"a w tym casie wyjscie 3 daje "jeden". A kiedy osiagnie pierwszy znow "jedynke" to sekwencja sie powtarza Smile

Mysle ze to jest zrozumiale Smile

Zycze milego wtorku Smile
 
Odpowiedź
#2
Na początek przestroga żebyś przypadkiem tych 13V bezpośrednio pod analoga nie podpiął Smile Pomiar napięcia na wejściu analogowym masz w zakresie 0 - 5V i jeżeli chcesz mierzyć wartości większe od 5V to coś dodatkowo musi się w tym obwodzie znaleźć.

1) wejście analogowe jako max. ma 5V i mikrokontroler taką wartość widzi jako 1023. Czyli teoretycznie jak napiszesz:
Kod:
if (analogRead(INPUT_PIN_1) < 1023) {
   digitalWrite(OUTPUT_PIN_1, HIGH);
}
będziesz miał to, co planujesz. Niestety dokładność będzie mała i to 1023 będziesz musiał zmniejszyć o jakąś wartość i nie będziesz wtedy miał zadziałania wyjścia nr 1 poniżej 5V tylko np. 4,87V.
Dla uniknięcia takiego zjawiska możesz dać dzielnik napięcia i z 5V zrobić 4V i to wrzucać na wejście analogowe. Stracisz troszkę rozdzielczości pomiaru.

2) jeżeli chodzi o 13V - tutaj zmniejszenie tego napięcia do tolerowanych przez Arduino wartości jest koniecznością. W zależności od krotności zmniejszenia napięcia (np. z 13V robisz 13/3 czyli 4,33V) odpowiednio dobierasz wartość w ifie z analogRead:
Kod:
if (analogRead(INPUT_PIN_2) < X) { // gdzie X to obliczona wartość - dla 4,33V będzie 4,33/5 * 1023 czyli ok 887)
   digitalWrite(OUTPUT_PIN_2, HIGH);
}

Jeżeli zaś chodzi o wysterowanie trzeciego wyjścia:
Kod:
if (digitalRead(OUTPUT_PIN_1)) {  // gdy wyjście 1 w stanie HIGH
   digitalWrite(OUTPUT_PIN_3, LOW);  // ustaw pin wyjscia 3 w stan LOW
}
else if (digitalRead(OUTPUT_PIN_2)) {  // gdy wyjście 1 nie w stanie HIGH i wyjście 2 w stanie HIGH
   digitalWrite(OUTPUT_PIN_3, HIGH); // ustaw pin wyjścia 3 w stan HIGH
}
else {
   digitalWrite(OUTPUT_PIN_3, LOW)); // tu musisz wybrać jaki stan ma mieć wyjście 3 gdyby dwa pozostałe były LOW
}
Jak coś jest niejasne pisz.
 
Odpowiedź
#3
"Na początek przestroga żebyś przypadkiem tych 13V bezpośrednio pod analoga nie podpiął Smile Pomiar napięcia na wejściu analogowym masz w zakresie 0 - 5V i jeżeli chcesz mierzyć wartości większe od 5V to coś dodatkowo musi się w tym obwodzie znaleźć.

1) wejście analogowe jako max. ma 5V i mikrokontroler taką wartość widzi jako 1023. Czyli teoretycznie jak napiszesz:
Kod:
if (analogRead(INPUT_PIN_1) < 1023) {
digitalWrite(OUTPUT_PIN_1, HIGH);"
}


Dziekuje za porade Smile zrobie dzielnik napiecia na opornikach. Te wejscia sa chyba bardzo wysoko omowe.
 
Odpowiedź
#4
Witam z rana Smile
Laczylem to w rozne strony , niestety bezskutecznie
a tu czsu malo Sad

Compiler wywala ciagle jakies bledy ktorych jeszcze nie kumam jak sie nalezy.

I juz nie wiem co dalej...

Poukladalem to tak:
choc nie wiem czy to wogole dobrze

Kod:
void setup() {
//tu chyba musi cos jeszcze byc .
}

void loop() {

if (analogRead(INPUT_PIN_1) < 1023) { //podzial a/d rozumie
  digitalWrite(OUTPUT_PIN_1, HIGH);
}
if (analogRead(INPUT_PIN_2) < X) { // gdzie X to obliczona wartość - dla 4,33V będzie 4,33/5 * 1023 czyli ok 887)
  digitalWrite(OUTPUT_PIN_2, HIGH)}
}
if (digitalRead(OUTPUT_PIN_1)) {  // gdy wyjście 1 w stanie HIGH
  digitalWrite(OUTPUT_PIN_3, LOW);  // ustaw pin wyjscia 3 w stan LOW
}
else if (digitalRead(OUTPUT_PIN_2)) {  // gdy wyjście 1 nie w stanie HIGH i wyjście 2 w stanie HIGH
  digitalWrite(OUTPUT_PIN_3, HIGH); // ustaw pin wyjścia 3 w stan HIGH
}
else {
  digitalWrite(OUTPUT_PIN_3, LOW)); // tu musisz wybrać jaki stan ma mieć wyjście 3 gdyby dwa pozostałe były LOW
}
}
Kaczakat: Wstawiłem kod programu w znaczniki kod.
lad compilatora:
Compilation error: 'INPUT_PIN_1' was not declared in this scope
 
Odpowiedź
#5
Przed sekcją setup powinieneś zdefiniować, zadeklarować co to jest INPUT_PIN_1, X, itd. Piny uC są domyślnie wejściami , więc w setup nic tu więcej robić nie trzeba, można odczytywać funkcjami Arduino stan pinów cyfrowych i analogowych, ale do funkcji dititalWrite trzeba dodać informcję, że ten pin OUTPUT jest OUTPUT.
W Arduino IDE masz przykłady, miganie led, odczyty analoga, przyciski, otwórz te programy, zrób swoje wersje, pomigaj, pomodyfikuj, obyj się z tematem.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#6
Witam Smile



Ciezko mi dojsc do tego co teraz zrobic, dlatego ze wogole nie mam pojecia o co chodzi z tymi nawiasami , zawiasami, klamrami itd. itp.

Moze by Pomogl ktos ulzyc w tym cierpieniu Wink

a to- co wyprodukowalem :

void
  setup() {


  pinMode(4, INPUT) ;
  pinMode(16, OUTPUT)  ;
  pinMode(17, OUTPUT) ;
  pinMode(18, OUTPUT) ;
}

void loop() {

  if
    (analogRead(4) < 791) {
    digitalWrite(16, HIGH) ;
    }

else

  if
    (analogRead(4) > 810) {
    digitalWrite(17, HIGH) ;
  }


if (digitalRead(16)) {
   digitalWrite(18, LOW);
}
else if (digitalRead(17)) {
   digitalWrite(18, HIGH);
}
else {
   digitalWrite(18, HIGH); // tu musisz wybrać jaki stan ma mieć wyjście 3 gdyby dwa pozostałe były LOW
}
}


Prosze mi powiedziec co dokladnie oznacza pin?

   

np. input  : 26, 4, czy 10 ?
i np. output : 27 czy 16 ?
 
Odpowiedź
#7
Jasne, ulgą w cierpieniu jest kurs Arduino, online, darmowy.
https://forbot.pl/blog/kurs-arduino-pods...rsu-id5290
Albo możesz chodzić po forach i prosić o indywidualny kurs i wyjaśnienia, które już czekają w linku powyżej.
PIN nic nie znaczy, wszystko zależy od kontekstu. Zazwyczaj pin to drucik wystający z płytki.
W ESP jest to bardziej pomieszane, dlatego na początek lepiej użyć UNO/NANO.
W przypadku załączonego obrazku odwołanie do pinu 26 będzie robić coś na pinie GIOP26, albo nie będzie nic robić. Niektóre piny są wyłączone z użycia, jak np. 6-11. Kolumny najbliżej płytki ESP32 ułożone ładnie po kolei to piny fizyczne płytki i nie mają żadnego znaczenia w programie, jest tu też błąd, bo 2x jest pin 20 i nie ma 21.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#8
Metodą prób i błędów , doszlem do tego - Sam Smile
Mam kilka kursow z neta ktore mi pomogly.
Wszystko działa Smile
a zrobiłem to tak:

#define out_1 16
#define out_2 17
#define out_3 18
#define in_1 4

void
setup() {
pinMode(in_1, INPUT) ;
pinMode(out_1, OUTPUT) ;
pinMode(out_2, OUTPUT) ;
pinMode(out_3, OUTPUT) ;
}

void loop() {
if
(analogRead(in_1) < 409)
{digitalWrite(out_3, LOW); }
if
(analogRead(in_1) > 500) {
digitalWrite(out_3, HIGH) ;
}
}

zmniejszylem zakres napiec poniewaz teraz jest noc i sie condensatory bardzo dlugo laduja.

Ten uklad ma tez bloototha , ale zeby ogladac napiecie na smartfonie to wysza szkola jazdy pewnie jest , i jeszcze do tego trzeba apke miec ktora to wyswietli .
No nic , noc jest wiec pomarzyc mozna. Smile

Dziekuje wszystkim za pomoc Smile
 
Odpowiedź
#9
Jak masz telefon z Androidem to jest aplikacja typu terminal, ja mam np. tą https://play.google.com/store/apps/detai...l=pl&gl=US
Od strony ESP kod ma mniej linijek niż doświadczony stolarz palców:
https://randomnerdtutorials.com/esp32-bl...duino-ide/
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#10
A tak wyglada juz 100 % dzialajaca kontrola ladowania , i dopisany ten kod do bloototh.

Kompilator to wszystko kompiluje bez bledu ale telefon jak narazie esp nie widzi.

Kod:
#define out_1 16
#define out_2 17
#define out_3 18
#define in_1  4

#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
BluetoothSerial SerialBT;
void
  setup() {
Serial.begin(115200);
  SerialBT.begin("ESP32test"); //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");

  pinMode(in_1, INPUT) ;
  pinMode(out_1, OUTPUT)  ;
  pinMode(out_2, OUTPUT) ;
  pinMode(out_3, OUTPUT) ;
}

void loop() {

if (Serial.available()) {
    SerialBT.write(Serial.read());
  }
  if (SerialBT.available()) {
    Serial.write(SerialBT.read());
  }
  delay(20);
  if
    (analogRead(in_1) < 3160)
  {digitalWrite(out_3, LOW);  }
if
  (analogRead(in_1) > 3614)
  { digitalWrite(out_3, HIGH) ;  }
}

To jest dokladnie ten esp co mam:


.pdf   esp32-wroom-32_datasheet_en.pdf (Rozmiar: 413.4 KB / Pobrań: 3)
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości