je cherche à intégrer à domoticz un montage à base de arduino nano qui me permet de gérer la vitesse de rotation d'un ventilateur (PWM) de 0 à 100.
L'arduino et le Raspberry pi sont connectés en USB et j'ai déjà un script en python qui me permet de le gérer depuis le terminal.
Pour le moment, dans domoticz j'ai un switch (dimmer) virtuel.
J'ai besoin d'aide pour un script qui fasse varier la vitesse de mon ventilateur en fonction de mon virtuel...
Le script que j'utilise sur le RPI est posté plus bas.
Voici le code présent dans l'arduino:
Code : Tout sélectionner
const byte OC1A_PIN = 9;
const byte OC1B_PIN = 10;
const word PWM_FREQ_HZ = 25000; //Adjust this value to adjust the frequency
const word TCNT1_TOP = 16000000/(2*PWM_FREQ_HZ);
byte in = 0;
void setup() {
pinMode(OC1A_PIN, OUTPUT);
Serial.begin(9600);
Serial.println("Demarage du PWM"); // so I can keep track of what is loaded
// Clear Timer1 control and count registers
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
// Set Timer1 configuration
// COM1A(1:0) = 0b10 (Output A clear rising/set falling)
// COM1B(1:0) = 0b00 (Output B normal operation)
// WGM(13:10) = 0b1010 (Phase correct PWM)
// ICNC1 = 0b0 (Input capture noise canceler disabled)
// ICES1 = 0b0 (Input capture edge select disabled)
// CS(12:10) = 0b001 (Input clock select = clock/1)
TCCR1A |= (1 << COM1A1) | (1 << WGM11);
TCCR1B |= (1 << WGM13) | (1 << CS10);
ICR1 = TCNT1_TOP;
}
void loop() {
if (Serial.available()) { // Check if there's data
char buf[10];
int in = Serial.readBytesUntil('\n', buf, sizeof buf - 1);
buf[in]=0;
in = atoi(buf);
if (in > 100)
in = 100;
Serial.println(in);// Pass the value of "in" to the pin}
setPwmDuty(in); //Change this value 0-100 to adjust duty cycle
}
}
void setPwmDuty(byte duty) {
OCR1A = (word) (duty*TCNT1_TOP)/100;
}Code : Tout sélectionner
import serial
ser = serial.Serial('/dev/ttyUSB0', 9600)
while True :
vitesse = int(input('Vitesse desiree: '))
if (vitesse > 100 ) :
ser.write(str(100))
print(100)
elif (vitesse == 0) :
ser.write(str(0))
print('OFF')
else :
ser.write(str(vitesse))
print(vitesse)