Witam, jestem początkujący oraz jest to mój pierwszy projekt.
Dałem sobie za zadanie zrobienie przez wakacje maszyny, która policzy mi ile jest w moim zbiorze groszy, ale chciałem zrobić to trochę inaczej niż projekty, które widziałem. Wpadłem na pomysł że skoro grosze (1, 2, 5) są różnych średnic to jeżeli ułoży się monetę miedzy fotorezystorem a diodą led to będzie można przypisać jej daną wartość.
Tak też zrobiłem i po chwili powstał mały cylinder na bazie Arduino Uno potrafiący rozpoznać monetę. Następnie zacząłem pracę nad tym aby moja maszyna brała monety z podajnika i liczyła je automatycznie. Wyszło że cylinder z ustawionym centralnie serwomechanizmem to najlepsza opcja. Projektowałem na programie Design Spark Mechanical, drukowałem Anet A8. Po wielu nieudanych wydrukach, wkońcu wyszedł ten właściwy i mogłem wszystko odczepić od Arduino Uno... zaczeło się lutowanie do Arduino nano, jak mozna się spodziewać po początkującym długie i mało umiejętne.
Po wydrukowaniu całego mechanizmu zaprojektowałem obudowę, a następnie zrobiłem adaptacje do warunków oświetleniowych panujących w jej wnętrzu. Z uwagi na małą precyzję mojego czujnika maszynka czasem się myli, o jakiś grosz/dwa na złotówkę, jednakże jestem zadowolony z mojego pierwszego projektu :))
A oto krótki i prosty kod :
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
Servo servo;
int odczytanaWartosc = 0;
int tlo = 0;
float wartosc = 0;
float kwota = 0;
void setup() {
lcd.begin(16,2);
lcd.backlight();
lcd.setCursor(0,0);
pinMode(6, OUTPUT);
Serial.begin(9600);
digitalWrite(6,HIGH);
servo.attach(9);
}
void loop() {
kwota = wartosc / 100;
lcd.setCursor(0,0);
lcd.print("KWOTA");
lcd.setCursor(7,0);
lcd.print(kwota);
servo.write(180);
delay(400);
servo.write(80);
delay(300);
odczytanaWartosc = analogRead(A1);
if(odczytanaWartosc > 30 && odczytanaWartosc < 50){wartosc = wartosc + 1;}
if(odczytanaWartosc > 22 && odczytanaWartosc < 30){wartosc = wartosc + 2;}
if(odczytanaWartosc < 22 && odczytanaWartosc > 3){wartosc = wartosc + 5;}
servo.write(0);
delay(400);}