--- /dev/null
+/*
+ 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
+}
+
+
+
--- /dev/null
+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
--- /dev/null
+../basic/blinks/blink_7_diode
\ No newline at end of file
--- /dev/null
+/*
+ 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
+*/
+
+
+
+
+
+
/*
- 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);
}
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) ;
}
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
+
}
/*
- 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;
}
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.
+*/
--- /dev/null
+/*
+ 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
+}
+
+
+
+
+
+
+
-/* 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);
}
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?
+*/
--- /dev/null
+/* 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
+
+*/
+
/* 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);
}