Arduino wi-fi czujniki, pompa wody

0

Witam

Ostatnio zacząłem projekt w embedded przy użyciu Arduino. Ogólnie rzecz biorąc to nie bardzo wiem jak to wszystko popodłączać. Jak podłącze jeden czujnik to ok, ale jak dodam do tego drugi to drugi działa natomiast pierwszy przestaje. Próbowałem na różne sposoby. Może ktoś będzie mógł mnie nakierować/podpowiedzieć. Ogólnie to z embedded jestem trochę zielony :)

Projekt ma wyglądać tak że arduino komunikuje się z serwerem w celu przesłania informacji z czujników oraz uruchomienia światła lub pompy wody. Serwer otrzymuje te dane i na ich podstawie stwierdza czy pompę/diodę włączyć czy też wyłączyć. Dane ze wszystkich czujników serwer zapisuje. Komunikację planuję RESTem natomiast nie wiem jak się do tego zabrać po stronie Arduino.

Sprzęt

Najbardzie mi zależy na tym jak to podpiąć aby wszystko działało. Kod opcjonalnie ale też nie zaszkodzi. Przydało by się też nakierowanie jak w takim Arduino ogarnąć komunikację z serwerem za pomocą REST lub inaczej.

Na zdjęciach podpięte dwa czujniki (temperatury, wilgotności).
Obecnie wygląda u mnie to tak:

IMG_20240114_010302.jpg
IMG_20240114_010316.jpg

1

Jeśli masz jakiekolwiek pojęcie o elektronice to "zabawa" z arduino jest stosunkowo prosta i łatwa. Podstawowa rzecz, jaką musisz zrozumieć to typy i przeznaczenie nóżek arduino. Powinieneś zacząć od przestudiowania teg https://content.arduino.cc/assets/Pinout-UNOwifirev2_latest.pdf
Teraz musisz wiedzieć dwie rzeczy

  1. ile i jakich portów potrzebujesz (to zależy od peryferii, które chcesz podłączyć, np. DS18B20 potrzebuje linii 1-wire
  2. ile i jakie porty ma twoje arduino (do niektórych interfejsów możesz podłączyć wiele peryferii (np. do 1-wire) a do innych tylko jedno

Potem musisz połączyć klocki i narysować sobie gdzie co ma być podłączone. Jak narysujesz to podłączasz. Polecam na początek podłączyć każdy czujnik/item osobno, napisać dla niego prosty program testowy (np. dla czujnika jego odczyt a dla diody/pompki coś jak włącz/wyłącz w pętli) żeby sprawdzić czy wybrana konfiguracja połączenia jest poprawna. Jak masz już wszystkie pojedyncze elementy przetestowane to zaczynasz to składać do kupy.

Dla mnie bardzo pomocne jest podłączenie także RS232 i przesyłanie kluczowych stanów aplikacji przez Serial.print / Serial.println

1
vakil napisał(a):

Witam

Ostatnio zacząłem projekt w embedded przy użyciu Arduino. Ogólnie rzecz biorąc to nie bardzo wiem jak to wszystko popodłączać. Jak podłącze jeden czujnik to ok, ale jak dodam do tego drugi to drugi działa natomiast pierwszy przestaje.

W mainstreamie Arduino nie znajdziesz dobrych wzorców. Tam wszystko jest nastawione na jednozadaniową pracę z jednym urządzeniem przez loop()
Mainstream mam na myśli 95%

Lekarstwo (podstawowe, level 1) idące w stronę synchronicznej obsługi wielu urządzeń, to odejście od fabrycznego loop() na rzecz programowania z funkcją milis()

Te 5%, które kuma, zna fundamenty mikroprocesora (rejestry, przerwania itd), to - stawiam tezę - ludzie którzy znali uP wcześniej, a Arduino dolożyli do swojego portfela kwalifikacji potem.

Ze sposobem myślenia "mainstream arduino" nie zostaniesz dobrym programistą mikroprocesorowym, najwyżej sprawnym copywriterem.

1

Arduino to bardzo prosty sprzęt masz max 3 timery w klasycznym Arduino. Często jest tak że biblioteki do różnych peryferii potrafią korzystać z tego samego timer'a lub przerwania. Wtedy efektem jest że coś "nie działa", a dowiedzieć tego się można tylko zgłębiając dokumentację danej biblioteki.

Być może jest też tak że nie konfigurujesz poprawnie biblioteki (ustawienie pinów IN/OUT)?

Bez kodu ciężko cokolwiek powiedzieć...

0

Proszę kod:

#define A0 A0
#define LM35 A5

int waterLevel;
int ledGreen = 13;

void setup() {
  // dioda wbudowana na plytce
  pinMode(LED_BUILTIN, OUTPUT);

  // dioda zielona
  pinMode(ledGreen, OUTPUT);

  // czujnik wilgotności gleby
  pinMode(A0, INPUT);
  Serial.begin(9600);
}

void loop() {
  waterLevel = 1023 - analogRead(A0);

  // digitalWrite(ledGreen, HIGH);
  // delay(500);
  // digitalWrite(ledGreen, LOW);
  // delay(500);

  if (waterLevel > 10) {
    digitalWrite(ledGreen, HIGH);
  } else {
    digitalWrite(ledGreen, LOW);
  }

  Serial.println(waterLevel);
  delay(1000);

  float temperatura = ((analogRead(LM35) * 3.5) / 1024.0) * 100;
  
  // Wypisywanie temperatury
  Serial.println("Aktualna temperatura: ");
  Serial.print(temperatura);
  Serial.print(" *C");
}
0

Ale dobra ogarnołem aby te dwa czujniki aby działały. Biorę się za trzeci. A powiedzcie mi tylko jak ma się tutaj sprawa z wi-fi i RESTem? Można w Arduino wystawić end Point?

1

coś tam na necie do endpointów w arduino jest.
Spojrzałem w sprzęt. Powiem tak lepiej znam avr w czystym C niż arduino ale czemu nie używasz przerwań? Wiem że w arduino można. Przerwanie np. od przetwornika adc jak zakończy pomiar, 1 wire z czujnikiem temp. to faktycznie będzie chyba tylko timer.

1 użytkowników online, w tym zalogowanych: 0, gości: 1