]> git.piffa.net Git - sketchbook_andrea/commitdiff
motori e diodi
authorAndrea Manni <andrea@piffa.net>
Mon, 18 May 2015 16:08:00 +0000 (18:08 +0200)
committerAndrea Manni <andrea@piffa.net>
Mon, 18 May 2015 16:08:00 +0000 (18:08 +0200)
basic/blinks/blink_7_diode/blink_7_diode.ino [new file with mode: 0644]
motors/README [new file with mode: 0644]
motors/blink_7_diode [new symlink]
motors/simple_motor_4_serial/simple_motor_4_serial.ino [new file with mode: 0644]
motors/simple_motor_PWM_potenziometer__minimum_transistor_diode_3/simple_motor_PWM_potenziometer__minimum_transistor_diode_3.ino
motors/simple_motor_PWM_potenziometer_transistor_diode_2/simple_motor_PWM_potenziometer_transistor_diode_2.ino
motors/simple_motor_PWM_potenziometer_transistor_diode_2_soluzione/simple_motor_PWM_potenziometer_transistor_diode_2_soluzione.ino [new file with mode: 0644]
motors/simple_motor_PWM_transistor_diode_1/simple_motor_PWM_transistor_diode_1.ino
motors/simple_motor_PWM_transistor_diode_1_soluzione/simple_motor_PWM_transistor_diode_1_soluzione.ino [new file with mode: 0644]
motors/simple_motor_transistor_diode_0/simple_motor_transistor_diode_0.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 (file)
index 0000000..330206e
--- /dev/null
@@ -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 (file)
index 0000000..73d05f3
--- /dev/null
@@ -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 (symlink)
index 0000000..fd98e98
--- /dev/null
@@ -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 (file)
index 0000000..ff20e9b
--- /dev/null
@@ -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
+*/
+
+
+
+
+
+
index 83965d143790493f98bd973d2cc4eaa9d35bfff9..4e680009fd0cae93562eeb81198fe2272b5f8081 100644 (file)
@@ -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
+
 }
 
 
index 54a87ed86401bb709cbdf309073469bd5f37af50..9e60b45557dce8bca93a1084429b5006c225f21f 100644 (file)
@@ -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 (file)
index 0000000..872d474
--- /dev/null
@@ -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           
+}
+
+
+
+
+
+
+
index ac23845a35d33fff9a08f8a51808000cbe235dc0..90a2736168c3d08a26b4e3c19efd2f594207641e 100644 (file)
@@ -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 (file)
index 0000000..abe014d
--- /dev/null
@@ -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
+
+*/
+
index 5b86a2bf7250152e875423bcaa4812d108c4c251..c2709f593c554e83fd536ba53c97ff7d1545fc97 100644 (file)
@@ -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);
 }