Skip to content

andrebellu/RGBarduino

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 

Repository files navigation

RGB Arduino Project Arduino Logo

Progetto realizzato da Andrea Bellu, Stefano Longhena, Leonardo Baccalario.

Il progetto consisteva nel realizzare un circuito con un led RGB utilizzabile tramite un telecomando. Abbiamo poi realizzato un bot di telegram interfacciato con arduino tramite python e la sua libreria pyserial.

Componenti utilizzati

  • Elegoo Mega2560
  • RGB led
  • 3x Resistenze 220Ω
  • LCD1602 Module
  • Potentiometer 10kΩ
  • IR Receiver Module
  • Remote Control
  • Cavi

Circuito Tinkercad

Librerie utilizzate


Interfacciare arduino con python

Utilizzando la libreria PySerial possiamo semplicemente mettere in "collegamento" arduino e python mediante una sola riga di codice:

ser = serial.Serial('nome porta')

Per passare dei comandi da python e arduino basterà eseguire:

ser.write("nome comando".encode())

che verrà letto da arduino utilizzando la funzione:

Serial.readStringUntil('\n');

Bot Telegram

Esempio del funzionamento del bot:

#main
def main() -> None:
	update = Updater(data['TOKEN'], use_context=True)
	dispatcher = update.dispatcher

	dispatcher.add_handler(CommandHandler("disco", disco))

L'Updater è l'elemento che ci permette di interfacciarci direttamente col bot, mentre il dispatcher fa da "controllore". In questo snippet di codice vediamo come, nel caso ricevessimo dall'utente su telegram il comando '\disco', verrebbe chiamata la funzione disco.

#funzione disco
@restricted
def disco(update: tg.Update, context: CallbackContext) -> None:
	update.message.reply_markdown_v2(
		fr"DISCO MODE\!✨"

	)

	ser.write("disco".encode())

Quando la funzione disco viene chiamata il bot manda semplicemente un messaggio di feedback e la funzione manda la keyword ad arduino.

@restricted perchè le funzioni, e di conseguenza il bot, sono utilizzabili solo dagli utenti autorizzati.

def restricted(func):
    @wraps(func)
    def wrapped(update, context, *args, **kwargs):
         user_id = update.effective_user.id
         if user_id not in data['admins']:
              print(fr"Unauthorized access denied for {user_id}.")
              update.message.reply_markdown_v2(fr"Access denied for 
              {update.effective_user.mention_markdown_v2()}\!")
              return
         return func(update, context, *args, **kwargs)
    return wrapped

Custom keyboard

Inizializzata quando il bot viene startato. Codice:

def start(update: tg.Update, context: CallbackContext):
	...
	reply_keyboard = [['/on', '/off', '/color', '/blink'], ['/disco', '/quit']]
	update.message.reply_text(
		'Choose an option:',
		reply_markup=tg.ReplyKeyboardMarkup(
		     reply_keyboard, one_time_keyboard=False, 
             input_field_placeholder='Option?'),
		)

Output:

kb

Inline keyboard

Inizializzata quando viene chimato il comando '/color'. Codice:

@restricted
def color(update: tg.Update, context: CallbackContext) -> None:
    inline_keyboard = [
        [
            tg.InlineKeyboardButton("Red", callback_data='Red'),
            tg.InlineKeyboardButton("Green", callback_data='Green'),
        ],
        [
            tg.InlineKeyboardButton("Blue", callback_data='Blue'),
            tg.InlineKeyboardButton("Yellow", callback_data='Yellow'),
            
        ],
        [
            tg.InlineKeyboardButton("Purple", callback_data='Purple'),
            tg.InlineKeyboardButton("Light Blue", callback_data='Light blue'),
        ]
    ]

    reply_markup = tg.InlineKeyboardMarkup(inline_keyboard)

    update.message.reply_text('Choose a color:', reply_markup=reply_markup)

Output:

inkb

Bot commands

Tutti i comandi sono preceduti dallo '/':

  • start: starta il bot;
  • on: accende il led (luce bianca);
  • off: spegne il led;
  • color: (menù per cambiare colori);
    • Colori disponibili:
      • rosso;
      • verde;
      • blu;
      • giallo;
      • viola;
      • azzurro;
  • fastblink: lampeggio led (150ms delay);
  • disco: sequenza casuale colori.
  • quit: chiude la comunicazione con la seriale

Tasti telecomando

  • power button: accende/spegne il led (colore bianco);
  • 1: accende il colore rosso;
  • 2: accende il colore verde;
  • 3: accende il colore blu;
  • 4: spegne il colore rosso;
  • 5: spegne il colore verde;
  • 6: spegne il colore blu.

Per far funzionare il bot sarà necessario utilizzare il file .json nella repository ed aggiornarlo col token del bot che si vuole utilizzare e aggiungere l'id degli utenti autorizzati (l'id degli utenti che non sono autorizzati sono visualizzabili nel terminle del file python durante l'esecuzione del programma).

{
"TOKEN": "",
"admins": []
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •