lunedì 26 gennaio 2015
GSM Shield parte 1a.
ATTENZIONE: La Shield accetta, sul proprio spinotto, un'alimentazione esterna di 5V e non di 12V.Collegato con la 12V si è bruciato il condensatore di ingresso ma alimentadola
da Arduino (spostare il selettore) funziona.
Ricordarsi di modificare (eventualmente) i pin di Tx ed Rx all'interno del file GSM.cpp
domenica 25 gennaio 2015
GSM Shield .Test
Dopo aver inserito la shield premere il pulsante Power Key.
Oltre al led pover si accende il led rosso Status led ed il led verde Net light.
Il led Net Ligh lampeggia a frequenza elevata quando ricerca la rete a frequenza bassa (un lampeggìo ogni 3 sec.) quando è agganciato alla rete.
Nel file GSM.cpp assicurarsi che :
#define _GSM_TXPIN_ 7
#define _GSM_RXPIN_ 8
NOTA: Ok, funziona.
Oltre al led pover si accende il led rosso Status led ed il led verde Net light.
Il led Net Ligh lampeggia a frequenza elevata quando ricerca la rete a frequenza bassa (un lampeggìo ogni 3 sec.) quando è agganciato alla rete.
Nel file GSM.cpp assicurarsi che :
#define _GSM_TXPIN_ 7
#define _GSM_RXPIN_ 8
/* ----------------------------------------------------------------------------------- Libreria--> GSMSHIELD---> GSM.CPP assicurarsi che i pin di trasmissione siano: #define _GSM_TXPIN_ 7 #define _GSM_RXPIN_ 8 Accende e spegne un LED a secondo dell'SMS inviato: ON => Accende il LED OFF => Spegne il LED Altro => Messaggio di errore sul Serial Monitor ---------------------------------------------------------------------------------- */ #include "SIM900.h" #include <SoftwareSerial.h> #include "sms.h" SMSGSM sms; int led = 13; // Il Pin 13 è quello connesso al LED int numdata; boolean started=false; char smsbuffer[160]; char Mittente[20]; void setup() { Serial.begin(9600); Serial.println("ESEMPIO INVIO/RICEZIONE SMS"); pinMode(led, OUTPUT); digitalWrite(led, LOW); if ( gsm.begin(2400) ) { Serial.println("STATUS Modulo GSM = PRONTO"); started=true; } else Serial.println("STATUS Modulo GSM = INATTIVO"); } boolean SerialRead(char s[]) { int i=0; if ( Serial.available() > 0) { while ( Serial.available() > 0) { s[i]=Serial.read(); delay(10); i++; } } s[i]='\0'; return (i!=0);} void loop() { char inSerial[50]; char position; if ( started) { position = sms.IsSMSPresent(SMS_ALL); if ( position) { sms.GetSMS(position, Mittente, smsbuffer, 160); Serial.print("Comando Ricevuto [tel. "+String(Mittente)+String("]: ") + String(smsbuffer)); if (strcmp(smsbuffer,"ON")==0) { digitalWrite(led, HIGH); Serial.println(" => Accendo il LED"); } else if (strcmp(smsbuffer,"OFF")==0) { digitalWrite(led, LOW); Serial.println(" => Spengo il LED"); } else if (strcmp(smsbuffer,"STATUS")==0) { if ( digitalRead(led)==HIGH) { sms.SendSMS(Mittente, "STATUS: LED Acceso"); Serial.println(" => il LED e' Acceso"); } else { sms.SendSMS(Mittente, "STATUS: LED Spento"); Serial.println(" => il LED e' Spento"); }} else Serial.println(" => non riconosciuto!"); sms.DeleteSMS(position); } delay(1000); } }
NOTA: Ok, funziona.
domenica 18 gennaio 2015
Linea dati.
Un appartamento. Un fotodiodo ricevente IR ed un telecomando in ciascuna stanza, gli Attiny posizionati presso i dispositivi elettrici da pilotare. Da ciascuna stanza il fotodiodo rileverebbe il treno di impulsi proveniente dal telecomando, identico in ogni stanza, inviandolo sulla linea dati. Ciascun ATTTINY è programmato per accettare un solo treno di impulsi ed attivare un relè. Esempio: da qualunque stanza premendo il tasto 4 si può abbassare la tapparella della cucina.
Potrebbe funzionare.
/* Si sottopone a condizione if la lettura esadecimale dei tasti anteponendo al valore HEX il valore 0x. Nello sketch: Relè = OFF Tasto 1 premuto FF30CF = Relè ON Tasto 2 premuto FF18E7= Relè OFF */ #include <IRremote.h> # define RELE 6 int receiver = 7; IRrecv irrecv(receiver); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); pinMode(RELE, OUTPUT); digitalWrite(RELE,LOW); } void loop(){ if ( irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); } if ( results.value == 0xFF30CF) { digitalWrite(RELE, HIGH); } if ( results.value == 0xFF18E7) { digitalWrite(RELE, LOW); } }
Etichette:
ATtiny85,
Progetti,
Trasmissione,
Trasmissione.Telecomando
martedì 13 gennaio 2015
Password inserita da Keypad.
La libreria Password permette di inserire una password da keypad.
#include <Password.h> //http://www.arduino.cc/playground/uploads/Code/Password.zip #include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip #include <LiquidCrystal.h> Password password = Password( "1234" ); LiquidCrystal lcd(8, 9, 10, 11, 12, 13);//pin ARDUINO MEGA 2560 const byte RIGHE = 4; const byte COLONNE = 4; char keys[RIGHE][COLONNE] = {{'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'F','0','E','D'}}; byte rowPins[RIGHE] = {14, 15, 16, 17}; //pin ARDUINO MEGA 2560 byte colPins[COLONNE] = {18, 19, 20, 21};;//pin ARDUINO MEGA 2560 Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, RIGHE, COLONNE ); void setup() { lcd.begin(20, 4); keypad.addEventListener(keypadEvent); } void loop(){ keypad.getKey(); lcd.setCursor(0, 0); lcd.print("Ins.Codice e press F"); }//-------------Fine LOOP------------------------------ void keypadEvent(KeypadEvent eKey){ switch ( keypad.getState()) { case PRESSED: switch ( eKey ) { case 'F': checkPassword(); break; case 'E': password.reset(); break; default: password.append(eKey);}} }//------------ FINE Void ------------------------------- void checkPassword() { if ( password.evaluate()) { lcd.setCursor(0, 1); lcd.print("Impianto Inserito "); } else { lcd.setCursor(0, 1); lcd.print("Codice Errato "); } }//------------ FINE Void -------------------------------
sabato 10 gennaio 2015
Senso di rotazione.
/* Due fotointerruttori a forcella affiancati. Il fascio di luce viene interrotto da un disco rotante. Il senso di rotazione viene stabilito in funzione di quale fotodiodo viene illuminato per primo. */ int canaleA=6; int canaleB=9; int contatore=0; boolean avanti; boolean indietro; boolean memoriaA; boolean memoriaB; boolean direzione; void setup() { Serial.begin(9600); pinMode(6,INPUT); pinMode(9,INPUT); } void loop() { canaleA=digitalRead(6); canaleB=digitalRead(9); Serial.print(contatore); Serial.print(" Avanti "); Serial.print(avanti); Serial.print(" indietro "); Serial.println(indietro); if ( canaleB==1 && canaleA==1) { direzione=1; memoriaA=0; memoriaB=0; } if ( canaleA==0 && direzione==1) { indietro=1; avanti=0; direzione=0; } if ( canaleB==0 && direzione==1) { avanti=1; indietro=0; direzione=0; } if ( canaleB==0 && avanti==1 && memoriaA==0) { contatore=contatore+1; memoriaA=1; } if ( canaleA==0 && indietro==1 && memoriaB==0) { contatore=contatore-1; memoriaB=1; } }//---------FINE LOOP--------------
sabato 3 gennaio 2015
Motori passo passo (stepper ) 4a parte.
Un motore passo passo ruota in senso orario per per 1000 passi alla velocità di 60 rpm ed in senso antiorario di 250 passi alla velocità di 10 rpm.
#include <Stepper.h> #define STEPSmotore1 300 Stepper stepper1(STEPSmotore1, 8, 10, 9, 11); int StepsOrario1 = 1000; int StepsAntiOrario1 = -250; int VelocitaOrario1 = 60; int VelocitaAntiOrario1 = 10; void setup() { } void loop() { stepper1.setSpeed(VelocitaOrario1); stepper1.step(StepsOrario1); delay(1000); stepper1.setSpeed(VelocitaAntiOrario1); stepper1.step(StepsAntiOrario1); delay(2000); }
martedì 23 dicembre 2014
Motori passo passo (stepper ) 3a parte.
const int buttonAvanti = 2; const int buttonIndietro = 4; int StateAvanti = 0; int StateIndietro = 0; int motorPin1 = 8; int motorPin2 = 9; int motorPin3 = 10; int motorPin4 = 11; int delayTime = 3; void setup() { pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); pinMode(buttonAvanti, INPUT); pinMode(buttonIndietro, INPUT); } void loop() { //----INIZIO LOOP----- StateAvanti = digitalRead(buttonAvanti); if ( StateAvanti == HIGH) { MotoreAvanti(); } StateIndietro = digitalRead(buttonIndietro); if ( StateIndietro == HIGH) { MotoreIndietro(); } }//------------------FINE LOOP------- //--------- ROUTINE DI RICHIAMO----------- void MotoreAvanti() { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); delay(delayTime); } //--------- ROUTINE DI RICHIAMO----------- void MotoreIndietro() { digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime); } }
lunedì 22 dicembre 2014
Motori passo passo (stepper ) 2a parte.
#include <Stepper.h> const int StepMotore = 10; Stepper Motore(StepMotore, 8,9,10,11); int Velocita = 200; long ValueImposta = 5; byte contaImpulsi = 0; int ValueConta = 0; void setup() { Motore.setSpeed(Velocita); Serial.begin(9600); } void loop() { contaImpulsi = contaImpulsi + 1; Serial.println(contaImpulsi); Motore.step(StepMotore); if ( ValueImposta == contaImpulsi) { contaImpulsi=0; delay(5000); } delay(100); }
venerdì 19 dicembre 2014
Motori passo passo (stepper) 1a parte.
http://www.mauroalfieri.it/i
/* Stepper Copal * ------------- * * Program to drive a stepper motor coming from a 5'25 disk drive * according to the documentation I found, this stepper: "[...] motor * made by Copal Electronics, with 1.8 degrees per step and 96 ohms * per winding, with center taps brought out to separate leads [...]" * [http://www.cs.uiowa.edu/~jones/step/example.html] * * * Blu ---> pin 16 di ULN2003AN * Viola ---> pin 15 di ULN2003AN * Giallo ---> pin 14 di ULN2003AN * Arancio ---> pin 13 di ULN2003AN * Rosso ---> pin 9 di ULN2003AN --->(+Vcc) * * Blu ---> pin 8 di Arduino * Viola ---> pin 9 di Arduino * Giallo ---> pin 10 di Arduino * Arancio ---> pin 11 di Arduino * * * pin 9 di ULN2003AN ---> +Vcc * pin 8 di ULN2003AN ___> GND * (cleft) 2005 DojoDave for K3 * http://www.0j0.org | http://arduino.berlios.de * * @author: David Cuartielles * @date: 20 Oct. 2005 */ int motorPin1 = 8; int motorPin2 = 9; int motorPin3 = 10; int motorPin4 = 11; int delayTime = 500; void setup() { pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); } void loop() { digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); delay(delayTime); }
domenica 14 dicembre 2014
TRASMISSIONE I2C - 3a parte
ARDUINO MASTER SLAVE
//MASTER #include <Wire.h> #define ADDRESS1 2 #define LED1 8 #define LED2 9 #define LED3 10 #define LED4 11 int NumByte = 1; void setup() { Wire.begin(); pinMode (LED1,OUTPUT); pinMode (LED2,OUTPUT); pinMode (LED3,OUTPUT); pinMode (LED4,OUTPUT); } void loop() { Wire.requestFrom(ADDRESS1,NumByte); char c = Wire.read(); //Se la stringa in rx è a accendo LED1 String a = ""; a = a + c; delay (100); if ( a == "a") { digitalWrite(LED1, HIGH); } else { digitalWrite(LED1, LOW); } delay(10); //Se la stringa in rx è b accendo LED2 String b = ""; b = b + c; delay (100); if ( b == "b") { digitalWrite(LED2, HIGH); } else { digitalWrite(LED2, LOW); } delay(10); //Se la stringa in rx è g accendo LED3 String g = ""; g = g + c; if ( g == "c") { digitalWrite(LED3, HIGH); } else { digitalWrite(LED3, LOW); } delay(10); //Se la stringa in rx è da accendo LED4 String d = ""; d = d + c; delay (100); if ( d == "d") { digitalWrite(LED4, HIGH); } else { digitalWrite(LED4, LOW); } delay(10); }
ARDUINO SLAVE CODE
// SLAVE VERONA #include <Wire.h> #define ADDRESS 2 #define SWITCH1 2 #define SWITCH2 3 #define SWITCH3 4 #define SWITCH4 5 void setup() { pinMode(SWITCH1, INPUT); pinMode(SWITCH2, INPUT); pinMode(SWITCH3, INPUT); pinMode(SWITCH4, INPUT); Wire.begin(ADDRESS); Wire.onRequest(requestEvent); } void loop(){ delay(100); } void requestEvent() { if ( digitalRead(SWITCH1) == HIGH) { Wire.write("a"); } if ( digitalRead(SWITCH2) == HIGH) { Wire.write("b"); } if ( digitalRead(SWITCH3) == HIGH) { Wire.write("c"); } if ( digitalRead(SWITCH4) == HIGH) { Wire.write("d"); } }
TRASMISSIONE I2C - 2a parte
La pressione del tasto su Arduino Slave determina l'accensione del led su Arduino Master
ARDUINO MASTER CODE
//MASTER #include <Wire.h> #define ADDRESS1 2 #define LED1 8 int NumByte = 1; void setup() { Wire.begin(); pinMode (LED1,OUTPUT); } void loop() { Wire.requestFrom(ADDRESS1,NumByte); String b = ""; char c = Wire.read(); b = b + c; delay (100); if ( b == "a") { digitalWrite(LED1, HIGH); } else { digitalWrite(LED1, LOW); } delay(10); }
ARDUINO SLAVE CODE
// SLAVE VERONA #include <Wire.h> #define ADDRESS 2 # define SWITCH 2 void setup() { pinMode(SWITCH, INPUT); Wire.begin(ADDRESS); Wire.onRequest(requestEvent); } void loop(){ delay(100); } void requestEvent() { if ( digitalRead(SWITCH) == HIGH) { Wire.write("a"); } else { Wire.write("s"); } }
TRASMISSIONE I2C 1a parte
Premendo il pulsante (aggiungere una R da 10Kohm verso GND) su Arduino SLAVE viene trasmessa ad Arduino Master (aprire l'IDE) l'informazione "acceso" o "spento".
Gli Arduino includono la libreria Wire.h, comunicano sull'indirizzo 2 e trasmettono 6 byte.
ARDUINO MASTER CODE
ARDUINO SLAVE CODE
Gli Arduino includono la libreria Wire.h, comunicano sull'indirizzo 2 e trasmettono 6 byte.
ARDUINO MASTER CODE
#include <Wire.h> #define ADDRESS 2 int NumByte =6; void setup() { Wire.begin(); Serial.begin(9600); } void loop() { Wire.requestFrom(ADDRESS, NumByte); while(Wire.available()) {char c = Wire.read(); Serial.print(c); } delay(200); }
ARDUINO SLAVE CODE
#include <Wire.h> #define ADDRESS 2 #define SWITCH 2 void setup() { pinMode(SWITCH, INPUT); Wire.begin(ADDRESS); Wire.onRequest(rEvent); } void loop() { delay(10); } void rEvent() {if (digitalRead(SWITCH) == HIGH) { Wire.write("acceso"); } else {Wire.write("spento"); } }
giovedì 11 dicembre 2014
Inseguitore solare 3
/* VEDI LO SKETCH RIGINALE SU * Inseguitore solare - prima parte * * Autore: Mauro Alfieri * web: www.mauroalfieri.it * Tw: @mauroalfieri.it * */ #include <Servo.h> #define FOTO A0 #define MOTORE 8 int sensorPin = 0; int servoPin = 0; int sensorValue = 0; int servoGrad = 90; Servo myservo; void setup() { pinMode( FOTO, INPUT); myservo.attach( MOTORE ); myservo.write( servoGrad ); } void loop() { sensorValue = analogRead(FOTO); if ( sensorValue < (512) ) { if ( servoGrad < 180) { servoGrad++; }} if ( sensorValue > (512) ) { if ( servoGrad > 0) { servoGrad--; }} myservo.write( servoGrad ); delay(100); }
Inseguitore solare 2
# define MOTORE 8 # define FOTOuno A0 # define FOTOdue A1 #include <Servo.h> Servo myservo; int Value = 0; int Centrato =90; int sensorValue1 = 0; int sensorValue2 = 0; void setup() { pinMode (MOTORE, OUTPUT); pinMode (FOTOuno, INPUT); pinMode (FOTOdue, INPUT); myservo.attach(MOTORE); Serial.begin(9600); } void loop() { int sensorValue = analogRead(FOTOuno); int sensorValue2 = analogRead(FOTOdue); Value=(sensorValue-sensorValue2)/10; if (Value==0) myservo.detach();//scollega MOTORE else myservo.attach(MOTORE); if ( Value>10 ) { Value=10;} if ( Value<-10 ) { Value=-10;} Serial.println(Value); myservo.write(Centrato+Value); delay(15); }
mercoledì 10 dicembre 2014
Inseguitore solare 1/bis
Si aggiunge un servo e la relativa libreria.
#include <Servo.h> # define POT A0 # define MOTORE 9 int sensorValue = 0; int Value = 0; Servo myservo; void setup() { myservo.attach(MOTORE); pinMode(POT, INPUT); Serial.begin(9600); } void loop() { int sensorValue = analogRead(POT); Value=map (sensorValue, 0, 1023, 0, 179); myservo.write(Value); delay(15); }
Sostituire il potenziometro con due fotoresistenze uguali e montate in opposizione sul servo. Quando entrambe le fotoresistenze riceveranno la stessa luce il servo sarà allineato.
Inseguitore solare 1
Collegare il centrale di un potenziometro ad AO e seguire le istruzioni sull'IDE di Arduino
# define POT A0 int sensorValue1 = 0; int Value = 0; void setup() { pinMode(POT, INPUT); Serial.begin(9600); } void loop() { int sensorValue = analogRead(POT); Value=map (sensorValue, 0, 1023, 0, 179); if ( Value==90) { Serial.println (" CENTRATO");} if ( Value>90) { Serial.println ("Ruota a Sx");} if ( Value<90) { Serial.println ("Ruota a Dx");} Serial.println(Value); delay(500); }
Iscriviti a:
Post (Atom)


