დიდი მადლობა.
ეხლა დავუბრუნდები თემას.
განვიხილოთ ჩემი მეორე მარტივი პროექტი.
ამოცანა მდგომარეობს ბატარეის ავტომატური დამტენის სიმულაციაში.
მოცემულია ბატარეა, რომელიც მიერთებულია მომხმარებელთან და დამტენთან მუდმივად.
დამტენია ვთქვათ მზის პანელი და მუდმივად შეერთებულია. ასევე მომხამრებელი მუდმივად მიერთებულია.
ბატარეა იმუხტება Vmax ძაბვამდე და დამტენი უნდა გაითიშოს.
ხოლო თუ ძაბვა დაეცემა Vmin ძაბვამდე მომხამარებელი უნდა გათიშოს კონტროლერმა, რომ დაიცვას ბატარეა დაშლისგან.
კონტროლერი ზომავს ბატარეის ძაბვას A0 ანალოგ ინპუტზე და Vmax -ზე რეაგირებისთვის ავირჩიოთ პინ13. ხოლო მომხმარებელთან ანუ Vmin რეაგირებისთვის პინ12.
A0 კითხულობს 0 დან 5 ვოლტამდე ძაბვას მხოლოდ. მისი იმპედანსი არის 10 მეგაომი (გავზომე).
ეს კარგია რადგან საოცრად მცირე დენს მოიხმარს A0 და შესაბამისად 12 ვოლტიანი აკუმულატორის ძაბვის გასაზომად შემიძლია ძაბვის დამყოფი გამოვიყენო ისე, რომ 12-ის ნაცვლად 0-5 ვოლტიანი ინტერვალი შევუშვა A0-ში.
ვთქვათ Vmax = 4 ვოლტი და Vmin = 2 ვოლტი (პირობითად).
აკუმულატორის ნაცვლად სიმულაციაში ვიყენებ რეგულირებად რეზისტორს.
ამ
http://arduino.cc/en/Tutorial/ReadAnalogVoltage ტუტორიალის წაკითხვის შემდეგ კოდი დავწერე ასე:
#define LEDPIN1 13
#define LEDPIN2 12
void setup() {
pinMode(LEDPIN1, OUTPUT);
pinMode(LEDPIN2, OUTPUT);
}
void loop() {
int sensorValue = analogRead(A0);
digitalWrite(LEDPIN1, LOW);
digitalWrite(LEDPIN2, LOW);
if (sensorValue < 4*1023/5)
{
digitalWrite(LEDPIN1, HIGH);
}
if (sensorValue > 2*1023/5)
{
digitalWrite(LEDPIN2, HIGH);
}
delay(1000);
}
საწყის ეტაპზე პინ12 და 13 -ზე მოდის ლოგიკური 0,
შემდეგ კონტროლერი ზომავს ძაბვას A0 ზე და თუ ძაბვა 4 ზე ნაკლებია ჩართავს დამტენს (პინ13 = 1);
თუ ძაბვა მეტია 4 ვოლტზე დამტენი გათიშულია (პინ13 = 0);
თუ ძაბვა მეტია 2 ზე, მომხმარებელი ერთვება ბატარეას.
შემდეგ კონტროლელი იცდის 1 წამი და კვლავ იმეორებს პროცესს.
ასევე შეიძლება ვარიაციაც:
საწყისი მდგომარეობა იყოს პინ13=1 და პინ12=1.
ანუ დამტენი და მომხმარებელი ორივე ჩართულია და ძაბვის გაზომვის შემდეგ კონტროლემა მოახდინოს რეაგირება.
ესაა შავი ვერსია, ვნახე ლედებზე და მუშაობს რასაც ვავალებ.
მაგრამ რაღაც მარილი აკლია თითქოს....
აჰა, აბა თვენ რა იტყვით, საწყისი მდგომარეობა რომ ლუპიდან გავიტანო გარეთ, ხო უკეთესი იქნება, წარამარა არ გამორთავს:
digitalWrite(LEDPIN1, LOW);
digitalWrite(LEDPIN2, LOW);
ესენი რო გავიტანო loop ის გარეთ.
* * *
გავიტანე....
ეს ჯობია:
#define LEDPIN1 13
#define LEDPIN2 12
void setup() {
pinMode(LEDPIN1, OUTPUT);
pinMode(LEDPIN2, OUTPUT);
digitalWrite(LEDPIN1, LOW);
digitalWrite(LEDPIN2, LOW);
}
void loop() {
int sensorValue = analogRead(A0);
if (sensorValue < 4*1023/5) digitalWrite(LEDPIN1, HIGH);
else digitalWrite(LEDPIN1, LOW);
if (sensorValue > 2*1023/5) digitalWrite(LEDPIN2, HIGH);
else digitalWrite(LEDPIN2, LOW);
delay(1000);
}
This post has been edited by asphurcela on 26 Apr 2013, 14:30