Jump to content
seba222

Sterownik oparty o ADRUINO

Recommended Posts

seba222

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.

Share this post


Link to post
Share on other sites
globens

oczywiscie że są chetni czekamy na obszerny opis i fotki  ;)

Share this post


Link to post
Share on other sites
MARIOczy

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ć 

Share this post


Link to post
Share on other sites
seba222

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

 

 

Share this post


Link to post
Share on other sites
seba222

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

Share this post


Link to post
Share on other sites
MARIOczy

Schemat płytki sam zaprojektowałeś?

Share this post


Link to post
Share on other sites
seba222

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 ....

Share this post


Link to post
Share on other sites
MARIOczy

:] 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ś?

Edited by MARIOczy (see edit history)

Share this post


Link to post
Share on other sites
seba222

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ą).

Share this post


Link to post
Share on other sites
MARIOczy

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.

Share this post


Link to post
Share on other sites
seba222

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 :)

Share this post


Link to post
Share on other sites
strus251

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 :( ).

Share this post


Link to post
Share on other sites
seba222

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ąć :(

Share this post


Link to post
Share on other sites
seba222

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>
Edited by seba222 (see edit history)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...