Ktoś może testował tester pH tego typu ?
https://s.click.aliexpress.com/e/2lqFq5Ba7
Tester pH
-
QLQ
- Posts: 2512
- Joined: Sun Sep 03, 2017 9:13 am
Coś link nie działamaffiu wrote: Sat Jun 15, 2019 8:38 pm Ktoś może testował tester pH tego typu ?
https://s.click.aliexpress.com/e/2lqFq5Ba7
Ja się przymierzam do zakupu. Też przeglądałem Ali za tym oraz YT jak to oprogramoeac i kalibrować.
jak coś nie działa to włącz zasilanie.....
-
maffiu
- Posts: 500
- Joined: Wed Nov 30, 2016 9:30 pm
- Location: Kraków/Skawina
Patrzyłem na coś takiego co się nazywa ph4502c jak by to działało to do basenu albo akwarium jak znalazł
Ewentualnie coś takiego u nas maja
https://botland.com.pl/pl/czujniki-pogo ... ogowy.html
Ewentualnie coś takiego u nas maja
https://botland.com.pl/pl/czujniki-pogo ... ogowy.html
-
QLQ
- Posts: 2512
- Joined: Sun Sep 03, 2017 9:13 am
Kupiłem. Jak przyjdzie dam znać. Zrobię prezentację wartość i na czujniki odległości lub temp.
A dziś abstrahując od tematu wpadł mi genialny pomysł. Tym fajniej że obsługą czujnika jest w Supla Cloud.
Zaraz założę nowy temat
A dziś abstrahując od tematu wpadł mi genialny pomysł. Tym fajniej że obsługą czujnika jest w Supla Cloud.
Zaraz założę nowy temat
jak coś nie działa to włącz zasilanie.....
Tak się zastanawiam gdzie jeszcze można by taki czujnik wykorzystać? Akwarium nie mam, basenu też
może kiedyś...
A może monitowanie wody dostarczanej z wodociągów, czy jest sens?
A może monitowanie wody dostarczanej z wodociągów, czy jest sens?
SOP 2023 
SOP 2024
Czekam na kolejne Supla Offline Party
:
cz->b
+ila
SOP 2024
Czekam na kolejne Supla Offline Party
-
maffiu
- Posts: 500
- Joined: Wed Nov 30, 2016 9:30 pm
- Location: Kraków/Skawina
Omiotłem wzrokiem podwórko oprócz basenu i akwarium gdzie są to ważne elementy do studni mógł bym go wrzucić jeszcze ewentualnie bardziej jako ciekawostkę do stacji pogodowej jakiś zbiorniczek na deszczówkę i niech się mierzy opad ;p
-
maffiu
- Posts: 500
- Joined: Wed Nov 30, 2016 9:30 pm
- Location: Kraków/Skawina
Który zamówiłeśQLQ wrote: Sun Jun 16, 2019 10:16 am Kupiłem. Jak przyjdzie dam znać. Zrobię prezentację wartość i na czujniki odległości lub temp.
A dziś abstrahując od tematu wpadł mi genialny pomysł. Tym fajniej że obsługą czujnika jest w Supla Cloud.
Zaraz założę nowy temat
-
QLQ
- Posts: 2512
- Joined: Sun Sep 03, 2017 9:13 am
Ten: https://pl.aliexpress.com/item/PH-ciecz ... 5c0fH3Yj8dmaffiu wrote: Sun Jun 16, 2019 6:51 pmKtóry zamówiłeśQLQ wrote: Sun Jun 16, 2019 10:16 am Kupiłem. Jak przyjdzie dam znać. Zrobię prezentację wartość i na czujniki odległości lub temp.
A dziś abstrahując od tematu wpadł mi genialny pomysł. Tym fajniej że obsługą czujnika jest w Supla Cloud.
Zaraz założę nowy temat
Kurde nie chce gadać z wemos ale z arduino nano owszem. Troche dziwne
EDIT: już trochę ogarnąłem WeMos kod poniżej , dodam jeszcze kalibrację ale muszę kupić wzorce np 4 i 7pH.
Wstępny kod który działa z Wemos (na razie bez Cloud ale dorobię):
Code: Select all
int ph_pin = A0; //This is the pin number connected to Po
void setup() {
Serial.begin(9600);
}
void loop() {
int measure = analogRead(ph_pin);
Serial.print("Measure: ");
Serial.print(measure);
double voltage = 5 / 1024.0 * measure; //classic digital to voltage conversion
Serial.print("\tVoltage: ");
Serial.print(voltage, 3);
// PH_step = (voltage@PH7 - voltage@PH4) / (PH7 - PH4)
// PH_probe = PH7 - ((voltage@PH7 - voltage@probe) / PH_step)
float Po = 14 + ((2.5 - voltage) / 0.18);
Serial.print("\tPH: ");
Serial.print(Po, 3);
Serial.println("");
delay(2000);
}jak coś nie działa to włącz zasilanie.....
-
QLQ
- Posts: 2512
- Joined: Sun Sep 03, 2017 9:13 am
Przyszło , zrobione ,oprogramowane, czekam tylko na roztwory buforowe bo wymaga kalibracji, którą jak zrobię to opiszę. Chodzi o wartości w kodziemaffiu wrote: Sun Jun 16, 2019 6:51 pmKtóry zamówiłeśQLQ wrote: Sun Jun 16, 2019 10:16 am Kupiłem. Jak przyjdzie dam znać. Zrobię prezentację wartość i na czujniki odległości lub temp.
A dziś abstrahując od tematu wpadł mi genialny pomysł. Tym fajniej że obsługą czujnika jest w Supla Cloud.
Zaraz założę nowy temat
Porszę kod pod Supla:
Code: Select all
/**
Supla.org NodeMCU WiFi minimal example
Author: Programistyk - Kamil Kaminski <[email protected]>
This example shows how to configure SuplaDevice for building for NodeMCU within Arduino IDE
*/
#include <BH1750FVI.h>
#include <srpc.h>
#include <log.h>
#include <eh.h>
#include <proto.h>
#include <IEEE754tools.h>
// We define our own ethernet layer
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <lck.h>
#include <WiFiClient.h>
#include <ESP8266WiFiType.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiMulti.h>
#include <WiFiServer.h>
#include <ESP8266WiFiGeneric.h>
#include <WiFiClientSecure.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiSTA.h>
#include <WiFiUdp.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define OLED_RESET 0
Adafruit_SSD1306 display(OLED_RESET); // GPIO5 - SCL , GPIO4 -SDA
#include "HX711.h"
#define calibration_factor -24160.0 //This value is obtained using the SparkFun_HX711_Calibration sketch
#define DOUT 12
#define CLK 14
//float Ph;
HX711 scale;
String light;
int ph_pin = A0; //This is the pin number connected to Po
#define SEALEVELPRESSURE_HPA (1023.0)
Adafruit_BME280 bme; // I2C
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
BH1750FVI LightSensor(BH1750FVI::k_DevModeContLowRes);
#define LOGO32_GLCD_HEIGHT 32
#define LOGO32_GLCD_WIDTH 32
static const unsigned char PROGMEM temp_glcd_bmp[] =
{ // temp_home
0x00, 0x03, 0xc0, 0x00, 0x00, 0x04, 0x20, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x08, 0x50, 0x00,
0x00, 0x08, 0x50, 0x00, 0x00, 0x08, 0x50, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x09, 0x50, 0x00,
0x00, 0x08, 0xd0, 0x00, 0x00, 0x0b, 0x10, 0x00, 0x00, 0x0b, 0xd0, 0x00, 0x00, 0x0b, 0xd0, 0x00,
0x00, 0x0b, 0xd0, 0x00, 0x00, 0x0b, 0xd0, 0x00, 0x00, 0x0b, 0xd0, 0x00, 0x00, 0x0b, 0xd0, 0x00,
0x00, 0x0b, 0xd0, 0x00, 0x00, 0x0b, 0xd0, 0x00, 0x00, 0x0b, 0xd0, 0x00, 0x00, 0x0b, 0xd0, 0x00,
0x00, 0x0b, 0xd0, 0x00, 0x00, 0x0b, 0xd0, 0x00, 0x00, 0x0b, 0xd0, 0x00, 0x00, 0x17, 0xe8, 0x00,
0x00, 0x2f, 0xf4, 0x00, 0x00, 0x2f, 0x94, 0x00, 0x00, 0x2f, 0xb4, 0x00, 0x00, 0x2f, 0xf4, 0x00,
0x00, 0x07, 0xe0, 0x00, 0x00, 0x13, 0xc8, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0xc0, 0x00
};
static const unsigned char PROGMEM waga_glcd_bmp[] =
{
0x00,0x00,0x80,0x00, // ········▌·······
0x00,0x01,0xC0,0x00, // ·······▐█·······
0x00,0x01,0xC0,0x00, // ·······▐█·······
0x00,0x01,0xC0,0x00, // ·······▐█·······
0x3F,0xFF,0xFF,0xFC, // ·██████████████·
0x3F,0xFF,0xFF,0xFE, // ·██████████████▌
0x3F,0xFF,0xFF,0xFE, // ·██████████████▌
0x07,0x81,0xC0,0xF0, // ··▐█▌··▐█···██··
0x07,0x81,0x80,0xF0, // ··▐█▌··▐▌···██··
0x0F,0xC1,0xC1,0xF8, // ··███··▐█··▐██▌·
0x1C,0xC1,0xC1,0x98, // ·▐█·█··▐█··▐▌▐▌·
0x18,0xE1,0xC3,0x8C, // ·▐▌·█▌·▐█··█▌·█·
0x38,0x61,0xC3,0x0E, // ·█▌·▐▌·▐█··█··█▌
0x30,0x71,0xC7,0x06, // ·█··▐█·▐█·▐█··▐▌
0xFF,0xF9,0xCF,0xFF, // ██████▌▐█·██████
0xFF,0xF9,0xCF,0xFF, // ██████▌▐█·██████
0xFF,0xF9,0xCF,0xFF, // ██████▌▐█·██████
0x7F,0xF9,0xCF,0xFF, // ▐█████▌▐█·██████
0x3F,0xF1,0xC7,0xFE, // ·█████·▐█·▐████▌
0x3F,0xE1,0xC3,0xFE, // ·████▌·▐█··████▌
0x0F,0xC1,0xC1,0xF8, // ··███··▐█··▐██▌·
0x00,0x01,0xC0,0x00, // ·······▐█·······
0x00,0x01,0xC0,0x00, // ·······▐█·······
0x00,0x01,0xC0,0x00, // ·······▐█·······
0x00,0x01,0xC0,0x00, // ·······▐█·······
0x00,0x01,0x80,0x00, // ·······▐▌·······
0x00,0x1F,0xFC,0x00, // ·····▐█████·····
0x00,0x3F,0xFE,0x00, // ·····██████▌····
0x00,0x3F,0xFE,0x00, // ·····██████▌····
0x00,0x3F,0xFE,0x00, // ·····██████▌····
0x00,0x1F,0xFC,0x00, // ·····▐█████·····
0x00,0x00,0x00,0x00 // ················
};
static const unsigned char PROGMEM logo32_glcd_bmp[] =
{
// 'logo SUPLA'
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00,
0x0e, 0x0e, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x1c, 0x03, 0x00, 0x00, 0x1c, 0x03, 0x00, 0x00,
0x1c, 0x03, 0x00, 0x00, 0x0c, 0x07, 0x00, 0x00, 0x0e, 0x0f, 0x80, 0x00, 0x07, 0xfc, 0xe0, 0x00,
0x03, 0xf8, 0x30, 0x00, 0x00, 0xf0, 0x0d, 0xe0, 0x00, 0x10, 0x07, 0x30, 0x00, 0x18, 0x02, 0x10,
0x00, 0x18, 0x06, 0x18, 0x00, 0x08, 0x02, 0x10, 0x00, 0x08, 0x03, 0xf0, 0x00, 0x0c, 0x07, 0xc0,
0x00, 0x04, 0x0c, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00,
0x00, 0x03, 0xc0, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x0c, 0x20, 0x00, 0x00, 0x0c, 0x20, 0x00,
0x00, 0x04, 0x40, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static const unsigned char PROGMEM ASL_glcd_bmp[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x60, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x62, 0x00,
0x00, 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0x0c, 0x00, 0x00, 0x61, 0x84, 0x00, 0x00, 0xc0, 0xc4, 0xe0,
0x01, 0xc0, 0xf4, 0x00, 0x03, 0x00, 0x1c, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x0c, 0x00,
0x06, 0x10, 0xcd, 0x00, 0x03, 0x10, 0x99, 0x00, 0x01, 0x84, 0x30, 0x00, 0x00, 0x25, 0x00, 0x00,
0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
char* Message[] = {"This is string 1",
"Already initialized",
"Cb not assigned",
"Invalid GUID",
"Unknown server address",
"Unknow location ID",
"Initialized",
"Channel limit exceeded",
"Rozlaczony",
"Rejstracja w toku",
"Iterate fail",
"Protocol version error",
"Bad credentials",
"Temporarily unawaliable",
"Location conflict",
"Channel conflict",
"Polaczony i gotowy",
"Device is diasbled",
"Location is disabled",
"Device limit execeeded"
};
#if (SSD1306_LCDHEIGHT != 64)
//#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
// ***** logowanie WiFi ********************************************************************************
WiFiClient client;
// Setup Supla connection
const char* ssid = "xx";
const char* password = "xmnxx";
char str[10];
char StatCommStr[25];
int StatCommInt;
byte Icon;
byte FiveSek;
double get_distance(int channelNumber, double Ph) {
int measure = analogRead(ph_pin);
Serial.print("Measure: ");
Serial.print(measure);
double voltage = 5 / 1024.0 * measure; //classic digital to voltage conversion
Serial.print("\tVoltage: ");
Serial.print(voltage, 3);
// PH_step = (voltage@PH7 - voltage@PH4) / (PH7 - PH4)
// PH_probe = PH7 - ((voltage@PH7 - voltage@probe) / PH_step)
float Po = 14 + ((2.5 - voltage) / 0.18);
Serial.print("\tPH: ");
Serial.print(Po, 3);
Ph = Po;
Serial.println("");
delay(2000);
return Ph;
}
void timer0_ISR (void) {
FiveSek++;
if (FiveSek==2) {
FiveSek=0;
Icon++;
if (Icon==3) Icon=1;
}
timer0_write(ESP.getCycleCount() + 80000000L); // 80MHz == 1sec
}
//// ******* Funkcja główna *********************************************************************************
void setup() {
Serial.begin(9600);
// int measure = analogRead(ph_pin);
scale.begin(DOUT, CLK);
scale.set_scale(calibration_factor); //This value is obtained by using the SparkFun_HX711_Calibration sketch
scale.tare(); //Assuming there is no weight on the scale at start up,
noInterrupts();
timer0_isr_init();
timer0_attachInterrupt(timer0_ISR);
timer0_write(ESP.getCycleCount() + 80000000L); // 80MHz == 1sec
interrupts();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x64)
Icon = 0;
// Clear the buffer.
display.clearDisplay();
// text display tests
display.setTextSize(3);
display.setTextColor(WHITE);
display.setRotation(2);
display.setCursor(30, 25);
display.print("SUPLA");
drawbitmap(logo32_glcd_bmp, LOGO32_GLCD_HEIGHT, LOGO32_GLCD_WIDTH);
display.display();
// Replace the falowing GUID
char GUID[SUPLA_GUID_SIZE] = {0xE6,0x0A,0x50,0x0C,0xEA,0x1C,0x48,0x59,0xED,0xFB,0xAD,0xCC,0x58,0x42,0x08,0xF9};
// GUID that you can retrieve from https://www.supla.org/arduino/get-guid
// Ethernet MAC address
uint8_t mac[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
/*
Having your device already registered at cloud.supla.org,
you want to change CHANNEL sequence or remove any of them,
then you must also remove the device itself from cloud.supla.org.
Otherwise you will get "Channel conflict!" error.
*/
// CHANNEL0
SuplaDevice.addDistanceSensor();
SuplaDevice.setName("Sonda_pH");
SuplaDevice.setStatusFuncImpl(&status_func);
SuplaDevice.begin(GUID, // Global Unique Identifier
mac, // Ethernet MAC address
"svr5.supla.org", // SUPLA server address
111, // Location ID
"5117"); // Location Password
}
// ***********************************************************************************************************
void loop() {
SuplaDevice.iterate();
DisplayTemp();
}
// **** Obsługa OLED ****************************************************************************************************
void DisplayTemp() {
double waga = abs(scale.get_units());
double Light_Intensity = LightSensor.GetLightIntensity();
int rain=0.01;
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setRotation(2);
display.setCursor(45, 25);
switch (Icon) {
case 1:
display.setTextSize(4);
display.setCursor(30, 20 );
// display.print(waga, 0);
display.print("kg" );
// drawbitmap(waga_glcd_bmp, LOGO32_GLCD_HEIGHT, LOGO32_GLCD_WIDTH);
break;
case 2:
display.setTextSize(4);
display.setCursor(30, 20 );
// display.print(waga, 0);
display.print("kg" );
// drawbitmap(waga_glcd_bmp, LOGO32_GLCD_HEIGHT, LOGO32_GLCD_WIDTH);
break;
//---------------------
};
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 55);
display.print(Message[StatCommInt - 1]);
display.display();
display.display();
}; //DisplayTemp
void drawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
uint8_t icons[NUMFLAKES][3];
display.drawBitmap(0, 0, bitmap, w, h, WHITE);
} //drawbitmap
// Supla.org ethernet layer
int supla_arduino_tcp_read(void *buf, int count) {
_supla_int_t size = client.available();
if ( size > 0 ) {
if ( size > count ) size = count;
return client.read((uint8_t *)buf, size);
};
return -1;
};
int supla_arduino_tcp_write(void *buf, int count) {
return client.write((const uint8_t *)buf, count);
};
bool supla_arduino_svr_connect(const char *server, int port) {
return client.connect(server, 2015);
}
bool supla_arduino_svr_connected(void) {
return client.connected();
}
void supla_arduino_svr_disconnect(void) {
client.stop();
}
void supla_arduino_eth_setup(uint8_t mac[6], IPAddress *ip) {
// Serial.println("WiFi init");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Serial.print("\nlocalIP: ");
// Serial.println(WiFi.localIP());
//Serial.print("subnetMask: ");
// Serial.println(WiFi.subnetMask());
//Serial.print("gatewayIP: ");
//Serial.println(WiFi.gatewayIP());
}
SuplaDeviceCallbacks supla_arduino_get_callbacks(void) {
SuplaDeviceCallbacks cb;
cb.tcp_read = &supla_arduino_tcp_read;
cb.tcp_write = &supla_arduino_tcp_write;
cb.eth_setup = &supla_arduino_eth_setup;
cb.svr_connected = &supla_arduino_svr_connected;
cb.svr_connect = &supla_arduino_svr_connect;
cb.svr_disconnect = &supla_arduino_svr_disconnect;
cb.get_temperature_and_humidity = NULL;
cb.get_pressure = NULL;
cb.get_temperature = NULL;
cb.get_rgbw_value = NULL;
cb.set_rgbw_value = NULL;
cb.get_distance= get_distance;
return cb;
}
void status_func(int status, const char *msg) {
Serial.print("Status : ");
Serial.print(status);
StatCommInt = status;
Serial.print(" - ");
Serial.println(Message[StatCommInt - 1]);
display.fillRect(0, 55, 128, 65, BLACK);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setRotation(2);
display.setCursor(0, 55);
display.print(Message[StatCommInt - 1]);
display.display();
}
jak coś nie działa to włącz zasilanie.....
-
Lector
- Posts: 2470
- Joined: Fri Nov 17, 2017 2:26 pm
- Location: Poznań
- Has thanked: 13 times
- Been thanked: 25 times
Jestem ciekaw jak z dokładnością będzie - z rozkalibrowywaniem się.
Też szukam jakieś czujnika PH do wody w basenie, tym bardziej ze bardzo skacze mi do góry.
Przerabiałem dwa elektroniczne, które za każdym razem pokazywały inaczej. A pomiar tabletkami pochłania je momentalnie.
Więc czekam za rezultatami
Też szukam jakieś czujnika PH do wody w basenie, tym bardziej ze bardzo skacze mi do góry.
Przerabiałem dwa elektroniczne, które za każdym razem pokazywały inaczej. A pomiar tabletkami pochłania je momentalnie.
Więc czekam za rezultatami
Niespełniony automatyk. 
https://3d-lamp.photos/
https://pool.lector.top/
https://3d-lamp.photos/
https://pool.lector.top/
