ARK REAKTÖRÜ
14 Parça
Satın Alırken Dikkat Edilmesi Gerekenler
- Parçaların Boyutları
- Parçaların Üretim Şekli
- Parçaların Üretim Özellikleri
ARK REAKTÖRÜ
herkese iyi çalışmalar
bu projede bir ark reaktörü yapacağız projenin özellikleri :
- birden fazla animasyon yapabilmesi
- bilgisayara takınca kayan yazı göstermesi
yazılımsal olarak yukarıdaki özellikleri eklemek istiyoruz elektronik parçalar ise şu şekilde:
- 20 tane mantar led —--------------> link
- Arduino pro mikro —--------------> link
- kablo , lehim ,havya gibi birleştirici elemanlar.
projenin plastik modellerini yukarıya eksiksiz olarak ekledim burda fazla olarak benim bilgisayarımda kullandığım bir aparat ta var ama siz masada sevgiliye bilesiniz diye masaya ayağıda tasarladım
projede kullanılan arduino kodu
kod tamamen zararsız olup bilgisayara bağlandığında herhangi bir dosya bırakmadan çalışır sadece kayan yazı efekti için basit bir powershell kodu kullanıldı.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <Arduino.h>
#include <Keyboard.h>
const int ledPinleri[] = {10, 9, 6, 5, 3}; // LED'lerin bağlı olduğu pinler
const int ledSayisi = 5;
const int butonPin = 7; // Butonun bağlı olduğu pin
int animasyonIndeksi = 0;
int parlaklik = 0;
volatile unsigned long basmaZamani = 0; // Butonun basıldığı zamanı saklayan değişken
unsigned long eskiZaman=0;
unsigned long yeniZaman;
int olcum = true;
int bum = true;
int btndrm = false;
int heckdurum = false;
void animasyon_deg();
void patlamaAnimasyonu();
void animasyonCalistir(int indeks);
void animasyon1();
void animasyon2();
void animasyon3();
void nefesAlmaAnimasyonu();
void performAction();
void setup() {
Keyboard.begin();
pinMode(butonPin, INPUT_PULLUP);
for (int i = 0; i < 5; i++) {
pinMode(ledPinleri[i], OUTPUT);
}
Serial.begin(115200);
attachInterrupt(4, animasyon_deg, CHANGE); // Buton pinine kesmeyi ata
//patlamaAnimasyonu();
//animasyonCalistir(animasyonIndeksi);
}
void loop() {
if(!heckdurum) {
performAction(); // Seri bağlantı algılandığında performAction() fonksiyonunu çağır
}
if(bum){
patlamaAnimasyonu();
}else{
animasyonCalistir(animasyonIndeksi);
}
}
void animasyon_deg() {
int btn = digitalRead(butonPin);
/* Serial.print("button durum ");
Serial.println(btn);
Serial.print("button durum2 ");
Serial.println(btndrm);*/
if(btn == 1){
if(btndrm){
yeniZaman = millis();
Serial.print("zaman ");
Serial.println(yeniZaman - eskiZaman);
if ( yeniZaman - eskiZaman > 100 && yeniZaman - eskiZaman < 1500) {
animasyonIndeksi = (animasyonIndeksi + 1) % 4;
Serial.print("animasyonIndeksi ");
Serial.println(animasyonIndeksi);
} else if(yeniZaman-eskiZaman > 3000){
Serial.println("patlama");
bum = true;
}
btndrm = false;
Serial.println("girdi true");
}
}
if(btn == 0){
if(!btndrm){
eskiZaman = millis();
olcum = true;
btndrm = true;
Serial.println("girdi false");
}
}
}
void patlamaAnimasyonu() {
for (int i = 0; i < 3; i++)
{
for (int i = 4; i >= 0; i--) {
digitalWrite(ledPinleri[i], HIGH);
delay(100);
digitalWrite(ledPinleri[i], LOW);
}
}
for (int i = 0; i < 10; i++) {
digitalWrite(ledPinleri[4], HIGH); // Merkez LED
delay(50);
digitalWrite(ledPinleri[4], LOW);
delay(50);
}
for (int i = 0; i < 5; i++) {
digitalWrite(ledPinleri[i], HIGH);
}
delay(100);
for (int i = 0; i < 5; i++) {
digitalWrite(ledPinleri[i], LOW);
}
delay(100);
for (int i = 0; i < 5; i++) {
digitalWrite(ledPinleri[i], HIGH);
}
bum=false;
delay(3000);
for (int i = 0; i < 5; i++) {
digitalWrite(ledPinleri[i], LOW);
}
}
void animasyonCalistir(int indeks) {
switch (indeks) {
case 3:
animasyon1();
break;
case 1:
animasyon2();
break;
case 2:
animasyon3();
break;
case 0:
nefesAlmaAnimasyonu();
break;
}
}
void animasyon1() {
for (int i = 0; i < 5; i++) {
digitalWrite(ledPinleri[i], HIGH);
delay(100);
digitalWrite(ledPinleri[i], LOW);
delay(100);
}
}
void animasyon2() {
// LED'lerin yumuşak yanıp söner animasyonu
int adim = 5; // PWM parlaklık adımı
// Pin 3'ü sabit olarak HIGH (yanık) yap
digitalWrite(ledPinleri[4], LOW);
for (int i = 0; i < 256; i += adim) {
for (int j = 0; j < ledSayisi - 1; j++) { // Son LED (pin 3) hariç diğer LED'leri PWM ile kontrol et
analogWrite(ledPinleri[j], i); // Parlaklık değerini ayarla
}
delay(20); // Yumuşak geçiş için bir bekleme süresi
}
for (int i = 255; i >= 0; i -= adim) {
for (int j = 0; j < ledSayisi - 1; j++) { // Son LED (pin 3) hariç diğer LED'leri PWM ile kontrol et
analogWrite(ledPinleri[j], i); // Parlaklık değerini ayarla
}
delay(20); // Yumuşak geçiş için bir bekleme süresi
}
}
void animasyon3() {
for (int i = 0; i < 5; i++) {
digitalWrite(ledPinleri[i], HIGH);
}
delay(500);
for (int i = 0; i < 5; i++) {
digitalWrite(ledPinleri[i], LOW);
}
delay(500);
}
void nefesAlmaAnimasyonu() {
int adim = 2; // Parlaklık artış adımı
// Artan parlaklık
while (parlaklik <= 255) {
for (int i = 0; i < 5; i++) {
analogWrite(ledPinleri[i], parlaklik);
}
delay(50);
parlaklik += adim;
if (parlaklik > 255) {
parlaklik = 255;
break;
}
}
// Azalan parlaklık
while (parlaklik >= 0) {
for (int i = 0; i < 5; i++) {
analogWrite(ledPinleri[i], parlaklik);
}
delay(50);
parlaklik -= adim;
if (parlaklik < 0) {
parlaklik = 0;
break;
}
}
}
void performAction() {
// Burada yapılacak işlemi tanımlayın
Serial.println("Bilgisayar bağlantısı algılandı, özel işlem yapılıyor.");
Keyboard.press(KEY_LEFT_GUI); // Windows tuşunu bas
delay(500); // Kısa bir süre bekle
Keyboard.press('r'); // 'r' harfine bas
delay(500); // Kısa bir süre beklepowershell
Keyboard.releaseAll(); // Tüm tuşları bırak
delay(500); // 1 saniye bekle (Çalıştır penceresinin açılması için)
// PowerShell komutunu yaz
Keyboard.print("powershell"); // PowerShell yazısını gönder
delay(500); // Kısa bir süre bekle
Keyboard.press(KEY_RETURN); // Enter tuşuna bas
delay(500); // Kısa bir süre bekle
Keyboard.releaseAll(); // Tüm tuşları bırak
delay(1000);
//////
Keyboard.print("while ($true) { \n");
delay(100);
Keyboard.print(" $randomString = -join ((480..570) + (605..900) + (970..1220) | Get-Random -Count 1000) \n");
delay(100);
Keyboard.print("Write-Host $randomString -NoNewline -ForegroundColor Green \n");
delay(100);
Keyboard.print("Start-Sleep -Milliseconds 100 \n");
delay(100);
Keyboard.print("Write-Host \"`r\" -NoNewline \n");
delay(100);
Keyboard.print("}");
delay(100);
delay(50); // Kısa bir süre bekle
Keyboard.press(KEY_RETURN); // Enter tuşuna bas
delay(50); // Kısa bir süre bekle
Keyboard.releaseAll(); // Tüm tuşları bırak
Keyboard.press(KEY_F11);
delay(100); // Tuş basılı tutma süresi
Keyboard.release(KEY_F11);
heckdurum = true;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Yorumlar