From 273776f9e56f1c7478d69ff4c3f653b349e8b3fe Mon Sep 17 00:00:00 2001 From: Andrea Manni Date: Mon, 18 May 2015 18:08:00 +0200 Subject: [PATCH] motori e diodi --- basic/blinks/blink_7_diode/blink_7_diode.ino | 48 ++++++++++++ motors/README | 10 +++ motors/blink_7_diode | 1 + .../simple_motor_4_serial.ino | 78 +++++++++++++++++++ ...enziometer__minimum_transistor_diode_3.ino | 32 ++++---- ...r_PWM_potenziometer_transistor_diode_2.ino | 28 +++---- ...nziometer_transistor_diode_2_soluzione.ino | 47 +++++++++++ .../simple_motor_PWM_transistor_diode_1.ino | 22 +++--- ...motor_PWM_transistor_diode_1_soluzione.ino | 38 +++++++++ .../simple_motor_transistor_diode_0.ino | 24 +++--- 10 files changed, 278 insertions(+), 50 deletions(-) create mode 100644 basic/blinks/blink_7_diode/blink_7_diode.ino create mode 100644 motors/README create mode 120000 motors/blink_7_diode create mode 100644 motors/simple_motor_4_serial/simple_motor_4_serial.ino create mode 100644 motors/simple_motor_PWM_potenziometer_transistor_diode_2_soluzione/simple_motor_PWM_potenziometer_transistor_diode_2_soluzione.ino create mode 100644 motors/simple_motor_PWM_transistor_diode_1_soluzione/simple_motor_PWM_transistor_diode_1_soluzione.ino diff --git a/basic/blinks/blink_7_diode/blink_7_diode.ino b/basic/blinks/blink_7_diode/blink_7_diode.ino new file mode 100644 index 0000000..330206e --- /dev/null +++ b/basic/blinks/blink_7_diode/blink_7_diode.ino @@ -0,0 +1,48 @@ +/* + Blink v7: diodi + + Accensione e spegnimanto di 2 LED invertendo il verso di percorrenza + della corrente elettrica. + + Nel circuito metteremo un LED sul pin 2 e un altro sul pin 3, + i due LED con una resistenza in serie saranno collegati ai due LED + (il piede + del primo LED sul pin 2 e il piedino - sul pin 3, + viceversa per l'altro LED. + + Sostanzialmente e' un circuito a corrente alternata. + + Schema: http://lab.piffa.net/schemi/diodi_bb.png + + Ricordarsi di usare una resistenza da ~320ohms per i LED. + Resistenza = (Voltaggio_Arduino - Forward_voltage_LED) / (ampere utilizzati) + R = (5v-1.8v) / 0.010a + R =320ohms + + This example code is in the public domain. + */ + + +int two = 2; // Pin per i LED +int tree = 3; // Pin per i LED +int pause = 200; // Variabile richiambile nel corso dell'esecuzione + + +void setup() { + pinMode(two, OUTPUT); // Abilitaiamo entrambi i LED, questo comporta + // collegarli dalla resistenza interna! + pinMode(tree, OUTPUT); +} + + +void loop() { + digitalWrite(two, HIGH); // turn the LED on (HIGH is the voltage level) + digitalWrite(tree, LOW); // turn the LED off by making the voltage LOW + delay(pause); // wait for a second + + digitalWrite(two, LOW); // turn the LED off by making the voltage LOW + digitalWrite(tree, HIGH); // turn the LED on (HIGH is the voltage level) + delay(pause); // wait for a second +} + + + diff --git a/motors/README b/motors/README new file mode 100644 index 0000000..73d05f3 --- /dev/null +++ b/motors/README @@ -0,0 +1,10 @@ +Esercizi successivi +======================= + + +1. Fare il reverse del motore +1.1 Utilizzare 4 transistor in configurazione ad H +1.2 Utilizzare un driver: L2930 - motor shield - TB6612 +2. Utilizzar il motore con millis() contemporaneamente a LED o altro +3. Utilizzare 2 motori contemporaneamente +3. Utilizzare 2 motori contemporaneamente gestendoli da un telecomando IR diff --git a/motors/blink_7_diode b/motors/blink_7_diode new file mode 120000 index 0000000..fd98e98 --- /dev/null +++ b/motors/blink_7_diode @@ -0,0 +1 @@ +../basic/blinks/blink_7_diode \ No newline at end of file diff --git a/motors/simple_motor_4_serial/simple_motor_4_serial.ino b/motors/simple_motor_4_serial/simple_motor_4_serial.ino new file mode 100644 index 0000000..ff20e9b --- /dev/null +++ b/motors/simple_motor_4_serial/simple_motor_4_serial.ino @@ -0,0 +1,78 @@ +/* + Simple Motor: Seriale + + Motore DC con variazione della velocita' impostata da connessione seriale + + */ + +const int motorPin = 9; +int motValue ; + +void setup() { + pinMode(motorPin, OUTPUT); + Serial.begin(9600); // Input + Serial.println("\t Usare valori da 0-255"); + // Serial.setTimeout(2000); // Imposta il tempo di time out per la lettura + // del buffer seriale, default = 1000ms + +} +void loop() { +if (Serial.available()) + { + motValue = Serial.parseInt(); // leggiamo un valore da seriale + motValue = constrain(motValue,0,255); // Limitiamo l'input dell'utente + + analogWrite(motorPin,motValue); // Change the PWM speed of the motor + Serial.print("Velocita' motore = "); + Serial.println(motValue); + } + + + +} + +/* Domande +1. Perche' il motore si resetta a zero dopo una breve pausa? +2. Come e' possibile fare in modo che il motore resti attivo + al valore dato? +3. Da cosa e' dovuto e come e' possibile rendere il circuito piu' responsivo + all'input dell'utente. +- Risposte a fondo pagina + + + + + + + + + + + + + + + + + + + + + + + + + + +1. Perche' vede il valore di terminazione riga + e lo scarta facendolo passare per zero +2. Impostare il monitor seriale per "Nessun fine riga" +2.1 impostare un ciclo condizionale che controlli che l'input sia composto solo da numeri +3. Impostare Serial.setTimeout che definisce il tempo di lettura del buffer seriale +*/ + + + + + + diff --git a/motors/simple_motor_PWM_potenziometer__minimum_transistor_diode_3/simple_motor_PWM_potenziometer__minimum_transistor_diode_3.ino b/motors/simple_motor_PWM_potenziometer__minimum_transistor_diode_3/simple_motor_PWM_potenziometer__minimum_transistor_diode_3.ino index 83965d1..4e68000 100644 --- a/motors/simple_motor_PWM_potenziometer__minimum_transistor_diode_3/simple_motor_PWM_potenziometer__minimum_transistor_diode_3.ino +++ b/motors/simple_motor_PWM_potenziometer__minimum_transistor_diode_3/simple_motor_PWM_potenziometer__minimum_transistor_diode_3.ino @@ -1,24 +1,20 @@ /* - Simple Motor with variable spped from pot input + Simple Motor : Potenziometro con minimo + + Motore DC con variazione della velocita' impostata + tramite un potenziometro 10k ohms + + Schema: http://lab.piffa.net/schemi/motor_pot_bb.png - This sketch use a transistor and a diode - in order to poer a 5v ~150mAh directly from the board. - Hard thing is to find a suitable motor! - - - This version uses a pot as throttle control, - serial for debuggin. - - Optimized for a minimum throttle value in order to keep the motor off */ -const int analogInPin = A0; +const int analogInPin = A0; // Pin a cui e' collegato il potenziometro const int motorPin = 9; int potValue = 0; int motValue = 0; -const int minMotValue = 50 ; // Minimum power requiement of my own motr, - // This is going to differ from motor to motor +const int minMotValue = 50 ; // Valore minimo per il motore, + // questo variera' in base ai motori void setup() { pinMode(motorPin, OUTPUT); @@ -27,10 +23,10 @@ void setup() { } void loop() { potValue = analogRead(analogInPin); - motValue = potValue / 4 ; // Simple mapping 1024 -> 255 + motValue = potValue / 4 ; // mappatura 1024 -> 255 if (motValue > minMotValue) { // Minimum motor spped check - analogWrite(motorPin,motValue); // Change the PWM speed of the motor + analogWrite(motorPin,motValue); // Imposta la velocita' del motore } else { analogWrite(motorPin,LOW) ; } @@ -38,10 +34,10 @@ analogWrite(motorPin,LOW) ; Serial.print("Pot value = " ); Serial.print(potValue); - Serial.print("\t Motor speed = "); + Serial.print("\t Motore velocita' = "); Serial.println(motValue); - delay(3); // Pause, helps to stabilize the input, - // slows the serial output + delay(3); // Pausa, aiuta a stabilizzare l'input + } diff --git a/motors/simple_motor_PWM_potenziometer_transistor_diode_2/simple_motor_PWM_potenziometer_transistor_diode_2.ino b/motors/simple_motor_PWM_potenziometer_transistor_diode_2/simple_motor_PWM_potenziometer_transistor_diode_2.ino index 54a87ed..9e60b45 100644 --- a/motors/simple_motor_PWM_potenziometer_transistor_diode_2/simple_motor_PWM_potenziometer_transistor_diode_2.ino +++ b/motors/simple_motor_PWM_potenziometer_transistor_diode_2/simple_motor_PWM_potenziometer_transistor_diode_2.ino @@ -1,15 +1,13 @@ /* - Simple Motor with variable spped from pot input + Simple Motor : Potenziometro - This sketch use a transistor and a diode - in order to poer a 5v ~150mAh directly from the board. - Hard thing is to find a suitable motor! + Motore DC con variazione della velocita' impostata + tramite un potenziometro 10k ohms - This version uses a pot as throttle control, - serial for debuggin. + Schema: http://lab.piffa.net/schemi/motor_pot_bb.png */ -const int analogInPin = A0; +const int analogInPin = A0; // Pin a cui e' collegato il potenziometro const int motorPin = 9; int potValue = 0; @@ -22,20 +20,24 @@ void setup() { } void loop() { potValue = analogRead(analogInPin); - motValue = potValue / 4 ; // Simple mapping 1024 -> 255 + motValue = potValue / 4 ; //mappatura 1024 -> 255 - analogWrite(motorPin,motValue); // Change the PWM speed of the motor + analogWrite(motorPin,motValue); // Imposta la velocita' del motore Serial.print("Pot value = " ); Serial.print(potValue); - Serial.print("\t Motor speed = "); + Serial.print("\t Motore velocita' = "); Serial.println(motValue); - delay(3); // Pause, helps to stabilize the input - // and keeps a brushed motor from over heating ;) + delay(3); // Pausa, aiuta a stabilizzare l'input + } +/* Domande - +1. Cosa succede quando il motore ha riceve un carico molto basso? +2. Impostare un valore minimo per la partenza del motore, + sotto al quale il motore non parte. +*/ diff --git a/motors/simple_motor_PWM_potenziometer_transistor_diode_2_soluzione/simple_motor_PWM_potenziometer_transistor_diode_2_soluzione.ino b/motors/simple_motor_PWM_potenziometer_transistor_diode_2_soluzione/simple_motor_PWM_potenziometer_transistor_diode_2_soluzione.ino new file mode 100644 index 0000000..872d474 --- /dev/null +++ b/motors/simple_motor_PWM_potenziometer_transistor_diode_2_soluzione/simple_motor_PWM_potenziometer_transistor_diode_2_soluzione.ino @@ -0,0 +1,47 @@ +/* + Simple Motor: Pot - Soluzione + + Motore DC con variazione della velocita' tramite PWM + pilotata da un potenziometro + + Impostare una mappatura in modo che il motore parta + da un valore minimo adeguato. + + */ + +const int analogInPin = A0; +const int motorPin = 9; + +int potValue = 0; +int motValue = 0; + +void setup() { + pinMode(motorPin, OUTPUT); + Serial.begin(9600); // Debuggin + +} +void loop() { + potValue = analogRead(analogInPin) ; + motValue = potValue / 4 ;// Mappatura semplificata da 1024 -> 255 + +// Debug + Serial.print("Pot value = " ); + Serial.print(potValue); + Serial.print("\t Motor speed = "); + Serial.println(motValue); + + if (motValue > 60) { // Valore minimo per far partire il motore + analogWrite(motorPin,motValue); // + } + else analogWrite(motorPin,0); // Se non super il valore minimo + // deve restare fermo + + delay(3); // Pause, stabilizza la lettura del Pot +} + + + + + + + diff --git a/motors/simple_motor_PWM_transistor_diode_1/simple_motor_PWM_transistor_diode_1.ino b/motors/simple_motor_PWM_transistor_diode_1/simple_motor_PWM_transistor_diode_1.ino index ac23845..90a2736 100644 --- a/motors/simple_motor_PWM_transistor_diode_1/simple_motor_PWM_transistor_diode_1.ino +++ b/motors/simple_motor_PWM_transistor_diode_1/simple_motor_PWM_transistor_diode_1.ino @@ -1,12 +1,10 @@ -/* Simple Motor - This sketch use a transistor and a diode - in order to poer a 5v ~150mAh directly from the board. - Hard thing is to find a suitable motor! - - This version uses PWM for acceleration / deceleration +/* Simple Motor: PWM + Gestine di un motore DC utilizzando il PWM + per modificarne la velocita': ciclo ascendente e discendente + */ -int motorPin = 9; +int motorPin = 9; // Pin tramite cui Arduino controlla il motore void setup() { pinMode(motorPin, OUTPUT); } @@ -22,6 +20,10 @@ void loop() { delay(900); // Pause } - - - +/* Domande +1. Il motore si muove con i valori di corrente molto bassi? +2. A quali valori comincia a muoversi effettivamente? +2.1 E per fermarsi, il valore e' diverso? +3. Impostare un valore minimo per la partenza del motore. +4. Come fare per invertire la direzione di rotazione del motore? +*/ diff --git a/motors/simple_motor_PWM_transistor_diode_1_soluzione/simple_motor_PWM_transistor_diode_1_soluzione.ino b/motors/simple_motor_PWM_transistor_diode_1_soluzione/simple_motor_PWM_transistor_diode_1_soluzione.ino new file mode 100644 index 0000000..abe014d --- /dev/null +++ b/motors/simple_motor_PWM_transistor_diode_1_soluzione/simple_motor_PWM_transistor_diode_1_soluzione.ino @@ -0,0 +1,38 @@ +/* Simple Motor: PWM Soluzione + + Motore DC con variazione della velocita' tramite PWM + + */ + +int motorPin = 9; +int minValue = 60; // Valore minimo per far partire il motore da fermo +void setup() { + pinMode(motorPin, OUTPUT); +} +void loop() { + for(int motorValue = minValue ; motorValue <= 255; motorValue +=5){ // PWM up + analogWrite(motorPin, motorValue); + delay(60); + } + for(int motorValue = 255 ; motorValue >= 30; motorValue -=5){ // + // Quando il motore e' in movimento puo' muoversi fino a un valore piu' basso + // di minVal + analogWrite(motorPin, motorValue); + delay(30); + } +analogWrite(motorPin, 0); // Fermiamo il motore per sicurezza +delay(900); // Pause +} + +/* Domande +1. Il motore si muove con i valori di corrente molto bassi? +2. A quali valori comincia a muoversi effettivamente? +2.1 E per fermarsi, il valore e' diverso? +3. Impostare un valore minimo per la partenza del motore. +4. Come fare per invertire la direzione di rotazione del motore? + + Risposte: +4. Basta invertire la polarita' dei cavi che vanno al motore + +*/ + diff --git a/motors/simple_motor_transistor_diode_0/simple_motor_transistor_diode_0.ino b/motors/simple_motor_transistor_diode_0/simple_motor_transistor_diode_0.ino index 5b86a2b..c2709f5 100644 --- a/motors/simple_motor_transistor_diode_0/simple_motor_transistor_diode_0.ino +++ b/motors/simple_motor_transistor_diode_0/simple_motor_transistor_diode_0.ino @@ -1,21 +1,27 @@ /* Simple Motor - This sketch use a transistor and a diode - in order to power a 5v ~150mAh directly from the board. - Hard thing is to find a suitable motor! - In order to power a more powerfull motor you need to connect - the transistor to an other power line. +Gestione di un motore DC tramite Arduino. +Elementi richiesti: + +- motore DC a 5v per ~300ma +- transistor NPN 2N2222 +- diodo 1N4001 + + Schemi: + - Breadboard: http://lab.piffa.net/schemi/motor_transistor_diode_bb.png + - Schema circuito: http://lab.piffa.net/schemi/motor_transistor_diode_schem.png + */ -int motorPin = 9; +int motorPin = 9; // Pin tramite cui Arduino controlla il motore void setup() { - pinMode(motorPin, OUTPUT); // We drive the motor just like a LED + pinMode(motorPin, OUTPUT); } void loop() { - digitalWrite(motorPin, HIGH); // Turn on the motor full throttle + digitalWrite(motorPin, HIGH); // Accende il motore a tutta potenza delay(1000); - digitalWrite(motorPin, LOW); // Turn off motor + digitalWrite(motorPin, LOW); // Spegne il motore delay(5000); } -- 2.39.2