Hi, i have already have learned a lot from this great community, but this is my first post.
My program skills really suck but i managed to get a Raspberry measuring a waterlevel due a HC SR04, and temperature with a DHT11 after a lot trail and error on the old legacy platform.
I could not figure out how to migrate it to the Blynk 2.0, so i gave it a try with an Arduino Nano 33 IOT. The Nano is online and measuring already the distance but i have problems getting the distance translated to volume (m3). I hope someone can help me out here with the coding. Or maybe it is easier to migrate the Raspberry?
Here is the code i already got for the NaNo:
> // Template ID, Device Name and Auth Token are provided by the Blynk.Cloud
// See the Device Info tab, or Template settings
#define BLYNK_TEMPLATE_ID ""
#define BLYNK_DEVICE_NAME ""
#define BLYNK_AUTH_TOKEN ""
// Comment this out to disable prints and save space
#define BLYNK_PRINT Serial
#include <SPI.h>
#include <WiFiNINA.h>
#include <BlynkSimpleWiFiNINA.h>
#include <HCSR04.h>
char auth[] = BLYNK_AUTH_TOKEN;
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "AndroidAP";
char pass[] = "juco4861";
HCSR04 hc(5, 6); //initialisation class HCSR04 (trig pin , echo pin)
BlynkTimer timer;
int L= 935;
int R= 150;
int D= 300;
int h= V9;
int volume;
void setup()
{
// Debug console
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
// You can also specify server:
//Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
//Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
// Setup a function to be called every second
}
void loop()
{
Blynk.run();
timer.run();
{
Serial.println(hc.dist()); // return curent distance in serial
delay(1000); // we suggest to use over 60ms measurement cycle, in order to prevent trigger signal to the echo signal.
Blynk.virtualWrite(V9, hc.dist());
delay(1000); // we suggest to use over 60ms measurement cycle, in order to prevent trigger signal to the echo signal.
Serial.println(hc.dist()); // return curent distance in serial
delay(1000); // we suggest to use over 60ms measurement cycle, in order to prevent trigger signal to the echo signal.
Blynk.virtualWrite(V8, L * hc.dist());
delay(1000); // we suggest to use over 60ms measurement cycle, in order to prevent trigger signal to the echo signal.
}
}
Raspberry code
> code raspberry fagerhøy
niels wolting
var BLYNK_TEMPLATE_ID "F"
var BLYNK_DEVICE_NAME ""
var BLYNK_AUTH_TOKEN ""'
var blynkLib = require('blynklib');
var sensorLib = require('node-dht-sensor');
// Setup Blynk
var blynk = new blynkLib.Blynk(AUTH);
// Setup sensor, exit if failed
var sensorType = 11; // 11 for DHT11, 22 for DHT22 and AM2302
var sensorPin = 4; // The GPIO pin number for sensor signal
if (!sensorLib.initialize(sensorType, sensorPin)) {
console.warn('Failed to initialize sensor');
process.exit(1);
}
// Automatically update sensor value every 2 seconds
setInterval(function() {
var readout = sensorLib.read();
blynk.virtualWrite(3, readout.temperature.toFixed(1));
blynk.virtualWrite(4, readout.humidity.toFixed(1));
console.log('Temperature:', readout.temperature.toFixed(1) + 'C');
console.log('Humidity: ', readout.humidity.toFixed(1) + '%');
}, 600000);
const Gpio = require('pigpio').Gpio;
// The number of microseconds it takes sound to travel 1cm at 20 degrees celcius
const MICROSECDONDS_PER_CM = 1e6/34321;
const trigger = new Gpio(23, {mode: Gpio.OUTPUT});
const echo = new Gpio(24, {mode: Gpio.INPUT, alert: true});
trigger.digitalWrite(0); // Make sure trigger is low
const watchHCSR04 = () => {
let startTick;
let R = 3 / 2;
let L = 9.35
echo.on('alert', (level, tick) => {
if (level == 1) {
startTick = tick;
} else {
const endTick = tick;
const diff = (endTick >> 0) - (startTick >> 0); // Unsigned 32 bit arithmetic
console.log(diff / 2 / MICROSECDONDS_PER_CM);
var readout = sensorLib.read();
blynk.virtualWrite(5, 3.53-diff / 200 / MICROSECDONDS_PER_CM.toFixed(2));
blynk.virtualWrite(6, (L) *(Math.pow(R, 2) * Math.acos((R - (3.53-(diff/200/MICROSECDONDS_PER_CM))) / R) - (R - (3.53-(diff/200/MICROSECDONDS_PER_CM))) * (Math.pow((2 * R * (3.53-(diff/200/MICROSECDONDS_PER_CM)) - Math.pow((3.53-(diff/200/MICROSECDONDS_PER_CM)), 2)), .5))));
Thanks a lot i advance.
Niels Wolting