Devices & Components
Arduino Mega 2560 Rev3
Resistor 4.75k ohm
PC817 optoisolator
MST_K07_CL universal AC motor torque control
Resistor 10k ohm
Capacitor 10 µF
Project description
Code
CODE
arduino
To control the motor with the Arduino Mega board (you can also use other cards like the nano version) you need to load the following code using the IDE software. Once the Arduino is connected to the PC and to the isolation board, use the IDE software serial monitors to control the motor using the commands: 1) a = switch the motor on at the speed already preset by the rxx command 2) s = turn off the motor 3) rxx: set the speed value (from 0 to 100) (for example r51 commands an adjustment to 51% of the maximum speed
1[code] 2 3/*PROGRAMMA CONTROLLO DEL REGOLATORE MST_K07 TRAMITE INTERFACCIA SERIALE BIDIREZIONALE 4 5 I comandi accettati su monitor seriale sono i seguenti: 6 7 a - accende il MOTORE 8 s - spenge il MOTORE 9 q - richiede lo stato del MOTORE. 10 Possibili risposte: 11 MOTORE acceso con regolazione xxx % 12 MOTORE spento 13 Regolazione impostata al xxx% 14 r xxx - scrive un valore di regolazione in %. Possibili 15 valori per "xxx" vanno da 0 a 100. Gli spazi sono ignorati. 16 I caratteri accettati sono solo quelli numerici (da 0 a 9). 17*/ 18 19//pin 20const byte vcnt = 13; //pin di output pwm 21 22//variabili globali 23byte regolazione = 0; //contiene il valore in % del pwm sul pin 13 24int start =0; // abilita la accensione del regolatore 25void setup() { 26 pinMode(vcnt,OUTPUT); 27 analogWrite(vcnt, regolazione); 28 Serial.begin(9600); // apro la seriale 29 delay(1000); //attendo che l'utente faccia altrettanto 30 Serial.println(F("Interfaccia Seriale Pronta ")); //sono pronto 31 Serial.println(F(" a= accensione; s= spegnimento; rxxx = regolazione al xxx%; q= status motore")); 32 33} 34 35//programma principale 36void loop() { 37 int lettura; //contiene il valore di PWM letto dalla seriale 38 unsigned long tempMillis; //serve per il timeout sulla ricezione del valore di PWM 39 byte caratteri; //contiene il numero di caratteri ricevuti 40 byte tempChar; //contiene il carattere letto 41 42 //controllo se c'è qualcosa in arrivo sulla seriale 43 if (Serial.available()) { 44 byte command = Serial.read(); //leggo il primo byte 45 switch (command) { //controllo che sia un comando valido 46 case 'a': //accendo il MOTORE 47 //;regolazione = 100; 48 start =1; 49 analogWrite(vcnt, start*regolazione*255/100); 50 Serial.print(F("MOTORE")); 51 Serial.print(F(" acceso con regolazione al ")); 52 Serial.print(regolazione, DEC); 53 Serial.println("%"); 54 break; 55 case 's': //spengo il MOTORE 56 start=0; 57 analogWrite(vcnt, 0); 58 Serial.println(F("MOTORE spento")); 59 break; 60 case 'q': //l'utente vuole lo stato del MOTORE 61 Serial.print(F("MOTORE ")); 62 if (start == 0) { 63 Serial.print(F("spento")); 64 } else if (start == 1) { 65 Serial.print(F("acceso")); 66 } 67 Serial.print(F(" regolazione al ")); 68 Serial.print(regolazione, DEC); 69 Serial.println("%"); 70 71 break; 72 case 'r': //imposto il PWM sul MOTORE 73 lettura = 0; 74 tempMillis = millis(); 75 caratteri = 0; 76 //mi servono altri caratteri 77 do { 78 if (Serial.available()) { 79 tempChar = Serial.read(); 80 caratteri++; 81 if ((tempChar >= 48) && (tempChar <= 57)) { //è un numero? ok 82 lettura = (lettura * 10) + (tempChar - 48); 83 } else if ((tempChar == 10) || (tempChar == 13)) { 84 //con invio e/o nuova linea esco 85 break; 86 } 87 } 88 //esco per timeout, per un valore di PWM maggiore di 255 89 //oppure per troppi caratteri senza senso ricevuti 90 } while ((millis() - tempMillis < 500) && (lettura <= 100) && (caratteri < 10)); 91 //se il valore di PWM è valido, lo imposto sul pin 92 if (lettura <= 100) { 93 regolazione = lettura; 94 analogWrite(vcnt, start*regolazione*255/100); 95 Serial.print(F("regolazione impostata a ")); 96 Serial.print(regolazione, DEC); 97 Serial.println("%"); 98 } 99 break; 100 } 101 //svuoto il buffer da eventuali altri caratteri che non mi servono più 102 while (Serial.available()) { 103 byte a = Serial.read(); 104 } 105 } 106} 107[/code]
CODE
arduino
To control the motor with the Arduino Mega board (you can also use other cards like the nano version) you need to load the following code using the IDE software. Once the Arduino is connected to the PC and to the isolation board, use the IDE software serial monitors to control the motor using the commands: 1) a = switch the motor on at the speed already preset by the rxx command 2) s = turn off the motor 3) rxx: set the speed value (from 0 to 100) (for example r51 commands an adjustment to 51% of the maximum speed
1[code] 2 3/*PROGRAMMA CONTROLLO DEL REGOLATORE MST_K07 TRAMITE INTERFACCIA SERIALE BIDIREZIONALE 4 5 I comandi accettati su monitor seriale sono i seguenti: 6 7 a - accende il MOTORE 8 s - spenge il MOTORE 9 q - richiede lo stato del MOTORE. 10 Possibili risposte: 11 MOTORE acceso con regolazione xxx % 12 MOTORE spento 13 Regolazione impostata al xxx% 14 r xxx - scrive un valore di regolazione in %. Possibili 15 valori per "xxx" vanno da 0 a 100. Gli spazi sono ignorati. 16 I caratteri accettati sono solo quelli numerici (da 0 a 9). 17*/ 18 19//pin 20const byte vcnt = 13; //pin di output pwm 21 22//variabili globali 23byte regolazione = 0; //contiene il valore in % del pwm sul pin 13 24int start =0; // abilita la accensione del regolatore 25void setup() { 26 pinMode(vcnt,OUTPUT); 27 analogWrite(vcnt, regolazione); 28 Serial.begin(9600); // apro la seriale 29 delay(1000); //attendo che l'utente faccia altrettanto 30 Serial.println(F("Interfaccia Seriale Pronta ")); //sono pronto 31 Serial.println(F(" a= accensione; s= spegnimento; rxxx = regolazione al xxx%; q= status motore")); 32 33} 34 35//programma principale 36void loop() { 37 int lettura; //contiene il valore di PWM letto dalla seriale 38 unsigned long tempMillis; //serve per il timeout sulla ricezione del valore di PWM 39 byte caratteri; //contiene il numero di caratteri ricevuti 40 byte tempChar; //contiene il carattere letto 41 42 //controllo se c'è qualcosa in arrivo sulla seriale 43 if (Serial.available()) { 44 byte command = Serial.read(); //leggo il primo byte 45 switch (command) { //controllo che sia un comando valido 46 case 'a': //accendo il MOTORE 47 //;regolazione = 100; 48 start =1; 49 analogWrite(vcnt, start*regolazione*255/100); 50 Serial.print(F("MOTORE")); 51 Serial.print(F(" acceso con regolazione al ")); 52 Serial.print(regolazione, DEC); 53 Serial.println("%"); 54 break; 55 case 's': //spengo il MOTORE 56 start=0; 57 analogWrite(vcnt, 0); 58 Serial.println(F("MOTORE spento")); 59 break; 60 case 'q': //l'utente vuole lo stato del MOTORE 61 Serial.print(F("MOTORE ")); 62 if (start == 0) { 63 Serial.print(F("spento")); 64 } else if (start == 1) { 65 Serial.print(F("acceso")); 66 } 67 Serial.print(F(" regolazione al ")); 68 Serial.print(regolazione, DEC); 69 Serial.println("%"); 70 71 break; 72 case 'r': //imposto il PWM sul MOTORE 73 lettura = 0; 74 tempMillis = millis(); 75 caratteri = 0; 76 //mi servono altri caratteri 77 do { 78 if (Serial.available()) { 79 tempChar = Serial.read(); 80 caratteri++; 81 if ((tempChar >= 48) && (tempChar <= 57)) { //è un numero? ok 82 lettura = (lettura * 10) + (tempChar - 48); 83 } else if ((tempChar == 10) || (tempChar == 13)) { 84 //con invio e/o nuova linea esco 85 break; 86 } 87 } 88 //esco per timeout, per un valore di PWM maggiore di 255 89 //oppure per troppi caratteri senza senso ricevuti 90 } while ((millis() - tempMillis < 500) && (lettura <= 100) && (caratteri < 10)); 91 //se il valore di PWM è valido, lo imposto sul pin 92 if (lettura <= 100) { 93 regolazione = lettura; 94 analogWrite(vcnt, start*regolazione*255/100); 95 Serial.print(F("regolazione impostata a ")); 96 Serial.print(regolazione, DEC); 97 Serial.println("%"); 98 } 99 break; 100 } 101 //svuoto il buffer da eventuali altri caratteri che non mi servono più 102 while (Serial.available()) { 103 byte a = Serial.read(); 104 } 105 } 106} 107[/code]
Downloadable files
ARDUINO and MST_K07_CL wire connection
see wire connection
ARDUINO and MST_K07_CL wire connection

Comments
Only logged in users can leave comments