Compare commits
	
		
			2 Commits
		
	
	
		
			c5b402a1b4
			...
			3d525d6a3a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 3d525d6a3a | |||
| 3eb2a581bb | 
| @@ -1,121 +0,0 @@ | ||||
| #define MY_DEBUG | ||||
| // Enable and select radio type attached  | ||||
| #define MY_RADIO_RF24 | ||||
| // #define MY_RF24_PA_LEVEL RF24_PA_MIN | ||||
| // #define MY_RF24_PA_LEVEL RF24_PA_LOW | ||||
| #define MY_RF24_PA_LEVEL RF24_PA_HIGH | ||||
| //#define MY_RF24_PA_LEVEL RF24_PA_MAX | ||||
|  | ||||
| #define MY_RF24_CHANNEL 14 | ||||
|  | ||||
| #define MY_REPEATER_FEATURE | ||||
|  | ||||
| #include <SPI.h> | ||||
| #include <MySensors.h> | ||||
|  | ||||
| #define ROTATION_CHILD_ID 0 | ||||
|  | ||||
| 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 | ||||
|  | ||||
| /*  | ||||
| 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 | ||||
|  | ||||
| // ULN2003 Wiring: | ||||
| // Pin 3 to IN1 | ||||
| // Pin 4 to IN2 | ||||
| // Pin 5 to IN3 | ||||
| // Pin 6 to IN4 | ||||
|  | ||||
| // Create stepper object called 'myStepper', note the pin order: | ||||
| Stepper myStepper = Stepper(stepsPerRevolution, 3, 5, 4, 6); | ||||
|  | ||||
| int prevDimValue=0; | ||||
| int newDimValue=0; | ||||
| char convBuffer[10]; | ||||
|  | ||||
| void presentation()   | ||||
| {  | ||||
|   #ifdef MY_DEBUG | ||||
|     Serial.println("- - - - - presentation - - - - -"); | ||||
|   #endif | ||||
|    | ||||
|   sendSketchInfo("Registre Air Chaud", "0.1"); | ||||
|  | ||||
|   present(ROTATION_CHILD_ID, S_DIMMER, "rotation"); | ||||
| } | ||||
|  | ||||
| void setup() { | ||||
|   #ifdef MY_DEBUG | ||||
|     Serial.println("- - - - - setup - - - - -"); | ||||
|   #endif | ||||
|    | ||||
|   myStepper.setSpeed(5); // Set the speed to 5 rpm: | ||||
|  | ||||
|   // todo make a homing of stepper motor OR find a way to sensorize where it is | ||||
|    | ||||
|   send(dimmerMsg.set(prevDimValue)); | ||||
|   send(lightMsg.set(1)); | ||||
| } | ||||
|  | ||||
| void loop() { | ||||
|   #ifdef MY_DEBUG | ||||
|     // Serial.println("- - - - - loop - - - - -"); | ||||
|   #endif | ||||
|   delay(5000); | ||||
| } | ||||
|  | ||||
| // Handle incoming messages  | ||||
| void receive(const MyMessage &message) { | ||||
|  | ||||
|   #ifdef MY_DEBUG | ||||
|     Serial.println("- - - - - receive - - - - -"); | ||||
|     Serial.print("Last reading for sensor: "); | ||||
|   #endif | ||||
|  | ||||
|   if (message.type == V_LIGHT) { | ||||
|  | ||||
|     #ifdef MY_DEBUG | ||||
|       Serial.println("- - - - - receive V_LIGHT - - - - -"); | ||||
|     #endif | ||||
|  | ||||
|   } else if (message.type == V_DIMMER) { | ||||
|  | ||||
|     #ifdef MY_DEBUG | ||||
|       Serial.println("- - - - - receive V_DIMMER - - - - -"); | ||||
|     #endif | ||||
|  | ||||
|     newDimValue = atoi(message.getString(convBuffer)); | ||||
|  | ||||
|     #ifdef MY_DEBUG | ||||
|       Serial.print("prevDimValue: "); | ||||
|       Serial.println(prevDimValue);   | ||||
|       Serial.print("newDimValue: "); | ||||
|       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 | ||||
|   } | ||||
| } | ||||
							
								
								
									
										165
									
								
								registre_airchaud_code.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								registre_airchaud_code.ino
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,165 @@ | ||||
| #define MY_DEBUG | ||||
| // Enable and select radio type attached  | ||||
| #define MY_RADIO_RF24 | ||||
| // #define MY_RF24_PA_LEVEL RF24_PA_MIN | ||||
| // #define MY_RF24_PA_LEVEL RF24_PA_LOW | ||||
| // #define MY_RF24_PA_LEVEL RF24_PA_HIGH | ||||
| #define MY_RF24_PA_LEVEL RF24_PA_MAX | ||||
|  | ||||
| #define MY_RF24_CHANNEL 14 | ||||
|  | ||||
| #define MY_REPEATER_FEATURE | ||||
|  | ||||
| #define MY_DEFAULT_RX_LED_PIN A0 | ||||
| #define MY_DEFAULT_TX_LED_PIN A1 | ||||
| #define MY_DEFAULT_ERR_LED_PIN A2 | ||||
|  | ||||
| #include <SPI.h> | ||||
| #include <MySensors.h> | ||||
|  | ||||
| // https://lastminuteengineers.com/multiple-ds18b20-arduino-tutorial/ | ||||
| #include <OneWire.h> | ||||
| #include <DallasTemperature.h> | ||||
|  | ||||
| // Data wire is plugged into port 11 on the Arduino | ||||
| #define ONE_WIRE_BUS 7 | ||||
| // Setup a oneWire instance to communicate with any OneWire devices | ||||
| OneWire oneWire(ONE_WIRE_BUS); | ||||
|  | ||||
| // Pass our oneWire reference to Dallas Temperature. | ||||
| DallasTemperature sensors(&oneWire); | ||||
|  | ||||
| #define ROTATION_CHILD_ID 0 | ||||
| #define CHILD_ID_TEMP 1 | ||||
|  | ||||
| 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); | ||||
|  | ||||
| // https://lastminuteengineers.com/28byj48-stepper-motor-arduino-tutorial/ | ||||
| #include "AccelStepper.h" | ||||
|  | ||||
|  | ||||
| // ULN2003 Wiring: | ||||
| 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: | ||||
| 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; | ||||
|  | ||||
|  | ||||
| void presentation()   | ||||
| {  | ||||
|   #ifdef MY_DEBUG | ||||
|     Serial.println("- - - - - presentation - - - - -"); | ||||
|   #endif | ||||
|    | ||||
|   sendSketchInfo("Registre Air Chaud", "0.3"); | ||||
|  | ||||
|   present(ROTATION_CHILD_ID, S_DIMMER, "rotation"); | ||||
|   present(CHILD_ID_TEMP, S_TEMP, "Temperature"); | ||||
| } | ||||
|  | ||||
| void setup() { | ||||
|   #ifdef MY_DEBUG | ||||
|     Serial.println("- - - - - setup - - - - -"); | ||||
|   #endif | ||||
|    | ||||
|   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)); | ||||
|  | ||||
|   sensors.begin(); | ||||
| } | ||||
|  | ||||
| void loop() { | ||||
|   #ifdef MY_DEBUG | ||||
|     // Serial.println("- - - - - loop - - - - -"); | ||||
|   #endif | ||||
|  | ||||
|   unsigned long currentMillis = millis(); | ||||
|   // do measurement every one minute | ||||
|   if (currentMillis - previousMillis >= tempInterval) | ||||
|   { | ||||
|     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; | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   // 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  | ||||
| void receive(const MyMessage &message) { | ||||
|  | ||||
|   #ifdef MY_DEBUG | ||||
|     Serial.println("- - - - - receive - - - - -"); | ||||
|     Serial.print("Last reading for sensor: "); | ||||
|   #endif | ||||
|  | ||||
|   if (message.type == V_LIGHT) { | ||||
|  | ||||
|     #ifdef MY_DEBUG | ||||
|       Serial.println("- - - - - receive V_LIGHT - - - - -"); | ||||
|     #endif | ||||
|  | ||||
|   } else if (message.type == V_DIMMER) { | ||||
|  | ||||
|     #ifdef MY_DEBUG | ||||
|       Serial.println("- - - - - receive V_DIMMER - - - - -"); | ||||
|     #endif | ||||
|  | ||||
|     newDimValue = atoi(message.getString(convBuffer)); | ||||
|  | ||||
|     #ifdef MY_DEBUG | ||||
|       Serial.print("prevDimValue: "); | ||||
|       Serial.println(prevDimValue);   | ||||
|       Serial.print("newDimValue: "); | ||||
|       Serial.println(newDimValue); | ||||
|     #endif | ||||
|      | ||||
|     // 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 | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user