Skocz do zawartości

Sterownik oparty o ADRUINO


seba222

Rekomendowane odpowiedzi

Mija właśnie rok, od zakupu naszej pierwszej przyczepy i nie ukrywam, że przygoda ta wciągnęła nas na całego. Większość z nas w swojej przyczepie cały czas coś ulepsza - tak samo robię i ja. Niedawno wpadł mi do głowy ciekawy pomysł (a zaczęło się jak zwykle to bywa na wyjeździe i rzuconego luźno "wyzwania"). Postanowiłem wykonać sterownik, który umożliwił by sterowanie, kontrolowanie i odczytywanie różnych informacji / urządzeń.

Jak postanowiłem, tak też przystąpiłem do realizacji zadania. Na dzień dzisiejszy projekt wygląda tak:

s1.jpg

Co to potrafi:
- uruchamia się :P (taki żarcik)
- odczytuje 5 temperatur (wewnątrz przyczepy, na zewnątrz, w lodówce, w zamrażalniku, i za lodówką) - nie stoi nic na przeszkodzie, żeby odczytywać więcej lub mniej temperatur.
- w zależności od temperatury za lodówką włącza od 1 - 3 wiatraków wymuszających obieg powietrza
- w zależności od temperatury (dowolnej) uruchamia dodatkowy wentylator lub inne urządzenie zasilane 12V o poborze prądu mniejszym niż 1A
- wyświetla odczytane temperatury na wyświetlaczu, pokazuje stan wiatraków
Na chwilę obecną potrafi tyle, ale możliwości rozbudowy są wręcz imponujące.

W planach jest:
- informacja o zapełnieniu się zbiornika szarej wody z alarmem
- informacja o stanie napełnienia zbiornika czystej wody
- informacja o stanie napełnienia butli gazowej (temat jak dla mnie bardzo trudny)
- inne bliżej nieokreślone :)

Dodam, że jestem elektronicznym laikiem i większość rzeczy robiłem pierwszy raz (trawienie płytki, programowanie sterownika)Traktuję ten projekt jako zabawę i naukę w jednym.

Jeżeli są chętni, to opiszę tutaj cały proces budowy łącznie ze sposobem wykonania płytki, kodem programu, kosztami itp.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 32
  • Dodano
  • Ostatniej odpowiedzi

Top użytkownicy w tym temacie

Top użytkownicy w tym temacie

Opublikowane grafiki

Tak tak :yes:  :yes:  :yes: ! Opisuj po kolei :blagac: . Ja akurat się przymierzam do czegoś podobnego. Tylko że w moim projekcie wszystkie wiatraczki za lodówką (przy kratce wylotowej 2 a przy radiatorze 4 sztuki) zmieniałyby prędkość nawiewu/wywiewu w zależności od temperatury. Jeszcze myślałem o wyciągu w  w oknie dachowym. Do tego wszystkiego chciałem zrobić 3 sterowniki a tu proszę, jedno super urządzonko. Czasami warto polenichować 

Odnośnik do komentarza
Udostępnij na innych stronach

Lista potrzebnych elementów:

- ARDUINO UNO - może być klon (ja mam klona) - około 35 zł

- Wyświetlacz alfanumeryczny z interfejsem I2C, 4 linijki po 20 znaków - około 30 zł

- wiatraki komputerowe 12 cm wolnoobrotowe - 3 szt x 15zł (należy sprawdzić, czy się zmieszczą)

- L293D mostek H - 2 szt. x 3 zł (każdy mostek może sterować 2 wiatrakami niezależnymi)

- przewody łączeniowe M/M, Ż/Ż, M/Ż - po kilkanaście sztuk - około 10 zł

- GOLDPIN 40 szt. - 1 zł.

- termometr cyfrowy ds18b20 - 5 szt x 4 zł (lub tyle, ile chcemy mierzyć temperatur)

- gilzy do termometru (rurki stalowe / miedziane) - 5 szt. x 2 zł

- mikrostyczniki - 3 szt. x 2 zł

- rezystor 4,7 kOm - 1 szt x 1 zł

- laminat dwustronny - 1 szt. x 10 zł

- środek trawiący - około 5 zł

- papier kredowy A4 - 2 szt. x 20 gr. (lub termotransferowy, ale ten pierwszy łatwiej dostać)

- cyna, kalafonia, kabel skrętka komputerowa, lutownica, klejarka + sztyfty klejące, rękawiczki gumowe, drobne narzędzia, wiertarka (lub multiszlifierka), wiertła 1 mm

- komputer z USB

- PIWO w ilościach dużych :)

 

Łącznie dało mi to kwotę około 200 zł.

 

Najważniejszy jest zakup samego sterownika, czyli ARDUINO. Ja mam klona Arduino UNO (najtańszy) i działa. Po zakupie zestawu uruchomieniowego (tym własnie jest Arduino), należy ściągnąć i zainstalować kompilator oraz sterowniki - opis tego powinien być przy samym sprzęcie, gdyż są dwa konkurencyjne środowiska. Więcej na ten temat oraz na temat programowania w Arduino znajdziecie pod tym linkiem:

 

http://forbot.pl/blog/artykuly/programowanie/kurs-arduino-w-robotyce-1-wstep-id936

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

CZĘŚĆ II

 

Skoro napracowaliśmy się klikając i zamawiając części, należało by zająć się czymś konkretnym. Nie ukrywam, że płytkę trawiłem pierwszy raz w życiu, a do tego dwustronną, więc doświadczenie nie do zapomnienia. Udało się za pierwszym razem, więc jestem z siebie dumny :)

 

Zaczynamy od wydrukowania na papierze błyszczącym (glosy) schematu płytki na drukarce LASEROWEJ - w załączeniu są pliki pdf. Dla tych, co chcą coś pozmieniać, załączam plik programu PCB Express. Pierwszą stronę płytki drukujemy w lustrzanym odbiciu (opcja drukarki), drugą normalnie. Po wydrukowaniu, obydwie kartki składamy wydrukiem do siebie i pod światło sprawdzamy, czy pola się ze sobą zgrywają.jeżeli tak, to na brzegach kartek zszywamy aby się nam nie przesunęło. Tak przygotowane kartki odkładamy.

 

Bierzemy laminat dwustronny i przycinamy do pożądanego wymiaru - najlepiej około 1 cm ponad planowany druk z każdej strony. Boki płytki szlifujemy papierem ściernym, aby nie były ostre, a rogi zaokrąglamy. Myjemy laminat w ciepłej wodzie z płynem do naczyń. Po umyciu, szlifujemy obydwie strony laminatu papierem wodnym o granulacji 800 - 1000 i myjemy jeszcze raz. Suszymy ręcznikiem papierowym a następnie myjemy spirytusem obydwie powierzchnie. Od tego czasu płytki nie dotykamy już palcami, jedynie chwytamy za brzegi.

 

Oczyszczoną i suchą płytkę wkładamy pomiędzy wcześniej wydrukowane kartki i zszywamy ciasno dookoła, tak, aby się nam nie przesunęła, sprawdzając jednocześnie, czy wydruk nie wystaje poza nią.

 

Teraz można otworzyć piwo, bo pierwszy etap za nami :)

 

Przygotowujemy żelazko, nastawiając na temperaturę trochę powyżej połowy skali. Przygotowaną prasowankę kładziemy na np. drewnianej desce do krojenia (ważne, aby była powierzchnia równa) i dociskamy nagrzanym żelazkiem przez około 2 minuty. Następnie płytkę odwracamy i czynność powtarzamy. Należy uważać, aby płytka nie poruszyła się względem wydruku. Po tym odwracamy płytkę jeszcze raz i przez 7 minut prasujemy środkową częścią żelazka każdą ze stron równomiernie dociskając. Ponieważ używamy jednej ręki, w drugiej może znaleźć się puszka z fajnym napojem. Jeżeli wszystko poszło OK, to cały toner mamy już na płytce laminatu.

 

Przygotowujemy roztwór ciepłej wody i proszku do prania i wrzucamy tam naszą prasowankę na około 5 minut - zmiękczy to papier i ułatwi jego usunięcie. Po usunięciu papieru myjemy płytkę wodą z płynem do naczyń i sprawdzamy ciągłość ścieżek oraz, czy nie pozostały jakieś kawałki papieru. Wszelkie niedociągnięcia można poprawić markerem chemoodpornym do kupienia w sklepach z elektroniką.

 

Teraz należy przygotować roztwór trawiący, w zależności od tego, jaki posiadamy. Ważne, aby miał temperaturę około 45 - 50 stopni i wrzucamy do niego płytkę. UWAGA - ROZTWÓR TEN JEST ŻRĄCY!

Płytkę plastikową pincetą lub łyżeczką odwracamy co chwilę oraz ruszamy nią, do czasu wytrawienia całości. 

 

Efekt przed trawieniem:

 

 

s6.jpgs7.jpg

 

Podczas trawienia:

 

 

s8.jpg

 

I po trawieniu i myciu:

 

 

 

s9.jpgs10.jpg

 

Po wytrawieniu, idziemy do żony (dziewczyny, mamy itp.) i ładnie prosimy o zmywacz do paznokci i waciki kosmetyczne, pod żadnym pozorem nie mówiąc po co. Wylewamy trochę zmywacza na płytkę i zmywamy toner wacikami. Następnie myjemy płytkę w ciepłej wodzie z płynem do naczyń i delikatnie szlifujemy papierem ściernym.

 

Na tym etapie, możemy jeszcze raz powtórzyć prasowanie, nanosząc napisy na płytkę - ja tego nie zrobiłem. 

 

Bierzemy wiertarkę i wiertło 1 mm i wiercimy całą płytkę, a większym wiertłem otwory w rogu  płytki (montażowe). 

Po odwierceniu całości w małym naczyniu rozpuszczamy trochę kalafoni w spirytusie (roztwór ma nabrać żółtawego koloru) i takim roztworem malujemy obydwie strony płytki - uchroni to miedź przed utlenianiem się. Płytkę odkładamy do wyschnięcia na 24 godziny.

 

Otwieramy kolejne piwo na cześć dobrze wykonanej pracy :P

ExpressPCB - 1 strona.pdf

ExpressPCB - 2 strona.pdf

Sterowanie wiatraków.zip

Odnośnik do komentarza
Udostępnij na innych stronach

Tak, sam ją ręcznie rysowałem w EXPRESS PCB. Generalnie całość jest wymyślona przeze mnie, ale opiera się na rozwiązaniach zaczerpniętych z różnych kursów i artykułów o Arduino. Nie wyważam zamkniętych drzwi, a jedynie sprytnie używam tego, co ktoś już wymyślił :)

Np. mostki H są wykorzystywane do sterowania kierunkiem obrotu silników oraz prędkością obrotową - mają dlatego 3 wejścia, a więc zajmują 3 piny w Arduino. Do takiego zastosowania, jak ja potrzebuję używam tylko 1 pinu, więc na 4 wiatrakach oszczędzam w sumie 8 pinów. 

Niestety za chwilę wpłynę na nieznane wody i będę musiał się trochę bardziej wysilić :P Właśnie zamówiłem czujnik ciśnienia cieczy - to jest wyzwanie z serii pół trudnych. Sprawdzanie poziomu gazu w butli, to będzie dla mnie wzniesienie się na wyżyny tego, czego nie ogarniam ....

Odnośnik do komentarza
Udostępnij na innych stronach

:] właśnie cały czas siedzę i szukam czujnika ciśnienia bezwzględnego w zakresie 0 - 5kPa i nie mogę trafić na taki za reduktor. Zastanawiam się czy zdałby egzamin taki przed reduktorem. Nie wiem w jakim zakresie mierzą mapsensory i czy można by było je wykorzystać.

Z drugiej strony może jest coś takiego podobnego do wagi pod butle. Warunkiem byłaby odporność na uszkodzenia w czasie jazdy z ustawioną na nim butlą.

Trochę się nakręciłem na taką automatykę pod warunkiem możliwości sterowania manualnego. Bo nie musi się ograniczać tylko do temperatury i kontroli gazu. Można sterować oświetleniem, czujkami wszelkiego rodzaju, piecem, bojlerem itd

 

Nie mogę zrozumieć pisania programu. Owszem jak zobaczę program i opis to wiem o co chodzi i potrafię wprowadzić małe zmiany ale nic więcej. Jak możesz to wrzuć program do wiatraków w pdf lub inne z opisem, może załapie o co chodzi.

 

PS

Ale schemat do płytki miałeś czy też sam wymyśliłeś?

Edytowane przez MARIOczy (wyświetl historię edycji)
Odnośnik do komentarza
Udostępnij na innych stronach

Schemat do płytki sam wymyśliłem :)

 

Wrzucę wszystko, tylko po kolei, bo chcę to dobrze opisać. 

 

Własnie myślałem o tensometrze do sprawdzania ilości gazu w butli. Nawet rozebrałem już domową wagę elektroniczną (taką łazienkową).

Odnośnik do komentarza
Udostępnij na innych stronach

I to chyba będzie najlepsze rozwiązanie. Mam na myśli wykorzystanie do pomiaru masy bo przy kontroli ciśnienia to już na sam koniec powiadomi o końcu gazu. Z drugiej strony, w moim przypadku (2 butle), zastosowanie tensometru do ciśnienia byłoby ciut lepsze (tylko jak to zrobić?). W przypadku końcówki gazu w jednej butli mógłby poprzez elektrozawory (np. takie jak w samochodowych instalacjach LPG) przełączyć butle i zasygnalizować to na czerwono na oled-zie. W przypadku kontroli masy butli trzeba by było brać pod uwagę masę samej butli (11kg), która waha się od ok. 9 - 14kg.

Odnośnik do komentarza
Udostępnij na innych stronach

W przypadku końcówki gazu w jednej butli mógłby poprzez elektrozawory (np. takie jak w samochodowych instalacjach LPG) przełączyć butle i zasygnalizować to na czerwono na oled-zie.

 

Wszystko jest do zrobienia, pytanie tylko, czy się opłaca. Czy nie prościej dać alarm o niskim stanie gazu i wtedy ręcznie idziesz przełączyć? Metoda wagowa nie powie, że jest "0" gazu, ale że jest około "0" gazu - a to spora różnica i błąd pomiarowy nie mały.

 

 

W przypadku kontroli masy butli trzeba by było brać pod uwagę masę samej butli (11kg), która waha się od ok. 9 - 14kg.

Hmm.... aż takiego rozrzutu masy butli nie miałem. Przeważnie w okolicy 10,5 kg.

 

CZĘŚĆ III.

Skoro mamy już wytrawioną płytkę, powierconą, zabezpieczoną, to przychodzi czas na lutowanie. Mamy tak na prawdę do wlutowania tylko kilka elementów, z czego najtrudniejszym są mostki H. Mostek ma oznaczoną jedną nóżkę kropką - jest to nóżka nr 1. Na płytce również zaznaczona jest nóżka numer 1. Oprócz tego do wlutowania są 3 mikrostyczniki, 1 rezystor, trochę goldpinów (polecam kątowe zamiast prostych) i jedno przyłącze śrubowe (12V). Trzeba też dolutować przelotki (przejścia z jednej na drugą stronę płytki). Używam do tego skrętki komputerowej przewlekając ją przez otwór i lutując.

Całość powinna wyglądać mniej-więcej tak (u mnie nie ma jeszcze goldpinów):

s11.jpg

 

Jeżeli mamy już wszystko polutowane, można rozpocząć Łączenie tego w całość. 

 

EKRAN:

Ekran powinien mieć wyjścia na goldpinie opisane i podłączamy go w miejsca oznaczone na zdjęciu kolorem: 

- GND (żółtym)

- VCC (niebieskim)

- SDA (zielonym)

- SCL (czerwonym)

 

s12.png

 

Po włączeniu zasilania na arduino ekran powinien zaświecić, a potencjometrem na jego tylnej części należy ustawić kontrast tak, żeby było coś widać.

Na płytce przez nas wykonanej są również wyprowadzenia i je należy podłączyć do Arduino następująco:

 

5V - (niebieski)

W2 - wiatrak numer 2 (+ i -) - o tym później

Sw2 - 4 PIN

Sw4 - 9 PIN

Sw3 - 8 PIN

Sw1 - 3 PIN

2 - 2 PIN

12V - zasilanie 12V z akumulatora - jest to zasilanie tylko wiatraków. Część logiczna układu zasilana jest z 5V - nie można tego pomylić, bo będzie nie ciekawie :(

6 - 6 PIN

7 - 7 PIN

5 - 5 PIN

W1, W4, W3 - analogicznie jak W2, ale o tym później.

 

Po podłączeniu Arduino pod USB można wgrać poniższy program:

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
#include <LiquidCrystal_I2C.h>
#include <DS18B20.h>
#include <OneWire.h>

/*-----( Declare Constants )-----*/
int TZW1 = 28; //Temperatura Załączenia Wiatraka 1
int TZW2 = 30; //Temperatura Załączenia Wiatraka 1
int TZW3 = 32; //Temperatura Załączenia Wiatraka 1
int TZW4 = 40; //Temperatura Załączenia Wiatraka 1
int IloscEkranow = 4; //ilość ekranów na wyświetlaczu

/*-----( Declare objects )-----*/
#define OffButton 7 //Pin Arduino przycisku wyłączenia wyświetlacza
#define UpButton 6 //Pin Arduino przycisku zmiany ekranu na następny
#define DownButton 5 //Pin Arduino przycisku zmiany ekranu na poprzedni
#define Wiatrak1 3 //Pin Arduino sterowania wiatrakiem nr 1
#define Wiatrak2 4 //Pin Arduino sterowania wiatrakiem nr 2
#define Wiatrak3 8 //Pin Arduino sterowania wiatrakiem nr 3
#define Wiatrak4 9 //Pin Arduino sterowania wiatrakiem nr 4
#define ONEWIRE_PIN 2 //Pin Arduino magistrali OneWire
#define SENSORS_NUM 3 //Ilość termometrów 

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Ustawienie adresu wyświetlacza LCD po magistrali I2C

//Definicja adresów termometrów
const byte address[SENSORS_NUM][8] PROGMEM = {
0x28, 0xFF, 0x62, 0x45, 0x72, 0x15, 0x3, 0xEA,
0x28, 0xFF, 0x2A, 0xFE, 0x71, 0x15, 0x3, 0xDC,
0x28, 0xFF, 0x75, 0x50, 0x72, 0x15, 0x3, 0x7E,
 };

OneWire onewire(ONEWIRE_PIN);
DS18B20 sensors(&onewire);

/*-----( Declare Variables )-----*/
int OffButtonVar = 1;
int UpDownButtonVar = 1;
float Lodowka = 0.00;
float Zamrazalnik = 0.00;
float Zewnatrz = 0.00;
float Wewnatrz = 0.00;
float Wiatraki = 00.00;
int i = 0;
String W1 = "off";
String W2 = "off";
String W3 = "off";



void setup()   /*----( SETUP: RUNS ONCE )----*/
{
while(!Serial);
  sensors.begin();
  sensors.request();
  pinMode(Wiatrak1, OUTPUT); //Sterowanie wiatrakiem nr 1
  pinMode(Wiatrak2, OUTPUT); //Sterowanie wiatrakiem nr 2
  pinMode(Wiatrak3, OUTPUT); //Sterowanie wiatrakiem nr 3
  pinMode(Wiatrak4, OUTPUT); //Sterowanie wiatrakiem nr 4
  lcd.begin(20,4);         // initialize the lcd for 20 chars 4 lines, turn on backlight
  lcd.backlight(); // finish with backlight on 
  pinMode(OffButton, INPUT_PULLUP); //Przycisk włącz / wyłącz ekran
  pinMode(UpButton, INPUT_PULLUP); //Przycisk góra
  pinMode(DownButton, INPUT_PULLUP); //Przycisk dół
//-------- Write characters on the display ------------------
  // NOTE: Cursor Position: Lines and Characters start at 0  
  lcd.setCursor(1,0); //Start at character 4 on line 0
  lcd.print("Zaawans. sterownik");
  lcd.setCursor(1,1);
  lcd.print("przyczepy kemping.");
  lcd.setCursor(6,2);
  lcd.print("VER 1.0");
  lcd.setCursor(5,3);
  lcd.print("by SEBA :)");
  delay(4000);
  lcd.clear();
  delay(500);
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("Pomiar temperatur: ");
  lcd.setCursor(0,1);
  lcd.print("Lodowka: "); lcd.print(Zamrazalnik,1); lcd.print(" / "); lcd.print(Lodowka,1);
  lcd.setCursor(0,2);
  lcd.print("W/Z: "); lcd.print(Wewnatrz,1); lcd.print(" / "); lcd.print(Zewnatrz,1);
  lcd.setCursor(0,3); 
  lcd.print("Wiatraki: "); lcd.print(Wiatraki,1);
}/*--(end setup )---*/


void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
i++;
if (sensors.available())
  {
    Wewnatrz = sensors.readTemperature(FA(address[0]));
    Zewnatrz = sensors.readTemperature(FA(address[1]));
    Wiatraki = sensors.readTemperature(FA(address[2]));
    ekran(); 
    sensors.request();
  }
  
if (digitalRead(OffButton) == LOW) //Jeśli przycisk wciśnięty
    { 
    if (OffButtonVar == 1) 
      {
        lcd.off(); //Wyłącz ekran
        OffButtonVar = 0; //ustaw zmienną wyłączenia ekranu na 0
      }
      else //Jeśli warunek nie został spełniony (zmienna jest zero, czyli ekran wyłączony)
      { 
      lcd.on(); //Włącz ekran
      OffButtonVar = 1; //ustaw zmienną wyłączenia ekranu na 1
  } 
  delay(500);
  }  

//obsługa wiatraka 1

if (Wiatraki > TZW1)
  {
  digitalWrite(Wiatrak1, HIGH);
  W1 = "ON ";
  }
 else
 {
  digitalWrite(Wiatrak1, LOW);
  W1 = "off";
 }

//obsługa wiatraka 2

if (Wiatraki > TZW2)
  {
  digitalWrite(Wiatrak2, HIGH);
    W2 = "ON ";
  }
 else
 {
  digitalWrite(Wiatrak2, LOW);
  W2 = "off";
 }

//obsługa wiatraka 3

if (Wiatraki > TZW3)
  {
  digitalWrite(Wiatrak3, HIGH);
    W3 = "ON ";
  }
 else
 {
  digitalWrite(Wiatrak3, LOW);
  W3 = "off";
 }
 //obsługa wiatraka 4

if (Wiatraki > TZW4)
  {
  digitalWrite(Wiatrak4, HIGH);
  }
 else
 {
  digitalWrite(Wiatrak4, LOW);
 }
 
//obsługa przycisków UP / DOWN
if (digitalRead(UpButton) == LOW) //Jeśli przycisk wciśnięty  
  {
    if (UpDownButtonVar < IloscEkranow)
    {
    UpDownButtonVar++;
    lcd.clear();
    ekran(); 
    }
    else
    {
    UpDownButtonVar = 1;  
    lcd.clear();
    ekran(); 
    }
  delay(500);
  }

if (digitalRead(DownButton) == LOW) //Jeśli przycisk wciśnięty  
  {
    if (UpDownButtonVar > 1)
    {
    UpDownButtonVar--;
    lcd.clear();
    ekran();  
    }
    else
    {
    UpDownButtonVar = IloscEkranow;  
    lcd.clear();
    ekran(); 
    }
  delay(500);
    
  }

//Wyświetlanie ekranów od 1 do IloscEkranów


}/* --(end main loop )-- */

void ekran()//Wyświetlanie ekranów od 1 do IloscEkranów
{
if (UpDownButtonVar == 1)
{
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("Pomiar temperatur: ");
  lcd.setCursor(0,1);
  lcd.print("Lodowka: "); lcd.print(Zamrazalnik,1); lcd.print(" / "); lcd.print(Lodowka,1);
  lcd.setCursor(0,2);
  lcd.print("W/Z: "); lcd.print(Wewnatrz,1); lcd.print(" / "); lcd.print(Zewnatrz,1);
  lcd.setCursor(0,3); 
  lcd.print("Wiatraki: "); lcd.print(Wiatraki,1);  
}
if (UpDownButtonVar == 2)
{
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("Chlodzenie lodowki ");
  lcd.setCursor(0,1);
  lcd.print(Zamrazalnik,1); lcd.print(" / "); lcd.print(Lodowka,1); lcd.print(" / "); lcd.print(Wiatraki,1);
  lcd.setCursor(0,2);
  lcd.print("Stan wiatrakow "); 
  lcd.setCursor(0,3); 
  lcd.print("W1:"); lcd.print(W1);
  lcd.print(" W2:"); lcd.print(W2);
  lcd.print(" W3:"); lcd.print(W3);
}
if (UpDownButtonVar == 3)
{
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("Nie wiem co 1 ");
  lcd.setCursor(0,1);
  lcd.print("Tutaj bedzie cos 1 ");
  lcd.setCursor(0,2);
  lcd.print("A poniżej cos 1.5 "); 
  lcd.setCursor(0,3); 
  lcd.print("Tutaj tez cos");
}
if (UpDownButtonVar == 4)
{
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("Nie wiem co 2 ");
  lcd.setCursor(0,1);
  lcd.print("Tutaj bedzie cos 2 ");
  lcd.setCursor(0,2);
  lcd.print("A poniżej cos 2.5 "); 
  lcd.setCursor(0,3); 
  lcd.print("Tutaj tez cos");
}  
}


/* ( THE END ) */

 Po wgraniu powyższego kodu do Adruino i podłączeniu wszystkiego ... nic ciekawego się nie stanie, chyba, że będziesz mieć wyjątkowe szczęście :) Ale o tym w dalszej części :)

Odnośnik do komentarza
Udostępnij na innych stronach

Seba roznica w wadze butli jest ogromna. Ostatnia do cepki bralem to miala 9,2kg a teraz do domu i ma 13,3kg i obie bez kolnierza.

 

Trzeba tez brac pod uwage, ze w butli moze sie znalezc woda (moje doswiadczenie na kempie jak gazu brak a ciecz w butli sie przelewa :( ).

Odnośnik do komentarza
Udostępnij na innych stronach

Seba roznica w wadze butli jest ogromna. Ostatnia do cepki bralem to miala 9,2kg a teraz do domu i ma 13,3kg i obie bez kolnierza.

 

Trzeba tez brac pod uwage, ze w butli moze sie znalezc woda (moje doswiadczenie na kempie jak gazu brak a ciecz w butli sie przelewa :( ).

No to trzeba będzie zrobić kompensację ze względu na wagę butli - trzeba będzie coś wykombinować :) Co do wody w butli, to tego nie da się ogarnąć :(

Odnośnik do komentarza
Udostępnij na innych stronach

CZĘŚĆ IV - może by coś w końcu zadziałało?

 

Jak do tej pory nakład pracy był duży, a efekt mizerny, bo nic się nie wyświetlało, nic nie działało. Arduino należy pokazać dwie rzeczy - pod jakim adresem jest wyświetlacz i pod jakim adresem są termometry!

 

Aby znaleźć adres wyświetlacza należy wgrać następujący program:

#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknow error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}

a następnie otworzyć serial monitor -> arduino->narzędzia->szeregowy monitor lub kombinacja klawiszy CTRL+SHIFT+M. W oknie tym wyświetli się adres ekranu LCD. U mnie to 0x27. O wyświetloną wartość poprawiamy następującą linijkę ww. kodu:

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Ustawienie adresu wyświetlacza LCD po magistrali I2C

gdzie w miejsce 0x27 wstawić należy otrzymany wynik z serial monitora!

 

Aby działały termometry, należy znowu wgrać program:

// Czytnik numerów seryjnych czujników DS18B20

#include <OneWire.h>

// Numer pinu cyfrowego do którego podłaczyłęś czujniki
const byte ONEWIRE_PIN = 2;

OneWire onewire(ONEWIRE_PIN);

void setup()
{
  while(!Serial);
  Serial.begin(9600);
}

void loop()
{
  byte address[8];

  onewire.reset_search();
  while(onewire.search(address))
  {
    if (address[0] != 0x28)
      continue;

    if (OneWire::crc8(address, 7) != address[7])
    {
      Serial.println(F("Błędny adres, sprawdz polaczenia"));
      break;
    }

    for (byte i=0; i<8; i++)
    {
      Serial.print(F("0x"));
      Serial.print(address[i], HEX);

      if (i < 7)
        Serial.print(F(", "));
    }
    Serial.println();
  }

  while(1);
}

Na monitorze szeregowym wyświetli się ciąg znaków w kilku linijkach. Ilość linijek odpowiadać będzie ilości termometrów.

Należy wtedy poprawić dwie rzeczy w pierwszym kodzie:

#define SENSORS_NUM 3 //Ilość termometrów 

Wpisać ile podłączonych jest termometrów, oraz

//Definicja adresów termometrów
const byte address[SENSORS_NUM][8] PROGMEM = {
0x28, 0xFF, 0x62, 0x45, 0x72, 0x15, 0x3, 0xEA,
0x28, 0xFF, 0x2A, 0xFE, 0x71, 0x15, 0x3, 0xDC,
0x28, 0xFF, 0x75, 0x50, 0x72, 0x15, 0x3, 0x7E,
 };

przekopiować z serial monitora adresy termometrów i zamienić zamiast moich.

 

Po tym zabiegu i wgraniu programu do Arduino, wszystko powinno działać. 

 

I jeszcze ważna rzecz - należy przed próbą kompilacji i wgrania programu ściągnąć i doinstalować w Arduino biblioteki:

#include <LiquidCrystal_I2C.h>
#include <DS18B20.h>
Edytowane przez seba222 (wyświetl historię edycji)
Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie
  • Witamy

    Witamy na największym polskim forum karawaningowym. Zaloguj się by wziąć udział w dyskusji.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.