Fisk Feeder (10 / 10 steg)
Steg 10: kodning
Observera här koden är utan underprojekten!
/*
Arduino är ansluten med USB till Raspberry PI
Två program körs
1 Rasberry PI är master
Skicka rader:
-line01: datum
-line02: tid
-line03: vattentemperatur
-line04: när är soluppgången
-line05: när är sundown
-line06: när är tid/manual/av och resultatet av utfodring av fisk 1
-line07: när är tid/manual/av och resultatet av utfodring av fisk 2
-line08: när är tid/manual/av och resultatet av utfodring av fisk 3
-line09: när är tid/manual/av och resukt för utfodring av fisk 4
-line10: tillval
Skicka gånger:
-time01: minuter tills nästa foder
-time02: e minut tills soluppgången
-time03: e minut tills solnedgången
Ta emot:
-resullt av utfodring
-begäran för att skicka linje 01-10
2 Arduino är slave
Skicka & ta emot till Raspberry PI
Pins
-LiquidCrystal (8, 9, 4, 5, 6, 7) & A0
-Softwareserial (10, 11) RX, TX
-ReadingCds (A1, A2, A3, A4, A5)
-Servo 1 (2)
-Servo 2 (3)
-Servo aan/uit (12)
-Ledda aan/uit (13)
Looping 1
Begär & läsa raden 01-10
Begär & läsa tid 01 till 03
Om tid 01 < 1
Visa en nedräkning & foder
Om tid 02 eller 03 < 1
Visa en nedräkning
Dispay aktuell inställning
line01 att line10 1 per sekund
*/
/*
Strömförbrukning
De allmänna strömförbrukning Arduino: 50-60mA
LCD-skärm
Kontrollera USB-port, Arduino endast, Arduino med LCD
lsusb-v|egrep "^ Bus| MaxPower"
Bus 001 enhet 006: ID 1a86:7523 QinHeng elektronik HL-340 USB-seriell adapter
MaxPower 96mA
USB-enheter måste berätta den registeransvarige hur mycket ström de drar
Med hjälp av en multimetern rapporter 23mA
Servo
1 bibliotek: Servo, dröjsmål 10ms, vinkel
När fristående multimetern rapporter 5mA
När fäst multimetern rapporter 150mA
1 bibliotek: Servo, dröjsmål 30ms, vinkel
När fristående multimetern rapporter 5mA
När fäst multimetern rapporter 125mA
2 biblioteket: VarSpeedServo, hastighet 30
När fristående multimetern rapporter 5mA
När fäst multimetern rapporter 150mA
3 bibliotek: Servo, writeMicroseconds
När fristående multimetern rapporter 5mA
När fäst multimetern rapporter 110mA
För servo Observera: håll nere friktionen
Totalt Servo1 Servo2
Arduino 50mA 50mA
LCD-25mA 25mA
Servo1 110mA 5mA
Servo2 5mA 110mA
LED 20mA 20mA
NPN 20mA 20mA
--- + --- +
230mA 230mA
*/
Ställa in Keypas LCD
#include
LiquidCrystal lcd (8, 9, 4, 5, 6, 7);
/*
initiera bibliotek med numrerar av gränssnittet stiften
Arduino: LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
Klon: LiquidCrystal lcd (8, 9, 4, 5, 6, 7);
En anteckning om Pin 10 felet
Bara en sak att nämna, alla råkar ha ett fel i designen, så Använd inte stift 10 när du använder denna sköld. Biblioteket har funktioner för att aktivera och avaktivera bakgrundsbelysningen. Men i design, det finns ett fel, att när stift 10 är inställd till produktionen, och Ställ in hög, kan det orsaka den IO pin av MCU (huvudsakliga Atmel chip) för att leverera för mycket ström (över i databladet högsta betyg) till bakgrundsbelysningen LED. Detta kan orsaka över betonade i MCU och kan minska dess liv, eller kanske även spränga den.
-För att ställa in bakgrundsljus på, ange pin 10 som indata.
-För att ställa in bakgrundsljus, ange pin 10, och omedelbart produktionen låg (aldrig högt!)
Klipp bort pin 10
*/
Ställa in den seriella länken med Raspberry pi
#include
SoftwareSerial mySerial (10, 11); RX, TX
* RX är digital stift 10 (ansluta till TX av annan enhet)
* TX är digital stift 11 (ansluta till RX av annan enhet)
Ställa in servo
#include
Servo servo1; skapa servo1-objekt till control servo feeder
Servo servo2; skapa servo2-objekt för att styra servo hatchh
int servo1_pos = 0; variabel för att lagra den servo1 ståndpunkten
int servo2_pos = 0; variabel för att lagra den servo2 ståndpunkten
Ställa in Led & LDR
int var_blink_led = 0;
Skapa matrisen för A1-A5
int var_A1 [99];
int var_A2 [99];
int var_A3 [99];
int var_A4 [99];
int var_A5 [99];
int led_pos = 0;
int wacht = 100;
void setup() {
-Servo aan/uit (12)
pinMode (12, OUTPUT);
-Ledda aan/uit (13)
pinMode (13, OUTPUT);
}
void servo_on() {
digitalWrite 12, hög. makt på servo
fördröjning (1000); vänta tills kondensatorn är fylld
}
void servo_off() {
digitalWrite 12, låg. strömmen till servo
fördröjning (1000); vänta tills kondensatorn är tom
}
void blink_led() {
bara ett enkelt test när utfodring startar eller stoppar
för (var_blink_led = 0; var_blink_led < 5; var_blink_led += 1) {
digitalWrite 13, hög. Aktivera led
fördröjning (1000);
digitalWrite 13, låg. Inaktivera led
fördröjning (1000);
}
}
void led_on() {
slå på led
digitalWrite 13, hög. Aktivera led
}
void led_off() {
slå på led
digitalWrite 13, låg. Inaktivera led
}
void feeding() {
/*
Normalt är en servo kopplad på setup
void setup() {
myservo.attach(9); tillmäter objektet servo servo på pin 9
}
Servo tar emot kommandon genom program och arbeten att hålla rätt vinkel
I detta program servon körs i några sekunder och håller inaktiv tills nästa kommando
För att hålla strömförbrukningen och buller låg utfodring slingan har ett inbyggt koppla loss en
Fästa och ta loss påverkar effektförbrukning av servo-pin
Det andra steget är att använda den strömkrets som sätter på/av 5V
Placera start | 75% servo position 6:00 1100
Flytta till lastning position / 100% servo läge 7:30 700
Flytta till horisontellt läge - 25% servo position 3:00 1900
Flytta till Tom position / 0% servo läge 1:30 2300
Återgå till startposition | 75% servo position 6:00 1100
*/
för (led_pos = 1; led_pos < = 99; led_pos + = 1) {/ / 1-99 rensa analoga utbud
var_A1 [led_pos] = 0;
var_A2 [led_pos] = 0;
var_A3 [led_pos] = 0;
var_A4 [led_pos] = 0;
var_A5 [led_pos] = 0;
}
servo1.attach(2); tillmäter objektet servo servo på pin 2
Flytta till lastning position
för (servo1_pos = 1100; servo1_pos > = 710; servo1_pos-= 1) {/ / går från 6:00 till 7:30
servo1.writeMicroseconds(servo1_pos); berätta servo gå för att placera i variabel "pos"
Delay(5); Waits 5ms för servo att nå ställning
}
Flytta till horisontellt läge
för (servo1_pos = 710; servo1_pos < = 1900; servo1_pos += 1) {/ / går från 7:30 till 3:00
servo1.writeMicroseconds(servo1_pos); berätta servo gå för att placera i variabel "pos"
Delay(5); Waits 5ms för servo att nå ställning
}
Flytta till Tom position
led_on();
för (servo1_pos = 1900; servo1_pos < = 2290; servo1_pos += 10) {/ / går från 3:00 till 1:30
servo1.writeMicroseconds(servo1_pos); berätta servo gå för att placera i variabel "pos"
Delay(5); ((2300-1900)/10) * 5 = 200ms desceend tid 100-150ms
}
Mäta kvantitet
för (led_pos = 1; led_pos < = 99; led_pos + = 1) {
A1
analogRead(A1); Läs analog ingång A1
Delay(10);
var_A1[led_pos]=analogRead(a1);
A2
analogRead(A2);
Delay(10);
var_A2[led_pos]=analogRead(a2);
A3
analogRead(A3);
Delay(10);
var_A3[led_pos]=analogRead(a3);
A4
analogRead(A4);
Delay(10);
var_A4[led_pos]=analogRead(A4);
A5
analogRead(A5);
Delay(10);
var_A5[led_pos]=analogRead(A5);
}
led_off();
Återgå till startposition
för (servo1_pos = 2290; servo1_pos > = 1100, servo1_pos-= 1) {/ / går från 1:30 till 6:00
servo1.writeMicroseconds(servo1_pos); berätta servo gå för att placera i variabel "pos"
Delay(5); Waits 5ms för servo att nå ställning
}
servo1.detach(); lossnar servo på stift 2 till objektet servo
}
void openhatch() {
/*
Se också ogiltiga utfodring
Placera start stängt | 100% servo position 12:00 2300
Placera slut öppna | 0% servo position 6:00 700
*/
servo2.attach(3); tillmäter objektet servo servo på stift 3
för (servo2_pos = 2290; servo2_pos > = 710; servo2_pos-= 1) {/ / går från 12:00 till 6:00
servo2.writeMicroseconds(servo2_pos); berätta servo gå för att placera i variabel "pos"
Delay(5); Waits 5ms för servo att nå ställning
}
servo2.detach(); lossnar servo på stift 2 till objektet servo
}
void closehatch() {
/*
Se också ogiltiga utfodring
Placera start stängt | 100% servo position 12:00 2300
Placera slut öppna | 0% servo position 6:00 700
*/
servo2.attach(3); tillmäter objektet servo servo på stift 3
för (servo2_pos = 710; servo2_pos < = 2290; servo2_pos += 1) {/ / går från 6:00 till 12:00
servo2.writeMicroseconds(servo2_pos); berätta servo gå för att placera i variabel "pos"
Delay(5); Waits 5ms för servo att nå ställning
}
servo2.detach(); lossnar servo på stift 2 till objektet servo
}
void loop() {
servo_on(); makt på servo
blink_led();
openhatch(); Öppna luckan
blink_led();
Feeding(); vända inmatningsröret
blink_led();
closehatch(); Stäng luckan
blink_led();
servo_off(); strömmen till servo
}