Kerekan Bendera DIY Dikontrol via Twitter

Hi Makers kali ini Ngebikin.com dikasih sumbangan tutorial yaitu kerekan bendera DIY dari orang yang namanya harum di sektor teknologi Indonesia, kalo kamu penggiat programming atau startup mungkin kamu pernah melihat orang ini wara-wiri di acara-acara tersebut ya dialah Sofian Hadi Wijaya yang artikel aslinya ada disini. Sebenarnya tutorial ini merupakan tutorial dari tahun 2015 dimana ia membuat sendiri kerekan dengan dasar IoT ( internt of things). Awalnya Sofian membaca pembicaraan singkat team Code4nation pada platform slack, salah satu member dari Techinasia mengemukakan ide dari CTO mereka tentang campaign acara Hackathon Merdeka yaitu membuat kerekan bendera yang dikontrol via twitter, jadi ketika ada tweet dengan hashtag tertentu maka si bendera akan dengan sendirinya naik perlahan. Hal ini disambut positif oleh mas Ainun Najib (penggagas kawalpemilu dan laporpresiden). “@sofianhw bisa upayakan IoT (Internet of Things) -nya?” ucap mas Ainun Najib. Seketika itu juga Sofian jawab “Bisa!!” dan maka berikut hasil karya Sofian untuk kerekan bendera DIY.

Kerekan Bendera DIY Dikontrol via Twitter ngebikin.com

 

Kita simak yuk barang-barang yang diperlukan untuk membuatkerekan bendera DIY IoT ini :

  • Intel Edison
  • ULN2803a
  • Stepper Motor
  • Timing belt 3d printer (panjang minimal 1 m)
  • Dudukan untuk kamera
  • Gagang Sapu
  • Kabel Tie

   

Tahap pertama kamu perlu  mengikat dudukan kamera dan stepper motor pada gagang sapu menggunakan kabel tie (cable ties; kabel tis).

 

pastikan timing belt tidak terlalu kencang maupun kendor.

Setelah itu kita perlu rakit rangkaian ULN dan intel edison seperti skema di bawah ini :

 

Mari kita sambungkan keseluruhan system agar semua parts untuk kerekan bendera DIY

Kerekan Bendera DIY Dikontrol via Twitter

Untuk kamu yang doyan utak atik programming bisa langsung ikutin aja nih seperti kode yang Sofian tulis menggunakan bahasa python.

countFlagSteps.pylink
import time
from wiringx86 import GPIOEdison as GPIO
gpio = GPIO(debug=False)
pin1 = 3
pin2 = 4
pin3 = 5
pin4 = 6
index = 0

print 'Setting up pin %d' % pin1
gpio.pinMode(pin1, gpio.OUTPUT)
print 'Setting up pin %d' % pin2
gpio.pinMode(pin2, gpio.OUTPUT)
print 'Setting up pin %d' % pin3
gpio.pinMode(pin3, gpio.OUTPUT)
print 'Setting up pin %d' % pin4
gpio.pinMode(pin4, gpio.OUTPUT)

print 'Go up now...'
try:
  while(True):
    gpio.digitalWrite(pin4, gpio.LOW)
    gpio.digitalWrite(pin2, gpio.HIGH)
    time.sleep(0.01)

    gpio.digitalWrite(pin1, gpio.LOW)
    gpio.digitalWrite(pin3, gpio.HIGH)
    time.sleep(0.01)

    gpio.digitalWrite(pin2, gpio.LOW)
    gpio.digitalWrite(pin4, gpio.HIGH)
    time.sleep(0.01)

    gpio.digitalWrite(pin3, gpio.LOW)
    gpio.digitalWrite(pin1, gpio.HIGH)
    time.sleep(0.01)

    index=index+1

# When you get tired of seeing the led blinking kill the loop with Ctrl-C.
except KeyboardInterrupt:
  print '\nCleaning up...'
  print 'total step %d' % index
  gpio.digitalWrite(pin1, gpio.LOW)
  gpio.digitalWrite(pin2, gpio.LOW)
  gpio.digitalWrite(pin3, gpio.LOW)
  gpio.digitalWrite(pin4, gpio.LOW)

  # Do a general cleanup. Calling this function is not mandatory.       
  gpio.cleanup()

eksekusi kode tersebut, ketika bendera sudah mencapai puncaknya tekan “Ctrl + C” untuk interrupt program, lalu program akan memberikan output berapa putaran yang diperlukan untuk mencapai puncak.

Terminal
$ python countFlagSteps.py

Saat semua langkah sudah sesuai dan motor juga sudah di testing inilah saatnya menghubungkan kerekan kita ke Twitter. sebelum memulai ada baiknya kita membuat aplikasi pada twitter kita.

Kita akan memanfaatkan API Streaming untuk mendapatkan jumlah tweet secara real-time.

countTweets.pylink
import argparse
import time
from wiringx86 import GPIOEdison as GPIO
from TwitterAPI import TwitterAPI, TwitterOAuth, TwitterRestPager
gpio = GPIO(debug=False)
pin1 = 3
pin2 = 4
pin3 = 5
pin4 = 6
COUNT = 100 # search download batch size

def setup():
        print 'Setting up pin %d' % pin1
        gpio.pinMode(pin1, gpio.OUTPUT)
        print 'Setting up pin %d' % pin2
        gpio.pinMode(pin2, gpio.OUTPUT)
        print 'Setting up pin %d' % pin3
        gpio.pinMode(pin3, gpio.OUTPUT)
        print 'Setting up pin %d' % pin4
        gpio.pinMode(pin4, gpio.OUTPUT)

def puter():
        print "muter"
        for i in range(100):
                print i
                gpio.digitalWrite(pin4, gpio.LOW)
                gpio.digitalWrite(pin2, gpio.HIGH)
                time.sleep(0.01)

                gpio.digitalWrite(pin1, gpio.LOW)
                gpio.digitalWrite(pin3, gpio.HIGH)
                time.sleep(0.01)

                gpio.digitalWrite(pin2, gpio.LOW)
                gpio.digitalWrite(pin4, gpio.HIGH)
                time.sleep(0.01)

                gpio.digitalWrite(pin3, gpio.LOW)
                gpio.digitalWrite(pin1, gpio.HIGH)
                time.sleep(0.01)

def count_old_tweets(api, word_list):
        words = ' OR '.join(word_list)
        count = 0
        while True:
                pager = TwitterRestPager(api, 'search/tweets', {'q':words, 'coun
                for item in pager.get_iterator():
                        if 'text' in item:
                                count += 1
                                print(count)
                        elif 'message' in item:
                                if item['code'] == 131:
                                        continue # ignore internal server error 
                                elif item['code'] == 88:
                                        print('Suspend search until %s' % search
                                raise Exception('Message from twitter: %s' % ite


def count_new_tweets(api, word_list):
        words = ','.join(word_list)
        count = 0
        total_skip = 0
        while True:
                skip = 0
                try:
                        r = api.request('statuses/filter', {'track':words})
                        while True:
                                for item in r.get_iterator():
                                        if 'text' in item:
                                                count += 1
                                                puter()
                                                print(count + skip + total_skip)
                                        elif 'limit' in item:
                                                skip = item['limit'].get('track'
                                                #print('\n\n\n*** Skipping %d tw
                                        elif 'disconnect' in item:
                                                raise Exception('Disconnect: %s'
                except Exception as e:
                        print('*** MUST RECONNECT %s' % e)
                total_skip += skip


if __name__ == '__main__':
        parser = argparse.ArgumentParser(description='Count occurance of word(s)
        parser.add_argument('-past', action='store_true', help='search historic 
        parser.add_argument('-oauth', metavar='FILENAME', type=str, help='read O
        parser.add_argument('words', metavar='W', type=str, nargs='+', help='wor
        args = parser.parse_args()

        oauth = TwitterOAuth.read_file(args.oauth)
        api = TwitterAPI(oauth.consumer_key, oauth.consumer_secret, oauth.access

        try:
                setup()
                if args.past:
                        count_old_tweets(api, args.words)
                else:
                        count_new_tweets(api, args.words)
        except KeyboardInterrupt:
                print('\nTerminated by user\n')
                gpio.digitalWrite(pin1, gpio.LOW)
                gpio.digitalWrite(pin2, gpio.LOW)
                gpio.digitalWrite(pin3, gpio.LOW)
                gpio.digitalWrite(pin4, gpio.LOW)

                # Do a general cleanup. Calling this function is not mandatory. 
                gpio.cleanup()
        except Exception as e:
                print('*** STOPPED %s\n' % e)
token_key.txtlink
consumer_key=
consumer_secret=
access_token_key=
access_token_secret=

mari kita test apakah kode yang kita buat bekerja.

Terminal
$ python countTweets.py -oauth token_key.txt [kata]

 

Dan semuanya berhasil, oke bagaimana dengankerekan bendera DIY punya kalian? Jika ada yang tidak berhasil langsung saja hubungi kita di Ngebikin.com atau bisa juga langsung nanya Bang Sofian di Instagramnya ya disini

 

 

Semua source code bang Sofian udah upload ke account githubnya langsung aja akses kesini >> sofianhw/flagpole.

Leave a Reply

Your email address will not be published. Required fields are marked *