Ponieważ ostatnio zostałem posądzony że nic nie wnoszę do forum tylko a, tylko korzystam więc „pochwale się moim projektem” chociaż pochwalić to w tym przypadku za duże słowo bo nie ma czym, gdyż projekt jest w wersji roboczej, ale DZIAŁA był testowany w firmie przez 3 miesiące i wszystko jest ok więc prezentuje.
To jest moja pierwsza przygoda z mikrokontrolerami więc proszę o konstruktywne uwagi, gdyż jestem programistą php a nie elektronikiem.
Zaczęło się od tego że chciałem rejestrować temperaturę na piecu i suszarni za pomocą Funduino Mega 2560 (klon arduino) + ethernet shieled W5100 i czujników Dallas DS18B20 , pomiary zapisywać do bazy mysql a później obserwować zmiany na wykresie i to się udało.
plik screen_ekranu_wykres_temeratury.jpg
Zachęcony dodałem rejestrator czasu pracy za pomocą kart rfid jako czytnik użyłem moduł RFID MF RC522. Oczywiście każde wejście i wyjście pracownika jest zapisywane w bazie mysql. Na podstawie wpisów tworzę sobie zestawienie czasu pracy.
Pracownik wybiera opcję za pomocą 2 przycisków wyjście lub wyjście i przykłada karę.
Jeszcze postanowiłem dołożyć do tego sterowanie światłem na parkingu i w dwóch pomieszczeniach w firmie, poza tym jak zapomniałem pilota do bramy to dołożyłem jeszcze sterowanie braną
z przeglądarki internetowej.
plik screen_ekranu_sterowanie_swiatlem.jpg
Koszty:
Wszytko kupiłem na allegro.
Funduino Mega 2560 (klon arduino) - 80 zł
ethernet shieled W5100 - 35 zł
Dallas DS18B20 - 5 zł sztuka
RFID MF RC522 - 30 zł
Wyświetlacz LCD 16x2 HD44780 – 12 zł
do tego dwa przyciski i kabelki
koszty naprawę niewielkie w stosunku do tego co uzyskałem.
Poniżej przeze tuje program i tu proszę o wyrozumiałość. To jest mój pierwszy projekt i pierwszy program w C. Wiem że składnia jest nie ładna itd. itp. ale dzięki krytyce na pewno się dużo nauczę.
Jeśli będzie ktoś chciał coś podobnego zrobić zawsze jakiś fragment kodu może się przydać.
czekam na waszą opinie
To jest moja pierwsza przygoda z mikrokontrolerami więc proszę o konstruktywne uwagi, gdyż jestem programistą php a nie elektronikiem.
Zaczęło się od tego że chciałem rejestrować temperaturę na piecu i suszarni za pomocą Funduino Mega 2560 (klon arduino) + ethernet shieled W5100 i czujników Dallas DS18B20 , pomiary zapisywać do bazy mysql a później obserwować zmiany na wykresie i to się udało.
plik screen_ekranu_wykres_temeratury.jpg

Zachęcony dodałem rejestrator czasu pracy za pomocą kart rfid jako czytnik użyłem moduł RFID MF RC522. Oczywiście każde wejście i wyjście pracownika jest zapisywane w bazie mysql. Na podstawie wpisów tworzę sobie zestawienie czasu pracy.
Pracownik wybiera opcję za pomocą 2 przycisków wyjście lub wyjście i przykłada karę.
Jeszcze postanowiłem dołożyć do tego sterowanie światłem na parkingu i w dwóch pomieszczeniach w firmie, poza tym jak zapomniałem pilota do bramy to dołożyłem jeszcze sterowanie braną


plik screen_ekranu_sterowanie_swiatlem.jpg
Koszty:
Wszytko kupiłem na allegro.
Funduino Mega 2560 (klon arduino) - 80 zł
ethernet shieled W5100 - 35 zł
Dallas DS18B20 - 5 zł sztuka
RFID MF RC522 - 30 zł
Wyświetlacz LCD 16x2 HD44780 – 12 zł
do tego dwa przyciski i kabelki
koszty naprawę niewielkie w stosunku do tego co uzyskałem.
Poniżej przeze tuje program i tu proszę o wyrozumiałość. To jest mój pierwszy projekt i pierwszy program w C. Wiem że składnia jest nie ładna itd. itp. ale dzięki krytyce na pewno się dużo nauczę.
Jeśli będzie ktoś chciał coś podobnego zrobić zawsze jakiś fragment kodu może się przydać.
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
#include <MFRC522.h>
LiquidCrystal lcd(22, 24, 32, 30, 28, 26);
// 22 - RS
// 23 - E
#define ONE_WIRE_BUS 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 30 };
byte gateway[] = { 192, 168, 1, 1 };
byte subnet[] = { 255, 255, 255, 0 };
char server_d[] = "www.xxxxxxxx.com";
EthernetServer server(80); //arduino server port
EthernetClient client;
String readString;
#define PIEZO_PIN 6
#define SS_PIN 53
#define RST_PIN 48
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
String id_karty;;
String id_karty_spr;
String k;
int zmie = 3;
int zmie_spr =3 ;
int errorlog =0 ;
//pierwsze opoznienie
unsigned long temo_time = millis() + 300000;
int resetPin = 7;
void setup(){
lcd.begin(16, 2);
lcd.setCursor(0,1);
lcd.print("wybierz opcje");
pinMode(5, OUTPUT);
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.begin(9600);
mfrc522.PCD_Init();
sensors.begin();
pinMode(36, OUTPUT);
pinMode(38, OUTPUT);
pinMode(40, OUTPUT);
pinMode(42, OUTPUT);
pinMode(44, OUTPUT);
pinMode(46, OUTPUT);
id_karty_spr="1" ;
id_karty="0" ;
pinMode(3, INPUT); //pracuje jako wejscie
//digitalWrite(3, HIGH); //spoczynkowy stan wysoki (rezystory podciagajace wlaczone)
pinMode(4, INPUT); //pracuje jako wejscie
//digitalWrite(4, HIGH); //spoczynkowy stan wysoki (rezystory podciagajace wlaczone)
digitalWrite(36, HIGH); //spoczynkowy stan wysoki (rezystory podciagajace wlaczone)
digitalWrite(38, HIGH); //spoczynkowy stan wysoki (rezystory podciagajace wlaczone)
digitalWrite(40, HIGH); //spoczynkowy stan wysoki (rezystory podciagajace wlaczone)
digitalWrite(42, HIGH); //spoczynkowy stan wysoki (rezystory podciagajace wlaczone)
digitalWrite(44, HIGH); //spoczynkowy stan wysoki (rezystory podciagajace wlaczone)
digitalWrite(46, HIGH); //spoczynkowy stan wysoki (rezystory podciagajace wlaczone)
digitalWrite(resetPin, HIGH);
pinMode(resetPin, OUTPUT);
}
void loop()
{
unsigned long time = millis();
if (time >= temo_time) {
Serial.println("Zapis temeratury");
mysql_temp();
temo_time = time + 300000 ; // co 5 min dodawaj temp
}
int przycisk = digitalRead(3); //odczytujemy stan przycisku
if(przycisk == HIGH) { //jesli przycisk nie jest wcisniety
lcd.setCursor(0,1);
lcd.print("rozpoczecie ");
zmie = 1; //odczytujemy stan przycisku
};
int przycisk2 = digitalRead(4); //odczytujemy stan przycisku
if(przycisk2 == HIGH) { //jesli przycisk nie jest wcisniety
lcd.setCursor(0,1);
lcd.print("zakonczenie ");
zmie = 2;
};
//lcd.clear();
sensors.requestTemperatures();
lcd.setCursor(0,0);
lcd.print(sensors.getTempCByIndex(0));;
lcd.write(0xDF);
lcd.write('C');
lcd.write(' ');
lcd.print(sensors.getTempCByIndex(1));;
lcd.write(0xDF);
lcd.write('C');
id_karty = "";
if (mfrc522.PICC_IsNewCardPresent()){
mfrc522.PICC_ReadCardSerial();
for (byte i = 0; i < mfrc522.uid.size; i++) { id_karty += mfrc522.uid.uidByte[i], HEX;}
if(zmie != 3) {
Serial.println(id_karty);
if(id_karty == "2295761116") {gong();mysql_kar(); k="Kowalski ."; zmie_spr=zmie; zmie=3; } else{};
if(id_karty == "14822211926") {gong();mysql_kar(); k="Nowak ."; zmie_spr=zmie; zmie=3; } else{};
// tutaj kolejni pracownicy
lcd.setCursor(0,1);
lcd.print(k);
delay(1000);
lcd.setCursor(0,1);
if(zmie == 3 ) {lcd.print("wybierz opcje "); }
}
}
// ---- uruchamianie serwera
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 100) {readString += c; }
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<body bgcolor='#c0c0c0'>");
client.println("<style type='text/css'>");
client.println("#tabela td { border: 0 px solid black; padding: 5px; border-spacing: 5px; font-weight: bold; text-align: center}");
client.println("#ON {background-color: green; vertical-align: top; font-weight: bold; width: 100px;}");
client.println("#OFF {background-color: red ; vertical-align: top; font-weight: bold; width: 100px;}");
client.println("#n{background-color: #808080;}");
client.println("a {text-decoration: none;}");
client.println("a:link,a:active,a:visited { color : black; }");
client.println("</style>");
client.println("<br />");
client.print(" temperatura");
client.println("<br />");
sensors.requestTemperatures();
client.println("Czujnik-1: ");
client.println(sensors.getTempCByIndex(0));
client.println("<br />");
client.println("Czujnik-2: ");
client.println(sensors.getTempCByIndex(1));
client.println("<br />");
client.println("<hr />");
client.println("<br />");
client.println("<table id='tabela' style='border-spacing: 10px'> ");
client.println("<tr id='n'><td colspan='3'>DOM</td></tr>");
client.println("<tr> <td >Swiatlo Parking </td><td id='ON'>");
client.println("<a href=\"/?LED44_ON\"\">ON</a>");
client.println("</td><td id='OFF' >");
client.println("<a href=\"/?LED44_OFF\"\">OFF</a>");
client.println("</td></tr>");
client.println("<tr> <td >Swiatlo front </td><td id='ON'>");
client.println("<a href=\"/?LED46_ON\"\">ON</a>");
client.println("</td><td id='OFF' >");
client.println("<a href=\"/?LED46_OFF\"\">OFF</a>");
client.println("</td></tr>");
client.println("<tr> <td >Dom brama </td><td id='ON'>");
client.println("<a href=\"/?LED40_ON\"\"><---></a>");
client.println("</td>");
client.println("</td></tr> </table> <br>");
client.println("<table id='tabela' style='border-spacing: 10px'> ");
client.println("<tr id='n'><td colspan='3'> FIRMA </td></tr>");
client.println("<tr> <td >Swiatlo piec </td><td id='ON'>");
client.println("<a href=\"/?LED38_ON\"\">ON</a>");
client.println("</td><td id='OFF' >");
client.println("<a href=\"/?LED38_OFF\"\">OFF</a>");
client.println("</td></tr>");
client.println("<tr> <td >Swiatlo malarnia </td><td id='ON'>");
client.println("<a href=\"/?LED36_ON\"\">ON</a>");
client.println("</td><td id='OFF' >");
client.println("<a href=\"/?LED36_OFF\"\">OFF</a>");
client.println("</td></tr> </table> <br>");
/*--------( End Sensor Read )--------------------------------*/
client.println("</html>");
break; }
if (c == '\n') { currentLineIsBlank = true;} else if (c != '\r') { currentLineIsBlank = false;} }
} // koniec połączenia internetowego
delay(1);
client.stop();
int op360 = readString.indexOf("36_OFF");
int op361 = readString.indexOf("36_ON");
int op381 = readString.indexOf("38_OFF");
int op380 = readString.indexOf("38_ON");
int op400 = readString.indexOf("40_OFF");
int op401 = readString.indexOf("40_ON");
int op440 = readString.indexOf("44_OFF");
int op441 = readString.indexOf("44_ON");
int op460 = readString.indexOf("46_OFF");
int op461 = readString.indexOf("46_ON");
if(op361 > 0) { digitalWrite(36, LOW); } else{};
if(op360 > 0) { digitalWrite(36, HIGH); } else{};
if(op380 > 0) { digitalWrite(38, LOW); } else{};
if(op381 > 0) { digitalWrite(38, HIGH); } else{};
if(op400 > 0) { digitalWrite(40, HIGH); } else{};
if(op401 > 0) { digitalWrite(40, LOW); delay(500); digitalWrite(40, HIGH); } else{};
if(op441 > 0) { digitalWrite(44, LOW); } else{};
if(op440 > 0) { digitalWrite(44, HIGH); } else{};
if(op461 > 0) { digitalWrite(46, LOW); } else{};
if(op460 > 0) { digitalWrite(46, HIGH); } else{};
readString="";
}
if(errorlog == 1) {
lcd.setCursor(0,1);
lcd.print("BRAK INTERNETU ");
errorlog =0;
Serial.println("Reset");
digitalWrite(resetPin, LOW);
} else{};
} // END Loop
void gong() {
tone(PIEZO_PIN, 600); // Dzwięk alarmu
delay(100);
noTone(PIEZO_PIN); // Wyłączenie dźwięku alarmu
}
void mysql_kar() {
Ethernet.begin(mac, ip);
delay(1000);
Serial.println("connecting...");
if (client.connect(server_d, 80)) {
Serial.println("connected");
client.print( "GET /karty.php?nr=");
client.print(id_karty);
client.print("&zda=");
client.print(zmie);
client.println( " HTTP/1.1");
client.println( "Host: www.xxxxxxx.com" );//ur web server
client.println( "Content-Type: application/x-www-form-urlencoded" );
client.println( "Connection: close" );
client.println();
}
else {
Serial.println("nie polonczono");
errorlog=1;
}
client.stop();
}
void mysql_temp() { // wysyładnie temperatura
float piec = sensors.getTempCByIndex(0);
Ethernet.begin(mac, ip);
delay(1000);
Serial.println("connecting...");
if (client.connect(server_d, 80)) {
Serial.println("connected");
client.print("GET /temp_rejstracja.php?piec=");
client.print(piec);
client.print("&suszarnia=2");
client.print("&zew=3");
client.println( " HTTP/1.1");
client.println( "Host: www.xxxxx.com" );//ur web server
client.println( "Content-Type: application/x-www-form-urlencoded" );
client.println( "Connection: close" );
client.println();
}
else {
Serial.println("nie polonczono");
errorlog=1;
}
client.stop();
}
czekam na waszą opinie

Cool? Ranking DIY