1) čidlo osvětlení BH1750 dělá nějaký brikule a náhodně zobrazuje hodnotu osvětléní 0 lux. Zajímavé je, že pokud nahraju samostatný kód pro BH1750 a následně můj celý kód pro všechna čidla tak ukazuje správně. Zapojené je dle https://navody.arduino-shop.cz/arduino- ... tleni.html
2) jsem jouda a ačkoliv hardware část mi nedělá problémy tak tápu v kódu a potřebují zprovoznit integrované NRF24 na Keywish RF-Nano Nano V3.0 tak aby dokázal posílat data jednosměrně. Příjmačem bude Raspberry Pi s NRF24 modulem. Momentálně mi jde o tu odesílací část. Předem díky za pomoc.
Kód: Vybrat vše
#include <OneWire.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <DHT.h>
#include <DallasTemperature.h>
#include <ML8511.h>
#include <BH1750.h>
#define BMP280_ADRESA (0x76)
Adafruit_BMP280 bmp;
int korekce = 55.2;
#define pinDHT 10
#define typDHT21 DHT21
DHT mojeDHT(pinDHT, typDHT21);
const int pinCidlaDS = 2;
OneWire oneWireDS(pinCidlaDS);
DallasTemperature senzoryDS(&oneWireDS);
#define pinOut A0
#define pinRef3V3 A1
int mericiPin = A0;
int ledPin = 3;
const int casMereni = 280;
const int casUstaleni = 40;
const int casSpanku = 9680;
float napetiAnalog = 0;
float napetiPrepocet = 0;
float prasnost = 0;
BH1750 lightMeter;
void setup() {
Serial.begin(9600);
if (!bmp.begin(BMP280_ADRESA)) {
Serial.println("BMP280 senzor nenalezen, zkontrolujte zapojeni!");
while (1);
mojeDHT.begin();
senzoryDS.begin();
pinMode(pinOut, INPUT);
pinMode(pinRef3V3, INPUT);
pinMode(ledPin,OUTPUT);
lightMeter.begin();
}
}
void loop() {
float tlak = (bmp.readPressure()/100.00) + korekce;
float vlh = mojeDHT.readHumidity();
senzoryDS.requestTemperatures();
Serial.print("Barometricky tlak (BMP280): ");
Serial.print(tlak);
Serial.println(" hPa")
;
Serial.print("Vlhkost (DHT21): ");
Serial.print(vlh);
Serial.println(" %");
Serial.print("Teplota (DS18B20): ");
Serial.print(senzoryDS.getTempCByIndex(0));
Serial.println(" stupnu Celsia");
int hodnotaUV = prumerAnalogRead(pinOut);
int hodnotaRef3V3 = prumerAnalogRead(pinRef3V3);
float napetiOutUV = 3.3 / hodnotaRef3V3 * hodnotaUV;
float intenzitaUV = prevodNapetiIntenzita(napetiOutUV, 0.96, 2.8, 0.0, 15.0);
if (napetiOutUV<0.98) {intenzitaUV=0;}
Serial.print("Napeti (ML8511): ");
Serial.print(napetiOutUV);
Serial.print("V, UV Intenzita: ");
Serial.print(intenzitaUV);
Serial.println(" mW/cm^2");
digitalWrite(ledPin,LOW);
delayMicroseconds(casMereni);
napetiAnalog = analogRead(mericiPin);
delayMicroseconds(casUstaleni);
digitalWrite(ledPin,HIGH);
delayMicroseconds(casSpanku);
napetiPrepocet = napetiAnalog * (5.0 / 1024.0);
prasnost = (0.17 * napetiPrepocet - 0.1)*1000;
Serial.print("Napeti (Sharp GP2Y1010AU0F): ");
Serial.print(napetiPrepocet);
Serial.print(" V");
Serial.print(", Koncentrace prachu: ");
Serial.print(prasnost);
Serial.println(" ug/m3");
uint16_t lux = lightMeter.readLightLevel();
Serial.print("Intenzita svetla (BH1750): ");
Serial.print(lux);
Serial.println(" lux");
Serial.println();
delay(2000);
}
int prumerAnalogRead(int pinToRead) {
byte numberOfReadings = 8;
unsigned int runningValue = 0;
for(int x = 0 ; x < numberOfReadings ; x++)
runningValue += analogRead(pinToRead);
runningValue /= numberOfReadings;
return(runningValue);
}
float prevodNapetiIntenzita(float x, float in_min, float in_max,
float out_min, float out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}