Szia Prof !
Azt hittem , követhető lesz az ábra :
Baloldalt fentről lefelé :
- SD kártya
- RF24L01 rádiómodul
- Dallas 18B20 három lábú hőmérőmodul
- Lcd 16,2 kijelző I2C modullal
- DS1307 RTC óra
Jobboldalon
Arduino UNO vevő
Apró lépésekkel haladtam előre, már régebben tudtam több adatot SD kártyára menteni txt fájlba , majd később excel táblázatban grafikon képezni belőle .
Valójában ezek a lábak közösek :
Rádió és SD kártya MISO Arduino D12 fekete színnel
„ „ „ „ MOSI „ „ D11 piros „ „
„ „ „ CLOK „ „ D13 rózsaszín „ „
Itt az RF24L01 rádió képe
Azt hittem , lesz valami pár lépéses szoftveres ötlet mint a kimenetek megerősítése.
Most a következőket fogom tenni:
- megpróbálom nagy szkóppal megnézni „ hálózati 20 MHz .-es „ szerencsére szkópom van 4 db
- különösen a hidegítéseket , tápfesz kondikra gondolok
- először megpróbálom a tápfeszűltséget felváltva elvenni, ez a könnyebb
- ha nem jutok dűlőre , akkor a MOSI és MISO lábakat relével átkapcsolhatóra teszem, mivel egyszerre nem kell adatot átvenni és adatkártyára rögzíteni.
Ha beindul , akkor megpróbálok valami elektronikus megoldást.
Csak régebben láttam ilyen 3 állapotú „ tri state „ illesztőket, de soha nem csináltam.
Olyan volt mint kettő műveleti erősítő és egyik vagy a másik esetleg egyik sem „ ekkor lebegett „ kapott tápfeszültséget.
Beteszem a kódját , ezt ne nézd túl kritikusan, biztosan sokat tudnál rajt fésülni , de működik .
Én ezt nem tanultam iskolába , csak össze ollóztam több működő kapcsolást és bele változtattam
2 - 3 - 4 - 23.69 -
2 - 3 - 4 - 23.69 -
2 - 3 - 4 - 23.69 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.75 -
2 - 3 - 4 - 23.81 -
2 - 3 - 4 - 23.81 -
Itt látszik , hogy a mentés működik, csak nem veszi a rádió jeleket, de a hőmérsékletet méri D2 lábon.
Utoljára a program
.,.,.,.,.,.,.,.,.,.,.
// Mikor megírtam azSD progit, leállt az óra !!!! kártyát lehúzva elindult !
/* GND barna , 3,3V üres, +5V piros,CS fekete, MOSI fehér, SCK szürke , MISO lila, GND üres */
// kezdődik a kártyára mentés ,megnyitiotta, de mégsem írt rá ÉS LEÁLLÍTOTTA A RÁDIÓT
// SD : MOSI D11, MISO D12, CLOK D13 , CS D10
// RF24L01 : MOSI D11, MISO D12, CLOK D13 CS D10, , CE D3 , CS D4
// PRÓBA 4 ADATTAL LEFORDÍTOTTA !!!!!!!!!!!!
// https://www.how2electronics.com/nrf24l01-based-wireless-temperature-monitoring-with-dht11-arduino/
#include <SPI.h>
#include <DS1307.h> // az órának a cucca
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#include <SD.h> // SD könyvtár
#include <dht.h> // azt hiszem , hogy ez a hőmérő könyvtár
//dht DHT ;
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display
DS1307 rtc;
int adattomb[] ={1,2,3,4} ; // 4 adatos tömböt kreáltam csak most "int"
RF24 radio( 3, 4 ); // CE , CSN (9, 10); !!
const uint64_t pipe = 0xE8E8F0F0E1LL;
const int chipSelect = 10; //4
// pinMode ( 10 , OUTPUT ); // Róbert ajánlása, tegyük erős kimenetté
File dataFile ;
float Celsius = 0;
// ---
void setup(void) {
Serial.begin(9600);
sensors.begin(); // próbára
pinMode ( 10 , OUTPUT ); // Róbert ajánlása, tegyük erős kimenetté
Serial.println("Init RTC..."); // inic. RTC óra
// rtc.set(0, 20, 21, 11, 8, 2019); /*20:24:00 24.12.2014 //sec, min, hour, day, month, year*/ //fasza: átugrom a beállítást
rtc.stop(); /*stop/pause RTC -.- NEM TUDOM MÉG MIÉRT KELL */
rtc.start(); /*start RTC -.- NEM TUDOM MÉG MIÉRT KELL */
radio.begin();
radio.openReadingPipe(1, 0xE8E8F0F0E1LL ); // pipe
radio.startListening();
lcd.begin(16, 2);
lcd.setBacklight(255);
lcd.clear();
lcd.setCursor( 0,0);
lcd.print("lcd felallt");
// x.x.x-x.-x-
while (!Serial) { ; // várjon a soros port csatlakoztatásához. Szükség van a natív USB portra
}
if (!SD.begin(chipSelect)) {
Serial.println("Kártya nyitási hiba"); //ne csinálj többet:
lcd.setCursor( 0,1);
lcd.print("SD befosott");
return;
}
Serial.println("Kártya nyitása sikerült");
lcd.setCursor( 0,1);
lcd.print("SD faszentos");
// x.x.x-x.-x-
delay(2000);
}
// --
void loop(void)
{
//sensors.requestTemperatures();
// Celsius = sensors.getTempCByIndex(0);
// Fahrenheit = sensors.toFahrenheit(Celsius);
uint8_t sec, min, hour, day, month;
uint16_t year;
/*get time from RTC*/
rtc.get(&sec, &min, &hour, &day, &month, &year);
lcd.clear ();
lcd.setCursor (0,1);
lcd.print(hour,DEC);
lcd.setCursor (2,1);
lcd.print(":");
lcd.setCursor (3,1);
lcd.print(min,DEC);
lcd.setCursor (5,1);
lcd.print(":");
lcd.setCursor (6,1);
lcd.print(sec,DEC);
lcd.setCursor (9,1);
// lcd.setCursor (11,1);
// lcd.print(Celsius); // még nincs programozva
if ( radio.available() )
{
bool done = false;
while (!done)
{
radio.read(&adattomb, sizeof(adattomb));
delay(500);
// lcd.clear ();
lcd.setCursor( 0,0);
lcd.print(adattomb[1]);
lcd.setCursor( 5,0);
lcd.print(adattomb[2]);
lcd.setCursor( 10,0);
lcd.print(adattomb[3]);
// lcd.setBacklight(0);
Serial.print(adattomb[1]);
Serial.print(" ");
Serial.print(adattomb[2]);
Serial.print(" ");
Serial.print(adattomb[3]);
Serial.print(" ");
Serial.print(adattomb[4]);
Serial.print(" ");
Serial.print(Celsius);
Serial.println(" ");
sensors.requestTemperatures();
Celsius=sensors.getTempCByIndex(0);
lcd.setCursor (11,1) ;
lcd.print(Celsius); // még nincs programozva
// x . x - x -
File dataFile = SD.open("goreny.txt", FILE_WRITE) ;
dataFile.print(adattomb[1]) ;
dataFile.print(" - ") ;
dataFile.print(adattomb[2]) ;
dataFile.print(" - ") ;
dataFile.print(adattomb[3]) ;
dataFile.print(" - ") ;
dataFile.print(Celsius) ;
dataFile.println(" - ") ;
dataFile.close();
delay(400);
lcd.setBacklight(255);
delay(400);
}
}
else
{
Serial.println("Nem talált Rádiót" ) ;
}
}