From 3d525d6a3a54afe90ca337e40bd5610369206085 Mon Sep 17 00:00:00 2001 From: bach Date: Sun, 10 Dec 2023 17:19:23 +0100 Subject: [PATCH] accelStepper instead of stepper library, temperature every 1min --- registre_airchaud_code.ino | 87 +++++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 38 deletions(-) diff --git a/registre_airchaud_code.ino b/registre_airchaud_code.ino index 76e96d6..5e573a0 100644 --- a/registre_airchaud_code.ino +++ b/registre_airchaud_code.ino @@ -36,27 +36,27 @@ MyMessage dimmerMsg(ROTATION_CHILD_ID, V_DIMMER); MyMessage lightMsg(ROTATION_CHILD_ID, V_LIGHT); // we need init light message to make the dimmer appear in HA MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); -/* -control a 28BYJ-48 stepper motor with ULN2003 driver board -https://www.makerguides.com/28byj-48-stepper-motor-arduino-tutorial/ -*/ -#include "Stepper.h" -// Define number of steps per rotation: -const int stepsPerRevolution = 2048; // can be 4096 +// https://lastminuteengineers.com/28byj48-stepper-motor-arduino-tutorial/ +#include "AccelStepper.h" + + // ULN2003 Wiring: -// Pin 3 to IN1 -// Pin 4 to IN2 -// Pin 5 to IN3 -// Pin 6 to IN4 +const int In1 = 3; +const int In2 = 4; +const int In3 = 5; +const int In4 = 6; // Create stepper object called 'myStepper', note the pin order: -Stepper myStepper = Stepper(stepsPerRevolution, 3, 5, 4, 6); +AccelStepper myStepper(4, In1, In3, In2, In4); int prevDimValue=0; int newDimValue=0; char convBuffer[10]; +int pos=0; +unsigned long previousMillis = 0; +const long tempInterval = 60000; float DTemp; float old_DTemp; @@ -67,7 +67,7 @@ void presentation() Serial.println("- - - - - presentation - - - - -"); #endif - sendSketchInfo("Registre Air Chaud", "0.2"); + sendSketchInfo("Registre Air Chaud", "0.3"); present(ROTATION_CHILD_ID, S_DIMMER, "rotation"); present(CHILD_ID_TEMP, S_TEMP, "Temperature"); @@ -78,10 +78,13 @@ void setup() { Serial.println("- - - - - setup - - - - -"); #endif - myStepper.setSpeed(5); // Set the speed to 5 rpm: - + myStepper.setMaxSpeed(1000.0); + myStepper.setAcceleration(50.0); + myStepper.setSpeed(200); + // myStepper.moveTo(2038); // todo make a homing of stepper motor OR find a way to sensorize where it is - + myStepper.setCurrentPosition(0); + send(dimmerMsg.set(prevDimValue)); send(lightMsg.set(1)); @@ -93,16 +96,37 @@ void loop() { // Serial.println("- - - - - loop - - - - -"); #endif - sensors.requestTemperatures(); - old_DTemp = DTemp; - DTemp = sensors.getTempCByIndex(0); - if (DTemp != old_DTemp && DTemp != -127) + unsigned long currentMillis = millis(); + // do measurement every one minute + if (currentMillis - previousMillis >= tempInterval) { - send(msgTemp.set(DTemp, 1)); + previousMillis = currentMillis; + sensors.requestTemperatures(); old_DTemp = DTemp; + DTemp = sensors.getTempCByIndex(0); + if (DTemp != old_DTemp && DTemp != -127) + { + send(msgTemp.set(DTemp, 1)); + old_DTemp = DTemp; + } } - delay(5000); + // myStepper.moveTo(myStepper.currentPosition() + 2048); + + // delay(5000); + + // Change direction once the motor reaches target position + // if (myStepper.distanceToGo() == 0) + // myStepper.moveTo(-myStepper.currentPosition()); + + // Move the motor one step + if(!myStepper.run()){ + // release the stepper motor to free power consumption + digitalWrite(In1, 0); + digitalWrite(In2, 0); + digitalWrite(In3, 0); + digitalWrite(In4, 0); + } } // Handle incoming messages @@ -134,21 +158,8 @@ void receive(const MyMessage &message) { Serial.println(newDimValue); #endif - int quart = stepsPerRevolution / 4; // how many rotation do we want max (here 45° so from 0 to 512 steps) - int diff = prevDimValue - newDimValue; // get the difference between the previous and the new dimm value - prevDimValue = newDimValue; // record new dimm as previous dimm - int steps = (quart / 100) * diff; // convert diff on percent to steps - #ifdef MY_DEBUG - Serial.print("quart: "); - Serial.println(quart); - Serial.print("diff: "); - Serial.println(diff); - Serial.print("steps: "); - Serial.println(steps); - #endif - - myStepper.step(steps); // move the stepper - - // todo release the stepper motor to free power consumption + // todo instead of 1 revolution (2038) define how much revolution we want to do for full opening (100% of the dimmer in HA) + pos = (2038 / 100) * newDimValue; + myStepper.moveTo(pos); // move the stepper } } \ No newline at end of file