@Ron said in Capacitive Soil Moisture Sensor:
@Puneit-Thukral Thanks. I am not quite sure, so correct me please if I am wrong, but I think I am already using the MiniCore bootloader with platformIO. Or do I need to configure to explicitly use the MiniCore bootloaders? Also I have set BOD to disabled as I read somewhere that no BOD can also save battery.
hi
I'm not sure, but I believe I'm already using the MiniCore bootloader with platformIO. Please tell me if I'm incorrect. Is it necessary to set the MiniCore bootloaders explicitly?
Just to let you know that I solved the issue.
I found a library where you can control the speed and make sure it get to it's position.
You can find it here: https://github.com/netlabtoolkit/VarSpeedServo
I incorporated it in the Mysensor sketch and it works eventhoug it looks like it only goes like 90 degrees but it's enough for me :
#include <MySensor.h>
#include <SPI.h>
#include <VarSpeedServo.h>
// #include <Servo.h>
#define SERVO_DIGITAL_OUT_PIN 3
#define SERVO_MIN 0 // Fine tune your servos min. 0-180
#define SERVO_MAX 180 // Fine tune your servos max. 0-180
#define DETACH_DELAY 900 // Tune this to let your movement finish before detaching the servo
#define CHILD_ID 10 // Id of the sensor child
MySensor gw;
MyMessage msg(CHILD_ID, V_DIMMER);
VarSpeedServo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
// Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created Sensor gw(9,10);
unsigned long timeOfLastChange = 0;
bool attachedServo = false;
void setup()
{
// Attach method for incoming messages
gw.begin(incomingMessage);
// Send the sketch version information to the gateway and Controller
gw.sendSketchInfo("Servo", "1.0");
// Register all sensors to gw (they will be created as child devices)
gw.present(CHILD_ID, S_COVER);
// Request last servo state at startup
gw.request(CHILD_ID, V_DIMMER);
}
void loop()
{
gw.process();
if (attachedServo && millis() - timeOfLastChange > DETACH_DELAY) {
myservo.detach();
attachedServo = false;
}
}
void incomingMessage(const MyMessage &message) {
myservo.attach(SERVO_DIGITAL_OUT_PIN);
attachedServo = true;
if (message.type==V_DIMMER) { // This could be M_ACK_VARIABLE or M_SET_VARIABLE
int val = message.getInt();
myservo.write(SERVO_MAX + (SERVO_MIN-SERVO_MAX)/100 * val,255,true); // sets the servo position 0-180
// Write some debug info
Serial.print("Servo changed. new state: ");
Serial.println(val);
} else if (message.type==V_UP) {
Serial.println("Servo UP command");
myservo.write(SERVO_MIN,255,true);
gw.send(msg.set(100));
} else if (message.type==V_DOWN) {
Serial.println("Servo DOWN command");
myservo.write(SERVO_MAX,255,true);
gw.send(msg.set(0));
} else if (message.type==V_STOP) {
Serial.println("Servo STOP command");
myservo.detach();
attachedServo = false;
}
timeOfLastChange = millis();
}
@fets So far, I have only built the 5x5 board (but the others should be schematically identical). The only issue I have found so far is that I cannot get the ISP port to work. But I have checked and I have an identical setup on the 1.0 board and that worked, so I suspect the programmer is too weak to drive the net on this one. So it is not a board-issue per se, and might only be an issue on the 5x5 board as routing is the most complex on that one due to the size.
@yury said in Wall Socket Insertable Node:
Looks cool! Do you have experience with capacities switches? I did not play much with them. afraid to use close to AC interference though...
You need to use a capacitive IC with active shielding, basically you have an extra electrode around your touch electrode and the touch IC will compare capacitive change of the touch electrode with capacitive change from the shield electrode. If the change is due to electrical interference then both electrodes will be changed in a similar way and the IC will not trigger.