Vous êtes sur la page 1sur 7

#2

1
#include <Servo.h> // enswmatwsh vivliothikis Servo
Servo servo; // dimiourgia enos stigmiotypoy servo
int servo_pos = 0; // metavliti gia apothikeush thesis toy servo motor
void setup()
{
servo.attach(9); // prosartisi toy servo motor sto pin 9
Serial.begin(57600); //ksekiname to termatiko gia na paroume odigies
Serial.println('Press v and n to rotate, b to center'); //typwnoume odigies, mono 1 fora
}
void loop()
{
if (Serial.available()!=0) // elegxoume an yparxei eisodos sti seiriaki
{
switch(Serial.read())
{
case 'v':
servo_pos = min(179, servo_pos + 5); // prosoxi min yperodigisoume to servo
servo.write(servo_pos);
break;
case 'n':
servo_pos = max(0, servo_pos 5); // prosoxi min yperodigisoume to servo
servo.write(servo_pos);
break;
case 'b':
servo_pos = 90;
servo.write(servo_pos); // kentrarisma
break;
}
}
}
2
) 5V=5000mV 1024 ,
*5000/1024 10mV
, *0.488 (,
).
) 3
global loop
( & ) update.
, ... ,
,
overflow .

(window average), p.x. 200-300


, ... .. 1 .
:
/*
thema 2b
*/
float LM35_sensor = 0; // arxikopoihsh metavlitis LM35_sensor
float LM35_celsius = 0; // metavliti gia thermokrasia se celsius
float max_temp = 0; // h megisti thermokrasia (arxika 0)
float min_temp = 150; // h min thermokrasia (arxika 150)
float avr_temp = 0; // h mesi thermokrasia
long counter = 0;
float sum = 0;
int LCD_RS_pin = 12; // LCD RS pin 4 sto Arduino digital pin 12
int LCD_E_pin = 11; // LCD Enable pin 6 sto Arduino digital pin 11
int LCD_D4_pin = 10; // LCD D4 pin 11 sto Arduino digital pin 10
int LCD_D5_pin = 8; // LCD D5 pin 12 sto Arduino digital pin 8
int LCD_D6_pin = 7; // LCD D6 pin 13 sto Arduino digital pin 7
int LCD_D7_pin = 4; // LCD D7 pin 14 sto Arduino digital pin 4
int LCD_LEDA_pin = 2; // LCD LEDA pin 15 sto Arduino digital pin 2 ('h st +5 Volt gia always on)
#include <LiquidCrystal.h> // xrhsh ths vivlithikis LiquidCrystal gia elegxo othonis LCD
// arxikopoihsh vivlithiothikis gia elegxo LCD me ta katallhla pins diepafhs
LiquidCrystal lcd(LCD_RS_pin, LCD_E_pin, LCD_D4_pin, LCD_D5_pin, LCD_D6_pin, LCD_D7_pin);
void setup()
{
lcd.begin(16, 2); // orismos LCD me 16 sthles kai 2 grammes
lcd.print("max min avr "); // ektypwsh sthn LCD
lcd.setCursor(0, 1); // cursor sth 2ri grammh ths LCD
pinMode(LCD_LEDA_pin, OUTPUT); // orismos digital pin 7 ws eksodos
digitalWrite(LCD_LEDA_pin, HIGH); // orismos katastashs pin D7 se HIGH gia fwtismo LCD
lcd.noCursor(); // apenergopoihsh emfanisis cursor _
Serial.begin(57600); // arxikopoihsh seiriakhs thyras
}
void loop()
{
LM35_sensor = analogRead(1); // diavasma tashs eksodou LM35 (10mV gia kathe vathmo
// celsius)
LM35_sensor = 1000*mapFloat(LM35_sensor,0,1023,0,5); // ypologizoume ta mV pou metrise o sensor
LM35_celsius = LM35_sensor/10; // kai me diairesi me 10 ta metatrepoume se vathmous C
Serial.println(LM35_celsius); // ektypwsh sth seiriakh thyra tin trexouse thermokrasia
if (LM35_celsius > max_temp) max_temp = LM35_celsius; // elegxoume gia neo megisto
if (LM35_celsius < min_temp) min_temp = LM35_celsius; // elegxoume gia neo elaxisto
counter++;
sum += LM35_celsius;
avr_temp = (float)sum/counter;
lcd.print(max_temp);
lcd.print(" ");
lcd.print(min_temp);
lcd.print(" ");
lcd.print(avr_temp);
lcd.setCursor(0,1);
delay(2000); // kathisteri 2 sec
}
float mapFloat(float s, float fromLow, float fromHigh, float toLow, float toHigh)
{
return (s-fromLow)*(toHigh-toLow)/(fromHigh-fromLow) +toLow;
}

) datasheets,
, :

,
arduino.
datasheets :

fritzing :

... ,
arduino Vout
oC. .
fritzing datasheets.

3
// pin 14 (DS, Serial Data Input) tou 74HC595 sto digital pin 16 (Analog pin 2) tou Arduino
int dataPin = 16;
// pin 11 (SH_CP, Shift Register Clock Input) tou 74HC595 -> digital pin 17 (Analog 3) tou Arduino
int clockPin = 17;
// pin 12 (ST_CP, Storage Register Clock Input) tou 74HC595 -> digital pin 18 (Analog 4) tou Arduino
int latchPin = 18;
// H anodos toy green LED 5mm sto digital pin 19 (Analog pin 5) tou Arduino
int LED_green = 19;
int LCD_RS_pin = 12; // LCD RS pin 4 sto Arduino digital pin 12
int LCD_E_pin = 11; // LCD Enable pin 6 sto Arduino digital pin 11
int LCD_D4_pin = 10; // LCD D4 pin 11 sto Arduino digital pin 10
int LCD_D5_pin = 8; // LCD D5 pin 12 sto Arduino digital pin 8
int LCD_D6_pin = 7; // LCD D6 pin 13 sto Arduino digital pin 7
int LCD_D7_pin = 4; // LCD D7 pin 14 sto Arduino digital pin 4
int LCD_LEDA_pin = 2; // LCD LEDA pin 15 sto Arduino digital pin 2 ('h st +5 Volt gia always on)
#include <LiquidCrystal.h> // xrhsh ths vivlithikis LiquidCrystal gia elegxo othonis LCD
LiquidCrystal lcd(LCD_RS_pin, LCD_E_pin, LCD_D4_pin, LCD_D5_pin, LCD_D6_pin,
LCD_D7_pin);
int counter; // metritis gia loop
int delay_time = 5000; // 5s gia na vgei o epomenos arithmos
int freqs[20]; // orismos pinaka syxnotitwn
void setup()
{
randomSeed(analogRead(0)); // arxikopoihsh gennitrias tixaiwn arithmwn
// rythmizoume ta pins san OUTPUT
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(LED_green, OUTPUT);
// arxikopoioume tin LCD
lcd.begin(16, 2); // orismos LCD me 16 sthles kai 2 grammes
pinMode(LCD_LEDA_pin, OUTPUT); // orismos digital pin 7 ws eksodos
digitalWrite(LCD_LEDA_pin, HIGH); // orismos katastashs pin D7 se HIGH gia fwtismo LCD
}
void loop()
{
for (int i=0;i<20;i++)
freqs[i]=0; // midenismos tou pinaka syxnotitwn
int max_freq=0; // arxikopoiisis megistis syxnotitas emfanisis
int max_freq_num=0; // arxikopoiisi arithmou pou antistoixei sti megisti syxnotita
int num; // i metavliti pou 8a fylaei ton tyxaio arithmo...
for (counter = 1; counter <= 60; counter = counter++)
{

num=random(1,21);
freqs[num-1]++; // ay3anoume ti syxnotita tou num kata 1...to "-1" sto deikti
// tou pinaka, ofeiletai sto oti o pinakas exei prwto stoixeio to [0] kai oxi to [1].
if (freqs[num-1]>max_freq) // elegxos synexws gia megisti syxnotita...
{max_freq=freqs[num-1]; max_freq_num=num;} // ... kai update
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, number_to_BCD(num) );
digitalWrite(latchPin, HIGH);
delay(delay_time);
}
lcd.print("Most_freq_num:");
// ektypwsi apotelesmatwn
lcd.print(max_freq_num, DEC);
lcd.setCursor(0,1);
lcd.print("Max_freq:");
lcd.print(max_freq, DEC);
delay(120000);
lcd.clear(); // ... vimata svisimatos tis o8onis kai toy backlight
lcd.noCursor();
digitalWrite(LCD_LEDA_pin, LOW); // ... kai ka8arisma twn 7segment
digitalWrite(latchPin, LOW); // ... na eimaste taktikoi, etsi?
shiftOut(dataPin, clockPin, MSBFIRST, 255 );
digitalWrite(latchPin, HIGH);
while (1==1) {} // ... ateleiwto loop
}
// synartisi metatropis dipsifiou arithmou se byte to opoio
// perilamvanei ta dyo psifia se morfi BCD
byte number_to_BCD(int number)
{
number = constrain(number, 0, 99);
int dig0 = number % 10;
int dig1 = (number / 10) % 10;
int mynumberl = dig0 & B00001111;
int mynumberh = dig1 << 4;
int finalnumber = mynumberh | mynumberl;
return finalnumber;
}
// synartisi gia energopoihsh prasinou LED
void upper_down_limit_reached(int delay_time)
{
digitalWrite(LED_green, HIGH); // energopoihsh LED_green
delay(delay_time); // kathisteri gia delay_time msec
digitalWrite(LED_green, LOW); // apenergopoihsh LED_green
}
4
,
. .

(
) .
, .
.
int
int
int
int
int
int
int
int

motor1Pin1 = 3; // H-bridge (pin 2, 1A)


motor1Pin2 = 4; // H-bridge (pin 7, 2A)
motor2Pin1 = 5; // H-bridge (pin 10, 3A)
motor2Pin2 = 6; // H-bridge (pin 15, 4A)
enableMotor1 = 9; // enable motor 1: PWM pin gia na elen3oume tin taxytita peristrofis
enableMotor2 = 10; // enable motor2 : PWM pin gia na elen3oume tin taxytita peristrofis
key = 0;
speed = 30; taxytita peristrofis (1-255)

void setup()
{
// orismos tvn pin 3-6 san exodoi-den xreiazetai gia ta pwm pins
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
Serial.begin(57600);
}
void loop()
{
if (Serial.available() != 0)
{
key = Serial.read();
switch (keypressed) {
case 'q': // kinisi mprosta
moveForward();
break;
case 'a': // move backwards
moveBackwards();
break;
case 'z': // turn left
turnLeft();
break;
case 'x': // turn right
turnRight();
break;}
delay(1000); // ka8e kinisi krataei 1sec
analogWrite(enableMotor1,0); // meta tin kinisi stamatame kai tous 2 kinitires
analogWrite(enableMotor2,0);
}
}
// se oles tis routines kinisis, den ksexname oti prwta 8etoume ta
// control bit sto bridge chip kai meta kanoume enable ton kinitira

void moveForward()
{
// o syndyasmos poy kinei brosta i' pisw to ama3i, exei na kanei me to pws exei synde8ei o
kinitiras
// me tous troxous, mesw toy kivwtioy. Ypo8etoume oti o syndyasmos LH kinei brosta to
oxima kai o
// LH pisw...diaforetika prepei na alla3ete to prototype twn 2 synartisewn
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
analogWrite(enableMotor1,speed);
analogWrite(enableMotor2,speed);
}
void moveBackwards()
{
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
analogWrite(enableMotor1,speed);
analogWrite(enableMotor2,speed);
}
void turnLeft()
{
// kinoume deksiostrofa ton ena kinitira kai aristerostrofa ton allo
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
analogWrite(enableMotor1,speed);
analogWrite(enableMotor2,speed);
}
void turnRight()
{
// anapoda apo tin turnLeft()
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
analogWrite(enableMotor1,speed);
analogWrite(enableMotor2,speed);
}

Vous aimerez peut-être aussi